@itwin/core-markup 4.10.0-dev.9 → 4.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/lib/cjs/Markup.d.ts +0 -1
  3. package/lib/cjs/Markup.d.ts.map +1 -1
  4. package/lib/cjs/Markup.js.map +1 -1
  5. package/lib/cjs/MarkupTool.d.ts +0 -1
  6. package/lib/cjs/MarkupTool.d.ts.map +1 -1
  7. package/lib/cjs/MarkupTool.js.map +1 -1
  8. package/lib/cjs/RedlineTool.d.ts +0 -1
  9. package/lib/cjs/RedlineTool.d.ts.map +1 -1
  10. package/lib/cjs/RedlineTool.js.map +1 -1
  11. package/lib/cjs/SelectTool.d.ts +0 -1
  12. package/lib/cjs/SelectTool.d.ts.map +1 -1
  13. package/lib/cjs/SelectTool.js +1 -1
  14. package/lib/cjs/SelectTool.js.map +1 -1
  15. package/lib/cjs/SvgJsExt.d.ts.map +1 -1
  16. package/lib/cjs/SvgJsExt.js +2 -2
  17. package/lib/cjs/SvgJsExt.js.map +1 -1
  18. package/lib/cjs/TextEdit.d.ts +2 -3
  19. package/lib/cjs/TextEdit.d.ts.map +1 -1
  20. package/lib/cjs/TextEdit.js.map +1 -1
  21. package/lib/cjs/Undo.d.ts +0 -1
  22. package/lib/cjs/Undo.d.ts.map +1 -1
  23. package/lib/cjs/Undo.js.map +1 -1
  24. package/lib/cjs/core-markup.js.map +1 -1
  25. package/lib/esm/Markup.d.ts +0 -1
  26. package/lib/esm/Markup.d.ts.map +1 -1
  27. package/lib/esm/Markup.js.map +1 -1
  28. package/lib/esm/MarkupTool.d.ts +0 -1
  29. package/lib/esm/MarkupTool.d.ts.map +1 -1
  30. package/lib/esm/MarkupTool.js.map +1 -1
  31. package/lib/esm/RedlineTool.d.ts +0 -1
  32. package/lib/esm/RedlineTool.d.ts.map +1 -1
  33. package/lib/esm/RedlineTool.js.map +1 -1
  34. package/lib/esm/SelectTool.d.ts +0 -1
  35. package/lib/esm/SelectTool.d.ts.map +1 -1
  36. package/lib/esm/SelectTool.js +1 -1
  37. package/lib/esm/SelectTool.js.map +1 -1
  38. package/lib/esm/SvgJsExt.d.ts.map +1 -1
  39. package/lib/esm/SvgJsExt.js.map +1 -1
  40. package/lib/esm/TextEdit.d.ts +2 -3
  41. package/lib/esm/TextEdit.d.ts.map +1 -1
  42. package/lib/esm/TextEdit.js.map +1 -1
  43. package/lib/esm/Undo.d.ts +0 -1
  44. package/lib/esm/Undo.d.ts.map +1 -1
  45. package/lib/esm/Undo.js.map +1 -1
  46. package/lib/esm/core-markup.js.map +1 -1
  47. package/lib/public/locales/en/MarkupTools.json +98 -98
  48. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"TextEdit.js","sourceRoot":"","sources":["../../src/TextEdit.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupTools\r\n */\r\n\r\nimport {\r\n BeButtonEvent, CoreTools, EventHandled, IModelApp, InputSource, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod,\r\n ToolAssistanceInstruction, ToolAssistanceSection,\r\n} from \"@itwin/core-frontend\";\r\nimport { G, Text as MarkupText } from \"@svgdotjs/svg.js\";\r\nimport { MarkupApp } from \"./Markup\";\r\nimport { MarkupTool } from \"./MarkupTool\";\r\nimport { RedlineTool } from \"./RedlineTool\";\r\n\r\n// cspell:ignore rbox\r\n\r\n/** Tool to place new text notes on a Markup.\r\n * @public\r\n */\r\nexport class PlaceTextTool extends RedlineTool {\r\n public static override toolId = \"Markup.Text.Place\";\r\n public static override iconSpec = \"icon-text-medium\";\r\n protected override _nRequiredPoints = 1;\r\n protected override _minPoints = 0;\r\n protected _value!: string;\r\n\r\n public override async onPostInstall() {\r\n this._value = MarkupApp.props.text.startValue; // so applications can put a default string (e.g. user's initials) in the note. Can be empty\r\n return super.onPostInstall();\r\n }\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(`${MarkupTool.toolKey}Text.Place.Prompts.FirstPoint`, true); }\r\n\r\n protected override async createMarkup(svg: G, ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (isDynamics && InputSource.Touch === ev.inputSource)\r\n return;\r\n const start = MarkupApp.convertVpToVb(ev.viewPoint); // starting point in viewbox coordinates\r\n const text = new MarkupText().plain(this._value); // create a plain text element\r\n svg.put(text); // add it to the supplied container\r\n this.setCurrentTextStyle(text); // apply active text style\r\n text.translate(start.x, start.y); // and position it relative to the cursor\r\n if (isDynamics) {\r\n svg.add(text.getOutline().attr(MarkupApp.props.text.edit.textBox).addClass(MarkupApp.textOutlineClass)); // in dynamics, draw the box around the text\r\n } else {\r\n await new EditTextTool(text, true).run(); // text is now positioned, open text editor\r\n }\r\n }\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.exitTool();\r\n return EventHandled.Yes;\r\n }\r\n}\r\n\r\n/** Tool for editing text. Started automatically by the place text tool and by clicking on text from the SelectTool\r\n * @public\r\n */\r\nexport class EditTextTool extends MarkupTool {\r\n public static override toolId = \"Markup.Text.Edit\";\r\n public static override iconSpec = \"icon-text-medium\";\r\n public editor?: HTMLTextAreaElement;\r\n public editDiv?: HTMLDivElement;\r\n public boxed?: G;\r\n constructor(public text?: MarkupText | G, private _fromPlaceTool = false) { super(); }\r\n\r\n protected override showPrompt(): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, IModelApp.localization.getLocalizedString(`${MarkupTool.toolKey}Text.Edit.Prompts.FirstPoint`));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.Accept\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Exit\");\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** Open the text editor */\r\n public startEditor() {\r\n let text = this.text;\r\n if (text === undefined)\r\n return;\r\n\r\n if (text instanceof G) {\r\n this.boxed = text;\r\n text = text.children()[1] as MarkupText;\r\n if (!(text instanceof MarkupText))\r\n return;\r\n this.text = text;\r\n }\r\n const markupDiv = this.markup.markupDiv;\r\n const editDiv = this.editDiv = document.createElement(\"div\"); // create a new DIV to hold the text editor\r\n const editProps = MarkupApp.props.text.edit;\r\n let style = editDiv.style;\r\n style.backgroundColor = editProps.background;\r\n style.top = style.left = \"0\";\r\n style.right = style.bottom = \"100%\";\r\n\r\n markupDiv.appendChild(editDiv); // add textEditor div to markup div\r\n\r\n const divRect = markupDiv.getBoundingClientRect();\r\n const outline = text.getOutline(); // use the outline rather than the text in case it's blank.\r\n text.after(outline); // we have to add it to the DOM or the rbox call doesn't work.\r\n const rbox = outline.rbox();\r\n const bbox = outline.bbox();\r\n outline.remove(); // take it out again.\r\n const editor = this.editor = document.createElement(\"textarea\");\r\n editDiv.appendChild(editor);\r\n editor.className = MarkupApp.textEditorClass;\r\n editor.contentEditable = \"true\";\r\n editor.spellcheck = true;\r\n editor.wrap = \"off\";\r\n // so we don't send these events to the ToolAdmin and process them by tools. We want default handling\r\n const mouseListener = (ev: Event) => (ev.stopPropagation(), true);\r\n (editor as any).onselectstart = editor.oncontextmenu = editor.onmousedown = editor.onmouseup = mouseListener; // enable default handling for these events\r\n\r\n // Tab, Escape, ctrl-enter, or shift-enter all end the editor\r\n editor.onkeydown = async (ev: KeyboardEvent) => {\r\n if (ev.key === \"Tab\" || ev.key === \"Escape\" || (ev.key === \"Enter\" && (ev.shiftKey || ev.ctrlKey)))\r\n this.exitTool(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n ev.stopPropagation();\r\n\r\n };\r\n const textElStyle = window.getComputedStyle(text.node);\r\n\r\n style = editor.style;\r\n style.pointerEvents = \"auto\";\r\n style.position = \"absolute\";\r\n style.top = `${(rbox.cy - (bbox.h / 2)) - divRect.top}px`; // put the editor over the middle of the text element\r\n style.left = `${(rbox.cx - (bbox.w / 2)) - divRect.left}px`;\r\n style.height = editProps.size.height;\r\n style.width = editProps.size.width;\r\n style.resize = \"both\";\r\n style.fontFamily = textElStyle.fontFamily; // set the font family and anchor to the same as the text element\r\n style.textAnchor = textElStyle.textAnchor;\r\n style.fontSize = editProps.fontSize; // from app.props\r\n\r\n const parentZ = parseInt(window.getComputedStyle(markupDiv).zIndex || \"0\", 10);\r\n style.zIndex = (parentZ + 200).toString();\r\n\r\n editor.innerHTML = text.getMarkup(); // start with existing text\r\n this.editor.focus(); // give the editor focus\r\n\r\n // if we're started from the place text tool, select the entire current value, otherwise place the cursor at the end.\r\n this.editor.setSelectionRange(this._fromPlaceTool ? 0 : editor.value.length, editor.value.length);\r\n }\r\n\r\n /** Called when EditText exits, saves the edited value into the text element */\r\n public override async onCleanup() {\r\n if (!this.editDiv)\r\n return;\r\n\r\n const text = this.text! as MarkupText;\r\n const original = this.boxed ? this.boxed : text;\r\n const undo = this.markup.undo;\r\n undo.performOperation(this.keyin, () => {\r\n const newVal = this.editor!.value;\r\n if (newVal.trim() === \"\") { // if the result of the editing is blank, just delete the text element\r\n if (!this._fromPlaceTool)\r\n undo.onDelete(original);\r\n original.remove(); // must do this *after* we call undo.onDelete\r\n return;\r\n }\r\n\r\n let newText: G | MarkupText = text.clone();\r\n const fontSize = text.getFontSize();\r\n newText.createMarkup(newVal, fontSize);\r\n if (this.boxed) {\r\n newText = this.createBoxedText((original as G).parent() as G, newText);\r\n newText.matrix(original.matrix());\r\n }\r\n original.replace(newText);\r\n if (this._fromPlaceTool)\r\n undo.onAdded(newText);\r\n else\r\n undo.onModified(newText, original);\r\n });\r\n\r\n const editSize = MarkupApp.props.text.edit.size;\r\n const style = this.editor!.style;\r\n editSize.height = style.height;\r\n editSize.width = style.width;\r\n this.editDiv.remove();\r\n this.editDiv = undefined;\r\n this.editor = undefined;\r\n }\r\n\r\n public override async onInstall() {\r\n if (!await super.onInstall())\r\n return false;\r\n this.startEditor();\r\n return true;\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.exitTool();\r\n return EventHandled.Yes;\r\n }\r\n\r\n public override async onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.exitTool();\r\n return EventHandled.Yes;\r\n }\r\n\r\n public override async onMouseStartDrag(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.exitTool();\r\n return EventHandled.Yes;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TextEdit.js","sourceRoot":"","sources":["../../src/TextEdit.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupTools\n */\n\nimport {\n BeButtonEvent, CoreTools, EventHandled, IModelApp, InputSource, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod,\n ToolAssistanceInstruction, ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport { G, Text as MarkupText } from \"@svgdotjs/svg.js\";\nimport { MarkupApp } from \"./Markup\";\nimport { MarkupTool } from \"./MarkupTool\";\nimport { RedlineTool } from \"./RedlineTool\";\n\n// cspell:ignore rbox\n\n/** Tool to place new text notes on a Markup.\n * @public\n */\nexport class PlaceTextTool extends RedlineTool {\n public static override toolId = \"Markup.Text.Place\";\n public static override iconSpec = \"icon-text-medium\";\n protected override _nRequiredPoints = 1;\n protected override _minPoints = 0;\n protected _value!: string;\n\n public override async onPostInstall() {\n this._value = MarkupApp.props.text.startValue; // so applications can put a default string (e.g. user's initials) in the note. Can be empty\n return super.onPostInstall();\n }\n\n protected override showPrompt(): void { this.provideToolAssistance(`${MarkupTool.toolKey}Text.Place.Prompts.FirstPoint`, true); }\n\n protected override async createMarkup(svg: G, ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n if (isDynamics && InputSource.Touch === ev.inputSource)\n return;\n const start = MarkupApp.convertVpToVb(ev.viewPoint); // starting point in viewbox coordinates\n const text = new MarkupText().plain(this._value); // create a plain text element\n svg.put(text); // add it to the supplied container\n this.setCurrentTextStyle(text); // apply active text style\n text.translate(start.x, start.y); // and position it relative to the cursor\n if (isDynamics) {\n svg.add(text.getOutline().attr(MarkupApp.props.text.edit.textBox).addClass(MarkupApp.textOutlineClass)); // in dynamics, draw the box around the text\n } else {\n await new EditTextTool(text, true).run(); // text is now positioned, open text editor\n }\n }\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.exitTool();\n return EventHandled.Yes;\n }\n}\n\n/** Tool for editing text. Started automatically by the place text tool and by clicking on text from the SelectTool\n * @public\n */\nexport class EditTextTool extends MarkupTool {\n public static override toolId = \"Markup.Text.Edit\";\n public static override iconSpec = \"icon-text-medium\";\n public editor?: HTMLTextAreaElement;\n public editDiv?: HTMLDivElement;\n public boxed?: G;\n constructor(public text?: MarkupText | G, private _fromPlaceTool = false) { super(); }\n\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, IModelApp.localization.getLocalizedString(`${MarkupTool.toolKey}Text.Edit.Prompts.FirstPoint`));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.Accept\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Exit\");\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** Open the text editor */\n public startEditor() {\n let text = this.text;\n if (text === undefined)\n return;\n\n if (text instanceof G) {\n this.boxed = text;\n text = text.children()[1] as MarkupText;\n if (!(text instanceof MarkupText))\n return;\n this.text = text;\n }\n const markupDiv = this.markup.markupDiv;\n const editDiv = this.editDiv = document.createElement(\"div\"); // create a new DIV to hold the text editor\n const editProps = MarkupApp.props.text.edit;\n let style = editDiv.style;\n style.backgroundColor = editProps.background;\n style.top = style.left = \"0\";\n style.right = style.bottom = \"100%\";\n\n markupDiv.appendChild(editDiv); // add textEditor div to markup div\n\n const divRect = markupDiv.getBoundingClientRect();\n const outline = text.getOutline(); // use the outline rather than the text in case it's blank.\n text.after(outline); // we have to add it to the DOM or the rbox call doesn't work.\n const rbox = outline.rbox();\n const bbox = outline.bbox();\n outline.remove(); // take it out again.\n const editor = this.editor = document.createElement(\"textarea\");\n editDiv.appendChild(editor);\n editor.className = MarkupApp.textEditorClass;\n editor.contentEditable = \"true\";\n editor.spellcheck = true;\n editor.wrap = \"off\";\n // so we don't send these events to the ToolAdmin and process them by tools. We want default handling\n const mouseListener = (ev: Event) => (ev.stopPropagation(), true);\n (editor as any).onselectstart = editor.oncontextmenu = editor.onmousedown = editor.onmouseup = mouseListener; // enable default handling for these events\n\n // Tab, Escape, ctrl-enter, or shift-enter all end the editor\n editor.onkeydown = async (ev: KeyboardEvent) => {\n if (ev.key === \"Tab\" || ev.key === \"Escape\" || (ev.key === \"Enter\" && (ev.shiftKey || ev.ctrlKey)))\n this.exitTool(); // eslint-disable-line @typescript-eslint/no-floating-promises\n ev.stopPropagation();\n\n };\n const textElStyle = window.getComputedStyle(text.node);\n\n style = editor.style;\n style.pointerEvents = \"auto\";\n style.position = \"absolute\";\n style.top = `${(rbox.cy - (bbox.h / 2)) - divRect.top}px`; // put the editor over the middle of the text element\n style.left = `${(rbox.cx - (bbox.w / 2)) - divRect.left}px`;\n style.height = editProps.size.height;\n style.width = editProps.size.width;\n style.resize = \"both\";\n style.fontFamily = textElStyle.fontFamily; // set the font family and anchor to the same as the text element\n style.textAnchor = textElStyle.textAnchor;\n style.fontSize = editProps.fontSize; // from app.props\n\n const parentZ = parseInt(window.getComputedStyle(markupDiv).zIndex || \"0\", 10);\n style.zIndex = (parentZ + 200).toString();\n\n editor.innerHTML = text.getMarkup(); // start with existing text\n this.editor.focus(); // give the editor focus\n\n // if we're started from the place text tool, select the entire current value, otherwise place the cursor at the end.\n this.editor.setSelectionRange(this._fromPlaceTool ? 0 : editor.value.length, editor.value.length);\n }\n\n /** Called when EditText exits, saves the edited value into the text element */\n public override async onCleanup() {\n if (!this.editDiv)\n return;\n\n const text = this.text! as MarkupText;\n const original = this.boxed ? this.boxed : text;\n const undo = this.markup.undo;\n undo.performOperation(this.keyin, () => {\n const newVal = this.editor!.value;\n if (newVal.trim() === \"\") { // if the result of the editing is blank, just delete the text element\n if (!this._fromPlaceTool)\n undo.onDelete(original);\n original.remove(); // must do this *after* we call undo.onDelete\n return;\n }\n\n let newText: G | MarkupText = text.clone();\n const fontSize = text.getFontSize();\n newText.createMarkup(newVal, fontSize);\n if (this.boxed) {\n newText = this.createBoxedText((original as G).parent() as G, newText);\n newText.matrix(original.matrix());\n }\n original.replace(newText);\n if (this._fromPlaceTool)\n undo.onAdded(newText);\n else\n undo.onModified(newText, original);\n });\n\n const editSize = MarkupApp.props.text.edit.size;\n const style = this.editor!.style;\n editSize.height = style.height;\n editSize.width = style.width;\n this.editDiv.remove();\n this.editDiv = undefined;\n this.editor = undefined;\n }\n\n public override async onInstall() {\n if (!await super.onInstall())\n return false;\n this.startEditor();\n return true;\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.exitTool();\n return EventHandled.Yes;\n }\n\n public override async onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.exitTool();\n return EventHandled.Yes;\n }\n\n public override async onMouseStartDrag(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.exitTool();\n return EventHandled.Yes;\n }\n}\n"]}
