kritzel-stencil 0.0.145 → 0.0.146

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 (37) hide show
  1. package/dist/cjs/{default-text-tool.config-D2dP2xyB.js → default-text-tool.config-C0W0noF9.js} +54 -34
  2. package/dist/cjs/default-text-tool.config-C0W0noF9.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/kritzel-color_22.cjs.entry.js +11 -37
  5. package/dist/collection/classes/objects/text.class.js +23 -23
  6. package/dist/collection/classes/objects/text.class.js.map +1 -1
  7. package/dist/collection/classes/tools/text-tool.class.js +3 -10
  8. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  9. package/dist/components/index.js +3 -3
  10. package/dist/components/kritzel-controls.js +1 -1
  11. package/dist/components/kritzel-editor.js +3 -3
  12. package/dist/components/kritzel-engine.js +1 -1
  13. package/dist/components/{p-ByRC-aCs.js → p-CwHz5s2a.js} +3 -3
  14. package/dist/components/{p-ByRC-aCs.js.map → p-CwHz5s2a.js.map} +1 -1
  15. package/dist/components/{p-BgRGxOIE.js → p-DPN0PZvw.js} +3 -3
  16. package/dist/components/{p-BgRGxOIE.js.map → p-DPN0PZvw.js.map} +1 -1
  17. package/dist/components/{p-COGwCbe1.js → p-G2HGJcNm.js} +28 -34
  18. package/dist/components/p-G2HGJcNm.js.map +1 -0
  19. package/dist/esm/{default-text-tool.config-CsZAW1Cu.js → default-text-tool.config-nXXHSTK9.js} +54 -35
  20. package/dist/esm/default-text-tool.config-nXXHSTK9.js.map +1 -0
  21. package/dist/esm/index.js +2 -2
  22. package/dist/esm/kritzel-color_22.entry.js +1 -27
  23. package/dist/stencil/index.esm.js +1 -1
  24. package/dist/stencil/p-f8a8a8d7.entry.js +2 -0
  25. package/dist/stencil/p-f8a8a8d7.entry.js.map +1 -0
  26. package/dist/stencil/p-nXXHSTK9.js +2 -0
  27. package/dist/stencil/p-nXXHSTK9.js.map +1 -0
  28. package/dist/stencil/stencil.esm.js +1 -1
  29. package/dist/types/classes/objects/text.class.d.ts +1 -0
  30. package/package.json +15 -14
  31. package/dist/cjs/default-text-tool.config-D2dP2xyB.js.map +0 -1
  32. package/dist/components/p-COGwCbe1.js.map +0 -1
  33. package/dist/esm/default-text-tool.config-CsZAW1Cu.js.map +0 -1
  34. package/dist/stencil/p-27adbf9d.entry.js +0 -2
  35. package/dist/stencil/p-27adbf9d.entry.js.map +0 -1
  36. package/dist/stencil/p-CsZAW1Cu.js +0 -2
  37. package/dist/stencil/p-CsZAW1Cu.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var defaultTextTool_config = require('./default-text-tool.config-D2dP2xyB.js');
3
+ var defaultTextTool_config = require('./default-text-tool.config-C0W0noF9.js');
4
4
 
5
5
  /* eslint-env browser */
6
6
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-Cj__YTlG.js');
4
- var defaultTextTool_config = require('./default-text-tool.config-D2dP2xyB.js');
4
+ var defaultTextTool_config = require('./default-text-tool.config-C0W0noF9.js');
5
5
 
6
6
  const kritzelColorCss = ":host{display:flex}.checkerboard-bg{background:repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;position:relative;overflow:hidden}.color-circle{width:24px;height:24px;border-radius:50%;box-sizing:border-box;display:block}.color-circle.white{border:1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc)}";
7
7
 
@@ -247,32 +247,6 @@ const KritzelControlTextConfig = class {
247
247
  };
248
248
  KritzelControlTextConfig.style = kritzelControlTextConfigCss;
249
249
 
250
- class KritzelDevicesHelper {
251
- static isTouchDevice() {
252
- return window.matchMedia('(any-pointer: coarse)').matches;
253
- }
254
- static isAndroid() {
255
- return /android/i.test(navigator.userAgent);
256
- }
257
- static isIOS() {
258
- return /iPad|iPhone|iPod/.test(navigator.userAgent);
259
- }
260
- static detectOS() {
261
- if (this.isIOS()) {
262
- return 'iOS';
263
- }
264
- else if (this.isAndroid()) {
265
- return 'Android';
266
- }
267
- else {
268
- return 'Other';
269
- }
270
- }
271
- static isFirefox() {
272
- return /firefox/i.test(navigator.userAgent);
273
- }
274
- }
275
-
276
250
  const kritzelControlsCss = ":host{display:flex;flex-direction:column;user-select:none}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;outline:none;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-divider{width:var(--kritzel-controls-divider-width, 1px);height:var(--kritzel-controls-divider-height, 24px);background-color:var(--kritzel-controls-divider-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;width:40px;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:50%}.kritzel-config:focus{outline:var(--kritzel-menu-focus-outline, 2px solid #e3e3e3)}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{position:fixed;bottom:56px;left:50%;transform:translateX(-50%);z-index:10001}";
277
251
 
