@contentstack/live-preview-utils 3.1.2 → 3.1.3

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 (146) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
  3. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
  4. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +6 -2
  5. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  6. package/dist/legacy/preview/contentstack-live-preview-HOC.js +6 -2
  7. package/dist/legacy/preview/contentstack-live-preview-HOC.js.map +1 -1
  8. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +26 -17
  9. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  10. package/dist/legacy/visualBuilder/components/FieldToolbar.js +26 -17
  11. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  12. package/dist/legacy/visualBuilder/components/addInstanceButton.cjs +39 -11
  13. package/dist/legacy/visualBuilder/components/addInstanceButton.cjs.map +1 -1
  14. package/dist/legacy/visualBuilder/components/addInstanceButton.d.cts +5 -0
  15. package/dist/legacy/visualBuilder/components/addInstanceButton.d.ts +5 -0
  16. package/dist/legacy/visualBuilder/components/addInstanceButton.js +39 -11
  17. package/dist/legacy/visualBuilder/components/addInstanceButton.js.map +1 -1
  18. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
  19. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
  20. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
  21. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
  22. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
  23. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
  24. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -0
  25. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  26. package/dist/legacy/visualBuilder/listeners/mouseClick.js +7 -0
  27. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  28. package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs +94 -0
  29. package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
  30. package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
  31. package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
  32. package/dist/legacy/visualBuilder/utils/enableInlineEditing.js +74 -0
  33. package/dist/legacy/visualBuilder/utils/enableInlineEditing.js.map +1 -0
  34. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +20 -110
  35. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  36. package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
  37. package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
  38. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +18 -114
  39. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  40. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
  41. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
  42. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
  43. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
  44. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js +58 -0
  45. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
  46. package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs +35 -0
  47. package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
  48. package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
  49. package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
  50. package/dist/legacy/visualBuilder/utils/isFieldMultiple.js +12 -0
  51. package/dist/legacy/visualBuilder/utils/isFieldMultiple.js.map +1 -0
  52. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs +14 -20
  53. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
  54. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
  55. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
  56. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js +14 -20
  57. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
  58. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
  59. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
  60. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
  61. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
  62. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js +21 -0
  63. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
  64. package/dist/legacy/visualBuilder/utils/types/index.types.cjs.map +1 -1
  65. package/dist/legacy/visualBuilder/utils/types/index.types.d.cts +6 -1
  66. package/dist/legacy/visualBuilder/utils/types/index.types.d.ts +6 -1
  67. package/dist/legacy/visualBuilder/utils/types/index.types.js.map +1 -1
  68. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +9 -1
  69. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  70. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +2 -1
  71. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +2 -1
  72. package/dist/legacy/visualBuilder/visualBuilder.style.js +9 -1
  73. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  74. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
  75. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
  76. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +6 -2
  77. package/dist/modern/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  78. package/dist/modern/preview/contentstack-live-preview-HOC.js +6 -2
  79. package/dist/modern/preview/contentstack-live-preview-HOC.js.map +1 -1
  80. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +26 -16
  81. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  82. package/dist/modern/visualBuilder/components/FieldToolbar.js +26 -16
  83. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  84. package/dist/modern/visualBuilder/components/addInstanceButton.cjs +38 -11
  85. package/dist/modern/visualBuilder/components/addInstanceButton.cjs.map +1 -1
  86. package/dist/modern/visualBuilder/components/addInstanceButton.d.cts +5 -0
  87. package/dist/modern/visualBuilder/components/addInstanceButton.d.ts +5 -0
  88. package/dist/modern/visualBuilder/components/addInstanceButton.js +38 -11
  89. package/dist/modern/visualBuilder/components/addInstanceButton.js.map +1 -1
  90. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
  91. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
  92. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
  93. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
  94. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
  95. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
  96. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -0
  97. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  98. package/dist/modern/visualBuilder/listeners/mouseClick.js +7 -0
  99. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  100. package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs +94 -0
  101. package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
  102. package/dist/modern/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
  103. package/dist/modern/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
  104. package/dist/modern/visualBuilder/utils/enableInlineEditing.js +74 -0
  105. package/dist/modern/visualBuilder/utils/enableInlineEditing.js.map +1 -0
  106. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +20 -110
  107. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  108. package/dist/modern/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
  109. package/dist/modern/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
  110. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +18 -114
  111. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  112. package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
  113. package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
  114. package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
  115. package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
  116. package/dist/modern/visualBuilder/utils/handleInlineEditableField.js +58 -0
  117. package/dist/modern/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
  118. package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs +35 -0
  119. package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
  120. package/dist/modern/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
  121. package/dist/modern/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
  122. package/dist/modern/visualBuilder/utils/isFieldMultiple.js +12 -0
  123. package/dist/modern/visualBuilder/utils/isFieldMultiple.js.map +1 -0
  124. package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs +14 -18
  125. package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
  126. package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
  127. package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
  128. package/dist/modern/visualBuilder/utils/multipleElementAddButton.js +14 -18
  129. package/dist/modern/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
  130. package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
  131. package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
  132. package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
  133. package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
  134. package/dist/modern/visualBuilder/utils/pasteAsPlainText.js +21 -0
  135. package/dist/modern/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
  136. package/dist/modern/visualBuilder/utils/types/index.types.cjs.map +1 -1
  137. package/dist/modern/visualBuilder/utils/types/index.types.d.cts +6 -1
  138. package/dist/modern/visualBuilder/utils/types/index.types.d.ts +6 -1
  139. package/dist/modern/visualBuilder/utils/types/index.types.js.map +1 -1
  140. package/dist/modern/visualBuilder/visualBuilder.style.cjs +9 -1
  141. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  142. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +2 -1
  143. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +2 -1
  144. package/dist/modern/visualBuilder/visualBuilder.style.js +9 -1
  145. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  146. package/package.json +3 -2