package/lib/cjs/Undo.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  /** @packageDocumentation
2
2
  * @module MarkupTools
3
3
  */
4
- /// <reference path="SvgJsExt.d.ts" />
5
4
  import { Element as MarkupElement } from "@svgdotjs/svg.js";
6
5
  /** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.
7
6
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"Undo.d.ts","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA6F5D;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAM;IAEtB,OAAO,CAAC,SAAS;IAOjB,gBAAgB;IAChB,IAAW,IAAI,WAAiC;IAChD,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IAEhB;;;;OAIG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY;IAOzD,0GAA0G;IACnG,OAAO,CAAC,IAAI,EAAE,aAAa;IAClC,qHAAqH;IAC9G,QAAQ,CAAC,IAAI,EAAE,aAAa;IACnC,2HAA2H;IACpH,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;IACrF,6GAA6G;IACtG,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAEhE,6DAA6D;IAC7D,IAAW,YAAY,YAAmC;IAC1D,0DAA0D;IAC1D,IAAW,YAAY,YAA2C;IAClE,kEAAkE;IAClE,IAAW,UAAU,uBAAwF;IAC7G,kEAAkE;IAClE,IAAW,UAAU,uBAAoF;IAEzG,gDAAgD;IACzC,MAAM;IAQb,6DAA6D;IACtD,MAAM;CAQd"}
1
+ {"version":3,"file":"Undo.d.ts","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA6F5D;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAM;IAEtB,OAAO,CAAC,SAAS;IAOjB,gBAAgB;IAChB,IAAW,IAAI,WAAiC;IAChD,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IAEhB;;;;OAIG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY;IAOzD,0GAA0G;IACnG,OAAO,CAAC,IAAI,EAAE,aAAa;IAClC,qHAAqH;IAC9G,QAAQ,CAAC,IAAI,EAAE,aAAa;IACnC,2HAA2H;IACpH,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;IACrF,6GAA6G;IACtG,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAEhE,6DAA6D;IAC7D,IAAW,YAAY,YAAmC;IAC1D,0DAA0D;IAC1D,IAAW,YAAY,YAA2C;IAClE,kEAAkE;IAClE,IAAW,UAAU,uBAAwF;IAC7G,kEAAkE;IAClE,IAAW,UAAU,uBAAoF;IAEzG,gDAAgD;IACzC,MAAM;IAQb,6DAA6D;IACtD,MAAM;CAQd"}
@@ -1 +1 @@
1
- {"version":3,"file":"Undo.js","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupTools\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Element as MarkupElement } from \"@svgdotjs/svg.js\";\r\nimport { MarkupApp } from \"./Markup\";\r\n\r\n/* @internal */\r\nabstract class UndoAction {\r\n public cmdId: number = 0;\r\n public abstract reverse(): void;\r\n public abstract reinstate(): void;\r\n constructor(public cmdName: string) { }\r\n}\r\n\r\n/** created when a new element is added to the markup\r\n * @internal\r\n */\r\nclass AddAction extends UndoAction {\r\n private _parent: MarkupElement;\r\n private _index: number;\r\n constructor(cmdName: string, private _elem: MarkupElement) {\r\n super(cmdName);\r\n this._parent = _elem.parent() as MarkupElement;\r\n assert(this._parent !== undefined);\r\n this._index = _elem.position();\r\n }\r\n public reinstate() { this._parent.add(this._elem, this._index); }\r\n public reverse() {\r\n MarkupApp.markup!.selected.drop(this._elem);\r\n this._elem.remove();\r\n }\r\n}\r\n\r\n/** created when an existing element is deleted from the markup\r\n * @internal\r\n */\r\nclass DeleteAction extends UndoAction {\r\n private _parent: MarkupElement;\r\n private _index: number;\r\n constructor(cmdName: string, private _elem: MarkupElement) {\r\n super(cmdName);\r\n this._parent = _elem.parent() as MarkupElement;\r\n assert(this._parent !== undefined);\r\n this._index = _elem.position();\r\n }\r\n public reverse() { this._parent.add(this._elem, this._index); }\r\n public reinstate() {\r\n MarkupApp.markup!.selected.drop(this._elem);\r\n this._elem.remove();\r\n }\r\n}\r\n\r\n/** created when an existing element's position is moved in the display order. This can also include re-parenting\r\n * @internal\r\n */\r\nclass RepositionAction extends UndoAction {\r\n private _newParent: MarkupElement;\r\n private _newIndex: number;\r\n\r\n constructor(cmdName: string, private _elem: MarkupElement, private _oldIndex: number, private _oldParent: MarkupElement) {\r\n super(cmdName);\r\n this._newParent = _elem.parent() as MarkupElement;\r\n assert(this._newParent !== undefined);\r\n this._newIndex = _elem.position();\r\n }\r\n public reinstate() {\r\n this._newParent.add(this._elem, this._newIndex);\r\n }\r\n\r\n public reverse() {\r\n this._oldParent.add(this._elem, this._oldIndex);\r\n if (this._elem.inSelection)\r\n MarkupApp.markup!.selected.drop(this._elem);\r\n }\r\n}\r\n\r\n/** created when an existing element's properties are modified.\r\n * @internal\r\n */\r\nclass ModifyAction extends UndoAction {\r\n constructor(cmdName: string, private _newElem: MarkupElement, private _oldElement: MarkupElement) {\r\n super(cmdName);\r\n assert(_newElem !== undefined && _oldElement !== undefined);\r\n MarkupApp.markup!.selected.replace(_oldElement, _newElem);\r\n }\r\n public reinstate() {\r\n this._oldElement.replace(this._newElem);\r\n MarkupApp.markup!.selected.replace(this._oldElement, this._newElem);\r\n }\r\n\r\n public reverse() {\r\n this._newElem.replace(this._oldElement);\r\n MarkupApp.markup!.selected.replace(this._newElem, this._oldElement);\r\n }\r\n}\r\n\r\n/** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.\r\n * @public\r\n */\r\nexport class UndoManager {\r\n private _currentCmd = 0;\r\n private _grouped = 0;\r\n private _stack: UndoAction[] = [];\r\n private _currentPos = 0;\r\n private _cmdName = \"\";\r\n\r\n private addAction(action: UndoAction) {\r\n this._stack.length = this._currentPos;\r\n action.cmdId = this._currentCmd;\r\n this._stack.push(action);\r\n this._currentPos = this.size;\r\n }\r\n\r\n /** @internal */\r\n public get size() { return this._stack.length; }\r\n private startCommand() {\r\n if (0 === this._grouped)\r\n ++this._currentCmd;\r\n }\r\n\r\n private startGroup() {\r\n this.startCommand();\r\n ++this._grouped;\r\n }\r\n\r\n private endGroup() { --this._grouped; }\r\n\r\n /** Perform a series of changes to markup elements that should all be reversed as a single operation.\r\n * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store\r\n * the operations in the undo buffer.\r\n * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.\r\n */\r\n public performOperation(cmdName: string, fn: VoidFunction) {\r\n this._cmdName = cmdName;\r\n this.startGroup();\r\n fn();\r\n this.endGroup();\r\n }\r\n\r\n /** call this from within a [[performOperation]] function *after* an element has been added to a markup */\r\n public onAdded(elem: MarkupElement) { this.addAction(new AddAction(this._cmdName, elem)); }\r\n /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */\r\n public onDelete(elem: MarkupElement) { this.addAction(new DeleteAction(this._cmdName, elem)); }\r\n /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */\r\n public onRepositioned(elem: MarkupElement, oldIndex: number, oldParent: MarkupElement) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }\r\n /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */\r\n public onModified(newElem: MarkupElement, oldElem: MarkupElement) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }\r\n\r\n /** determine whether there are any un-reversed operations */\r\n public get undoPossible() { return this._currentPos > 0; }\r\n /** determine whether there are any reversed operations */\r\n public get redoPossible() { return this._currentPos < this.size; }\r\n /** the name of the operation that can be undone (or undefined) */\r\n public get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }\r\n /** the name of the operation that can be redone (or undefined) */\r\n public get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }\r\n\r\n /** reverse the most recent operation, if any */\r\n public doUndo() {\r\n if (this._currentPos === 0)\r\n return; // no operations have been performed\r\n\r\n const cmdId = this._stack[this._currentPos - 1].cmdId;\r\n while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)\r\n this._stack[--this._currentPos].reverse();\r\n }\r\n /** reinstate the most recently reversed operation, if any */\r\n public doRedo() {\r\n if (this._currentPos === this.size)\r\n return; // no operations have been reversed.\r\n\r\n const cmdId = this._stack[this._currentPos].cmdId;\r\n while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)\r\n this._stack[this._currentPos++].reinstate();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Undo.js","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupTools\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Element as MarkupElement } from \"@svgdotjs/svg.js\";\nimport { MarkupApp } from \"./Markup\";\n\n/* @internal */\nabstract class UndoAction {\n public cmdId: number = 0;\n public abstract reverse(): void;\n public abstract reinstate(): void;\n constructor(public cmdName: string) { }\n}\n\n/** created when a new element is added to the markup\n * @internal\n */\nclass AddAction extends UndoAction {\n private _parent: MarkupElement;\n private _index: number;\n constructor(cmdName: string, private _elem: MarkupElement) {\n super(cmdName);\n this._parent = _elem.parent() as MarkupElement;\n assert(this._parent !== undefined);\n this._index = _elem.position();\n }\n public reinstate() { this._parent.add(this._elem, this._index); }\n public reverse() {\n MarkupApp.markup!.selected.drop(this._elem);\n this._elem.remove();\n }\n}\n\n/** created when an existing element is deleted from the markup\n * @internal\n */\nclass DeleteAction extends UndoAction {\n private _parent: MarkupElement;\n private _index: number;\n constructor(cmdName: string, private _elem: MarkupElement) {\n super(cmdName);\n this._parent = _elem.parent() as MarkupElement;\n assert(this._parent !== undefined);\n this._index = _elem.position();\n }\n public reverse() { this._parent.add(this._elem, this._index); }\n public reinstate() {\n MarkupApp.markup!.selected.drop(this._elem);\n this._elem.remove();\n }\n}\n\n/** created when an existing element's position is moved in the display order. This can also include re-parenting\n * @internal\n */\nclass RepositionAction extends UndoAction {\n private _newParent: MarkupElement;\n private _newIndex: number;\n\n constructor(cmdName: string, private _elem: MarkupElement, private _oldIndex: number, private _oldParent: MarkupElement) {\n super(cmdName);\n this._newParent = _elem.parent() as MarkupElement;\n assert(this._newParent !== undefined);\n this._newIndex = _elem.position();\n }\n public reinstate() {\n this._newParent.add(this._elem, this._newIndex);\n }\n\n public reverse() {\n this._oldParent.add(this._elem, this._oldIndex);\n if (this._elem.inSelection)\n MarkupApp.markup!.selected.drop(this._elem);\n }\n}\n\n/** created when an existing element's properties are modified.\n * @internal\n */\nclass ModifyAction extends UndoAction {\n constructor(cmdName: string, private _newElem: MarkupElement, private _oldElement: MarkupElement) {\n super(cmdName);\n assert(_newElem !== undefined && _oldElement !== undefined);\n MarkupApp.markup!.selected.replace(_oldElement, _newElem);\n }\n public reinstate() {\n this._oldElement.replace(this._newElem);\n MarkupApp.markup!.selected.replace(this._oldElement, this._newElem);\n }\n\n public reverse() {\n this._newElem.replace(this._oldElement);\n MarkupApp.markup!.selected.replace(this._newElem, this._oldElement);\n }\n}\n\n/** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.\n * @public\n */\nexport class UndoManager {\n private _currentCmd = 0;\n private _grouped = 0;\n private _stack: UndoAction[] = [];\n private _currentPos = 0;\n private _cmdName = \"\";\n\n private addAction(action: UndoAction) {\n this._stack.length = this._currentPos;\n action.cmdId = this._currentCmd;\n this._stack.push(action);\n this._currentPos = this.size;\n }\n\n /** @internal */\n public get size() { return this._stack.length; }\n private startCommand() {\n if (0 === this._grouped)\n ++this._currentCmd;\n }\n\n private startGroup() {\n this.startCommand();\n ++this._grouped;\n }\n\n private endGroup() { --this._grouped; }\n\n /** Perform a series of changes to markup elements that should all be reversed as a single operation.\n * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store\n * the operations in the undo buffer.\n * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.\n */\n public performOperation(cmdName: string, fn: VoidFunction) {\n this._cmdName = cmdName;\n this.startGroup();\n fn();\n this.endGroup();\n }\n\n /** call this from within a [[performOperation]] function *after* an element has been added to a markup */\n public onAdded(elem: MarkupElement) { this.addAction(new AddAction(this._cmdName, elem)); }\n /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */\n public onDelete(elem: MarkupElement) { this.addAction(new DeleteAction(this._cmdName, elem)); }\n /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */\n public onRepositioned(elem: MarkupElement, oldIndex: number, oldParent: MarkupElement) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }\n /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */\n public onModified(newElem: MarkupElement, oldElem: MarkupElement) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }\n\n /** determine whether there are any un-reversed operations */\n public get undoPossible() { return this._currentPos > 0; }\n /** determine whether there are any reversed operations */\n public get redoPossible() { return this._currentPos < this.size; }\n /** the name of the operation that can be undone (or undefined) */\n public get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }\n /** the name of the operation that can be redone (or undefined) */\n public get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }\n\n /** reverse the most recent operation, if any */\n public doUndo() {\n if (this._currentPos === 0)\n return; // no operations have been performed\n\n const cmdId = this._stack[this._currentPos - 1].cmdId;\n while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)\n this._stack[--this._currentPos].reverse();\n }\n /** reinstate the most recently reversed operation, if any */\n public doRedo() {\n if (this._currentPos === this.size)\n return; // no operations have been reversed.\n\n const cmdId = this._stack[this._currentPos].cmdId;\n while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)\n this._stack[this._currentPos++].reinstate();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"core-markup.js","sourceRoot":"","sources":["../../src/core-markup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,2CAAyB;AACzB,+CAA6B;AAC7B,gDAA8B;AAC9B,+CAA6B;AAC7B,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAE3B;;GAEG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./Markup\";\r\nexport * from \"./MarkupTool\";\r\nexport * from \"./RedlineTool\";\r\nexport * from \"./SelectTool\";\r\nexport * from \"./TextEdit\";\r\nexport * from \"./Undo\";\r\nexport * from \"./SvgJsExt\";\r\n\r\n/** @docs-package-description\r\n * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.\r\n */\r\n/**\r\n * @docs-group-description MarkupApp\r\n * Classes for configuring and administering the markup system.\r\n */\r\n/**\r\n * @docs-group-description MarkupTools\r\n * Classes for supplying interactive tools for creating and editing markup elements.\r\n */\r\n"]}
1
+ {"version":3,"file":"core-markup.js","sourceRoot":"","sources":["../../src/core-markup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,2CAAyB;AACzB,+CAA6B;AAC7B,gDAA8B;AAC9B,+CAA6B;AAC7B,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAE3B;;GAEG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport * from \"./Markup\";\nexport * from \"./MarkupTool\";\nexport * from \"./RedlineTool\";\nexport * from \"./SelectTool\";\nexport * from \"./TextEdit\";\nexport * from \"./Undo\";\nexport * from \"./SvgJsExt\";\n\n/** @docs-package-description\n * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.\n */\n/**\n * @docs-group-description MarkupApp\n * Classes for configuring and administering the markup system.\n */\n/**\n * @docs-group-description MarkupTools\n * Classes for supplying interactive tools for creating and editing markup elements.\n */\n"]}
@@ -1,7 +1,6 @@
1
1
  /** @packageDocumentation
2
2
  * @module MarkupApp
3
3
  */
