@alpaca-editor/core 1.0.4083 → 1.0.4085

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 (85) hide show
  1. package/dist/components/ui/card.js +1 -1
  2. package/dist/components/ui/card.js.map +1 -1
  3. package/dist/editor/FieldListField.d.ts +3 -2
  4. package/dist/editor/FieldListField.js +8 -8
  5. package/dist/editor/FieldListField.js.map +1 -1
  6. package/dist/editor/FieldListFieldWithFallbacks.js +2 -2
  7. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  8. package/dist/editor/LinkEditorDialog.d.ts +1 -0
  9. package/dist/editor/LinkEditorDialog.js +4 -2
  10. package/dist/editor/LinkEditorDialog.js.map +1 -1
  11. package/dist/editor/client/EditorShell.js +11 -3
  12. package/dist/editor/client/EditorShell.js.map +1 -1
  13. package/dist/editor/client/editContext.d.ts +1 -0
  14. package/dist/editor/client/editContext.js.map +1 -1
  15. package/dist/editor/client/hooks/useWorkbox.js +6 -7
  16. package/dist/editor/client/hooks/useWorkbox.js.map +1 -1
  17. package/dist/editor/client/ui/EditorChrome.js +2 -1
  18. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  19. package/dist/editor/component-designer/ComponentDesigner.d.ts +1 -1
  20. package/dist/editor/component-designer/ComponentDesigner.js +48 -53
  21. package/dist/editor/component-designer/ComponentDesigner.js.map +1 -1
  22. package/dist/editor/control-center/About.js +1 -1
  23. package/dist/editor/control-center/About.js.map +1 -1
  24. package/dist/editor/field-types/RichTextEditor.d.ts +2 -1
  25. package/dist/editor/field-types/RichTextEditor.js +4 -4
  26. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  27. package/dist/editor/field-types/RichTextEditorComponent.d.ts +2 -1
  28. package/dist/editor/field-types/RichTextEditorComponent.js +2 -2
  29. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  30. package/dist/editor/field-types/richtext/components/ReactSlate.js +36 -25
  31. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  32. package/dist/editor/field-types/richtext/components/ToolbarButton.d.ts +2 -2
  33. package/dist/editor/field-types/richtext/components/ToolbarButton.js +3 -10
  34. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  35. package/dist/editor/field-types/richtext/types.d.ts +1 -0
  36. package/dist/editor/field-types/richtext/types.js.map +1 -1
  37. package/dist/editor/field-types/richtext/utils/conversion.js +180 -21
  38. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  39. package/dist/editor/field-types/richtext/utils/plugins.d.ts +1 -0
  40. package/dist/editor/field-types/richtext/utils/plugins.js +19 -4
  41. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
  42. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +11 -2
  43. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  44. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +1 -1
  45. package/dist/editor/page-editor-chrome/FieldActionIndicators.js.map +1 -1
  46. package/dist/editor/page-viewer/EditorForm.js +1 -1
  47. package/dist/editor/page-viewer/PageViewerFrame.js +2 -1
  48. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  49. package/dist/editor/utils/urlUtils.d.ts +9 -0
  50. package/dist/editor/utils/urlUtils.js +25 -0
  51. package/dist/editor/utils/urlUtils.js.map +1 -0
  52. package/dist/page-wizard/steps/SelectStep.js +28 -12
  53. package/dist/page-wizard/steps/SelectStep.js.map +1 -1
  54. package/dist/revision.d.ts +2 -2
  55. package/dist/revision.js +2 -2
  56. package/dist/styles.css +24 -0
  57. package/package.json +1 -2
  58. package/src/components/ui/card.tsx +1 -1
  59. package/src/editor/FieldListField.tsx +11 -4
  60. package/src/editor/FieldListFieldWithFallbacks.tsx +3 -1
  61. package/src/editor/LinkEditorDialog.tsx +6 -2
  62. package/src/editor/client/EditorShell.tsx +20 -4
  63. package/src/editor/client/editContext.ts +1 -0
  64. package/src/editor/client/hooks/useWorkbox.ts +6 -7
  65. package/src/editor/client/ui/EditorChrome.tsx +4 -1
  66. package/src/editor/component-designer/ComponentDesigner.tsx +49 -53
  67. package/src/editor/control-center/About.tsx +0 -15
  68. package/src/editor/field-types/RichTextEditor.tsx +13 -10
  69. package/src/editor/field-types/RichTextEditorComponent.tsx +3 -0
  70. package/src/editor/field-types/richtext/components/ReactSlate.tsx +503 -437
  71. package/src/editor/field-types/richtext/components/ToolbarButton.tsx +12 -14
  72. package/src/editor/field-types/richtext/types.ts +18 -10
  73. package/src/editor/field-types/richtext/utils/conversion.ts +204 -23
  74. package/src/editor/field-types/richtext/utils/plugins.ts +24 -4
  75. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +63 -7
  76. package/src/editor/page-editor-chrome/FieldActionIndicators.tsx +1 -1
  77. package/src/editor/page-viewer/EditorForm.tsx +2 -2
  78. package/src/editor/page-viewer/PageViewerFrame.tsx +2 -1
  79. package/src/editor/utils/urlUtils.ts +24 -0
  80. package/src/page-wizard/steps/SelectStep.tsx +47 -18
  81. package/src/revision.ts +2 -2
  82. package/dist/editor/ui/StackedPanels.d.ts +0 -5
  83. package/dist/editor/ui/StackedPanels.js +0 -67
  84. package/dist/editor/ui/StackedPanels.js.map +0 -1
  85. package/src/editor/ui/StackedPanels.tsx +0 -134