@@ -1,16 +1,14 @@
1
1
  import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.cjs';
2
+ import { VisualBuilderEditContext } from './types/index.types.cjs';
2
3
  import '../../cslp/types/cslp.types.cjs';
4
+ import '../../cms/types/contentTypeSchema.types.cjs';
3
5
 
4
6
  /**
5
7
  * It handles all the fields based on their data type and its "multiple" property.
6
8
  * @param eventDetails The event details object that contain cslp and field metadata.
7
9
  * @param elements The elements object that contain the visual builder wrapper.
8
10
  */
9
- declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: {
10
- visualBuilderContainer: HTMLDivElement;
11
- resizeObserver: ResizeObserver;
12
- lastEditedField: Element | null;
13
- }): Promise<void>;
11
+ declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: VisualBuilderEditContext): Promise<void>;
14
12
  declare function cleanIndividualFieldResidual(elements: {
15
13
  overlayWrapper: HTMLDivElement;
16
14
  visualBuilderContainer: HTMLDivElement | null;
@@ -1,16 +1,14 @@
1
1
  import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.js';
2
+ import { VisualBuilderEditContext } from './types/index.types.js';
2
3
  import '../../cslp/types/cslp.types.js';
4
+ import '../../cms/types/contentTypeSchema.types.js';
3
5
 
4
6
  /**
5
7
  * It handles all the fields based on their data type and its "multiple" property.
6
8
  * @param eventDetails The event details object that contain cslp and field metadata.
7
9
  * @param elements The elements object that contain the visual builder wrapper.
8
10
  */
9
- declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: {
10
- visualBuilderContainer: HTMLDivElement;
11
- resizeObserver: ResizeObserver;
12
- lastEditedField: Element | null;
13
- }): Promise<void>;
11
+ declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: VisualBuilderEditContext): Promise<void>;
14
12
  declare function cleanIndividualFieldResidual(elements: {
15
13
  overlayWrapper: HTMLDivElement;
16
14
  visualBuilderContainer: HTMLDivElement | null;
@@ -1,16 +1,8 @@
1
1
  import "../../chunk-5WRI5ZAA.js";
2
2
 
3
3
  // src/visualBuilder/utils/handleIndividualFields.ts
4
- import { debounce, throttle } from "lodash-es";
5
4
  import { VisualBuilder } from "../index.js";
6
- import {
7
- generatePseudoEditableElement,
8
- isEllipsisActive
9
- } from "../generators/generatePseudoEditableField.js";
10
- import {
11
- ALLOWED_INLINE_EDITABLE_FIELD,
12
- VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
13
- } from "./constants.js";
5
+ import { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from "./constants.js";
14
6
  import { FieldSchemaMap } from "./fieldSchemaMap.js";
15
7
  import { getFieldData } from "./getFieldData.js";
16
8
  import { getFieldType } from "./getFieldType.js";
@@ -20,11 +12,11 @@ import {
20
12
  handleAddButtonsForMultiple,
21
13
  removeAddInstanceButtons
22
14
  } from "./multipleElementAddButton.js";
23
- import { updateFocussedState } from "./updateFocussedState.js";
24
- import { FieldDataType } from "./types/index.types.js";
25
- import { getMultilinePlaintext } from "./getMultilinePlaintext.js";
26
15
  import { VisualBuilderPostMessageEvents } from "./types/postMessage.types.js";
27
16
  import visualBuilderPostMessage from "./visualBuilderPostMessage.js";
17
+ import { isFieldMultiple } from "./isFieldMultiple.js";
18
+ import { handleInlineEditableField } from "./handleInlineEditableField.js";
19
+ import { pasteAsPlainText } from "./pasteAsPlainText.js";
28
20
  async function handleIndividualFields(eventDetails, elements) {
29
21
  const { fieldMetadata, editableElement } = eventDetails;
30
22
  const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
@@ -70,95 +62,17 @@ async function handleIndividualFields(eventDetails, elements) {
70
62
  );
71
63
  }
72
64
  }
73
- !disabled && handleInlineEditing();
74
- function handleInlineEditing() {
75
- if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
76
- const index = Number(fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1));
77
- const isInstance = Number.isFinite(index);
78
- if (isFieldMultiple(fieldSchema)) {
79
- let expectedFieldInstanceData = null;
80
- if (Array.isArray(expectedFieldData)) {
81
- if (!isInstance) {
82
- return;
83
- }
84
- if (index >= expectedFieldData.length) {
85
- } else {
86
- expectedFieldInstanceData = expectedFieldData.at(index);
87
- }
88
- } else {
89
- expectedFieldInstanceData = expectedFieldData;
90
- }
91
- enableInlineEditing(expectedFieldInstanceData);
92
- } else {
93
- let expectedFieldInstanceData = null;
94
- if (isInstance) {
95
- if (index !== 0) {
96
- return;
97
- }
98
- expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
99
- }
100
- enableInlineEditing(expectedFieldInstanceData ?? expectedFieldData);
101
- }
102
- function enableInlineEditing(expectedFieldData2) {
103
- let actualEditableField = editableElement;
104
- VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue = actualEditableField?.innerText;
105
- const elementComputedDisplay = window.getComputedStyle(actualEditableField).display;
106
- let textContent = editableElement.innerText || editableElement.textContent || "";
107
- if (fieldType === FieldDataType.MULTILINE) {
108
- textContent = getMultilinePlaintext(actualEditableField);
109
- actualEditableField.addEventListener("paste", pasteAsPlainText);
110
- }
111
- const expectedTextContent = expectedFieldData2;
112
- if (expectedTextContent && textContent !== expectedTextContent || isEllipsisActive(editableElement)) {
113
- const pseudoEditableField = generatePseudoEditableElement(
114
- { editableElement },
115
- { textContent: expectedFieldData2 }
116
- );
117
- editableElement.style.visibility = "hidden";
118
- pseudoEditableField.setAttribute(
119
- VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
120
- fieldType
121
- );
122
- visualBuilderContainer.appendChild(pseudoEditableField);
123
- actualEditableField = pseudoEditableField;
124
- if (fieldType === FieldDataType.MULTILINE)
125
- actualEditableField.addEventListener(
126
- "paste",
127
- pasteAsPlainText
128
- );
129
- elements.resizeObserver.observe(pseudoEditableField);
130
- } else if (elementComputedDisplay === "inline") {
131
- const onInlineElementInput = throttle(() => {
132
- const overlayWrapper = visualBuilderContainer.querySelector(
133
- ".visual-builder__overlay__wrapper"
134
- );
135
- const focusedToolbar = visualBuilderContainer.querySelector(
136
- ".visual-builder__focused-toolbar"
137
- );
138
- updateFocussedState({
139
- editableElement: actualEditableField,
140
- visualBuilderContainer,
141
- overlayWrapper,
142
- focusedToolbar,
143
- resizeObserver
144
- });
145
- }, 200);
146
- actualEditableField.addEventListener(
147
- "input",
148
- onInlineElementInput
149
- );
150
- }
151
- actualEditableField.setAttribute("contenteditable", "true");
152
- actualEditableField.addEventListener("input", handleFieldInput);
153
- actualEditableField.addEventListener("keydown", handleFieldKeyDown);
154
- actualEditableField.focus();
155
- return;
156
- }
65
+ if (disabled) {
66
+ return;
157
67
  }
158
- }
159
- function isFieldMultiple(fieldSchema) {
160
- return fieldSchema && (fieldSchema.multiple || fieldSchema.data_type === "reference" && // @ts-ignore
161
- fieldSchema.field_metadata.ref_multiple);
68
+ handleInlineEditableField({
69
+ fieldType,
70
+ fieldSchema,
71
+ fieldMetadata,
72
+ expectedFieldData,
73
+ editableElement,
74
+ elements
75
+ });
162
76
  }
163
77
  function cleanIndividualFieldResidual(elements) {
164
78
  const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;
@@ -205,7 +119,10 @@ function cleanIndividualFieldResidual(elements) {
205
119
  }
206
120
  if (focusedToolbar) {
207
121
  focusedToolbar.innerHTML = "";
208
- const toolbarEvents = [VisualBuilderPostMessageEvents.DELETE_INSTANCE, VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID];
122
+ const toolbarEvents = [
123
+ VisualBuilderPostMessageEvents.DELETE_INSTANCE,
124
+ VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID
125
+ ];
209
126
  toolbarEvents.forEach((event) => {
210
127
  if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {
211
128
  visualBuilderPostMessage?.unregisterEvent?.(event);
@@ -213,19 +130,6 @@ function cleanIndividualFieldResidual(elements) {
213
130
  });
214
131
  }
215
132
  }
216
- var pasteAsPlainText = debounce(
217
- (e) => {
218
- e.preventDefault();
219
- const clipboardData = e.clipboardData;
220
- document.execCommand(
221
- "inserttext",
222
- false,
223
- clipboardData?.getData("text/plain")
224
- );
225
- },
226
- 100,
227
- { leading: true }
228
- );
229
133
  export {
230
134
  cleanIndividualFieldResidual,
231
135
  handleIndividualFields
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { debounce, throttle } from \"lodash-es\";\nimport { VisualBuilder } from \"..\";\nimport {\n generatePseudoEditableElement,\n isEllipsisActive,\n} from \"../generators/generatePseudoEditableField\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n} from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { updateFocussedState } from \"./updateFocussedState\";\nimport { FieldDataType, ISchemaFieldMap } from \"./types/index.types\";\nimport { getMultilinePlaintext } from \"./getMultilinePlaintext\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: {\n visualBuilderContainer: HTMLDivElement;\n resizeObserver: ResizeObserver;\n lastEditedField: Element | null;\n }\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema, eventDetails);\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n } \n\n !disabled && handleInlineEditing();\n\n /**\n * Handles inline editing for supported fields.\n */\n function handleInlineEditing() {\n\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(fieldMetadata.instance.fieldPathWithIndex.split('.').at(-1));\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if(isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if(Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We recieve unreliable `multipleFieldMetadata` in this case)\n if(!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if(index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n }\n else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing(expectedFieldInstanceData); \n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if(isInstance) {\n if(index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;\n }\n enableInlineEditing(expectedFieldInstanceData ?? expectedFieldData);\n }\n\n function enableInlineEditing(expectedFieldData: any) {\n\n let actualEditableField = editableElement as HTMLElement;\n\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue =\n actualEditableField?.innerText;\n\n const elementComputedDisplay =\n window.getComputedStyle(actualEditableField).display;\n\n let textContent =\n (editableElement as HTMLElement).innerText ||\n editableElement.textContent ||\n \"\";\n\n if (fieldType === FieldDataType.MULTILINE) {\n textContent = getMultilinePlaintext(actualEditableField);\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n }\n const expectedTextContent = expectedFieldData;\n if (\n (expectedTextContent && textContent !== expectedTextContent) ||\n isEllipsisActive(editableElement as HTMLElement)\n ) {\n \n // TODO: Testing will be done in the E2E.\n const pseudoEditableField = generatePseudoEditableElement(\n { editableElement: editableElement as HTMLElement },\n { textContent: expectedFieldData }\n );\n\n (editableElement as HTMLElement).style.visibility = \"hidden\";\n\n // set field type attribute to the pseudo editable field\n // ensures proper keydown handling similar to the actual editable field\n pseudoEditableField.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n visualBuilderContainer.appendChild(pseudoEditableField);\n actualEditableField = pseudoEditableField;\n\n if (fieldType === FieldDataType.MULTILINE)\n actualEditableField.addEventListener(\n \"paste\",\n pasteAsPlainText\n );\n\n // we will unobserve this in hideOverlay\n elements.resizeObserver.observe(pseudoEditableField);\n } else if (elementComputedDisplay === \"inline\") {\n // if the editable field is inline\n const onInlineElementInput = throttle(() => {\n const overlayWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__overlay__wrapper\"\n ) as HTMLDivElement;\n const focusedToolbar = visualBuilderContainer.querySelector(\n \".visual-builder__focused-toolbar\"\n ) as HTMLDivElement;\n updateFocussedState({\n editableElement: actualEditableField,\n visualBuilderContainer,\n overlayWrapper,\n focusedToolbar,\n resizeObserver,\n });\n }, 200);\n actualEditableField.addEventListener(\n \"input\",\n onInlineElementInput\n );\n }\n\n actualEditableField.setAttribute(\"contenteditable\", \"true\");\n actualEditableField.addEventListener(\"input\", handleFieldInput);\n actualEditableField.addEventListener(\"keydown\", handleFieldKeyDown);\n // focus on the contenteditable element to start accepting input\n actualEditableField.focus();\n\n return;\n }\n }\n}\n\nfunction isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-ignore\n fieldSchema.field_metadata.ref_multiple));\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [VisualBuilderPostMessageEvents.DELETE_INSTANCE, VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID]\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n\nconst pasteAsPlainText = debounce(\n (e: Event) => {\n e.preventDefault();\n const clipboardData = (e as ClipboardEvent).clipboardData;\n document.execCommand(\n \"inserttext\",\n false,\n clipboardData?.getData(\"text/plain\")\n );\n },\n 100,\n { leading: true }\n);\n"],"mappings":"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","names":["expectedFieldData"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema, eventDetails);\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAE9B,SAAS,+CAA+C;AACxD,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB,0BAA0B;AACrD,SAAS,uBAAuB;AAChC;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,sCAAsC;AAC/C,OAAO,8BAA8B;AACrC,SAAS,uBAAuB;AAChC,SAAS,iCAAiC;AAE1C,SAAS,wBAAwB;AAOjC,eAAsB,uBAClB,cACA,UACa;AACb,QAAM,EAAE,eAAe,gBAAgB,IAAI;AAC3C,QAAM,EAAE,wBAAwB,iBAAiB,eAAe,IAC5D;AACJ,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,QAAM,CAAC,aAAa,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,eAAe,eAAe,kBAAkB,SAAS;AAAA,IACzD;AAAA,MACI,EAAE,kBAAkB,WAAW,OAAO;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,YAAY,aAAa,WAAW;AAE1C,QAAM,EAAE,YAAY,SAAS,IAAI,gBAAgB,aAAa,YAAY;AAE1E,kBAAgB;AAAA,IACZ;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,gBAAgB,WAAW,GAAG;AAC9B,QAAI,oBAAoB,iBAAiB;AACrC,YAAM,iBACF,YAAY,cAAc;AAAA;AAAA,QAEpB;AAAA,UACA;AAEV;AAAA,QACI;AAAA,QACA;AAAA,UACI,iBAAiB,aAAa;AAAA,UAC9B;AAAA,UACA;AAAA,QACJ;AAAA,QACA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,UAAU;AACV;AAAA,EACJ;AACA,4BAA0B;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,6BAA6B,UAKpC;AACL,QAAM,EAAE,gBAAgB,wBAAwB,eAAe,IAAI;AAEnE;AAAA,IACI;AAAA,MACI,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,EACJ;AAEA,QAAM,8BACF,cAAc,yBAAyB,MAClC;AACT,MAAI,6BAA6B;AAC7B,gCAA4B;AAAA,MACxB;AAAA,IACJ;AACA,gCAA4B,gBAAgB,iBAAiB;AAC7D,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AACA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAEA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAGA,aAAS,eAAe,UAAU,2BAA2B;AAAA,EACjE;AAEA,QAAM,wBAAwB,wBAAwB;AAAA,IAClD;AAAA,EACJ;AACA,MAAI,uBAAuB;AACvB,aAAS,eAAe,UAAU,qBAAqB;AACvD,0BAAsB,oBAAoB,SAAS,gBAAgB;AACnE,0BAAsB,OAAO;AAC7B,QAAI,6BAA6B;AAC7B,MAAC,4BAA4C,MAAM;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,gBAAgB;AAChB,mBAAe,YAAY;AAC3B,UAAM,gBAAgB;AAAA,MAClB,+BAA+B;AAAA,MAC/B,+BAA+B;AAAA,IACnC;AACA,kBAAc,QAAQ,CAAC,UAAU;AAE7B,UAAI,0BAA0B,wBAAwB,IAAI,KAAK,GAAG;AAE9D,kCAA0B,kBAAkB,KAAK;AAAA,MACrD;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/visualBuilder/utils/handleInlineEditableField.ts
21
+ var handleInlineEditableField_exports = {};
22
+ __export(handleInlineEditableField_exports, {
23
+ handleInlineEditableField: () => handleInlineEditableField
24
+ });
25
+ module.exports = __toCommonJS(handleInlineEditableField_exports);
26
+ var import_constants = require("./constants.cjs");
27
+ var import_isFieldMultiple = require("./isFieldMultiple.cjs");
28
+ var import_enableInlineEditing = require("./enableInlineEditing.cjs");
29
+ function handleInlineEditableField({
30
+ fieldType,
31
+ fieldSchema,
32
+ fieldMetadata,
33
+ expectedFieldData,
34
+ editableElement,
35
+ elements
36
+ }) {
37
+ if (!import_constants.ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
38
+ const index = Number(
39
+ fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1)
40
+ );
41
+ const isInstance = Number.isFinite(index);
42
+ if ((0, import_isFieldMultiple.isFieldMultiple)(fieldSchema)) {
43
+ let expectedFieldInstanceData = null;
44
+ if (Array.isArray(expectedFieldData)) {
45
+ if (!isInstance) {
46
+ return;
47
+ }
48
+ if (index >= expectedFieldData.length) {
49
+ } else {
50
+ expectedFieldInstanceData = expectedFieldData.at(index);
51
+ }
52
+ } else {
53
+ expectedFieldInstanceData = expectedFieldData;
54
+ }
55
+ (0, import_enableInlineEditing.enableInlineEditing)({
56
+ fieldType,
57
+ expectedFieldData: expectedFieldInstanceData,
58
+ editableElement,
59
+ elements
60
+ });
61
+ } else {
62
+ let expectedFieldInstanceData = null;
63
+ if (isInstance) {
64
+ if (index !== 0) {
65
+ return;
66
+ }
67
+ expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
68
+ }
69
+ (0, import_enableInlineEditing.enableInlineEditing)({
70
+ fieldType,
71
+ expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,
72
+ editableElement,
73
+ elements
74
+ });
75
+ }
76
+ }
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ handleInlineEditableField
80
+ });
81
+ //# sourceMappingURL=handleInlineEditableField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleInlineEditableField.ts"],"sourcesContent":["import { ALLOWED_INLINE_EDITABLE_FIELD } from \"./constants\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { enableInlineEditing } from \"./enableInlineEditing\";\n\n/**\n * Handles inline editing for supported fields.\n */\nexport function handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement,\n elements,\n}: {\n fieldType: FieldDataType;\n fieldSchema: any;\n fieldMetadata: any;\n expectedFieldData: any;\n editableElement: HTMLElement;\n elements: VisualBuilderEditContext;\n}) {\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(\n fieldMetadata.instance.fieldPathWithIndex.split(\".\").at(-1)\n );\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if (isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if (Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We receive unreliable `multipleFieldMetadata` in this case)\n if (!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if (index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n } else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData,\n editableElement,\n elements,\n });\n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if (isInstance) {\n if (index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData)\n ? expectedFieldData.at(0)\n : expectedFieldData;\n }\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,\n editableElement,\n elements,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA8C;AAC9C,6BAAgC;AAEhC,iCAAoC;AAK7B,SAAS,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAOG;AACC,MAAI,CAAC,+CAA8B,SAAS,SAAS,EAAG;AAGxD,QAAM,QAAQ;AAAA,IACV,cAAc,SAAS,mBAAmB,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA,EAC9D;AACA,QAAM,aAAa,OAAO,SAAS,KAAK;AAGxC,UAAI,wCAAgB,WAAW,GAAG;AAC9B,QAAI,4BAA4B;AAChC,QAAI,MAAM,QAAQ,iBAAiB,GAAG;AAIlC,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAGA,UAAI,SAAS,kBAAkB,QAAQ;AAAA,MAEvC,OAAO;AACH,oCAA4B,kBAAkB,GAAG,KAAK;AAAA,MAC1D;AAAA,IACJ,OAEK;AACD,kCAA4B;AAAA,IAChC;AAEA,wDAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,OAEK;AACD,QAAI,4BAA4B;AAEhC,QAAI,YAAY;AACZ,UAAI,UAAU,GAAG;AAGb;AAAA,MACJ;AACA,kCAA4B,MAAM,QAAQ,iBAAiB,IACrD,kBAAkB,GAAG,CAAC,IACtB;AAAA,IACV;AACA,wDAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB,6BAA6B;AAAA,MAChD;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
@@ -0,0 +1,16 @@
1
+ import { FieldDataType, VisualBuilderEditContext } from './types/index.types.cjs';
2
+ import '../../cms/types/contentTypeSchema.types.cjs';
3
+
4
+ /**
5
+ * Handles inline editing for supported fields.
6
+ */
7
+ declare function handleInlineEditableField({ fieldType, fieldSchema, fieldMetadata, expectedFieldData, editableElement, elements, }: {
8
+ fieldType: FieldDataType;
9
+ fieldSchema: any;
10
+ fieldMetadata: any;
11
+ expectedFieldData: any;
12
+ editableElement: HTMLElement;
13
+ elements: VisualBuilderEditContext;
14
+ }): void;
15
+
16
+ export { handleInlineEditableField };
@@ -0,0 +1,16 @@
1
+ import { FieldDataType, VisualBuilderEditContext } from './types/index.types.js';
2
+ import '../../cms/types/contentTypeSchema.types.js';
3
+
4
+ /**
5
+ * Handles inline editing for supported fields.
6
+ */
7
+ declare function handleInlineEditableField({ fieldType, fieldSchema, fieldMetadata, expectedFieldData, editableElement, elements, }: {
8
+ fieldType: FieldDataType;
9
+ fieldSchema: any;
10
+ fieldMetadata: any;
11
+ expectedFieldData: any;
12
+ editableElement: HTMLElement;
13
+ elements: VisualBuilderEditContext;
14
+ }): void;
15
+
16
+ export { handleInlineEditableField };
@@ -0,0 +1,58 @@
1
+ import "../../chunk-5WRI5ZAA.js";
2
+
3
+ // src/visualBuilder/utils/handleInlineEditableField.ts
4
+ import { ALLOWED_INLINE_EDITABLE_FIELD } from "./constants.js";
5
+ import { isFieldMultiple } from "./isFieldMultiple.js";
6
+ import { enableInlineEditing } from "./enableInlineEditing.js";
7
+ function handleInlineEditableField({
8
+ fieldType,
9
+ fieldSchema,
10
+ fieldMetadata,
11
+ expectedFieldData,
12
+ editableElement,
13
+ elements
14
+ }) {
15
+ if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
16
+ const index = Number(
17
+ fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1)
18
+ );
19
+ const isInstance = Number.isFinite(index);
20
+ if (isFieldMultiple(fieldSchema)) {
21
+ let expectedFieldInstanceData = null;
22
+ if (Array.isArray(expectedFieldData)) {
23
+ if (!isInstance) {
24
+ return;
25
+ }
26
+ if (index >= expectedFieldData.length) {
27
+ } else {
28
+ expectedFieldInstanceData = expectedFieldData.at(index);
29
+ }
30
+ } else {
31
+ expectedFieldInstanceData = expectedFieldData;
32
+ }
33
+ enableInlineEditing({
34
+ fieldType,
35
+ expectedFieldData: expectedFieldInstanceData,
36
+ editableElement,
37
+ elements
38
+ });
39
+ } else {
40
+ let expectedFieldInstanceData = null;
41
+ if (isInstance) {
42
+ if (index !== 0) {
43
+ return;
44
+ }
45
+ expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
46
+ }
47
+ enableInlineEditing({
48
+ fieldType,
49
+ expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,
50
+ editableElement,
51
+ elements
52
+ });
53
+ }
54
+ }
55
+ export {
56
+ handleInlineEditableField
57
+ };
58
+ //# sourceMappingURL=handleInlineEditableField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleInlineEditableField.ts"],"sourcesContent":["import { ALLOWED_INLINE_EDITABLE_FIELD } from \"./constants\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { enableInlineEditing } from \"./enableInlineEditing\";\n\n/**\n * Handles inline editing for supported fields.\n */\nexport function handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement,\n elements,\n}: {\n fieldType: FieldDataType;\n fieldSchema: any;\n fieldMetadata: any;\n expectedFieldData: any;\n editableElement: HTMLElement;\n elements: VisualBuilderEditContext;\n}) {\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(\n fieldMetadata.instance.fieldPathWithIndex.split(\".\").at(-1)\n );\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if (isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if (Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We receive unreliable `multipleFieldMetadata` in this case)\n if (!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if (index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n } else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData,\n editableElement,\n elements,\n });\n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if (isInstance) {\n if (index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData)\n ? expectedFieldData.at(0)\n : expectedFieldData;\n }\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,\n editableElement,\n elements,\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,qCAAqC;AAC9C,SAAS,uBAAuB;AAEhC,SAAS,2BAA2B;AAK7B,SAAS,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAOG;AACC,MAAI,CAAC,8BAA8B,SAAS,SAAS,EAAG;AAGxD,QAAM,QAAQ;AAAA,IACV,cAAc,SAAS,mBAAmB,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA,EAC9D;AACA,QAAM,aAAa,OAAO,SAAS,KAAK;AAGxC,MAAI,gBAAgB,WAAW,GAAG;AAC9B,QAAI,4BAA4B;AAChC,QAAI,MAAM,QAAQ,iBAAiB,GAAG;AAIlC,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAGA,UAAI,SAAS,kBAAkB,QAAQ;AAAA,MAEvC,OAAO;AACH,oCAA4B,kBAAkB,GAAG,KAAK;AAAA,MAC1D;AAAA,IACJ,OAEK;AACD,kCAA4B;AAAA,IAChC;AAEA,wBAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,OAEK;AACD,QAAI,4BAA4B;AAEhC,QAAI,YAAY;AACZ,UAAI,UAAU,GAAG;AAGb;AAAA,MACJ;AACA,kCAA4B,MAAM,QAAQ,iBAAiB,IACrD,kBAAkB,GAAG,CAAC,IACtB;AAAA,IACV;AACA,wBAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB,6BAA6B;AAAA,MAChD;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/visualBuilder/utils/isFieldMultiple.ts
21
+ var isFieldMultiple_exports = {};
22
+ __export(isFieldMultiple_exports, {
23
+ isFieldMultiple: () => isFieldMultiple
24
+ });
25
+ module.exports = __toCommonJS(isFieldMultiple_exports);
26
+ function isFieldMultiple(fieldSchema) {
27
+ return fieldSchema && (fieldSchema.multiple || fieldSchema.data_type === "reference" && // @ts-expect-error field_metadata will contain ref_multiple
28
+ // for reference fields
29
+ fieldSchema.field_metadata.ref_multiple);
30
+ }
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ isFieldMultiple
34
+ });
35
+ //# sourceMappingURL=isFieldMultiple.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldMultiple.ts"],"sourcesContent":["import { ISchemaFieldMap } from \"./types/index.types\";\n\nexport function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return (\n fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-expect-error field_metadata will contain ref_multiple\n // for reference fields\n fieldSchema.field_metadata.ref_multiple))\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,gBAAgB,aAAuC;AACnE,SACI,gBACC,YAAY,YACR,YAAY,cAAc;AAAA;AAAA,EAGvB,YAAY,eAAe;AAE3C;","names":[]}
@@ -0,0 +1,6 @@
1
+ import { ISchemaFieldMap } from './types/index.types.cjs';
2
+ import '../../cms/types/contentTypeSchema.types.cjs';
3
+
4
+ declare function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean;
5
+
6
+ export { isFieldMultiple };
@@ -0,0 +1,6 @@
1
+ import { ISchemaFieldMap } from './types/index.types.js';
2
+ import '../../cms/types/contentTypeSchema.types.js';
3
+
4
+ declare function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean;
5
+
6
+ export { isFieldMultiple };
@@ -0,0 +1,12 @@
1
+ import "../../chunk-5WRI5ZAA.js";
2
+
3
+ // src/visualBuilder/utils/isFieldMultiple.ts
4
+ function isFieldMultiple(fieldSchema) {
5
+ return fieldSchema && (fieldSchema.multiple || fieldSchema.data_type === "reference" && // @ts-expect-error field_metadata will contain ref_multiple
6
+ // for reference fields
7
+ fieldSchema.field_metadata.ref_multiple);
8
+ }
9
+ export {
10
+ isFieldMultiple
11
+ };
12
+ //# sourceMappingURL=isFieldMultiple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldMultiple.ts"],"sourcesContent":["import { ISchemaFieldMap } from \"./types/index.types\";\n\nexport function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return (\n fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-expect-error field_metadata will contain ref_multiple\n // for reference fields\n fieldSchema.field_metadata.ref_multiple))\n );\n}\n"],"mappings":";;;AAEO,SAAS,gBAAgB,aAAuC;AACnE,SACI,gBACC,YAAY,YACR,YAAY,cAAc;AAAA;AAAA,EAGvB,YAAY,eAAe;AAE3C;","names":[]}
@@ -36,11 +36,10 @@ __export(multipleElementAddButton_exports, {
36
36
  });