4
- /// <reference path="SvgJsExt.d.ts" />
5
4
  import { Point3d, XAndY } from "@itwin/core-geometry";
6
5
  import { ScreenViewport } from "@itwin/core-frontend";
7
6
  import { G, Marker, Element as MarkupElement, Matrix, Svg } from "@svgdotjs/svg.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Markup.d.ts","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Markup.d.ts","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Markup.js","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupApp\r\n */\r\n\r\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\r\nimport { Point3d, XAndY } from \"@itwin/core-geometry\";\r\nimport { ImageSource, ImageSourceFormat } from \"@itwin/core-common\";\r\nimport { FrontendLoggerCategory, imageElementFromImageSource, IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { adopt, create, G, Marker, Element as MarkupElement, Matrix, Point, Svg, SVG } from \"@svgdotjs/svg.js\";\r\nimport * as redlineTool from \"./RedlineTool\";\r\nimport { MarkupSelected, SelectTool } from \"./SelectTool\";\r\nimport * as textTool from \"./TextEdit\";\r\nimport { UndoManager } from \"./Undo\";\r\n\r\n// cspell:ignore blanchedalmond, lmultiply, svgs\r\n\r\n/** The width and height of a Markup image, in pixels.\r\n * @public */\r\nexport interface WidthAndHeight {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/** The size and SVG string for a Markup\r\n * @public\r\n */\r\nexport interface MarkupSvgData {\r\n /** The size of the image, in pixels. This also indicates the aspect ratio of the SVG data. */\r\n rect: WidthAndHeight;\r\n /** a string holding the svg data for the markup. Will be undefined if [[MarkupApp.stop]] is called without an active Markup */\r\n svg?: string;\r\n}\r\n\r\n/** Markup data returned by [[MarkupApp.stop]]\r\n * @public\r\n */\r\nexport interface MarkupData extends MarkupSvgData {\r\n /** a base64 encoded string with the image of the view that was marked up. See [[MarkupApp.props.result]] for options. */\r\n image?: string;\r\n}\r\n\r\n/**\r\n * The main object for the Markup package. It is a singleton that stores the state of the Markup application.\r\n * It has only static members and methods. Applications may customize and control the behavior of the Markup by\r\n * setting members of [[MarkupApp.props]]. When [[MarkupApp.start]] is first called, it registers a set of \"Markup.xxx\"\r\n * tools that may be invoked from UI controls.\r\n * @public\r\n */\r\nexport class MarkupApp {\r\n /** the current Markup being created */\r\n public static markup?: Markup;\r\n /** The namespace for the Markup tools */\r\n public static namespace?: string;\r\n /** By setting members of this object, applications can control the appearance and behavior of various parts of MarkupApp. */\r\n public static props = {\r\n /** the UI controls displayed on Elements by the Select Tool to allow users to modify them. */\r\n handles: {\r\n /** The diameter of the circles for the handles. */\r\n size: 10,\r\n /** The attributes of the stretch handles */\r\n stretch: { \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"white\" },\r\n /** The attributes of the line that connects the top-center stretch handle to the rotate handle. */\r\n rotateLine: { \"stroke\": \"grey\", \"fill-opacity\": .85 },\r\n /** The attributes of the rotate handle. */\r\n rotate: { \"cursor\": `url(${IModelApp.publicPath}Markup/rotate.png) 12 12, auto`, \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"lightBlue\" },\r\n /** The attributes of box around the element. */\r\n moveOutline: { \"cursor\": \"move\", \"stroke-dasharray\": \"6,6\", \"fill\": \"none\", \"stroke-opacity\": .85, \"stroke\": \"white\" },\r\n /** The attributes of box that provides the move cursor. */\r\n move: { \"cursor\": \"move\", \"opacity\": 0, \"stroke-width\": 10, \"stroke\": \"white\" },\r\n /** The attributes of handles on the vertices of lines. */\r\n vertex: { \"cursor\": `url(${IModelApp.publicPath}cursors/crosshair.cur), crosshair`, \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"white\" },\r\n },\r\n /** properties for providing feedback about selected elements. */\r\n hilite: {\r\n /** the color of selected elements */\r\n color: \"magenta\",\r\n /** the color of an element as the cursor passes over it */\r\n flash: \"cyan\",\r\n },\r\n /** optionally, show a drop-shadow behind all markup elements. */\r\n dropShadow: {\r\n /** if false, no drop shadow */\r\n enable: true,\r\n /** the attributes of the drop shadow. See https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow */\r\n attr: {\r\n \"stdDeviation\": 2,\r\n \"dx\": 1.2,\r\n \"dy\": 1.4,\r\n \"flood-color\": \"#1B3838\",\r\n },\r\n },\r\n /** The \"active placement\" parameters. New elements are created with these parameters, so UI controls should set them. */\r\n active: {\r\n /** the CSS style properties of new text elements. */\r\n text: {\r\n \"font-family\": \"sans-serif\",\r\n \"font-size\": \"30px\",\r\n \"stroke\": \"none\",\r\n \"fill\": \"red\",\r\n },\r\n /** the CSS style properties of new elements. */\r\n element: {\r\n \"stroke\": \"red\",\r\n \"stroke-opacity\": 0.8,\r\n \"stroke-width\": 3,\r\n \"stroke-dasharray\": 0,\r\n \"stroke-linecap\": \"round\",\r\n \"stroke-linejoin\": \"round\",\r\n \"fill\": \"blue\",\r\n \"fill-opacity\": 0.2,\r\n },\r\n arrow: {\r\n length: 7,\r\n width: 6,\r\n },\r\n cloud: {\r\n path: \"M3.0,2.5 C3.9,.78 5.6,-.4 8.1,1.0 C9.1,0 11.3,-.2 12.5,.5 C14.2,-.5 17,.16 17.9,2.5 C21,3 20.2,7.3 17.6,7.5 C16.5,9.2 14.4,9.8 12.7,8.9 C11.6,10 9.5,10.3 8.1,9.4 C5.7,10.8 3.3,9.4 2.6,7.5 C-.9,7.7 .6,1.7 3.0,2.5z\",\r\n },\r\n },\r\n /** Values for placing and editing Text. */\r\n text: {\r\n /** A default string for the Markup.Text.Place command. Applications can turn this off, or supply the user's initials, for example. */\r\n startValue: \"Note: \",\r\n /** Parameters for the size and appearance of the text editor */\r\n edit: {\r\n background: \"blanchedalmond\",\r\n /** Starting size, will be updated if user stretches the box */\r\n size: { width: \"25%\", height: \"4em\" },\r\n /** font size of the text editor */\r\n fontSize: \"14pt\",\r\n /** A background box drawn around text so user can tell what's being selected */\r\n textBox: { \"fill\": \"lightGrey\", \"fill-opacity\": .1, \"stroke-opacity\": .85, \"stroke\": \"lightBlue\" },\r\n },\r\n },\r\n /** Used to draw the border outline around the view while it is being marked up so the user can tell Markup is active */\r\n borderOutline: {\r\n \"stroke\": \"gold\",\r\n \"stroke-width\": 6,\r\n \"stroke-opacity\": 0.4,\r\n \"fill\": \"none\",\r\n },\r\n /** Used to draw the border corner symbols for the view while it is being marked up so the user can tell Markup is active */\r\n borderCorners: {\r\n \"stroke\": \"black\",\r\n \"stroke-width\": 2,\r\n \"stroke-opacity\": 0.2,\r\n \"fill\": \"gold\",\r\n \"fill-opacity\": 0.2,\r\n },\r\n /** Determines what is returned by MarkupApp.stop */\r\n result: {\r\n /** The format for the image data. */\r\n imageFormat: \"image/png\",\r\n /** If true, the markup graphics will be imprinted in the returned image. */\r\n imprintSvgOnImage: true,\r\n /** the maximum width for the returned image. If the source view width is larger than this, it will be scaled down to this size. */\r\n maxWidth: 2048,\r\n },\r\n };\r\n\r\n private static _saveDefaultToolId = \"\";\r\n /** @internal */\r\n public static screenToVbMtx(): Matrix {\r\n const matrix = this.markup?.svgMarkup?.screenCTM().inverse();\r\n return (undefined !== matrix ? matrix : new Matrix());\r\n }\r\n /** @internal */\r\n public static getVpToScreenMtx(): Matrix {\r\n const rect = this.markup!.markupDiv.getBoundingClientRect();\r\n return (new Matrix()).translateO(rect.left, rect.top);\r\n }\r\n\r\n /** @internal */\r\n public static getVpToVbMtx(): Matrix { return this.getVpToScreenMtx().lmultiplyO(this.screenToVbMtx()); }\r\n /** @internal */\r\n public static convertVpToVb(pt: XAndY): Point3d {\r\n const pt0 = new Point(pt.x, pt.y);\r\n pt0.transformO(this.getVpToVbMtx());\r\n return new Point3d(pt0.x, pt0.y, 0);\r\n }\r\n\r\n /** determine whether there's a markup session currently active */\r\n public static get isActive() { return undefined !== this.markup; }\r\n public static markupSelectToolId = \"Markup.Select\";\r\n\r\n protected static createMarkup(view: ScreenViewport, markupData?: MarkupSvgData) { return new Markup(view, markupData); }\r\n\r\n protected static lockViewportSize(view: ScreenViewport, markupData?: MarkupSvgData) {\r\n const parentDiv = view.vpDiv;\r\n const rect = parentDiv.getBoundingClientRect();\r\n let width = rect.width;\r\n let height = rect.height;\r\n if (markupData) {\r\n const aspect = markupData.rect.height / markupData.rect.width;\r\n if ((width * aspect) > height)\r\n width = Math.floor(height / aspect);\r\n else\r\n height = Math.floor(width * aspect);\r\n }\r\n const style = parentDiv.style;\r\n style.width = `${width}px`;\r\n style.height = `${height}px`;\r\n }\r\n\r\n /** @internal */\r\n public static getActionName(action: string) { return IModelApp.localization.getLocalizedString(`${this.namespace}:actions.${action}`); }\r\n\r\n /** Start a markup session */\r\n public static async start(view: ScreenViewport, markupData?: MarkupSvgData): Promise<void> {\r\n if (this.markup)\r\n return; // a markup session is already active.\r\n\r\n await this.initialize();\r\n\r\n // first, lock the viewport to its current size while the markup session is running\r\n this.lockViewportSize(view, markupData);\r\n\r\n this.markup = this.createMarkup(view, markupData); // start a markup against the provided view.\r\n if (!this.markup.svgMarkup) {\r\n ScreenViewport.setToParentSize(this.markup.vp.vpDiv);\r\n this.markup.markupDiv.remove();\r\n return;\r\n }\r\n\r\n IModelApp.toolAdmin.markupView = view; // so viewing tools won't operate on the view.\r\n\r\n // set the markup Select tool as the default tool and start it, saving current default tool\r\n this._saveDefaultToolId = IModelApp.toolAdmin.defaultToolId;\r\n IModelApp.toolAdmin.defaultToolId = this.markupSelectToolId;\r\n return IModelApp.toolAdmin.startDefaultTool();\r\n }\r\n\r\n /** Read the result of a Markup session, then stop the session.\r\n * @note see [MarkupApp.props.result] for options.\r\n */\r\n public static async stop(): Promise<MarkupData> {\r\n await IModelApp.toolAdmin.startDefaultTool(); // Make sure current markup tool exits first...\r\n const data = await this.readMarkup();\r\n if (!this.markup)\r\n return data;\r\n\r\n // restore original size for vp.\r\n ScreenViewport.setToParentSize(this.markup.vp.vpDiv);\r\n\r\n IModelApp.toolAdmin.markupView = undefined; // re-enable viewing tools for the view being marked-up\r\n this.markup.destroy();\r\n this.markup = undefined;\r\n // now restore the default tool and start it\r\n IModelApp.toolAdmin.defaultToolId = this._saveDefaultToolId;\r\n this._saveDefaultToolId = \"\";\r\n await IModelApp.toolAdmin.startDefaultTool();\r\n return data;\r\n }\r\n\r\n /** Call this method to initialize the Markup system.\r\n * It asynchronously loads the MarkupTools namespace for the prompts and tool names for the Markup system, and\r\n * also registers all of the Markup tools.\r\n * @return a Promise that may be awaited to ensure that the MarkupTools namespace had been loaded.\r\n * @note This method is automatically called every time you call [[start]]. Since the Markup tools cannot\r\n * start unless there is a Markup active, there's really no need to call this method directly.\r\n * The only virtue in doing so is to pre-load the Markup namespace if you have an opportunity to do so earlier in your\r\n * startup code.\r\n * @note This method may be called multiple times, but only the first time initiates the loading/registering. Subsequent\r\n * calls return the same Promise.\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (undefined === this.namespace) { // only need to do this once\r\n this.namespace = \"MarkupTools\";\r\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\r\n IModelApp.tools.register(SelectTool, this.namespace);\r\n IModelApp.tools.registerModule(redlineTool, this.namespace);\r\n IModelApp.tools.registerModule(textTool, this.namespace);\r\n return namespacePromise;\r\n }\r\n return IModelApp.localization.getNamespacePromise(this.namespace)!; // so caller can make sure localized messages are ready.\r\n }\r\n\r\n /** convert the current markup SVG into a string, but don't include decorations or dynamics\r\n * @internal\r\n */\r\n protected static readMarkupSvg() {\r\n const markup = this.markup;\r\n if (!markup || !markup.svgContainer)\r\n return undefined;\r\n markup.svgDecorations!.remove(); // we don't want the decorations or dynamics to be included\r\n markup.svgDynamics!.remove();\r\n void IModelApp.toolAdmin.startDefaultTool();\r\n return markup.svgContainer.svg(); // string-ize the SVG data\r\n }\r\n\r\n /** convert the current markup SVG into a string (after calling readMarkupSvg) making sure width and height are specified.\r\n * @internal\r\n */\r\n protected static readMarkupSvgForDrawImage() {\r\n const markup = this.markup;\r\n if (!markup || !markup.svgContainer)\r\n return undefined;\r\n // Firefox requires width and height on top-level svg or drawImage does nothing, passing width/height to drawImage doesn't work.\r\n const rect = markup.markupDiv.getBoundingClientRect();\r\n markup.svgContainer.width(rect.width);\r\n markup.svgContainer.height(rect.height);\r\n return markup.svgContainer.svg(); // string-ize the SVG data\r\n }\r\n\r\n /** @internal */\r\n protected static async readMarkup(): Promise<MarkupData> {\r\n const result = this.props.result;\r\n let canvas = this.markup!.vp.readImageToCanvas();\r\n let svg, image;\r\n try {\r\n svg = this.readMarkupSvg(); // read the current svg data for the markup\r\n const svgForImage = (svg && result.imprintSvgOnImage ? this.readMarkupSvgForDrawImage() : undefined);\r\n if (svgForImage) {\r\n const svgImage = await imageElementFromImageSource(new ImageSource(svgForImage, ImageSourceFormat.Svg));\r\n canvas.getContext(\"2d\")!.drawImage(svgImage, 0, 0); // draw markup svg onto view's canvas2d\r\n }\r\n\r\n // is the source view too wide? If so, we need to scale the image down.\r\n if (canvas.width > result.maxWidth) {\r\n // yes, we have to scale it down, create a new canvas and set the new canvas' size\r\n const newCanvas = document.createElement(\"canvas\");\r\n newCanvas.width = result.maxWidth;\r\n newCanvas.height = canvas.height * (result.maxWidth / canvas.width);\r\n newCanvas.getContext(\"2d\")!.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, newCanvas.width, newCanvas.height);\r\n canvas = newCanvas; // return the image from adjusted canvas, not view canvas.\r\n }\r\n\r\n // return the markup data to be saved by the application.\r\n image = (!result.imageFormat ? undefined : canvas.toDataURL(result.imageFormat));\r\n } catch (e) {\r\n Logger.logError(`${FrontendLoggerCategory.Package}.markup`, \"Error creating image from svg\", BentleyError.getErrorProps(e));\r\n }\r\n return { rect: { width: canvas.width, height: canvas.height }, svg, image };\r\n }\r\n\r\n /** @internal */\r\n public static markupPrefix = \"markup-\";\r\n /** @internal */\r\n public static get dropShadowId() { return `${this.markupPrefix}dropShadow`; } // this is referenced in the markup Svg to apply the drop-shadow filter to all markup elements.\r\n /** @internal */\r\n public static get cornerId() { return `${this.markupPrefix}photoCorner`; }\r\n /** @internal */\r\n public static get containerClass() { return `${this.markupPrefix}container`; }\r\n /** @internal */\r\n public static get dynamicsClass() { return `${this.markupPrefix}dynamics`; }\r\n /** @internal */\r\n public static get decorationsClass() { return `${this.markupPrefix}decorations`; }\r\n /** @internal */\r\n public static get markupSvgClass() { return `${this.markupPrefix}svg`; }\r\n /** @internal */\r\n public static get boxedTextClass() { return `${this.markupPrefix}boxedText`; }\r\n /** @internal */\r\n public static get textClass() { return `${this.markupPrefix}text`; }\r\n /** @internal */\r\n public static get stretchHandleClass() { return `${this.markupPrefix}stretchHandle`; }\r\n /** @internal */\r\n public static get rotateLineClass() { return `${this.markupPrefix}rotateLine`; }\r\n /** @internal */\r\n public static get rotateHandleClass() { return `${this.markupPrefix}rotateHandle`; }\r\n /** @internal */\r\n public static get vertexHandleClass() { return `${this.markupPrefix}vertexHandle`; }\r\n /** @internal */\r\n public static get moveHandleClass() { return `${this.markupPrefix}moveHandle`; }\r\n /** @internal */\r\n public static get textOutlineClass() { return `${this.markupPrefix}textOutline`; }\r\n /** @internal */\r\n public static get textEditorClass() { return `${this.markupPrefix}textEditor`; }\r\n}\r\n\r\nconst removeSvgNamespace = (svg: Svg) => {\r\n svg.node.removeAttribute(\"xmlns:svgjs\");\r\n return svg;\r\n};\r\n\r\nconst newSvgElement = (name: string) => adopt(create(name));\r\n\r\n/**\r\n * The current markup being created/edited. Holds the SVG elements, plus the active [[MarkupTool]].\r\n * When starting a Markup, a new Div is added as a child of the ScreenViewport's vpDiv.\r\n * @public\r\n */\r\nexport class Markup {\r\n /** @internal */\r\n public readonly markupDiv: HTMLDivElement;\r\n /** Support undo/redo of markup operations */\r\n public readonly undo = new UndoManager();\r\n /** The set of currently selected markup elements */\r\n public readonly selected!: MarkupSelected;\r\n /** @internal */\r\n public readonly svgContainer?: Svg;\r\n /** @internal */\r\n public readonly svgMarkup?: G;\r\n /** @internal */\r\n public readonly svgDynamics?: G;\r\n /** @internal */\r\n public readonly svgDecorations?: G;\r\n\r\n /** create the drop-shadow filter in the Defs section of the supplied svg element */\r\n private createDropShadow(svg: Svg) {\r\n const filter = SVG(`#${MarkupApp.dropShadowId}`); // see if we already have one?\r\n if (filter)\r\n filter.remove(); // yes, remove it. This must be someone modifying the drop shadow properties\r\n\r\n // create a new filter, and add it to the Defs of the supplied svg\r\n svg.defs()\r\n .add(newSvgElement(\"filter\").id(MarkupApp.dropShadowId)\r\n .add(newSvgElement(\"feDropShadow\").attr(MarkupApp.props.dropShadow.attr)));\r\n }\r\n private addNested(className: string): G { return this.svgContainer!.group().addClass(className); }\r\n private addBorder() {\r\n const rect = this.svgContainer!.viewbox();\r\n const inset = MarkupApp.props.borderOutline[\"stroke-width\"];\r\n const cornerSize = inset * 6;\r\n const cornerPts = [0, 0, cornerSize, 0, cornerSize * .7, cornerSize * .3, cornerSize * .3, cornerSize * .3, cornerSize * .3, cornerSize * .7, 0, cornerSize];\r\n const decorations = this.svgDecorations!;\r\n const photoCorner = decorations.symbol().polygon(cornerPts).attr(MarkupApp.props.borderCorners).id(MarkupApp.cornerId);\r\n const cornerGroup = decorations.group();\r\n cornerGroup.rect(rect.width - inset, rect.height - inset).move(inset / 2, inset / 2).attr(MarkupApp.props.borderOutline);\r\n cornerGroup.use(photoCorner);\r\n cornerGroup.use(photoCorner).rotate(90).translate(rect.width - cornerSize, 0);\r\n cornerGroup.use(photoCorner).rotate(180).translate(rect.width - cornerSize, rect.height - cornerSize);\r\n cornerGroup.use(photoCorner).rotate(270).translate(0, rect.height - cornerSize);\r\n }\r\n\r\n /** Create a new Markup for the supplied ScreenViewport. Adds a new \"overlay-markup\" div into the \"vpDiv\"\r\n * of the viewport.\r\n * @note you must call destroy on this object at end of markup to remove the markup div.\r\n */\r\n public constructor(public vp: ScreenViewport, markupData?: MarkupSvgData) {\r\n this.markupDiv = vp.addNewDiv(\"overlay-markup\", true, 20); // this div goes on top of the canvas, but behind UI layers\r\n const rect = this.markupDiv.getBoundingClientRect();\r\n\r\n // First, see if there is a markup passed in as an argument\r\n if (markupData && markupData.svg) {\r\n this.markupDiv.innerHTML = markupData.svg; // make it a child of the markupDiv\r\n this.svgContainer = SVG(`.${MarkupApp.containerClass}`) as Svg | undefined; // get it in svg.js format\r\n this.svgMarkup = SVG(`.${MarkupApp.markupSvgClass}`) as G | undefined;\r\n if (!this.svgContainer || !this.svgMarkup) // if either isn't present, its not a valid markup\r\n return;\r\n removeSvgNamespace(this.svgContainer); // the SVG call above adds this - remove it\r\n this.svgMarkup.each(() => { }, true); // create an SVG.Element for each entry in the supplied markup.\r\n } else {\r\n // create the container that will be returned as the \"svg\" data for this markup\r\n this.svgContainer = SVG().addTo(this.markupDiv).addClass(MarkupApp.containerClass).viewbox(0, 0, rect.width, rect.height);\r\n removeSvgNamespace(this.svgContainer);\r\n this.svgMarkup = this.addNested(MarkupApp.markupSvgClass);\r\n }\r\n\r\n if (MarkupApp.props.dropShadow.enable) {\r\n this.createDropShadow(this.svgContainer);\r\n this.svgContainer.attr(\"filter\", `url(#${MarkupApp.dropShadowId})`);\r\n }\r\n\r\n /** add two nested groups for providing feedback during the markup session. These Svgs are removed before the data is returned. */\r\n this.svgDynamics = this.addNested(MarkupApp.dynamicsClass); // only for tool dynamics of SVG graphics.\r\n this.svgDecorations = this.addNested(MarkupApp.decorationsClass); // only for temporary decorations of SVG graphics.\r\n this.addBorder();\r\n this.selected = new MarkupSelected(this.svgDecorations);\r\n }\r\n\r\n /** Called when the Markup is destroyed */\r\n public destroy() { this.markupDiv.remove(); }\r\n /** Turn on picking the markup elements in the markup view */\r\n public enablePick() { this.markupDiv.style.pointerEvents = \"auto\"; }\r\n /** Turn off picking the markup elements in the markup view */\r\n public disablePick() { this.markupDiv.style.pointerEvents = \"none\"; }\r\n /** Change the default cursor for the markup view */\r\n public setCursor(cursor: string) { this.markupDiv.style.cursor = cursor; }\r\n /** Delete all the entries in the selection set, then empty it. */\r\n public deleteSelected() { this.selected.deleteAll(this.undo); }\r\n /** Bring all the entries in the selection set to the front. */\r\n public bringToFront() { this.selected.reposition(MarkupApp.getActionName(\"toFront\"), this.undo, (el) => el.front()); }\r\n /** Send all the entries in the selection set to the back. */\r\n public sendToBack() { this.selected.reposition(MarkupApp.getActionName(\"toBack\"), this.undo, (el) => el.back()); }\r\n /** Group all the entries in the selection set, then select the group. */\r\n public groupSelected() {\r\n if (undefined !== this.svgMarkup)\r\n this.selected.groupAll(this.undo);\r\n }\r\n\r\n /** Ungroup all the group entries in the selection set. */\r\n public ungroupSelected() {\r\n if (undefined !== this.svgMarkup)\r\n this.selected.ungroupAll(this.undo);\r\n }\r\n\r\n /** Check if the supplied MarkupElement is a group of MarkupText and the MarkupText's outline Rect.\r\n * @param el the markup element to check\r\n * @returns true if boxed text\r\n */\r\n public isBoxedText(el: MarkupElement): boolean {\r\n return el.type === \"g\" &&\r\n el.node.classList.length > 0 &&\r\n el.node.classList[0] === MarkupApp.boxedTextClass &&\r\n el.children().length === 2;\r\n }\r\n\r\n /** Get an existing or create a new reusable symbol representing an arrow head.\r\n * If a Marker for the supplied color and size already exists it is returned, otherwise a new Marker is created.\r\n * @param color the arrow head color\r\n * @param length the arrow head length\r\n * @param width the arrow head width\r\n * @note Flashing doesn't currently affect markers, need support for \"context-stroke\" and \"context-fill\". For now encode color in name...\r\n */\r\n public createArrowMarker(color: string, length: number, width: number): Marker {\r\n length = Math.ceil(length); // Don't allow \".\" in selector string...\r\n width = Math.ceil(width);\r\n const arrowMarkerId = `ArrowMarker${length}x${width}-${color}`;\r\n let marker = SVG(`#${arrowMarkerId}`) as Marker;\r\n if (null === marker) {\r\n marker = this.svgMarkup!.marker(length, width).id(arrowMarkerId);\r\n marker.polygon([0, 0, length, width * 0.5, 0, width]);\r\n marker.attr(\"orient\", \"auto-start-reverse\");\r\n marker.attr(\"overflow\", \"visible\"); // Don't clip the stroke that is being applied to allow the specified start/end to be used directly while hiding the arrow tail fully under the arrow head...\r\n marker.attr(\"refX\", length);\r\n marker.css({ stroke: color, fill: color });\r\n }\r\n return marker;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Markup.js","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAS,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAuC,MAAM,EAAE,KAAK,EAAO,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AA6BrC;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IAiHpB,gBAAgB;IACT,MAAM,CAAC,aAAa;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7D,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,gBAAgB;IACT,MAAM,CAAC,gBAAgB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;QAC5D,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,YAAY,KAAa,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,gBAAgB;IACT,MAAM,CAAC,aAAa,CAAC,EAAS;QACnC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,kEAAkE;IAC3D,MAAM,KAAK,QAAQ,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAGxD,MAAM,CAAC,YAAY,CAAC,IAAoB,EAAE,UAA0B,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAE9G,MAAM,CAAC,gBAAgB,CAAC,IAAoB,EAAE,UAA0B;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM;gBAC3B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;;gBAEpC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC;QAC3B,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;IAC/B,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,aAAa,CAAC,MAAc,IAAI,OAAO,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,SAAS,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAExI,6BAA6B;IACtB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAoB,EAAE,UAA0B;QACxE,IAAI,IAAI,CAAC,MAAM;YACb,OAAO,CAAC,sCAAsC;QAEhD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,mFAAmF;QACnF,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,4CAA4C;QAC/F,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,SAAS,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,8CAA8C;QAErF,2FAA2F;QAC3F,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;QAC5D,SAAS,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC5D,OAAO,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI;QACtB,MAAM,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,+CAA+C;QAC7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM;YACd,OAAO,IAAI,CAAC;QAEd,gCAAgC;QAChC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAErD,SAAS,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,uDAAuD;QACnG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,4CAA4C;QAC5C,SAAS,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC5D,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAK,4BAA4B;YAClE,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClF,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACzD,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,wDAAwD;IAC9H,CAAC;IAED;;OAEG;IACO,MAAM,CAAC,aAAa;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY;YACjC,OAAO,SAAS,CAAC;QACnB,MAAM,CAAC,cAAe,CAAC,MAAM,EAAE,CAAC,CAAC,2DAA2D;QAC5F,MAAM,CAAC,WAAY,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;IAC9D,CAAC;IAED;;OAEG;IACO,MAAM,CAAC,yBAAyB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY;YACjC,OAAO,SAAS,CAAC;QACnB,gIAAgI;QAChI,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;IAC9D,CAAC;IAED,gBAAgB;IACN,MAAM,CAAC,KAAK,CAAC,UAAU;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACjD,IAAI,GAAG,EAAE,KAAK,CAAC;QACf,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,2CAA2C;YACvE,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACrG,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,uCAAuC;YAC7F,CAAC;YAED,uEAAuE;YACvE,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,kFAAkF;gBAClF,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACnD,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAClC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC1H,MAAM,GAAG,SAAS,CAAC,CAAC,0DAA0D;YAChF,CAAC;YAED,yDAAyD;YACzD,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,QAAQ,CAAC,GAAG,sBAAsB,CAAC,OAAO,SAAS,EAAE,+BAA+B,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9H,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC9E,CAAC;IAID,gBAAgB;IACT,MAAM,KAAK,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC,CAAC,+FAA+F;IAC7K,gBAAgB;IACT,MAAM,KAAK,QAAQ,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,aAAa,CAAC,CAAC,CAAC;IAC1E,gBAAgB;IACT,MAAM,KAAK,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC;IAC9E,gBAAgB;IACT,MAAM,KAAK,aAAa,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC;IAC5E,gBAAgB;IACT,MAAM,KAAK,gBAAgB,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,aAAa,CAAC,CAAC,CAAC;IAClF,gBAAgB;IACT,MAAM,KAAK,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC;IACxE,gBAAgB;IACT,MAAM,KAAK,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC;IAC9E,gBAAgB;IACT,MAAM,KAAK,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC;IACpE,gBAAgB;IACT,MAAM,KAAK,kBAAkB,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,eAAe,CAAC,CAAC,CAAC;IACtF,gBAAgB;IACT,MAAM,KAAK,eAAe,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;IAChF,gBAAgB;IACT,MAAM,KAAK,iBAAiB,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,cAAc,CAAC,CAAC,CAAC;IACpF,gBAAgB;IACT,MAAM,KAAK,iBAAiB,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,cAAc,CAAC,CAAC,CAAC;IACpF,gBAAgB;IACT,MAAM,KAAK,eAAe,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;IAChF,gBAAgB;IACT,MAAM,KAAK,gBAAgB,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,aAAa,CAAC,CAAC,CAAC;IAClF,gBAAgB;IACT,MAAM,KAAK,eAAe,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;;AAzThF,6HAA6H;AAC/G,eAAK,GAAG;IACpB,8FAA8F;IAC9F,OAAO,EAAE;QACP,mDAAmD;QACnD,IAAI,EAAE,EAAE;QACR,4CAA4C;QAC5C,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QACpE,mGAAmG;QACnG,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE;QACrD,2CAA2C;QAC3C,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,SAAS,CAAC,UAAU,gCAAgC,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;QAC9I,gDAAgD;QAChD,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;QACtH,2DAA2D;QAC3D,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC/E,0DAA0D;QAC1D,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,SAAS,CAAC,UAAU,mCAAmC,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;KAC9I;IACD,iEAAiE;IACjE,MAAM,EAAE;QACN,qCAAqC;QACrC,KAAK,EAAE,SAAS;QAChB,2DAA2D;QAC3D,KAAK,EAAE,MAAM;KACd;IACD,iEAAiE;IACjE,UAAU,EAAE;QACV,+BAA+B;QAC/B,MAAM,EAAE,IAAI;QACZ,mHAAmH;QACnH,IAAI,EAAE;YACJ,cAAc,EAAE,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,SAAS;SACzB;KACF;IACD,yHAAyH;IACzH,MAAM,EAAE;QACN,qDAAqD;QACrD,IAAI,EAAE;YACJ,aAAa,EAAE,YAAY;YAC3B,WAAW,EAAE,MAAM;YACnB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,KAAK;SACd;QACD,gDAAgD;QAChD,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,CAAC;YACrB,gBAAgB,EAAE,OAAO;YACzB,iBAAiB,EAAE,OAAO;YAC1B,MAAM,EAAE,MAAM;YACd,cAAc,EAAE,GAAG;SACpB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;SACT;QACD,KAAK,EAAE;YACL,IAAI,EAAE,sNAAsN;SAC7N;KACF;IACD,2CAA2C;IAC3C,IAAI,EAAE;QACJ,sIAAsI;QACtI,UAAU,EAAE,QAAQ;QACpB,gEAAgE;QAChE,IAAI,EAAE;YACJ,UAAU,EAAE,gBAAgB;YAC5B,+DAA+D;YAC/D,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;YACrC,mCAAmC;YACnC,QAAQ,EAAE,MAAM;YAChB,gFAAgF;YAChF,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE;SACnG;KACF;IACD,wHAAwH;IACxH,aAAa,EAAE;QACb,QAAQ,EAAE,MAAM;QAChB,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,MAAM;KACf;IACD,4HAA4H;IAC5H,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG;QACrB,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,GAAG;KACpB;IACD,oDAAoD;IACpD,MAAM,EAAE;QACN,qCAAqC;QACrC,WAAW,EAAE,WAAW;QACxB,4EAA4E;QAC5E,iBAAiB,EAAE,IAAI;QACvB,mIAAmI;QACnI,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEa,4BAAkB,GAAG,EAAE,CAAC;AAuBzB,4BAAkB,GAAG,eAAe,CAAC;AAwJnD,gBAAgB;AACF,sBAAY,GAAG,SAAS,CAAC;AAiCzC,MAAM,kBAAkB,GAAG,CAAC,GAAQ,EAAE,EAAE;IACtC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,OAAO,MAAM;IAgBjB,oFAAoF;IAC5E,gBAAgB,CAAC,GAAQ;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,8BAA8B;QAChF,IAAI,MAAM;YACR,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,4EAA4E;QAE/F,kEAAkE;QAClE,GAAG,CAAC,IAAI,EAAE;aACP,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;aACpD,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IACO,SAAS,CAAC,SAAiB,IAAO,OAAO,IAAI,CAAC,YAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1F,SAAS;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,YAAa,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7J,MAAM,WAAW,GAAG,IAAI,CAAC,cAAe,CAAC;QACzC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvH,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;QACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACzH,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9E,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;QACtG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAClF,CAAC;IAED;;;OAGG;IACH,YAA0B,EAAkB,EAAE,UAA0B;QAA9C,OAAE,GAAF,EAAE,CAAgB;QA5C5C,6CAA6C;QAC7B,SAAI,GAAG,IAAI,WAAW,EAAE,CAAC;QA4CvC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,2DAA2D;QACtH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;QAEpD,2DAA2D;QAC3D,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,mCAAmC;YAC9E,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAoB,CAAC,CAAC,0BAA0B;YACtG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAkB,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kDAAkD;gBAC3F,OAAO;YACT,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,2CAA2C;YAClF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,+DAA+D;QACvG,CAAC;aAAM,CAAC;YACN,+EAA+E;YAC/E,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1H,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;QACtE,CAAC;QAED,kIAAkI;QAClI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,0CAA0C;QACtG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,kDAAkD;QACpH,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,0CAA0C;IACnC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,6DAA6D;IACtD,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;IACpE,8DAA8D;IACvD,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;IACrE,oDAAoD;IAC7C,SAAS,CAAC,MAAc,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1E,kEAAkE;IAC3D,cAAc,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,+DAA+D;IACxD,YAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACtH,6DAA6D;IACtD,UAAU,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClH,yEAAyE;IAClE,aAAa;QAClB,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS;YAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,0DAA0D;IACnD,eAAe;QACpB,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS;YAC9B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,EAAiB;QAClC,OAAO,EAAE,CAAC,IAAI,KAAK,GAAG;YACpB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAC5B,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,cAAc;YACjD,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAa,EAAE,MAAc,EAAE,KAAa;QACnE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAwC;QACpE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,aAAa,GAAG,cAAc,MAAM,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAC/D,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,aAAa,EAAE,CAAW,CAAC;QAChD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC,SAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,6JAA6J;YACjM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupApp\n */\n\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\nimport { Point3d, XAndY } from \"@itwin/core-geometry\";\nimport { ImageSource, ImageSourceFormat } from \"@itwin/core-common\";\nimport { FrontendLoggerCategory, imageElementFromImageSource, IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\nimport { adopt, create, G, Marker, Element as MarkupElement, Matrix, Point, Svg, SVG } from \"@svgdotjs/svg.js\";\nimport * as redlineTool from \"./RedlineTool\";\nimport { MarkupSelected, SelectTool } from \"./SelectTool\";\nimport * as textTool from \"./TextEdit\";\nimport { UndoManager } from \"./Undo\";\n\n// cspell:ignore blanchedalmond, lmultiply, svgs\n\n/** The width and height of a Markup image, in pixels.\n * @public */\nexport interface WidthAndHeight {\n width: number;\n height: number;\n}\n\n/** The size and SVG string for a Markup\n * @public\n */\nexport interface MarkupSvgData {\n /** The size of the image, in pixels. This also indicates the aspect ratio of the SVG data. */\n rect: WidthAndHeight;\n /** a string holding the svg data for the markup. Will be undefined if [[MarkupApp.stop]] is called without an active Markup */\n svg?: string;\n}\n\n/** Markup data returned by [[MarkupApp.stop]]\n * @public\n */\nexport interface MarkupData extends MarkupSvgData {\n /** a base64 encoded string with the image of the view that was marked up. See [[MarkupApp.props.result]] for options. */\n image?: string;\n}\n\n/**\n * The main object for the Markup package. It is a singleton that stores the state of the Markup application.\n * It has only static members and methods. Applications may customize and control the behavior of the Markup by\n * setting members of [[MarkupApp.props]]. When [[MarkupApp.start]] is first called, it registers a set of \"Markup.xxx\"\n * tools that may be invoked from UI controls.\n * @public\n */\nexport class MarkupApp {\n /** the current Markup being created */\n public static markup?: Markup;\n /** The namespace for the Markup tools */\n public static namespace?: string;\n /** By setting members of this object, applications can control the appearance and behavior of various parts of MarkupApp. */\n public static props = {\n /** the UI controls displayed on Elements by the Select Tool to allow users to modify them. */\n handles: {\n /** The diameter of the circles for the handles. */\n size: 10,\n /** The attributes of the stretch handles */\n stretch: { \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"white\" },\n /** The attributes of the line that connects the top-center stretch handle to the rotate handle. */\n rotateLine: { \"stroke\": \"grey\", \"fill-opacity\": .85 },\n /** The attributes of the rotate handle. */\n rotate: { \"cursor\": `url(${IModelApp.publicPath}Markup/rotate.png) 12 12, auto`, \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"lightBlue\" },\n /** The attributes of box around the element. */\n moveOutline: { \"cursor\": \"move\", \"stroke-dasharray\": \"6,6\", \"fill\": \"none\", \"stroke-opacity\": .85, \"stroke\": \"white\" },\n /** The attributes of box that provides the move cursor. */\n move: { \"cursor\": \"move\", \"opacity\": 0, \"stroke-width\": 10, \"stroke\": \"white\" },\n /** The attributes of handles on the vertices of lines. */\n vertex: { \"cursor\": `url(${IModelApp.publicPath}cursors/crosshair.cur), crosshair`, \"fill-opacity\": .85, \"stroke\": \"black\", \"fill\": \"white\" },\n },\n /** properties for providing feedback about selected elements. */\n hilite: {\n /** the color of selected elements */\n color: \"magenta\",\n /** the color of an element as the cursor passes over it */\n flash: \"cyan\",\n },\n /** optionally, show a drop-shadow behind all markup elements. */\n dropShadow: {\n /** if false, no drop shadow */\n enable: true,\n /** the attributes of the drop shadow. See https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow */\n attr: {\n \"stdDeviation\": 2,\n \"dx\": 1.2,\n \"dy\": 1.4,\n \"flood-color\": \"#1B3838\",\n },\n },\n /** The \"active placement\" parameters. New elements are created with these parameters, so UI controls should set them. */\n active: {\n /** the CSS style properties of new text elements. */\n text: {\n \"font-family\": \"sans-serif\",\n \"font-size\": \"30px\",\n \"stroke\": \"none\",\n \"fill\": \"red\",\n },\n /** the CSS style properties of new elements. */\n element: {\n \"stroke\": \"red\",\n \"stroke-opacity\": 0.8,\n \"stroke-width\": 3,\n \"stroke-dasharray\": 0,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n \"fill\": \"blue\",\n \"fill-opacity\": 0.2,\n },\n arrow: {\n length: 7,\n width: 6,\n },\n cloud: {\n path: \"M3.0,2.5 C3.9,.78 5.6,-.4 8.1,1.0 C9.1,0 11.3,-.2 12.5,.5 C14.2,-.5 17,.16 17.9,2.5 C21,3 20.2,7.3 17.6,7.5 C16.5,9.2 14.4,9.8 12.7,8.9 C11.6,10 9.5,10.3 8.1,9.4 C5.7,10.8 3.3,9.4 2.6,7.5 C-.9,7.7 .6,1.7 3.0,2.5z\",\n },\n },\n /** Values for placing and editing Text. */\n text: {\n /** A default string for the Markup.Text.Place command. Applications can turn this off, or supply the user's initials, for example. */\n startValue: \"Note: \",\n /** Parameters for the size and appearance of the text editor */\n edit: {\n background: \"blanchedalmond\",\n /** Starting size, will be updated if user stretches the box */\n size: { width: \"25%\", height: \"4em\" },\n /** font size of the text editor */\n fontSize: \"14pt\",\n /** A background box drawn around text so user can tell what's being selected */\n textBox: { \"fill\": \"lightGrey\", \"fill-opacity\": .1, \"stroke-opacity\": .85, \"stroke\": \"lightBlue\" },\n },\n },\n /** Used to draw the border outline around the view while it is being marked up so the user can tell Markup is active */\n borderOutline: {\n \"stroke\": \"gold\",\n \"stroke-width\": 6,\n \"stroke-opacity\": 0.4,\n \"fill\": \"none\",\n },\n /** Used to draw the border corner symbols for the view while it is being marked up so the user can tell Markup is active */\n borderCorners: {\n \"stroke\": \"black\",\n \"stroke-width\": 2,\n \"stroke-opacity\": 0.2,\n \"fill\": \"gold\",\n \"fill-opacity\": 0.2,\n },\n /** Determines what is returned by MarkupApp.stop */\n result: {\n /** The format for the image data. */\n imageFormat: \"image/png\",\n /** If true, the markup graphics will be imprinted in the returned image. */\n imprintSvgOnImage: true,\n /** the maximum width for the returned image. If the source view width is larger than this, it will be scaled down to this size. */\n maxWidth: 2048,\n },\n };\n\n private static _saveDefaultToolId = \"\";\n /** @internal */\n public static screenToVbMtx(): Matrix {\n const matrix = this.markup?.svgMarkup?.screenCTM().inverse();\n return (undefined !== matrix ? matrix : new Matrix());\n }\n /** @internal */\n public static getVpToScreenMtx(): Matrix {\n const rect = this.markup!.markupDiv.getBoundingClientRect();\n return (new Matrix()).translateO(rect.left, rect.top);\n }\n\n /** @internal */\n public static getVpToVbMtx(): Matrix { return this.getVpToScreenMtx().lmultiplyO(this.screenToVbMtx()); }\n /** @internal */\n public static convertVpToVb(pt: XAndY): Point3d {\n const pt0 = new Point(pt.x, pt.y);\n pt0.transformO(this.getVpToVbMtx());\n return new Point3d(pt0.x, pt0.y, 0);\n }\n\n /** determine whether there's a markup session currently active */\n public static get isActive() { return undefined !== this.markup; }\n public static markupSelectToolId = \"Markup.Select\";\n\n protected static createMarkup(view: ScreenViewport, markupData?: MarkupSvgData) { return new Markup(view, markupData); }\n\n protected static lockViewportSize(view: ScreenViewport, markupData?: MarkupSvgData) {\n const parentDiv = view.vpDiv;\n const rect = parentDiv.getBoundingClientRect();\n let width = rect.width;\n let height = rect.height;\n if (markupData) {\n const aspect = markupData.rect.height / markupData.rect.width;\n if ((width * aspect) > height)\n width = Math.floor(height / aspect);\n else\n height = Math.floor(width * aspect);\n }\n const style = parentDiv.style;\n style.width = `${width}px`;\n style.height = `${height}px`;\n }\n\n /** @internal */\n public static getActionName(action: string) { return IModelApp.localization.getLocalizedString(`${this.namespace}:actions.${action}`); }\n\n /** Start a markup session */\n public static async start(view: ScreenViewport, markupData?: MarkupSvgData): Promise<void> {\n if (this.markup)\n return; // a markup session is already active.\n\n await this.initialize();\n\n // first, lock the viewport to its current size while the markup session is running\n this.lockViewportSize(view, markupData);\n\n this.markup = this.createMarkup(view, markupData); // start a markup against the provided view.\n if (!this.markup.svgMarkup) {\n ScreenViewport.setToParentSize(this.markup.vp.vpDiv);\n this.markup.markupDiv.remove();\n return;\n }\n\n IModelApp.toolAdmin.markupView = view; // so viewing tools won't operate on the view.\n\n // set the markup Select tool as the default tool and start it, saving current default tool\n this._saveDefaultToolId = IModelApp.toolAdmin.defaultToolId;\n IModelApp.toolAdmin.defaultToolId = this.markupSelectToolId;\n return IModelApp.toolAdmin.startDefaultTool();\n }\n\n /** Read the result of a Markup session, then stop the session.\n * @note see [MarkupApp.props.result] for options.\n */\n public static async stop(): Promise<MarkupData> {\n await IModelApp.toolAdmin.startDefaultTool(); // Make sure current markup tool exits first...\n const data = await this.readMarkup();\n if (!this.markup)\n return data;\n\n // restore original size for vp.\n ScreenViewport.setToParentSize(this.markup.vp.vpDiv);\n\n IModelApp.toolAdmin.markupView = undefined; // re-enable viewing tools for the view being marked-up\n this.markup.destroy();\n this.markup = undefined;\n // now restore the default tool and start it\n IModelApp.toolAdmin.defaultToolId = this._saveDefaultToolId;\n this._saveDefaultToolId = \"\";\n await IModelApp.toolAdmin.startDefaultTool();\n return data;\n }\n\n /** Call this method to initialize the Markup system.\n * It asynchronously loads the MarkupTools namespace for the prompts and tool names for the Markup system, and\n * also registers all of the Markup tools.\n * @return a Promise that may be awaited to ensure that the MarkupTools namespace had been loaded.\n * @note This method is automatically called every time you call [[start]]. Since the Markup tools cannot\n * start unless there is a Markup active, there's really no need to call this method directly.\n * The only virtue in doing so is to pre-load the Markup namespace if you have an opportunity to do so earlier in your\n * startup code.\n * @note This method may be called multiple times, but only the first time initiates the loading/registering. Subsequent\n * calls return the same Promise.\n */\n public static async initialize(): Promise<void> {\n if (undefined === this.namespace) { // only need to do this once\n this.namespace = \"MarkupTools\";\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\n IModelApp.tools.register(SelectTool, this.namespace);\n IModelApp.tools.registerModule(redlineTool, this.namespace);\n IModelApp.tools.registerModule(textTool, this.namespace);\n return namespacePromise;\n }\n return IModelApp.localization.getNamespacePromise(this.namespace)!; // so caller can make sure localized messages are ready.\n }\n\n /** convert the current markup SVG into a string, but don't include decorations or dynamics\n * @internal\n */\n protected static readMarkupSvg() {\n const markup = this.markup;\n if (!markup || !markup.svgContainer)\n return undefined;\n markup.svgDecorations!.remove(); // we don't want the decorations or dynamics to be included\n markup.svgDynamics!.remove();\n void IModelApp.toolAdmin.startDefaultTool();\n return markup.svgContainer.svg(); // string-ize the SVG data\n }\n\n /** convert the current markup SVG into a string (after calling readMarkupSvg) making sure width and height are specified.\n * @internal\n */\n protected static readMarkupSvgForDrawImage() {\n const markup = this.markup;\n if (!markup || !markup.svgContainer)\n return undefined;\n // Firefox requires width and height on top-level svg or drawImage does nothing, passing width/height to drawImage doesn't work.\n const rect = markup.markupDiv.getBoundingClientRect();\n markup.svgContainer.width(rect.width);\n markup.svgContainer.height(rect.height);\n return markup.svgContainer.svg(); // string-ize the SVG data\n }\n\n /** @internal */\n protected static async readMarkup(): Promise<MarkupData> {\n const result = this.props.result;\n let canvas = this.markup!.vp.readImageToCanvas();\n let svg, image;\n try {\n svg = this.readMarkupSvg(); // read the current svg data for the markup\n const svgForImage = (svg && result.imprintSvgOnImage ? this.readMarkupSvgForDrawImage() : undefined);\n if (svgForImage) {\n const svgImage = await imageElementFromImageSource(new ImageSource(svgForImage, ImageSourceFormat.Svg));\n canvas.getContext(\"2d\")!.drawImage(svgImage, 0, 0); // draw markup svg onto view's canvas2d\n }\n\n // is the source view too wide? If so, we need to scale the image down.\n if (canvas.width > result.maxWidth) {\n // yes, we have to scale it down, create a new canvas and set the new canvas' size\n const newCanvas = document.createElement(\"canvas\");\n newCanvas.width = result.maxWidth;\n newCanvas.height = canvas.height * (result.maxWidth / canvas.width);\n newCanvas.getContext(\"2d\")!.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, newCanvas.width, newCanvas.height);\n canvas = newCanvas; // return the image from adjusted canvas, not view canvas.\n }\n\n // return the markup data to be saved by the application.\n image = (!result.imageFormat ? undefined : canvas.toDataURL(result.imageFormat));\n } catch (e) {\n Logger.logError(`${FrontendLoggerCategory.Package}.markup`, \"Error creating image from svg\", BentleyError.getErrorProps(e));\n }\n return { rect: { width: canvas.width, height: canvas.height }, svg, image };\n }\n\n /** @internal */\n public static markupPrefix = \"markup-\";\n /** @internal */\n public static get dropShadowId() { return `${this.markupPrefix}dropShadow`; } // this is referenced in the markup Svg to apply the drop-shadow filter to all markup elements.\n /** @internal */\n public static get cornerId() { return `${this.markupPrefix}photoCorner`; }\n /** @internal */\n public static get containerClass() { return `${this.markupPrefix}container`; }\n /** @internal */\n public static get dynamicsClass() { return `${this.markupPrefix}dynamics`; }\n /** @internal */\n public static get decorationsClass() { return `${this.markupPrefix}decorations`; }\n /** @internal */\n public static get markupSvgClass() { return `${this.markupPrefix}svg`; }\n /** @internal */\n public static get boxedTextClass() { return `${this.markupPrefix}boxedText`; }\n /** @internal */\n public static get textClass() { return `${this.markupPrefix}text`; }\n /** @internal */\n public static get stretchHandleClass() { return `${this.markupPrefix}stretchHandle`; }\n /** @internal */\n public static get rotateLineClass() { return `${this.markupPrefix}rotateLine`; }\n /** @internal */\n public static get rotateHandleClass() { return `${this.markupPrefix}rotateHandle`; }\n /** @internal */\n public static get vertexHandleClass() { return `${this.markupPrefix}vertexHandle`; }\n /** @internal */\n public static get moveHandleClass() { return `${this.markupPrefix}moveHandle`; }\n /** @internal */\n public static get textOutlineClass() { return `${this.markupPrefix}textOutline`; }\n /** @internal */\n public static get textEditorClass() { return `${this.markupPrefix}textEditor`; }\n}\n\nconst removeSvgNamespace = (svg: Svg) => {\n svg.node.removeAttribute(\"xmlns:svgjs\");\n return svg;\n};\n\nconst newSvgElement = (name: string) => adopt(create(name));\n\n/**\n * The current markup being created/edited. Holds the SVG elements, plus the active [[MarkupTool]].\n * When starting a Markup, a new Div is added as a child of the ScreenViewport's vpDiv.\n * @public\n */\nexport class Markup {\n /** @internal */\n public readonly markupDiv: HTMLDivElement;\n /** Support undo/redo of markup operations */\n public readonly undo = new UndoManager();\n /** The set of currently selected markup elements */\n public readonly selected!: MarkupSelected;\n /** @internal */\n public readonly svgContainer?: Svg;\n /** @internal */\n public readonly svgMarkup?: G;\n /** @internal */\n public readonly svgDynamics?: G;\n /** @internal */\n public readonly svgDecorations?: G;\n\n /** create the drop-shadow filter in the Defs section of the supplied svg element */\n private createDropShadow(svg: Svg) {\n const filter = SVG(`#${MarkupApp.dropShadowId}`); // see if we already have one?\n if (filter)\n filter.remove(); // yes, remove it. This must be someone modifying the drop shadow properties\n\n // create a new filter, and add it to the Defs of the supplied svg\n svg.defs()\n .add(newSvgElement(\"filter\").id(MarkupApp.dropShadowId)\n .add(newSvgElement(\"feDropShadow\").attr(MarkupApp.props.dropShadow.attr)));\n }\n private addNested(className: string): G { return this.svgContainer!.group().addClass(className); }\n private addBorder() {\n const rect = this.svgContainer!.viewbox();\n const inset = MarkupApp.props.borderOutline[\"stroke-width\"];\n const cornerSize = inset * 6;\n const cornerPts = [0, 0, cornerSize, 0, cornerSize * .7, cornerSize * .3, cornerSize * .3, cornerSize * .3, cornerSize * .3, cornerSize * .7, 0, cornerSize];\n const decorations = this.svgDecorations!;\n const photoCorner = decorations.symbol().polygon(cornerPts).attr(MarkupApp.props.borderCorners).id(MarkupApp.cornerId);\n const cornerGroup = decorations.group();\n cornerGroup.rect(rect.width - inset, rect.height - inset).move(inset / 2, inset / 2).attr(MarkupApp.props.borderOutline);\n cornerGroup.use(photoCorner);\n cornerGroup.use(photoCorner).rotate(90).translate(rect.width - cornerSize, 0);\n cornerGroup.use(photoCorner).rotate(180).translate(rect.width - cornerSize, rect.height - cornerSize);\n cornerGroup.use(photoCorner).rotate(270).translate(0, rect.height - cornerSize);\n }\n\n /** Create a new Markup for the supplied ScreenViewport. Adds a new \"overlay-markup\" div into the \"vpDiv\"\n * of the viewport.\n * @note you must call destroy on this object at end of markup to remove the markup div.\n */\n public constructor(public vp: ScreenViewport, markupData?: MarkupSvgData) {\n this.markupDiv = vp.addNewDiv(\"overlay-markup\", true, 20); // this div goes on top of the canvas, but behind UI layers\n const rect = this.markupDiv.getBoundingClientRect();\n\n // First, see if there is a markup passed in as an argument\n if (markupData && markupData.svg) {\n this.markupDiv.innerHTML = markupData.svg; // make it a child of the markupDiv\n this.svgContainer = SVG(`.${MarkupApp.containerClass}`) as Svg | undefined; // get it in svg.js format\n this.svgMarkup = SVG(`.${MarkupApp.markupSvgClass}`) as G | undefined;\n if (!this.svgContainer || !this.svgMarkup) // if either isn't present, its not a valid markup\n return;\n removeSvgNamespace(this.svgContainer); // the SVG call above adds this - remove it\n this.svgMarkup.each(() => { }, true); // create an SVG.Element for each entry in the supplied markup.\n } else {\n // create the container that will be returned as the \"svg\" data for this markup\n this.svgContainer = SVG().addTo(this.markupDiv).addClass(MarkupApp.containerClass).viewbox(0, 0, rect.width, rect.height);\n removeSvgNamespace(this.svgContainer);\n this.svgMarkup = this.addNested(MarkupApp.markupSvgClass);\n }\n\n if (MarkupApp.props.dropShadow.enable) {\n this.createDropShadow(this.svgContainer);\n this.svgContainer.attr(\"filter\", `url(#${MarkupApp.dropShadowId})`);\n }\n\n /** add two nested groups for providing feedback during the markup session. These Svgs are removed before the data is returned. */\n this.svgDynamics = this.addNested(MarkupApp.dynamicsClass); // only for tool dynamics of SVG graphics.\n this.svgDecorations = this.addNested(MarkupApp.decorationsClass); // only for temporary decorations of SVG graphics.\n this.addBorder();\n this.selected = new MarkupSelected(this.svgDecorations);\n }\n\n /** Called when the Markup is destroyed */\n public destroy() { this.markupDiv.remove(); }\n /** Turn on picking the markup elements in the markup view */\n public enablePick() { this.markupDiv.style.pointerEvents = \"auto\"; }\n /** Turn off picking the markup elements in the markup view */\n public disablePick() { this.markupDiv.style.pointerEvents = \"none\"; }\n /** Change the default cursor for the markup view */\n public setCursor(cursor: string) { this.markupDiv.style.cursor = cursor; }\n /** Delete all the entries in the selection set, then empty it. */\n public deleteSelected() { this.selected.deleteAll(this.undo); }\n /** Bring all the entries in the selection set to the front. */\n public bringToFront() { this.selected.reposition(MarkupApp.getActionName(\"toFront\"), this.undo, (el) => el.front()); }\n /** Send all the entries in the selection set to the back. */\n public sendToBack() { this.selected.reposition(MarkupApp.getActionName(\"toBack\"), this.undo, (el) => el.back()); }\n /** Group all the entries in the selection set, then select the group. */\n public groupSelected() {\n if (undefined !== this.svgMarkup)\n this.selected.groupAll(this.undo);\n }\n\n /** Ungroup all the group entries in the selection set. */\n public ungroupSelected() {\n if (undefined !== this.svgMarkup)\n this.selected.ungroupAll(this.undo);\n }\n\n /** Check if the supplied MarkupElement is a group of MarkupText and the MarkupText's outline Rect.\n * @param el the markup element to check\n * @returns true if boxed text\n */\n public isBoxedText(el: MarkupElement): boolean {\n return el.type === \"g\" &&\n el.node.classList.length > 0 &&\n el.node.classList[0] === MarkupApp.boxedTextClass &&\n el.children().length === 2;\n }\n\n /** Get an existing or create a new reusable symbol representing an arrow head.\n * If a Marker for the supplied color and size already exists it is returned, otherwise a new Marker is created.\n * @param color the arrow head color\n * @param length the arrow head length\n * @param width the arrow head width\n * @note Flashing doesn't currently affect markers, need support for \"context-stroke\" and \"context-fill\". For now encode color in name...\n */\n public createArrowMarker(color: string, length: number, width: number): Marker {\n length = Math.ceil(length); // Don't allow \".\" in selector string...\n width = Math.ceil(width);\n const arrowMarkerId = `ArrowMarker${length}x${width}-${color}`;\n let marker = SVG(`#${arrowMarkerId}`) as Marker;\n if (null === marker) {\n marker = this.svgMarkup!.marker(length, width).id(arrowMarkerId);\n marker.polygon([0, 0, length, width * 0.5, 0, width]);\n marker.attr(\"orient\", \"auto-start-reverse\");\n marker.attr(\"overflow\", \"visible\"); // Don't clip the stroke that is being applied to allow the specified start/end to be used directly while hiding the arrow tail fully under the arrow head...\n marker.attr(\"refX\", length);\n marker.css({ stroke: color, fill: color });\n }\n return marker;\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  /** @packageDocumentation