@@ -58,9 +58,8 @@ export function SelectStep({
58
58
  );
59
59
  }
60
60
 
61
- if (existingValues?.length) {
61
+ if (Array.isArray(existingValues) && existingValues.length) {
62
62
  setStepCompleted(true);
63
- setSelectedOptions(existingValues);
64
63
  }
65
64
  }, [data, inputProperties]);
66
65
 
@@ -123,17 +122,36 @@ Create ${step.fields.numberOfOptions || 5} relevant options.`,
123
122
  try {
124
123
  const lastMessage = result.messages[result.messages.length - 1];
125
124
  if (lastMessage && lastMessage.content) {
126
- const generatedOptions = JSON.parse(
127
- lastMessage.content,
128
- ) as Response;
129
- for (let i = 0; i < generatedOptions.options.length; i++) {
130
- generatedOptions.options[i]!.id = i.toString();
125
+ const parsed: any = JSON.parse(lastMessage.content);
126
+ const optionsArray: any[] = Array.isArray(parsed)
127
+ ? parsed
128
+ : Array.isArray(parsed?.options)
129
+ ? parsed.options
130
+ : [];
131
+
132
+ if (!Array.isArray(optionsArray) || optionsArray.length === 0) {
133
+ throw new Error("Parsed response did not contain any options");
131
134
  }
132
135
 
133
- setOptions(generatedOptions.options);
136
+ const normalizedOptions: Option[] = optionsArray.map(
137
+ (opt: any, index: number) => ({
138
+ id: String(opt?.id ?? opt?.value ?? index),
139
+ title: String(
140
+ opt?.title ??
141
+ opt?.label ??
142
+ opt?.name ??
143
+ `Option ${index + 1}`,
144
+ ),
145
+ description: String(
146
+ opt?.description ?? opt?.details ?? opt?.summary ?? "",
147
+ ),
148
+ }),
149
+ );
150
+
151
+ setOptions(normalizedOptions);
134
152
  setInternalState((state: any) => ({
135
153
  ...state,
136
- [step.id + "options"]: generatedOptions.options,
154
+ [step.id + "options"]: normalizedOptions,
137
155
  }));
138
156
  }
139
157
  } catch (parseError) {
@@ -168,8 +186,14 @@ Create ${step.fields.numberOfOptions || 5} relevant options.`,
168
186
  inputProperties,