37
37
  module.exports = __toCommonJS(multipleElementAddButton_exports);
38
38
  var import_generateAddInstanceButtons = require("../generators/generateAddInstanceButtons.cjs");
39
- var import_visualBuilderPostMessage = __toESM(require("./visualBuilderPostMessage.cjs"), 1);
40
- var import_postMessage = require("./types/postMessage.types.cjs");
41
39
  var import_getChildrenDirection = __toESM(require("./getChildrenDirection.cjs"), 1);
42
40
  var import_generateOverlay = require("../generators/generateOverlay.cjs");
43
41
  var import_mouseHover = require("../listeners/mouseHover.cjs");
42
+ var import_signals = require("@preact/signals");
44
43
  var WAIT_FOR_NEW_INSTANCE_TIMEOUT = 4e3;
45
44
  function handleAddButtonsForMultiple(eventDetails, elements, config) {
46
45
  const { editableElement, visualBuilderContainer, resizeObserver } = elements;
@@ -91,27 +90,24 @@ function handleAddButtonsForMultiple(eventDetails, elements, config) {
91
90
  index
92
91
  });
93
92
  };
93
+ const loading = (0, import_signals.signal)(false);
94
94
  const previousButton = (0, import_generateAddInstanceButtons.generateAddInstanceButton)({
95
- onClick: () => {
96
- import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.ADD_INSTANCE, {
97
- fieldMetadata: eventDetails.fieldMetadata,
98
- index: prevIndex
99
- }).then(onMessageSent.bind(null, prevIndex));
100
- },
101
- label,
102
95
  fieldSchema,
103
- value: expectedFieldData
96
+ value: expectedFieldData,
97
+ fieldMetadata: eventDetails.fieldMetadata,
98
+ index: prevIndex,
99
+ onClick: onMessageSent.bind(null, prevIndex),
100
+ loading,
101
+ label
104
102
  });
105
103
  const nextButton = (0, import_generateAddInstanceButtons.generateAddInstanceButton)({
106
- onClick: () => {
107
- import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.ADD_INSTANCE, {
108
- fieldMetadata: eventDetails.fieldMetadata,
109
- index: nextIndex
110
- }).then(onMessageSent.bind(null, nextIndex));
111
- },
112
- label,
113
104
  fieldSchema,
114
- value: expectedFieldData
105
+ value: expectedFieldData,
106
+ fieldMetadata: eventDetails.fieldMetadata,
107
+ index: nextIndex,
108
+ onClick: onMessageSent.bind(null, nextIndex),
109
+ loading,
110
+ label
115
111
  });
116
112
  if (!visualBuilderContainer.contains(previousButton)) {
117
113
  visualBuilderContainer.appendChild(previousButton);