UNPKG

@contentstack/live-preview-utils

Version:

Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.

115 lines (114 loc) 3.48 kB
import "../../chunk-5WRI5ZAA.js"; // src/visualBuilder/utils/handleFieldMouseDown.ts import { throttle } from "lodash-es"; import { sendFieldEvent } from "../generators/generateOverlay.js"; import { ALLOWED_INLINE_EDITABLE_FIELD, VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY, numericInputRegex } from "./constants.js"; import { FieldDataType } from "./types/index.types.js"; import { VisualBuilderPostMessageEvents } from "./types/postMessage.types.js"; import { insertSpaceAtCursor } from "./insertSpaceAtCursor.js"; import { VisualBuilder } from "../index.js"; function handleFieldInput(e) { const event = e; const targetElement = event.target; const fieldType = targetElement.getAttribute( VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY ); if (event.type === "input" && ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) { if (!VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput) { VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput = true; } throttledFieldSync(); } } var throttledFieldSync = throttle(() => { try { const visualBuilderContainer = document.querySelector( ".visual-builder__container" ); if (!visualBuilderContainer) return; sendFieldEvent({ visualBuilderContainer, eventType: VisualBuilderPostMessageEvents.SYNC_FIELD }); } catch (error) { console.error("Error in throttledFieldSync", error); } }, 300); function handleFieldKeyDown(e) { const event = e; const targetElement = event.target; const fieldType = targetElement.getAttribute( VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY ); if (event.composedPath().some( (element) => element instanceof Element && element.tagName === "BUTTON" )) { handleKeyDownOnButton(event); } if (fieldType === FieldDataType.NUMBER) { handleNumericFieldKeyDown(event); } else if (fieldType === FieldDataType.SINGLELINE) { handleSingleLineFieldKeyDown(event); } } function handleKeyDownOnButton(e) { if (e.code === "Space" && e.target) { e.preventDefault(); insertSpaceAtCursor(e.target); throttledFieldSync(); } } function handleSingleLineFieldKeyDown(e) { if (e.code === "Enter") { e.preventDefault(); } } function handleNumericFieldKeyDown(event) { var _a, _b; const targetElement = event.target; const allowedKeys = [ "Backspace", "Tab", "Enter", "End", "Home", "ArrowLeft", "ArrowRight", "Delete" ]; if (event.ctrlKey || event.metaKey || event.altKey || allowedKeys.includes(event.code)) { return; } if (event.code.includes("Digit")) { return; } const nonNumericAllowedCharacters = ["-", ".", "e", "E"]; if (!nonNumericAllowedCharacters.includes(event.key)) { event.preventDefault(); return; } const selection = { startOffset: ((_a = window.getSelection()) == null ? void 0 : _a.getRangeAt(0).startOffset) || 0, endOffset: ((_b = window.getSelection()) == null ? void 0 : _b.getRangeAt(0).endOffset) || 0 }; const existingInput = targetElement.textContent || ""; const currentOutputArr = existingInput.split(""); currentOutputArr.splice( selection.startOffset, selection.endOffset - selection.startOffset, event.key ); const currentInput = currentOutputArr.join(""); if (!numericInputRegex.test(currentInput)) { event.preventDefault(); } } export { handleFieldInput, handleFieldKeyDown }; //# sourceMappingURL=handleFieldMouseDown.js.map