169
187
  data,
170
188
  );
171
- const selectionsArray = currentSelections || [];
172
- setSelectedOptions(selectionsArray.map((option: Option) => option.id));
189
+ const selectionsArray = Array.isArray(currentSelections)
190
+ ? currentSelections
191
+ : [];
192
+ setSelectedOptions(
193
+ selectionsArray.map((option: any) =>
194
+ typeof option === "string" ? option : option.id,
195
+ ),
196
+ );
173
197
  }, [data, inputProperties]);
174
198
 
175
199
  // Handle option selection
@@ -213,7 +237,7 @@ Create ${step.fields.numberOfOptions || 5} relevant options.`,
213
237
  <div className="flex h-full flex-col md:flex-row">
214
238
  <WizardBox
215
239
  title={step.fields.configureTitle || "Configuration"}
216
- icon={<Settings />}
240
+ icon={<Settings strokeWidth={1} />}
217
241
  description={
218
242
  step.fields.configureDescription ||
219
243
  "Configure instructions and regenerate options"
@@ -248,7 +272,7 @@ Create ${step.fields.numberOfOptions || 5} relevant options.`,
248
272
  <WizardBoxConnector />
249
273
  <WizardBox
250
274
  title={step.fields.selectOptionsTitle || "Select Options"}
251
- icon={<CheckSquare />}
275
+ icon={<CheckSquare strokeWidth={1} />}
252
276
  description={
253
277
  step.fields.selectOptionsDescription ||
254
278
  "Choose from the generated options below"
@@ -295,11 +319,16 @@ Create ${step.fields.numberOfOptions || 5} relevant options.`,
295
319
  {option.description}
296
320
  </div>
297
321
  </div>
298
- {isSelected && (
299
- <div className="bg-theme-secondary ml-2 flex h-6 w-6 items-center justify-center rounded-full text-white">
300
-
301
- </div>
302
- )}
322
+ <div
323
+ className={classNames(
324
+ "ml-2 flex h-6 w-6 items-center justify-center rounded-full text-white",
325
+ isSelected
326
+ ? "bg-theme-secondary opacity-100"
327
+ : "opacity-0",
328
+ )}
329
+ >
330
+
331
+ </div>
303
332
  </div>
304
333
  );
305
334
  })
package/src/revision.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = "1.0.4083";
2
- export const buildDate = "2025-09-11 01:45:58";
1
+ export const version = "1.0.4085";
2
+ export const buildDate = "2025-09-11 13:12:15";
@@ -1,5 +0,0 @@
1
- import "allotment/dist/style.css";
2
- import { Panel } from "../../config/types";
3
- export declare function StackedPanels({ panels }: {
4
- panels: Panel[];
5
- }): import("react/jsx-runtime").JSX.Element;
@@ -1,67 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import "allotment/dist/style.css";
3
- import { Allotment } from "allotment";
4
- import { useEffect, useRef, useState } from "react";
5
- import { classNames } from "primereact/utils";
6
- export function StackedPanels({ panels }) {
7
- const splitter = useRef(null);
8
- const [sizes, setSizes] = useState([]);
9
- const [preferredSizes, setPreferredSizes] = useState(undefined);
10
- const [panelsExpanded, setPanelsExpanded] = useState([]);
11
- const [sizeToSet, setSizeToSet] = useState();
12
- const panelHeaderSize = 30;
13
- const toggle = (panelIndex) => {
14
- const newSize = panelsExpanded[panelIndex]
15
- ? panelHeaderSize
16
- : (preferredSizes || sizes)[panelIndex];
17
- resizePanel(panelIndex, newSize);
18
- setPanelsExpanded((x) => {
19
- const newState = [...x];
20
- newState[panelIndex] = !newState[panelIndex];
21
- return newState;
22
- });
23
- };
24
- useEffect(() => {
25
- setPanelsExpanded(panels.map(() => true));
26
- setPreferredSizes(() => panels.map((x) => x.initialSize));
27
- }, [panels]);
28
- const resizePanel = (panelIndex, newSize) => {
29
- const totalSize = sizes.reduce((a, b) => a + b, 0);
30
- const totalOther = totalSize - sizes[panelIndex];
31
- const tmpSizes = [...sizes];
32
- tmpSizes[panelIndex] = newSize;
33
- const percentages = tmpSizes.map((x) => x / totalOther);
34
- percentages[panelIndex] = 0;
35
- const remaining = totalSize - newSize;
36
- const newSizes = percentages.map((x) => x * remaining);
37
- newSizes[panelIndex] = newSize;
38
- setSizes(newSizes);
39
- setSizeToSet(newSizes);
40
- };
41
- useEffect(() => {
42
- if (sizeToSet)
43
- splitter.current?.resize(sizeToSet);
44
- }, [sizeToSet]);
45
- const getHeader = (panel, index) => {
46
- if (panel.header)
47
- return panel.header({ panel, index });
48
- return (_jsxs("div", { className: classNames("p-1.5 bg-gray-50 uppercase text-gray-500 text-xs flex justify items-center cursor-pointer", panelsExpanded[index] ? "border-b" : ""), onClick: () => toggle(index), children: [panel.icon &&
49
- (typeof panel.icon === "string" ? (_jsx("i", { className: classNames(panel.icon, "pi mr-1.5") })) : (_jsx("div", { className: "w-4 h-4 mr-1.5", children: panel.icon }))), _jsx("div", { className: "mr-auto", children: panel.title }), _jsx("i", { className: classNames(panelsExpanded[index] ? "pi-chevron-up" : "pi-chevron-down", "pi text-sm") })] }));
50
- };
51
- const initalSizes = panels.map((x) => x.initialSize);
52
- return (_jsx(Allotment, { vertical: true, snap: true, ref: splitter, defaultSizes: initalSizes, onChange: (s) => {
53
- if (sizes.join(",") != s.join(","))
54
- setSizes(s);
55
- const newPreferred = [...(preferredSizes || s)];
56
- s.forEach((x, i) => {
57
- if (x > panelHeaderSize)
58
- newPreferred[i] = x;
59
- });
60
- setPreferredSizes(newPreferred);
61
- }, children: panels.map((panel, index) => (_jsx(Allotment.Pane, {
62
- // preferredSize={(preferredSizes || initalSizes)[index] + "%"}
63
- maxSize: panelsExpanded.length <= index || panelsExpanded[index]
64
- ? 10000
65
- : panelHeaderSize, children: _jsxs("div", { className: "flex flex-col h-full", children: [getHeader(panel, index), panelsExpanded[index] && (_jsx("div", { className: "overflow-hidden relative flex-1", children: _jsx("div", { className: classNames("inset-0 absolute", panel.noOverflow ? "" : "overflow-y-auto"), children: panel.content }) }))] }) }, index))) }));
66
- }
67
- //# sourceMappingURL=StackedPanels.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackedPanels.js","sourceRoot":"","sources":["../../../src/editor/ui/StackedPanels.tsx"],"names":[],"mappings":"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"}
@@ -1,134 +0,0 @@
1
- import "allotment/dist/style.css";
2
- import { Allotment, AllotmentHandle } from "allotment";
3
-
4
- import { useEffect, useRef, useState } from "react";
5
-
6
- import { classNames } from "primereact/utils";
7
- import { Panel } from "../../config/types";
8
-
9
- export function StackedPanels({ panels }: { panels: Panel[] }) {
10
- const splitter = useRef<AllotmentHandle>(null);
11
-
12
- const [sizes, setSizes] = useState<number[]>([]);
13
- const [preferredSizes, setPreferredSizes] = useState<number[] | undefined>(
14
- undefined
15
- );
16
- const [panelsExpanded, setPanelsExpanded] = useState<boolean[]>([]);
17
- const [sizeToSet, setSizeToSet] = useState<number[] | undefined>();
18
-
19
- const panelHeaderSize = 30;
20
- const toggle = (panelIndex: number) => {
21
- const newSize = panelsExpanded[panelIndex]
22
- ? panelHeaderSize
23
- : (preferredSizes || sizes)[panelIndex];
24
-
25
- resizePanel(panelIndex, newSize);
26
-
27
- setPanelsExpanded((x) => {
28
- const newState = [...x];
29
- newState[panelIndex] = !newState[panelIndex];
30
- return newState;
31
- });
32
- };
33
-
34
- useEffect(() => {
35
- setPanelsExpanded(panels.map(() => true));
36
- setPreferredSizes(() => panels.map((x) => x.initialSize));
37
- }, [panels]);
38
-
39
- const resizePanel = (panelIndex: number, newSize: number) => {
40
- const totalSize = sizes.reduce((a, b) => a + b, 0);
41
- const totalOther = totalSize - sizes[panelIndex];
42
- const tmpSizes = [...sizes];
43
- tmpSizes[panelIndex] = newSize;
44
- const percentages = tmpSizes.map((x) => x / totalOther);
45
- percentages[panelIndex] = 0;
46
- const remaining = totalSize - newSize;
47
- const newSizes = percentages.map((x) => x * remaining);
48
- newSizes[panelIndex] = newSize;
49
- setSizes(newSizes);
50
-
51
- setSizeToSet(newSizes);
52
- };
53
-
54
- useEffect(() => {
55
- if (sizeToSet) splitter.current?.resize(sizeToSet);
56
- }, [sizeToSet]);
57
-
58
- const getHeader = (panel: any, index: number) => {
59
- if (panel.header) return panel.header({ panel, index });
60
-
61
- return (
62
- <div
63
- className={classNames(
64
- "p-1.5 bg-gray-50 uppercase text-gray-500 text-xs flex justify items-center cursor-pointer",
65
- panelsExpanded[index] ? "border-b" : ""
66
- )}
67
- onClick={() => toggle(index)}
68
- >
69
- {panel.icon &&
70
- (typeof panel.icon === "string" ? (
71
- <i className={classNames(panel.icon, "pi mr-1.5")}></i>
72
- ) : (
73
- <div className="w-4 h-4 mr-1.5">{panel.icon}</div>
74
- ))}
75
- <div className="mr-auto">{panel.title}</div>
76
- <i
77
- className={classNames(
78
- panelsExpanded[index] ? "pi-chevron-up" : "pi-chevron-down",
79
- "pi text-sm"
80
- )}
81
- ></i>
82
- </div>
83
- );
84
- };
85
-
86
- const initalSizes = panels.map((x) => x.initialSize);
87
-
88
- return (
89
- <Allotment
90
- vertical={true}
91
- snap={true}
92
- ref={splitter}
93
- defaultSizes={initalSizes}
94
- onChange={(s) => {
95
- if (sizes.join(",") != s.join(",")) setSizes(s);
96
-
97
- const newPreferred = [...(preferredSizes || s)];
98
- s.forEach((x, i) => {
99
- if (x > panelHeaderSize) newPreferred[i] = x;
100
- });
101
-
102
- setPreferredSizes(newPreferred);
103
- }}
104
- >
105
- {panels.map((panel, index) => (
106
- <Allotment.Pane
107
- key={index}
108
- // preferredSize={(preferredSizes || initalSizes)[index] + "%"}
109
- maxSize={
110
- panelsExpanded.length <= index || panelsExpanded[index]
111
- ? 10000
112
- : panelHeaderSize
113
- }
114
- >
115
- <div className="flex flex-col h-full">
116
- {getHeader(panel, index)}
117
- {panelsExpanded[index] && (
118
- <div className="overflow-hidden relative flex-1">
119
- <div
120
- className={classNames(
121
- "inset-0 absolute",
122
- panel.noOverflow ? "" : "overflow-y-auto"
123
- )}
124
- >
125
- {panel.content}
126
- </div>
127
- </div>
128
- )}
129
- </div>
130
- </Allotment.Pane>
131
- ))}
132
- </Allotment>
133
- );
134
- }