278
252
  const KritzelControls = class {
@@ -287,7 +261,7 @@ const KritzelControls = class {
287
261
  isControlsReady;
288
262
  firstConfig = null;
289
263
  isTooltipVisible = false;
290
- isTouchDevice = KritzelDevicesHelper.isTouchDevice();
264
+ isTouchDevice = defaultTextTool_config.KritzelDevicesHelper.isTouchDevice();
291
265
  handleDocumentClick(event) {
292
266
  const element = event.target;
293
267
  if (!this.kritzelEngine || element.closest('.kritzel-tooltip')) {
@@ -833,7 +807,7 @@ const KritzelEditor = class {
833
807
  });
834
808
  }
835
809
  setOsSpecificCssVariables() {
836
- const os = KritzelDevicesHelper.detectOS();
810
+ const os = defaultTextTool_config.KritzelDevicesHelper.detectOS();
837
811
  switch (os) {
838
812
  case 'iOS':
839
813
  // iOS specific adjustments
@@ -2221,7 +2195,7 @@ const KritzelEngine = class {
2221
2195
  if (this.core.store.isDisabled) {
2222
2196
  return;
2223
2197
  }
2224
- if (KritzelDevicesHelper.isTouchDevice()) {
2198
+ if (defaultTextTool_config.KritzelDevicesHelper.isTouchDevice()) {
2225
2199
  defaultTextTool_config.KritzelEventHelper.onLongPress(ev, (event) => this.longpress.emit(event));
2226
2200
  }
2227
2201
  this.host.setPointerCapture(ev.pointerId);
@@ -2550,10 +2524,10 @@ const KritzelEngine = class {
2550
2524
  } })), KritzelClassHelper.isInstanceOf(object, 'KritzelSelectionBox') && (index.h("div", { ref: el => object.mount(el), style: {
2551
2525
  width: '100%',
2552
2526
  height: '100%',
2553
- backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',
2554
- borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',
2555
- borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',
2556
- borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',
2527
+ backgroundColor: defaultTextTool_config.KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',
2528
+ borderWidth: defaultTextTool_config.KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',
2529
+ borderStyle: defaultTextTool_config.KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',
2530
+ borderColor: defaultTextTool_config.KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',
2557
2531
  } }))), index.h("line", { x1: "0", y1: "0", x2: object.totalWidth, y2: "0", style: {
2558
2532
  stroke: 'var(--kritzel-selection-border-color, #007AFF)',
2559
2533
  strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,
@@ -2823,7 +2797,7 @@ const KritzelMenuItem = class {
2823
2797
  focusInput() {
2824
2798
  if (this.item.isEditing && this.inputRef && !this.isDirty) {
2825
2799
  this.inputRef.focus();
2826
- if (KritzelDevicesHelper.isIOS()) {
2800
+ if (defaultTextTool_config.KritzelDevicesHelper.isIOS()) {
2827
2801
  const length = this.inputRef.value.length;
2828
2802
  this.inputRef.setSelectionRange(length, length);
2829
2803
  }
@@ -2840,7 +2814,7 @@ const KritzelMenuItem = class {
2840
2814
  this.focusInput();
2841
2815
  }
2842
2816
  setDeviceSpecificStyles = () => {
2843
- const isTouchDevice = KritzelDevicesHelper.isTouchDevice();
2817
+ const isTouchDevice = defaultTextTool_config.KritzelDevicesHelper.isTouchDevice();
2844
2818
  if (isTouchDevice) {
2845
2819
  this.host.style.setProperty('--kritzel-menu-item-overlay-background-color', 'transparent');
2846
2820
  this.host.style.setProperty('--kritzel-menu-item-button-hover-background-color', 'transparent');
@@ -3172,7 +3146,7 @@ const KritzelSplitButton = class {
3172
3146
  menuOpen;
3173
3147
  menuClose;
3174
3148
  isMenuOpen = false;
3175
- isTouchDevice = KritzelDevicesHelper.isTouchDevice();
3149
+ isTouchDevice = defaultTextTool_config.KritzelDevicesHelper.isTouchDevice();
3176
3150
  anchorElement;
3177
3151
  menuScrollTop = 0;
3178
3152
  splitMenuButtonRef;
@@ -1,6 +1,7 @@
1
1
  import { KritzelToolRegistry } from "../registries/tool.registry";
2
2
  import { KritzelBaseObject } from "./base-object.class";
3
3
  import { KritzelKeyboardHelper } from "../../helpers/keyboard.helper";
4
+ import { KritzelDevicesHelper } from "../../helpers/devices.helper";
4
5
  import { EditorState, TextSelection } from "prosemirror-state";
5
6
  import { EditorView } from "prosemirror-view";
6
7
  import { Schema } from "prosemirror-model";
@@ -100,17 +101,12 @@ export class KritzelText extends KritzelBaseObject {
100
101
  }),
101
102
  editable: () => false,
102
103
  dispatchTransaction: transaction => {
103
- // Apply the transaction to get the new state
104
104
  const newState = this.editor.state.apply(transaction);
105
- // Update the editor state first
106
105
  this.editor.updateState(newState);
107
- // Only update content and adjust size if the document actually changed
108
- // AND it's not from a remote source (to prevent infinite loops)
109
106
  if (transaction.docChanged) {
110
107
  this.content = newState.doc.toJSON();
111
108
  this.adjustSizeOnInput();
112
109
  if (!transaction.getMeta('fromRemote')) {
113
- // Mark updates as temporary while editing - they'll be consolidated on save
114
110
  this._core.store.state.objectsMap.update(this, { temporary: true });
115
111
  }
116
112
  }
@@ -122,7 +118,6 @@ export class KritzelText extends KritzelBaseObject {
122
118
  if (this.editor && content) {
123
119
  const newDoc = this.editor.state.schema.nodeFromJSON(content);
124
120
  const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);
125
- // Mark this transaction as coming from remote/external source
126
121
  tr.setMeta('fromRemote', true);
127
122
  this.editor.dispatch(tr);
128
123
  }
@@ -170,39 +165,46 @@ export class KritzelText extends KritzelBaseObject {
170
165
  focus(coords) {
171
166
  if (this.editor) {
172
167
  const doc = this.editor.state.doc;
173
- if (coords) {
168
+ if (coords.x && coords.y) {
174
169
  const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });
175
170
  if (pos) {
176
171
  this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));
177
172
  this.editor.focus();
173
+ if (KritzelDevicesHelper.isIOS()) {
174
+ this.scrollIntoViewOnIOS();
175
+ }
178
176
  return;
179
177
  }
180
178
  }
181
179
  const end = Math.max(1, doc.content.size - 1);
182
180
  this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));
183
181
  this.editor.focus();
182
+ if (KritzelDevicesHelper.isIOS()) {
183
+ this.scrollIntoViewOnIOS();
184
+ }
184
185
  }
185
186
  }
187
+ scrollIntoViewOnIOS() {
188
+ setTimeout(() => {
189
+ if (this.editor && this.editor.dom) {
190
+ this.editor.dom.scrollIntoView({
191
+ behavior: 'smooth',
192
+ block: 'center',
193
+ inline: 'nearest'
194
+ });
195
+ }
196
+ }, 300);
197
+ }
186
198
  edit(event) {
187
199
  KritzelKeyboardHelper.disableInteractiveWidget();
188
200
  this.uneditedObject = this.clone();
189
201
  this._core.store.setState('activeTool', KritzelToolRegistry.getTool('text'));
190
- if (this.editor) {
191
- this.editor.setProps({ editable: () => true });
192
- }
202
+ this.editor.setProps({ editable: () => true });
193
203
  this.isEditing = true;
194
204
  this._core.rerender();
195
- requestAnimationFrame(() => {
196
- this.adjustSizeOnInput();
197
- // Focus after the DOM has been updated
198
- if (event) {
199
- this.focus({ x: event.clientX, y: event.clientY });
200
- }
201
- else {
202
- this.focus();
203
- }
204
- KritzelKeyboardHelper.enableInteractiveWidget();
205
- });
205
+ this.adjustSizeOnInput();
206
+ this.focus({ x: event?.clientX, y: event?.clientY });
207
+ KritzelKeyboardHelper.enableInteractiveWidget();
206
208
  }
207
209
  save() {
208
210
  requestAnimationFrame(() => this.adjustSizeOnInput());
@@ -210,9 +212,7 @@ export class KritzelText extends KritzelBaseObject {
210
212
  this.editor.setProps({ editable: () => false });
211
213
  this.editor.dom.blur();
212
214
  this.isEditing = false;
213
- // Consolidate all temporary keystrokes into a single undo item
214
215
  this._core.store.state.objectsMap.consolidateTemporaryItems();
215
- // Final update with normal origin
216
216
  this._core.store.state.objectsMap.update(this);
217
217
  }
218
218
  handlePointerDown(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"text.class.js","sourceRoot":"","sources":["../../../src/classes/objects/text.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelCore } from '../core/core.class';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\nimport { EditorState, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { schema } from 'prosemirror-schema-basic';\r\nimport { addListNodes } from 'prosemirror-schema-list';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { baseKeymap } from 'prosemirror-commands';\r\nexport class KritzelText extends KritzelBaseObject<HTMLDivElement> {\r\n override __class__: string = 'KritzelText';\r\n\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 8;\r\n fontColor: string = '#000000';\r\n initialWidth: number = 1;\r\n initialHeight: number = 1;\r\n\r\n scale: number = 1;\r\n scaleFactor: number = 1;\r\n\r\n isDebugInfoVisible: boolean = true;\r\n isEditable: boolean = true;\r\n isEditing: boolean = false;\r\n\r\n editor: EditorView | null = null;\r\n content: any = null;\r\n\r\n private readonly _schema: Schema = new Schema({\r\n nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),\r\n marks: schema.spec.marks,\r\n });\r\n\r\n uneditedObject: KritzelText | null = null;\r\n\r\n readonly rows: number = 1;\r\n\r\n get isEmpty(): boolean {\r\n if (!this.editor) {\r\n return true;\r\n }\r\n\r\n const doc = this.editor.state.doc;\r\n\r\n if (doc.content.size === 0) {\r\n return true;\r\n }\r\n\r\n const text = doc.textContent.trim();\r\n return text.length === 0;\r\n }\r\n\r\n constructor(config?: {\r\n translateX?: number;\r\n translateY?: number;\r\n fontSize?: number;\r\n fontFamily?: string;\r\n fontColor?: string;\r\n height?: number;\r\n width?: number;\r\n scale?: number;\r\n initialWidth?: number;\r\n initialHeight?: number;\r\n scaleX?: number;\r\n scaleY?: number;\r\n }) {\r\n super();\r\n\r\n if (config) {\r\n this.translateX = config.translateX || 0;\r\n this.translateY = config.translateY || 0;\r\n this.fontSize = config.fontSize || 8;\r\n this.fontFamily = config.fontFamily || 'Arial';\r\n this.fontColor = config.fontColor || '#000000';\r\n this.width = this.initialWidth / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.height = (this.fontSize * 1.2) / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.scale = config.scale || 1;\r\n this.scaleFactor = config.scaleX ?? 1;\r\n }\r\n }\r\n\r\n static override create(core: KritzelCore, fontSize?: number, fontFamily?: string): KritzelText {\r\n const object = new KritzelText();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.fontSize = fontSize;\r\n object.fontFamily = fontFamily;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.width = object.initialWidth / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.height = (object.fontSize * 1.2) / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.backgroundColor = 'transparent';\r\n object.initialWidth = object.width;\r\n object.initialHeight = object.height;\r\n object.scaleFactor = 1;\r\n object.scale = object._core.store.state.scale;\r\n object.zIndex = core.store.currentZIndex;\r\n object.editor = object.createEditor();\r\n\r\n return object;\r\n }\r\n\r\n override mount(element: HTMLDivElement): void {\r\n if (element === null || this.isInViewport() === false) {\r\n return;\r\n }\r\n\r\n if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.elementRef.style.fontFamily = this.fontFamily;\r\n this.elementRef.style.fontSize = `${this.fontSize}pt`;\r\n this.elementRef.style.color = this.fontColor;\r\n this.elementRef.style.whiteSpace = 'pre-wrap';\r\n this.elementRef.style.wordWrap = 'break-word';\r\n this.elementRef.innerHTML = '';\r\n this.elementRef.appendChild(this.editor.dom);\r\n\r\n this.isMounted = true;\r\n\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n }\r\n\r\n private createEditor(): EditorView {\r\n const doc = this._schema.node('doc', null, [this._schema.node('paragraph')]);\r\n\r\n return new EditorView(null, {\r\n state: EditorState.create({\r\n doc: doc,\r\n plugins: [keymap(baseKeymap)],\r\n }),\r\n editable: () => false,\r\n dispatchTransaction: transaction => {\r\n // Apply the transaction to get the new state\r\n const newState = this.editor.state.apply(transaction);\r\n\r\n // Update the editor state first\r\n this.editor.updateState(newState);\r\n\r\n // Only update content and adjust size if the document actually changed\r\n // AND it's not from a remote source (to prevent infinite loops)\r\n if (transaction.docChanged) {\r\n this.content = newState.doc.toJSON();\r\n this.adjustSizeOnInput();\r\n\r\n if (!transaction.getMeta('fromRemote')) {\r\n // Mark updates as temporary while editing - they'll be consolidated on save\r\n this._core.store.state.objectsMap.update(this, { temporary: true });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n\r\n public setContent(content: any): void {\r\n this.content = content;\r\n\r\n if (this.editor && content) {\r\n const newDoc = this.editor.state.schema.nodeFromJSON(content);\r\n const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);\r\n // Mark this transaction as coming from remote/external source\r\n tr.setMeta('fromRemote', true);\r\n this.editor.dispatch(tr);\r\n }\r\n }\r\n\r\n adjustSizeOnInput(): void {\r\n const element = this.elementRef;\r\n\r\n if (element && this.isMounted && element.scrollWidth > 0) {\r\n const previousTotalWidth = this.totalWidth;\r\n const previousTotalHeight = this.totalHeight;\r\n\r\n const newWidth = element.scrollWidth;\r\n const newHeight = element.scrollHeight;\r\n\r\n this.width = newWidth * this.scaleFactor;\r\n this.height = newHeight * this.scaleFactor;\r\n\r\n if (this.rotation !== 0) {\r\n const newTotalWidth = this.totalWidth;\r\n const newTotalHeight = this.totalHeight;\r\n\r\n const deltaWidth = (newTotalWidth - previousTotalWidth) / 2 / this.scale;\r\n const deltaHeight = (newTotalHeight - previousTotalHeight) / 2 / this.scale;\r\n\r\n if (deltaWidth !== 0 || deltaHeight !== 0) {\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n const rotatedDeltaX = cos * deltaWidth - sin * deltaHeight;\r\n const rotatedDeltaY = sin * deltaWidth + cos * deltaHeight;\r\n\r\n this.translateX += rotatedDeltaX - deltaWidth;\r\n this.translateY += rotatedDeltaY - deltaHeight;\r\n }\r\n }\r\n }\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const originalWidth = this.width / this.scaleFactor;\r\n const originalHeight = this.height / this.scaleFactor;\r\n\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n this.scaleFactor = Math.min(scaleX, scaleY);\r\n\r\n this.width = originalWidth * this.scaleFactor;\r\n this.height = originalHeight * this.scaleFactor;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n focus(coords?: { x: number; y: number }): void {\r\n if (this.editor) {\r\n const doc = this.editor.state.doc;\r\n\r\n if (coords) {\r\n const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });\r\n if (pos) {\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));\r\n this.editor.focus();\r\n return;\r\n }\r\n }\r\n\r\n const end = Math.max(1, doc.content.size - 1);\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));\r\n this.editor.focus();\r\n }\r\n }\r\n\r\n edit(event?: PointerEvent): void {\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n this.uneditedObject = this.clone() as KritzelText;\r\n\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n\r\n if (this.editor) {\r\n this.editor.setProps({ editable: () => true });\r\n }\r\n\r\n this.isEditing = true;\r\n\r\n this._core.rerender();\r\n\r\n requestAnimationFrame(() => {\r\n this.adjustSizeOnInput();\r\n\r\n // Focus after the DOM has been updated\r\n if (event) {\r\n this.focus({ x: event.clientX, y: event.clientY });\r\n } else {\r\n this.focus();\r\n }\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\r\n });\r\n }\r\n\r\n save(): void {\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n\r\n this.content = this.editor.state.doc.toJSON();\r\n this.editor.setProps({ editable: () => false });\r\n this.editor.dom.blur();\r\n\r\n this.isEditing = false;\r\n\r\n // Consolidate all temporary keystrokes into a single undo item\r\n this._core.store.state.objectsMap.consolidateTemporaryItems();\r\n \r\n // Final update with normal origin\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n override copy(): KritzelText {\r\n const copiedObject = super.copy() as KritzelText;\r\n copiedObject.editor = copiedObject.createEditor();\r\n\r\n if (this.content) {\r\n copiedObject.setContent(this.content);\r\n }\r\n\r\n return copiedObject;\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, _schema, element, totalWidth, totalHeight, editor, uneditedObject, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<KritzelText>(object: any): KritzelText {\r\n super.deserialize<KritzelText>(object);\r\n if (object.content) {\r\n this.setContent(object.content);\r\n }\r\n return this as unknown as KritzelText;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"text.class.js","sourceRoot":"","sources":["../../../src/classes/objects/text.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelCore } from '../core/core.class';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\nimport { KritzelDevicesHelper } from '../../helpers/devices.helper';\r\nimport { EditorState, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { schema } from 'prosemirror-schema-basic';\r\nimport { addListNodes } from 'prosemirror-schema-list';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { baseKeymap } from 'prosemirror-commands';\r\nexport class KritzelText extends KritzelBaseObject<HTMLDivElement> {\r\n override __class__: string = 'KritzelText';\r\n\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 8;\r\n fontColor: string = '#000000';\r\n initialWidth: number = 1;\r\n initialHeight: number = 1;\r\n\r\n scale: number = 1;\r\n scaleFactor: number = 1;\r\n\r\n isDebugInfoVisible: boolean = true;\r\n isEditable: boolean = true;\r\n isEditing: boolean = false;\r\n\r\n editor: EditorView | null = null;\r\n content: any = null;\r\n\r\n private readonly _schema: Schema = new Schema({\r\n nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),\r\n marks: schema.spec.marks,\r\n });\r\n\r\n uneditedObject: KritzelText | null = null;\r\n\r\n readonly rows: number = 1;\r\n\r\n get isEmpty(): boolean {\r\n if (!this.editor) {\r\n return true;\r\n }\r\n\r\n const doc = this.editor.state.doc;\r\n\r\n if (doc.content.size === 0) {\r\n return true;\r\n }\r\n\r\n const text = doc.textContent.trim();\r\n return text.length === 0;\r\n }\r\n\r\n constructor(config?: {\r\n translateX?: number;\r\n translateY?: number;\r\n fontSize?: number;\r\n fontFamily?: string;\r\n fontColor?: string;\r\n height?: number;\r\n width?: number;\r\n scale?: number;\r\n initialWidth?: number;\r\n initialHeight?: number;\r\n scaleX?: number;\r\n scaleY?: number;\r\n }) {\r\n super();\r\n\r\n if (config) {\r\n this.translateX = config.translateX || 0;\r\n this.translateY = config.translateY || 0;\r\n this.fontSize = config.fontSize || 8;\r\n this.fontFamily = config.fontFamily || 'Arial';\r\n this.fontColor = config.fontColor || '#000000';\r\n this.width = this.initialWidth / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.height = (this.fontSize * 1.2) / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.scale = config.scale || 1;\r\n this.scaleFactor = config.scaleX ?? 1;\r\n }\r\n }\r\n\r\n static override create(core: KritzelCore, fontSize?: number, fontFamily?: string): KritzelText {\r\n const object = new KritzelText();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.fontSize = fontSize;\r\n object.fontFamily = fontFamily;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.width = object.initialWidth / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.height = (object.fontSize * 1.2) / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.backgroundColor = 'transparent';\r\n object.initialWidth = object.width;\r\n object.initialHeight = object.height;\r\n object.scaleFactor = 1;\r\n object.scale = object._core.store.state.scale;\r\n object.zIndex = core.store.currentZIndex;\r\n object.editor = object.createEditor();\r\n\r\n return object;\r\n }\r\n\r\n override mount(element: HTMLDivElement): void {\r\n if (element === null || this.isInViewport() === false) {\r\n return;\r\n }\r\n\r\n if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.elementRef.style.fontFamily = this.fontFamily;\r\n this.elementRef.style.fontSize = `${this.fontSize}pt`;\r\n this.elementRef.style.color = this.fontColor;\r\n this.elementRef.style.whiteSpace = 'pre-wrap';\r\n this.elementRef.style.wordWrap = 'break-word';\r\n this.elementRef.innerHTML = '';\r\n this.elementRef.appendChild(this.editor.dom);\r\n\r\n this.isMounted = true;\r\n\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n }\r\n\r\n private createEditor(): EditorView {\r\n const doc = this._schema.node('doc', null, [this._schema.node('paragraph')]);\r\n\r\n return new EditorView(null, {\r\n state: EditorState.create({\r\n doc: doc,\r\n plugins: [keymap(baseKeymap)],\r\n }),\r\n editable: () => false,\r\n dispatchTransaction: transaction => {\r\n const newState = this.editor.state.apply(transaction);\r\n\r\n this.editor.updateState(newState);\r\n\r\n if (transaction.docChanged) {\r\n this.content = newState.doc.toJSON();\r\n this.adjustSizeOnInput();\r\n\r\n if (!transaction.getMeta('fromRemote')) {\r\n this._core.store.state.objectsMap.update(this, { temporary: true });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n\r\n public setContent(content: any): void {\r\n this.content = content;\r\n\r\n if (this.editor && content) {\r\n const newDoc = this.editor.state.schema.nodeFromJSON(content);\r\n const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);\r\n \r\n tr.setMeta('fromRemote', true);\r\n this.editor.dispatch(tr);\r\n }\r\n }\r\n\r\n adjustSizeOnInput(): void {\r\n const element = this.elementRef;\r\n\r\n if (element && this.isMounted && element.scrollWidth > 0) {\r\n const previousTotalWidth = this.totalWidth;\r\n const previousTotalHeight = this.totalHeight;\r\n\r\n const newWidth = element.scrollWidth;\r\n const newHeight = element.scrollHeight;\r\n\r\n this.width = newWidth * this.scaleFactor;\r\n this.height = newHeight * this.scaleFactor;\r\n\r\n if (this.rotation !== 0) {\r\n const newTotalWidth = this.totalWidth;\r\n const newTotalHeight = this.totalHeight;\r\n\r\n const deltaWidth = (newTotalWidth - previousTotalWidth) / 2 / this.scale;\r\n const deltaHeight = (newTotalHeight - previousTotalHeight) / 2 / this.scale;\r\n\r\n if (deltaWidth !== 0 || deltaHeight !== 0) {\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n const rotatedDeltaX = cos * deltaWidth - sin * deltaHeight;\r\n const rotatedDeltaY = sin * deltaWidth + cos * deltaHeight;\r\n\r\n this.translateX += rotatedDeltaX - deltaWidth;\r\n this.translateY += rotatedDeltaY - deltaHeight;\r\n }\r\n }\r\n }\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const originalWidth = this.width / this.scaleFactor;\r\n const originalHeight = this.height / this.scaleFactor;\r\n\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n this.scaleFactor = Math.min(scaleX, scaleY);\r\n\r\n this.width = originalWidth * this.scaleFactor;\r\n this.height = originalHeight * this.scaleFactor;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n focus(coords?: { x: number; y: number }): void {\r\n if (this.editor) {\r\n const doc = this.editor.state.doc;\r\n\r\n if (coords.x && coords.y) {\r\n const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });\r\n if (pos) {\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));\r\n this.editor.focus();\r\n \r\n if (KritzelDevicesHelper.isIOS()) {\r\n this.scrollIntoViewOnIOS();\r\n }\r\n return;\r\n }\r\n }\r\n\r\n const end = Math.max(1, doc.content.size - 1);\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));\r\n this.editor.focus();\r\n \r\n if (KritzelDevicesHelper.isIOS()) {\r\n this.scrollIntoViewOnIOS();\r\n }\r\n }\r\n }\r\n\r\n private scrollIntoViewOnIOS(): void {\r\n setTimeout(() => {\r\n if (this.editor && this.editor.dom) {\r\n this.editor.dom.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest'\r\n });\r\n }\r\n }, 300);\r\n }\r\n\r\n edit(event?: PointerEvent): void {\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n this.uneditedObject = this.clone() as KritzelText;\r\n\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n\r\n this.editor.setProps({ editable: () => true });\r\n\r\n this.isEditing = true;\r\n\r\n this._core.rerender();\r\n\r\n this.adjustSizeOnInput();\r\n\r\n this.focus({ x: event?.clientX, y: event?.clientY });\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\r\n }\r\n\r\n save(): void {\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n\r\n this.content = this.editor.state.doc.toJSON();\r\n\r\n this.editor.setProps({ editable: () => false });\r\n\r\n this.editor.dom.blur();\r\n\r\n this.isEditing = false;\r\n\r\n this._core.store.state.objectsMap.consolidateTemporaryItems();\r\n\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n override copy(): KritzelText {\r\n const copiedObject = super.copy() as KritzelText;\r\n copiedObject.editor = copiedObject.createEditor();\r\n\r\n if (this.content) {\r\n copiedObject.setContent(this.content);\r\n }\r\n\r\n return copiedObject;\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, _schema, element, totalWidth, totalHeight, editor, uneditedObject, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<KritzelText>(object: any): KritzelText {\r\n super.deserialize<KritzelText>(object);\r\n if (object.content) {\r\n this.setContent(object.content);\r\n }\r\n return this as unknown as KritzelText;\r\n }\r\n}\r\n"]}
@@ -2,7 +2,6 @@ import { KritzelText } from "../objects/text.class";
2
2
  import { KritzelBaseTool } from "./base-tool.class";
3
3
  import { KritzelEventHelper } from "../../helpers/event.helper";
4
4
  import { KritzelToolRegistry } from "../registries/tool.registry";
5
- import { KritzelKeyboardHelper } from "../../helpers/keyboard.helper";
6
5
  export class KritzelTextTool extends KritzelBaseTool {
7
6
  fontFamily = 'Arial';
8
7
  fontSize = 16;
@@ -62,7 +61,7 @@ export class KritzelTextTool extends KritzelBaseTool {
62
61
  text.zIndex = this._core.store.currentZIndex;
63
62
  this._core.store.state.objectsMap.insert(text);
64
63
  this._core.rerender();
65
- requestAnimationFrame(() => text.edit(event));
64
+ text.edit(event);
66
65
  }
67
66
  if (event.pointerType === 'touch') {
68
67
  const activePointers = Array.from(this._core.store.state.pointers.values());
@@ -87,7 +86,6 @@ export class KritzelTextTool extends KritzelBaseTool {
87
86
  if (activePointers.length > 1) {
88
87
  return;
89
88
  }
90
- KritzelKeyboardHelper.disableInteractiveWidget();
91
89
  const clientX = Math.round(activePointers[0].clientX - this._core.store.offsetX);
92
90
  const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);
93
91
  const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);
@@ -97,19 +95,14 @@ export class KritzelTextTool extends KritzelBaseTool {
97
95
  text.zIndex = this._core.store.currentZIndex;
98
96
  this._core.store.state.objectsMap.insert(text);
99
97
  this._core.rerender();
98
+ text.edit(event);
100
99
  }
101
100
  }
102
101
  handlePointerUp(event) {
103
102
  if (event.cancelable) {
104
103
  event.preventDefault();
105
104
  }
106
- if (event.pointerType === 'mouse') {
107
- this._core.store.activeText?.edit(event);
108
- }
109
- if (event.pointerType === 'touch') {
110
- this._core.store.activeText?.edit(event);
111
- KritzelKeyboardHelper.enableInteractiveWidget();
112
- }
105
+ this._core.store.activeText?.edit(event);
113
106
  }
114
107
  }
115
108
  //# sourceMappingURL=text-tool.class.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-tool.class.js","sourceRoot":"","sources":["../../../src/classes/tools/text-tool.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelText } from '../objects/text.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelTextTool extends KritzelBaseTool {\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 16;\r\n fontColor: string = '#000000';\r\n\r\n palette: string[] = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#FF0000',\r\n '#00FF00',\r\n '#0000FF',\r\n '#FFFF00',\r\n '#FF00FF',\r\n '#00FFFF',\r\n '#808080',\r\n '#C0C0C0',\r\n '#800000',\r\n '#008000',\r\n '#000080',\r\n '#808000',\r\n '#800080',\r\n ];\r\n\r\n constructor(core: KritzelCore) {\r\n super(core);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._core.findObjectById(objectElement?.id);\r\n\r\n const activeText = this._core.store.activeText;\r\n\r\n if (activeText === null && object instanceof KritzelText) {\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText) {\r\n activeText.save();\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText === false) {\r\n this._core.resetActiveText();\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.isLeftClick(event) === false) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX - this._core.store.offsetX;\r\n const clientY = event.clientY - this._core.store.offsetY;\r\n const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;\r\n text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;\r\n text.zIndex = this._core.store.currentZIndex;\r\n\r\n this._core.store.state.objectsMap.insert(text);\r\n\r\n this._core.rerender();\r\n\r\n requestAnimationFrame(() => text.edit(event));\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._core.findObjectById(objectElement?.id);\r\n\r\n const activeText = this._core.store.activeText;\r\n\r\n if (activeText === null && object instanceof KritzelText) {\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText) {\r\n activeText.save();\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText === false) {\r\n this._core.resetActiveText();\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (activePointers.length > 1) {\r\n return;\r\n }\r\n\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n const clientX = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;\r\n text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;\r\n text.zIndex = this._core.store.currentZIndex;\r\n\r\n this._core.store.state.objectsMap.insert(text);\r\n\r\n this._core.rerender();\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n this._core.store.activeText?.edit(event);\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this._core.store.activeText?.edit(event);\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"text-tool.class.js","sourceRoot":"","sources":["../../../src/classes/tools/text-tool.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelText } from '../objects/text.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelTextTool extends KritzelBaseTool {\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 16;\r\n fontColor: string = '#000000';\r\n\r\n palette: string[] = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#FF0000',\r\n '#00FF00',\r\n '#0000FF',\r\n '#FFFF00',\r\n '#FF00FF',\r\n '#00FFFF',\r\n '#808080',\r\n '#C0C0C0',\r\n '#800000',\r\n '#008000',\r\n '#000080',\r\n '#808000',\r\n '#800080',\r\n ];\r\n\r\n constructor(core: KritzelCore) {\r\n super(core);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._core.findObjectById(objectElement?.id);\r\n\r\n const activeText = this._core.store.activeText;\r\n\r\n if (activeText === null && object instanceof KritzelText) {\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText) {\r\n activeText.save();\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText === false) {\r\n this._core.resetActiveText();\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.isLeftClick(event) === false) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX - this._core.store.offsetX;\r\n const clientY = event.clientY - this._core.store.offsetY;\r\n const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;\r\n text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;\r\n text.zIndex = this._core.store.currentZIndex;\r\n\r\n this._core.store.state.objectsMap.insert(text);\r\n\r\n this._core.rerender();\r\n\r\n text.edit(event);\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._core.findObjectById(objectElement?.id);\r\n\r\n const activeText = this._core.store.activeText;\r\n\r\n if (activeText === null && object instanceof KritzelText) {\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText) {\r\n activeText.save();\r\n object.edit(event);\r\n return;\r\n }\r\n\r\n if (activeText !== null && object instanceof KritzelText === false) {\r\n this._core.resetActiveText();\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (activePointers.length > 1) {\r\n return;\r\n }\r\n\r\n const clientX = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;\r\n text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;\r\n text.zIndex = this._core.store.currentZIndex;\r\n\r\n this._core.store.state.objectsMap.insert(text);\r\n\r\n this._core.rerender();\r\n\r\n text.edit(event);\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n this._core.store.activeText?.edit(event);\r\n }\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
1
  export { g as getAssetPath, r as render, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-CwkUrTy1.js';
2
- export { b as KritzelBrushTool, a as KritzelPath, K as KritzelText, c as KritzelTextTool } from './p-COGwCbe1.js';
3
- import { s as setIfUndefined, c as create, f as fromBase64, v as varStorage, t as toBase64, o as onChange, a as createUint8ArrayFromArrayBuffer, b as offChange, w as writeVarUint, e as encodeStateVector, d as writeVarUint8Array, g as encodeStateAsUpdate, r as readVarUint, h as applyUpdate, i as readVarUint8Array, j as readVarString, O as Observable, k as floor, l as getUnixTime, m as equalityDeep, n as writeVarString, p as toUint8Array, q as createEncoder, u as createDecoder, x as map, y as ObservableV2, z as length, A as isNode, B as min, C as pow, H as HocuspocusProvider, D as HocuspocusProviderWebsocket } from './p-ByRC-aCs.js';
4
- export { I as BroadcastSyncProvider, J as IndexedDBSyncProvider, L as KritzelAppStateMap, E as KritzelEraserTool, K as KritzelImage, F as KritzelImageTool, G as KritzelSelectionTool } from './p-ByRC-aCs.js';
2
+ export { b as KritzelBrushTool, a as KritzelPath, K as KritzelText, c as KritzelTextTool } from './p-G2HGJcNm.js';
3
+ import { s as setIfUndefined, c as create, f as fromBase64, v as varStorage, t as toBase64, o as onChange, a as createUint8ArrayFromArrayBuffer, b as offChange, w as writeVarUint, e as encodeStateVector, d as writeVarUint8Array, g as encodeStateAsUpdate, r as readVarUint, h as applyUpdate, i as readVarUint8Array, j as readVarString, O as Observable, k as floor, l as getUnixTime, m as equalityDeep, n as writeVarString, p as toUint8Array, q as createEncoder, u as createDecoder, x as map, y as ObservableV2, z as length, A as isNode, B as min, C as pow, H as HocuspocusProvider, D as HocuspocusProviderWebsocket } from './p-CwHz5s2a.js';
4
+ export { I as BroadcastSyncProvider, J as IndexedDBSyncProvider, L as KritzelAppStateMap, E as KritzelEraserTool, K as KritzelImage, F as KritzelImageTool, G as KritzelSelectionTool } from './p-CwHz5s2a.js';
5
5
  export { K as KritzelWorkspace } from './p-n789Y3S-.js';
6
6
  export { D as DEFAULT_BRUSH_CONFIG, a as DEFAULT_TEXT_CONFIG, KritzelEditor, defineCustomElement as defineCustomElementKritzelEditor } from './kritzel-editor.js';
7
7
  export { KritzelBrushStyle, defineCustomElement as defineCustomElementKritzelBrushStyle } from './kritzel-brush-style.js';
@@ -1,4 +1,4 @@
1
- import { K as KritzelControls$1, d as defineCustomElement$1 } from './p-BgRGxOIE.js';
1
+ import { K as KritzelControls$1, d as defineCustomElement$1 } from './p-DPN0PZvw.js';
2
2
 
3
3
  const KritzelControls = KritzelControls$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,7 +1,7 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-CwkUrTy1.js';
2
2
  import { K as KritzelIconRegistry, d as defineCustomElement$a } from './p-Bhtn9qay.js';
3
- import { M as ABSOLUTE_SCALE_MAX, N as ABSOLUTE_SCALE_MIN, G as KritzelSelectionTool, E as KritzelEraserTool, F as KritzelImageTool, P as defineCustomElement$e } from './p-ByRC-aCs.js';
4
- import { b as KritzelBrushTool, c as KritzelTextTool, d as KritzelKeyboardHelper } from './p-COGwCbe1.js';
3
+ import { M as ABSOLUTE_SCALE_MAX, N as ABSOLUTE_SCALE_MIN, G as KritzelSelectionTool, E as KritzelEraserTool, F as KritzelImageTool, P as defineCustomElement$e } from './p-CwHz5s2a.js';
4
+ import { b as KritzelBrushTool, c as KritzelTextTool, d as KritzelKeyboardHelper } from './p-G2HGJcNm.js';
5
5
  import { K as KritzelWorkspace } from './p-n789Y3S-.js';
6
6
  import { K as KritzelDevicesHelper } from './p-l10It7Nm.js';
7
7
  import { d as defineCustomElement$m } from './p-8iFF5GHL.js';
@@ -9,7 +9,7 @@ import { d as defineCustomElement$l } from './p-NXPGXBZ2.js';
9
9
  import { d as defineCustomElement$k } from './p-BHT7_POQ.js';
10
10
  import { d as defineCustomElement$j } from './p-C3_LIgzd.js';
11
11
  import { d as defineCustomElement$i } from './p-BaHZYvfq.js';
12
- import { d as defineCustomElement$h } from './p-BgRGxOIE.js';
12
+ import { d as defineCustomElement$h } from './p-DPN0PZvw.js';
13
13
  import { d as defineCustomElement$g } from './p-D13ydJjo.js';
14
14
  import { d as defineCustomElement$f } from './p-CIXPLjCu.js';
15
15
  import { d as defineCustomElement$d } from './p-BlI4vzRZ.js';
@@ -1,4 +1,4 @@
1
- import { Q as KritzelEngine$1, P as defineCustomElement$1 } from './p-ByRC-aCs.js';
1
+ import { Q as KritzelEngine$1, P as defineCustomElement$1 } from './p-CwHz5s2a.js';
2
2
 
3
3
  const KritzelEngine = KritzelEngine$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,6 +1,6 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-CwkUrTy1.js';
2
2
  import { K as KritzelMouseButton } from './p-D8W6LE-c.js';
3
- import { e as KritzelBaseObject, f as KritzelBaseTool, g as KritzelEventHelper, h as KritzelToolRegistry, c as KritzelTextTool, b as KritzelBrushTool, K as KritzelText, a as KritzelPath, d as KritzelKeyboardHelper } from './p-COGwCbe1.js';
3
+ import { e as KritzelBaseObject, f as KritzelBaseTool, g as KritzelEventHelper, h as KritzelToolRegistry, c as KritzelTextTool, b as KritzelBrushTool, K as KritzelText, a as KritzelPath, d as KritzelKeyboardHelper } from './p-G2HGJcNm.js';
4
4
  import { K as KritzelContextMenu, d as defineCustomElement$3 } from './p-BHT7_POQ.js';
5
5
  import { O as ObjectHelper } from './p-B0kd2rUI.js';
6
6
  import { K as KritzelWorkspace } from './p-n789Y3S-.js';
@@ -18257,6 +18257,6 @@ function defineCustomElement() {
18257
18257
  }
18258
18258
 
18259
18259
  export { isNode as A, min$2 as B, pow as C, HocuspocusProviderWebsocket as D, KritzelEraserTool as E, KritzelImageTool as F, KritzelSelectionTool as G, HocuspocusProvider as H, BroadcastSyncProvider as I, IndexedDBSyncProvider as J, KritzelImage as K, KritzelAppStateMap as L, ABSOLUTE_SCALE_MAX as M, ABSOLUTE_SCALE_MIN as N, Observable$1 as O, defineCustomElement as P, KritzelEngine as Q, createUint8ArrayFromArrayBuffer as a, offChange as b, create$8 as c, writeVarUint8Array$2 as d, encodeStateVector as e, fromBase64 as f, encodeStateAsUpdate as g, applyUpdate as h, readVarUint8Array$2 as i, readVarString$2 as j, floor$2 as k, getUnixTime$1 as l, equalityDeep$1 as m, writeVarString$2 as n, onChange as o, toUint8Array$1 as p, createEncoder$1 as q, readVarUint$2 as r, setIfUndefined$1 as s, toBase64 as t, createDecoder$1 as u, varStorage as v, writeVarUint$2 as w, map as x, ObservableV2 as y, length$3 as z };
18260
- //# sourceMappingURL=p-ByRC-aCs.js.map
18260
+ //# sourceMappingURL=p-CwHz5s2a.js.map
18261
18261
 
18262
- //# sourceMappingURL=p-ByRC-aCs.js.map
18262
+ //# sourceMappingURL=p-CwHz5s2a.js.map