2
2
  * @module MarkupTools
3
3
  */
4
- /// <reference path="SvgJsExt.d.ts" />
5
4
  import { XAndY } from "@itwin/core-geometry";
6
5
  import { BeTouchEvent, EventHandled, PrimitiveTool, Viewport } from "@itwin/core-frontend";
7
6
  import { G, Element as MarkupElement, Text as MarkupText } from "@svgdotjs/svg.js";
@@ -1 +1 @@
1
- {"version":3,"file":"MarkupTool.d.ts","sourceRoot":"","sources":["../../src/MarkupTool.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAY,YAAY,EAA2B,YAAY,EAAa,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,EAAE,CAAC,EAAqB,OAAO,IAAI,aAAa,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,8BAAsB,UAAW,SAAQ,aAAa;IAC7C,MAAM,EAAG,MAAM,CAAC;IACvB,OAAc,OAAO,SAA+B;IACpC,sBAAsB,IAAI,OAAO;IACjC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO;IAChF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ7B,aAAa;IAIb,WAAW;IACpB,aAAa;IAE1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAC5B,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAI7C,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAElB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMhF,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAOpC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAO1D;;;OAGG;IACI,WAAW,CAAC,EAAE,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS;IASxD,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAM7E,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE3D,gBAAgB;IACT,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU;CAU9C"}
1
+ {"version":3,"file":"MarkupTool.d.ts","sourceRoot":"","sources":["../../src/MarkupTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAY,YAAY,EAA2B,YAAY,EAAa,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,EAAE,CAAC,EAAqB,OAAO,IAAI,aAAa,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,8BAAsB,UAAW,SAAQ,aAAa;IAC7C,MAAM,EAAG,MAAM,CAAC;IACvB,OAAc,OAAO,SAA+B;IACpC,sBAAsB,IAAI,OAAO;IACjC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO;IAChF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ7B,aAAa;IAIb,WAAW;IACpB,aAAa;IAE1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAC5B,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAI7C,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAElB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMhF,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAOpC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAO1D;;;OAGG;IACI,WAAW,CAAC,EAAE,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS;IASxD,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAM7E,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE3D,gBAAgB;IACT,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU;CAU9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkupTool.js","sourceRoot":"","sources":["../../src/MarkupTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupTools\r\n */\r\n\r\nimport { XAndY } from \"@itwin/core-geometry\";\r\nimport { BeButton, BeTouchEvent, CoordinateLockOverrides, EventHandled, IModelApp, PrimitiveTool, Viewport } from \"@itwin/core-frontend\";\r\nimport { G, LinkedHTMLElement, Element as MarkupElement, Text as MarkupText } from \"@svgdotjs/svg.js\";\r\nimport { Markup, MarkupApp } from \"./Markup\";\r\n\r\n/** Base class for all tools that operate on Markup elements.\r\n * @public\r\n */\r\nexport abstract class MarkupTool extends PrimitiveTool {\r\n public markup!: Markup;\r\n public static toolKey = \"MarkupTools:tools.Markup.\";\r\n public override requireWriteableTarget(): boolean { return false; }\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp === IModelApp.toolAdmin.markupView); }\r\n public override async onInstall(): Promise<boolean> {\r\n if (undefined === MarkupApp.markup)\r\n return false;\r\n\r\n this.markup = MarkupApp.markup;\r\n return super.onInstall();\r\n }\r\n\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n public async onRestartTool() { return this.exitTool(); }\r\n\r\n protected showPrompt(): void { }\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.All; // Don't adjust point to ACS or grid...\r\n this.showPrompt();\r\n }\r\n protected outputMarkupPrompt(msg: string) { IModelApp.notifications.outputPromptByKey(MarkupTool.toolKey + msg); }\r\n\r\n public override async onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise<EventHandled> {\r\n if (startEv.isSingleTouch)\r\n await IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev);\r\n return EventHandled.Yes; // View tools are not allowed during redlining; use touch events to create markup and don't pass event to IdleTool...\r\n }\r\n\r\n public override async onTouchMove(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchMoveToMotion(ev); }\r\n public override async onTouchComplete(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev); }\r\n public override async onTouchCancel(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, BeButton.Reset); }\r\n\r\n public override async undoPreviousStep(): Promise<boolean> {\r\n if (await this.onUndoPreviousStep()) // first see if this tool has an \"oops\" operation.\r\n return true; // yes, we're done\r\n this.markup.undo.doUndo(); // otherwise undo the last change by previous tools\r\n return true;\r\n }\r\n\r\n public override async redoPreviousStep(): Promise<boolean> {\r\n if (await this.onRedoPreviousStep())\r\n return true;\r\n this.markup.undo.doRedo();\r\n return true;\r\n }\r\n\r\n /** Find the topmost MarkupElement at the specified point in the markup view.\r\n * @param pt the point in view coordinates\r\n * @returns The topmost element, or undefined if no elements under pt.\r\n */\r\n public pickElement(pt: XAndY): MarkupElement | undefined {\r\n const markup = this.markup;\r\n const rect = markup.markupDiv.getBoundingClientRect();\r\n const node = document.elementFromPoint(pt.x + rect.left, pt.y + rect.top) as LinkedHTMLElement | null;\r\n if (!node || !node.instance)\r\n return undefined;\r\n const el = node.instance;\r\n return el.getChildOrGroupOf(markup.svgMarkup!);\r\n }\r\n protected setCurrentStyle(element: MarkupElement, canBeFilled: boolean): void {\r\n element.css(MarkupApp.props.active.element);\r\n if (!canBeFilled)\r\n element.css({ fill: \"none\" });\r\n }\r\n\r\n protected setCurrentTextStyle(element: MarkupElement): void { element.css(MarkupApp.props.active.text); }\r\n\r\n /** @internal */\r\n public createBoxedText(g: G, text: MarkupText) {\r\n const boxedText = g.group().addClass(MarkupApp.boxedTextClass);\r\n const outline = text.getOutline(3);\r\n this.setCurrentStyle(outline, true);\r\n outline.css({ \"stroke-width\": 1 });\r\n outline.addTo(boxedText);\r\n text.addTo(boxedText); // make sure the text is on top\r\n return boxedText;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"MarkupTool.js","sourceRoot":"","sources":["../../src/MarkupTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupTools\n */\n\nimport { XAndY } from \"@itwin/core-geometry\";\nimport { BeButton, BeTouchEvent, CoordinateLockOverrides, EventHandled, IModelApp, PrimitiveTool, Viewport } from \"@itwin/core-frontend\";\nimport { G, LinkedHTMLElement, Element as MarkupElement, Text as MarkupText } from \"@svgdotjs/svg.js\";\nimport { Markup, MarkupApp } from \"./Markup\";\n\n/** Base class for all tools that operate on Markup elements.\n * @public\n */\nexport abstract class MarkupTool extends PrimitiveTool {\n public markup!: Markup;\n public static toolKey = \"MarkupTools:tools.Markup.\";\n public override requireWriteableTarget(): boolean { return false; }\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp === IModelApp.toolAdmin.markupView); }\n public override async onInstall(): Promise<boolean> {\n if (undefined === MarkupApp.markup)\n return false;\n\n this.markup = MarkupApp.markup;\n return super.onInstall();\n }\n\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n public override async onUnsuspend() { this.showPrompt(); }\n public async onRestartTool() { return this.exitTool(); }\n\n protected showPrompt(): void { }\n protected setupAndPromptForNextAction(): void {\n IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.All; // Don't adjust point to ACS or grid...\n this.showPrompt();\n }\n protected outputMarkupPrompt(msg: string) { IModelApp.notifications.outputPromptByKey(MarkupTool.toolKey + msg); }\n\n public override async onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise<EventHandled> {\n if (startEv.isSingleTouch)\n await IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev);\n return EventHandled.Yes; // View tools are not allowed during redlining; use touch events to create markup and don't pass event to IdleTool...\n }\n\n public override async onTouchMove(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchMoveToMotion(ev); }\n public override async onTouchComplete(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev); }\n public override async onTouchCancel(ev: BeTouchEvent): Promise<void> { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, BeButton.Reset); }\n\n public override async undoPreviousStep(): Promise<boolean> {\n if (await this.onUndoPreviousStep()) // first see if this tool has an \"oops\" operation.\n return true; // yes, we're done\n this.markup.undo.doUndo(); // otherwise undo the last change by previous tools\n return true;\n }\n\n public override async redoPreviousStep(): Promise<boolean> {\n if (await this.onRedoPreviousStep())\n return true;\n this.markup.undo.doRedo();\n return true;\n }\n\n /** Find the topmost MarkupElement at the specified point in the markup view.\n * @param pt the point in view coordinates\n * @returns The topmost element, or undefined if no elements under pt.\n */\n public pickElement(pt: XAndY): MarkupElement | undefined {\n const markup = this.markup;\n const rect = markup.markupDiv.getBoundingClientRect();\n const node = document.elementFromPoint(pt.x + rect.left, pt.y + rect.top) as LinkedHTMLElement | null;\n if (!node || !node.instance)\n return undefined;\n const el = node.instance;\n return el.getChildOrGroupOf(markup.svgMarkup!);\n }\n protected setCurrentStyle(element: MarkupElement, canBeFilled: boolean): void {\n element.css(MarkupApp.props.active.element);\n if (!canBeFilled)\n element.css({ fill: \"none\" });\n }\n\n protected setCurrentTextStyle(element: MarkupElement): void { element.css(MarkupApp.props.active.text); }\n\n /** @internal */\n public createBoxedText(g: G, text: MarkupText) {\n const boxedText = g.group().addClass(MarkupApp.boxedTextClass);\n const outline = text.getOutline(3);\n this.setCurrentStyle(outline, true);\n outline.css({ \"stroke-width\": 1 });\n outline.addTo(boxedText);\n text.addTo(boxedText); // make sure the text is on top\n return boxedText;\n }\n\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  /** @packageDocumentation
2
2
  * @module MarkupTools
3
3
  */
4
- /// <reference path="SvgJsExt.d.ts" />
5
4
  import { Point3d } from "@itwin/core-geometry";
6
5
  import { BeButtonEvent, EventHandled } from "@itwin/core-frontend";
7
6
  import { G, Marker, Element as MarkupElement } from "@svgdotjs/svg.js";
@@ -1 +1 @@
1
- {"version":3,"file":"RedlineTool.d.ts","sourceRoot":"","sources":["../../src/RedlineTool.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAIH,OAAO,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,aAAa,EAAsC,YAAY,EAEhE,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,8BAAsB,WAAY,SAAQ,UAAU;IAClD,SAAS,CAAC,UAAU,SAAK;IACzB,SAAS,CAAC,gBAAgB,SAAK;IAC/B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,CAAM;IAE3C,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa;IAMnC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa;cACpB,2BAA2B,IAAI,IAAI;IAMtD,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IACrF,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAEnC,aAAa;IACb,SAAS;IAET,cAAc;IAKd,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAe1D,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAKhF,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI;CAoB1F;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,WAAW;IACvC,OAAuB,MAAM,SAAiB;IAC9C,OAAuB,QAAQ,SAAe;cAE3B,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAU5F;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAIhC,SAAS,CAAC,aAAa,CAAC;IAHpC,OAAuB,MAAM,SAAsB;IACnD,OAAuB,QAAQ,SAAoB;gBAE7B,aAAa,CAAC,oBAAQ;cAEzB,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAkB5F;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAI9B,SAAS,CAAC,SAAS,CAAC;IAHhC,OAAuB,MAAM,SAAoB;IACjD,OAAuB,QAAQ,SAAkB;gBAE3B,SAAS,CAAC,oBAAQ;cAErB,UAAU,IAAI,IAAI;IAErC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;cA4BhG,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAa5F;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,OAAuB,MAAM,SAAkB;IAC/C,OAAuB,QAAQ,SAAgB;IAC/C,SAAS,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;cAEd,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;cAwBxE,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;CAIlE;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAuB,MAAM,SAAmB;IAChD,OAAuB,QAAQ,SAAiB;cAE7B,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAa5F;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAuB,MAAM,SAAoB;IACjD,OAAuB,QAAQ,SAAkB;cAE9B,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAgB5F;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,WAAW;IAO5B,SAAS,CAAC,SAAS,CAAC;IANhC,OAAuB,MAAM,SAAkB;IAC/C,OAAuB,QAAQ,SAAkB;IAEjD;;OAEG;gBACmB,SAAS,CAAC,oBAAQ;cAErB,UAAU,IAAI,IAAI;IAErC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;cAKpC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;CAoB5F;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAuB,MAAM,SAAqB;IAClD,OAAuB,QAAQ,SAAmB;IAClD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,UAAiB;cAEjC,UAAU,IAAI,IAAI;cAClB,2BAA2B,IAAI,IAAI;IAMtD,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;cAOjD,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAoCrE,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CASjF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAuB,MAAM,SAAmB;IAChD,OAAuB,QAAQ,SAAe;IAC9C,SAAS,CAAC,eAAe,SAAO;cAEb,UAAU,IAAI,IAAI;cAElB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAsBrE,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtE;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;IAK7B,SAAS,CAAC,WAAW,CAAC;IAAU,SAAS,CAAC,kBAAkB,CAAC;IAJzE,OAAuB,MAAM,SAAmB;IAChD,OAAuB,QAAQ,SAAiB;IAChD,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;gBAEZ,WAAW,CAAC,oBAAQ,EAAY,kBAAkB,CAAC,qBAAS;IAE5D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;cAMhC,UAAU,IAAI,IAAI;cAIlB,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IA6CrE,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IASxD,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;cAK7D,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;CAIlE"}
1
+ {"version":3,"file":"RedlineTool.d.ts","sourceRoot":"","sources":["../../src/RedlineTool.ts"],"names":[],"mappings":"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"}