@alpaca-editor/core 1.0.0 → 1.0.3764-editor-mono

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 (223) hide show
  1. package/dist/client-components/api.js +6 -0
  2. package/dist/client-components/index.js +36 -0
  3. package/dist/components/ActionButton.js +9 -0
  4. package/dist/components/Error.js +28 -0
  5. package/dist/config/config.js +654 -0
  6. package/dist/config/types.js +2 -0
  7. package/dist/editor/ComponentInfo.js +31 -0
  8. package/dist/editor/ConfirmationDialog.js +32 -0
  9. package/dist/editor/ContentTree.js +406 -0
  10. package/dist/editor/ContextMenu.js +117 -0
  11. package/dist/editor/Editor.js +55 -0
  12. package/dist/editor/EditorWarning.js +13 -0
  13. package/dist/editor/EditorWarnings.js +24 -0
  14. package/dist/editor/FieldEditorPopup.js +24 -0
  15. package/dist/editor/FieldHistory.js +40 -0
  16. package/dist/editor/FieldList.js +63 -0
  17. package/dist/editor/FieldListField.js +164 -0
  18. package/dist/editor/FieldListFieldWithFallbacks.js +114 -0
  19. package/dist/editor/FloatingToolbar.js +92 -0
  20. package/dist/editor/ImageEditor.js +55 -0
  21. package/dist/editor/InsertMenu.js +164 -0
  22. package/dist/editor/ItemInfo.js +30 -0
  23. package/dist/editor/LinkEditorDialog.js +89 -0
  24. package/dist/editor/MainLayout.js +46 -0
  25. package/dist/editor/NewEditorClient.js +9 -0
  26. package/dist/editor/PictureCropper.js +332 -0
  27. package/dist/editor/PictureEditor.js +104 -0
  28. package/dist/editor/PictureEditorDialog.js +194 -0
  29. package/dist/editor/ScrollingContentTree.js +30 -0
  30. package/dist/editor/Terminal.js +109 -0
  31. package/dist/editor/Titlebar.js +11 -0
  32. package/dist/editor/ai/AiPopup.js +25 -0
  33. package/dist/editor/ai/AiResponseMessage.js +24 -0
  34. package/dist/editor/ai/AiTerminal.js +241 -0
  35. package/dist/editor/ai/AiToolCall.js +18 -0
  36. package/dist/editor/ai/EditorAiTerminal.js +9 -0
  37. package/dist/editor/ai/editorAiContext.js +14 -0
  38. package/dist/editor/client/DialogContext.js +29 -0
  39. package/dist/editor/client/EditorClient.js +1336 -0
  40. package/dist/editor/client/GenericDialog.js +27 -0
  41. package/dist/editor/client/editContext.js +59 -0
  42. package/dist/editor/client/helpers.js +31 -0
  43. package/dist/editor/client/itemsRepository.js +255 -0
  44. package/dist/editor/client/operations.js +398 -0
  45. package/dist/editor/client/pageModelBuilder.js +129 -0
  46. package/dist/editor/commands/commands.js +2 -0
  47. package/dist/editor/commands/componentCommands.js +277 -0
  48. package/dist/editor/commands/createVersionCommand.js +26 -0
  49. package/dist/editor/commands/deleteVersionCommand.js +55 -0
  50. package/dist/editor/commands/itemCommands.js +134 -0
  51. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +94 -0
  52. package/dist/editor/commands/undo.js +32 -0
  53. package/dist/editor/component-designer/ComponentDesigner.js +58 -0
  54. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +9 -0
  55. package/dist/editor/component-designer/ComponentDesignerMenu.js +67 -0
  56. package/dist/editor/component-designer/ComponentEditor.js +59 -0
  57. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +16 -0
  58. package/dist/editor/component-designer/ComponentRenderingEditor.js +71 -0
  59. package/dist/editor/component-designer/ComponentsDropdown.js +22 -0
  60. package/dist/editor/component-designer/PlaceholdersEditor.js +70 -0
  61. package/dist/editor/component-designer/RenderingsDropdown.js +25 -0
  62. package/dist/editor/component-designer/TemplateEditor.js +144 -0
  63. package/dist/editor/component-designer/aiContext.js +18 -0
  64. package/dist/editor/componentTreeHelper.js +97 -0
  65. package/dist/editor/control-center/ControlCenterMenu.js +59 -0
  66. package/dist/editor/control-center/IndexOverview.js +27 -0
  67. package/dist/editor/control-center/IndexSettings.js +106 -0
  68. package/dist/editor/control-center/Status.js +7 -0
  69. package/dist/editor/editor-warnings/ItemLocked.js +40 -0
  70. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +16 -0
  71. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +16 -0
  72. package/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
  73. package/dist/editor/editor-warnings/ValidationErrors.js +27 -0
  74. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  75. package/dist/editor/field-types/CheckboxEditor.js +32 -0
  76. package/dist/editor/field-types/DropLinkEditor.js +51 -0
  77. package/dist/editor/field-types/DropListEditor.js +58 -0
  78. package/dist/editor/field-types/ImageFieldEditor.js +36 -0
  79. package/dist/editor/field-types/InternalLinkFieldEditor.js +64 -0
  80. package/dist/editor/field-types/LinkFieldEditor.js +58 -0
  81. package/dist/editor/field-types/MultiLineText.js +35 -0
  82. package/dist/editor/field-types/PictureFieldEditor.js +59 -0
  83. package/dist/editor/field-types/RawEditor.js +33 -0
  84. package/dist/editor/field-types/ReactQuill.js +366 -0
  85. package/dist/editor/field-types/RichTextEditor.js +46 -0
  86. package/dist/editor/field-types/RichTextEditorComponent.js +72 -0
  87. package/dist/editor/field-types/SingleLineText.js +92 -0
  88. package/dist/editor/field-types/TreeListEditor.js +137 -0
  89. package/dist/editor/fieldTypes.js +2 -0
  90. package/dist/editor/media-selector/AiImageSearch.js +110 -0
  91. package/dist/editor/media-selector/AiImageSearchPrompt.js +58 -0
  92. package/dist/editor/media-selector/MediaSelector.js +11 -0
  93. package/dist/editor/media-selector/Preview.js +9 -0
  94. package/dist/editor/media-selector/Thumbnails.js +11 -0
  95. package/dist/editor/media-selector/TreeSelector.js +171 -0
  96. package/dist/editor/media-selector/UploadZone.js +80 -0
  97. package/dist/editor/menubar/ActionsMenu.js +33 -0
  98. package/dist/editor/menubar/ActiveUsers.js +13 -0
  99. package/dist/editor/menubar/ApproveAndPublish.js +13 -0
  100. package/dist/editor/menubar/BrowseHistory.js +14 -0
  101. package/dist/editor/menubar/ItemLanguageVersion.js +36 -0
  102. package/dist/editor/menubar/LanguageSelector.js +33 -0
  103. package/dist/editor/menubar/Menu.js +65 -0
  104. package/dist/editor/menubar/NavButtons.js +43 -0
  105. package/dist/editor/menubar/PageSelector.js +50 -0
  106. package/dist/editor/menubar/PageViewerControls.js +37 -0
  107. package/dist/editor/menubar/Separator.js +8 -0
  108. package/dist/editor/menubar/SiteInfo.js +26 -0
  109. package/dist/editor/menubar/User.js +18 -0
  110. package/dist/editor/menubar/VersionSelector.js +49 -0
  111. package/dist/editor/page-editor-chrome/CommentHighlighting.js +214 -0
  112. package/dist/editor/page-editor-chrome/CommentHighlightings.js +17 -0
  113. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +27 -0
  114. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +15 -0
  115. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +27 -0
  116. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +15 -0
  117. package/dist/editor/page-editor-chrome/FrameMenu.js +178 -0
  118. package/dist/editor/page-editor-chrome/FrameMenus.js +24 -0
  119. package/dist/editor/page-editor-chrome/InlineEditor.js +101 -0
  120. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +35 -0
  121. package/dist/editor/page-editor-chrome/NoLayout.js +21 -0
  122. package/dist/editor/page-editor-chrome/PageEditorChrome.js +65 -0
  123. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +109 -0
  124. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +82 -0
  125. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +147 -0
  126. package/dist/editor/page-viewer/DeviceToolbar.js +21 -0
  127. package/dist/editor/page-viewer/EditorForm.js +130 -0
  128. package/dist/editor/page-viewer/MiniMap.js +257 -0
  129. package/dist/editor/page-viewer/PageViewer.js +64 -0
  130. package/dist/editor/page-viewer/PageViewerFrame.js +696 -0
  131. package/dist/editor/page-viewer/pageViewContext.js +117 -0
  132. package/dist/editor/pageModel.js +2 -0
  133. package/dist/editor/picture-shared.js +28 -0
  134. package/dist/editor/reviews/Comment.js +112 -0
  135. package/dist/editor/reviews/Comments.js +24 -0
  136. package/dist/editor/reviews/PreviewInfo.js +13 -0
  137. package/dist/editor/reviews/Reviews.js +165 -0
  138. package/dist/editor/reviews/reviewCommands.js +44 -0
  139. package/dist/editor/reviews/useReviews.js +48 -0
  140. package/dist/editor/services/aiService.js +99 -0
  141. package/dist/editor/services/componentDesignerService.js +79 -0
  142. package/dist/editor/services/contentService.js +104 -0
  143. package/dist/editor/services/editService.js +322 -0
  144. package/dist/editor/services/indexService.js +25 -0
  145. package/dist/editor/services/reviewsService.js +43 -0
  146. package/dist/editor/services/serviceHelper.js +67 -0
  147. package/dist/editor/services/systemService.js +7 -0
  148. package/dist/editor/services/translationService.js +15 -0
  149. package/dist/editor/services-server/api.js +119 -0
  150. package/dist/editor/services-server/graphQL.js +56 -0
  151. package/dist/editor/sidebar/ComponentPalette.js +55 -0
  152. package/dist/editor/sidebar/ComponentTree.js +362 -0
  153. package/dist/editor/sidebar/Debug.js +60 -0
  154. package/dist/editor/sidebar/DictionaryEditor.js +160 -0
  155. package/dist/editor/sidebar/EditHistory.js +74 -0
  156. package/dist/editor/sidebar/GraphQL.js +115 -0
  157. package/dist/editor/sidebar/Insert.js +24 -0
  158. package/dist/editor/sidebar/MainContentTree.js +52 -0
  159. package/dist/editor/sidebar/Performance.js +34 -0
  160. package/dist/editor/sidebar/Sessions.js +31 -0
  161. package/dist/editor/sidebar/Sidebar.js +15 -0
  162. package/dist/editor/sidebar/SidebarView.js +76 -0
  163. package/dist/editor/sidebar/Translations.js +160 -0
  164. package/dist/editor/sidebar/Validation.js +52 -0
  165. package/dist/editor/sidebar/ViewSelector.js +15 -0
  166. package/dist/editor/sidebar/Workbox.js +80 -0
  167. package/dist/editor/ui/CenteredMessage.js +7 -0
  168. package/dist/editor/ui/CopyToClipboardButton.js +17 -0
  169. package/dist/editor/ui/DialogButtons.js +7 -0
  170. package/dist/editor/ui/Icons.js +75 -0
  171. package/dist/editor/ui/ItemNameDialog.js +45 -0
  172. package/dist/editor/ui/ItemNameDialogNew.js +61 -0
  173. package/dist/editor/ui/ItemSearch.js +93 -0
  174. package/dist/editor/ui/PerfectTree.js +223 -0
  175. package/dist/editor/ui/Section.js +12 -0
  176. package/dist/editor/ui/SimpleIconButton.js +11 -0
  177. package/dist/editor/ui/SimpleMenu.js +9 -0
  178. package/dist/editor/ui/SimpleTable.js +11 -0
  179. package/dist/editor/ui/SimpleTabs.js +21 -0
  180. package/dist/editor/ui/SimpleToolbar.js +7 -0
  181. package/dist/editor/ui/Spinner.js +7 -0
  182. package/dist/editor/ui/Splitter.js +187 -0
  183. package/dist/editor/ui/StackedPanels.js +69 -0
  184. package/dist/editor/ui/Toolbar.js +7 -0
  185. package/dist/editor/utils/id-helper.js +7 -0
  186. package/dist/editor/utils/insertOptions.js +45 -0
  187. package/dist/editor/utils/itemutils.js +25 -0
  188. package/dist/editor/utils/useMemoDebug.js +20 -0
  189. package/dist/editor/utils.js +328 -0
  190. package/dist/editor/views/CompareView.js +147 -0
  191. package/dist/editor/views/EditView.js +17 -0
  192. package/dist/editor/views/ItemEditor.js +24 -0
  193. package/dist/editor/views/SingleEditView.js +25 -0
  194. package/dist/index.js +22 -0
  195. package/dist/page-wizard/PageWizard.js +62 -0
  196. package/dist/page-wizard/SelectWizard.js +43 -0
  197. package/dist/page-wizard/WizardSteps.js +71 -0
  198. package/dist/page-wizard/service.js +26 -0
  199. package/dist/page-wizard/startPageWizardCommand.js +23 -0
  200. package/dist/page-wizard/steps/BuildPageStep.js +138 -0
  201. package/dist/page-wizard/steps/CollectStep.js +124 -0
  202. package/dist/page-wizard/steps/ComponentTypesSelector.js +211 -0
  203. package/dist/page-wizard/steps/Components.js +94 -0
  204. package/dist/page-wizard/steps/CreatePage.js +142 -0
  205. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +230 -0
  206. package/dist/page-wizard/steps/EditButton.js +7 -0
  207. package/dist/page-wizard/steps/FieldEditor.js +30 -0
  208. package/dist/page-wizard/steps/Generate.js +11 -0
  209. package/dist/page-wizard/steps/ImagesStep.js +159 -0
  210. package/dist/page-wizard/steps/LayoutStep.js +120 -0
  211. package/dist/page-wizard/steps/SelectStep.js +150 -0
  212. package/dist/page-wizard/steps/schema.js +140 -0
  213. package/dist/page-wizard/steps/usePageCreator.js +194 -0
  214. package/dist/splash-screen/NewPage.js +131 -0
  215. package/dist/splash-screen/SectionHeadline.js +9 -0
  216. package/dist/splash-screen/SplashScreen.js +81 -0
  217. package/dist/tour/Tour.js +321 -0
  218. package/dist/tour/default-tour.js +231 -0
  219. package/dist/tour/preview-tour.js +93 -0
  220. package/dist/tsconfig.build.tsbuildinfo +1 -0
  221. package/dist/types.js +2 -0
  222. package/package.json +1 -1
  223. package/src/editor/sidebar/ComponentTree.tsx +512 -512
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ItemSearch = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const inputtext_1 = require("primereact/inputtext");
6
+ const react_1 = require("react");
7
+ const editContext_1 = require("../client/editContext");
8
+ const aiService_1 = require("../services/aiService");
9
+ const use_debounce_1 = require("use-debounce");
10
+ const progressspinner_1 = require("primereact/progressspinner");
11
+ const utils_1 = require("../utils");
12
+ const ItemSearch = ({ rootItemIds, setHoveredItem, itemSelected, language, resultClassName, autoFocus = false, }) => {
13
+ const [query, setQuery] = (0, react_1.useState)("");
14
+ const [results, setResults] = (0, react_1.useState)([]);
15
+ const [loading, setLoading] = (0, react_1.useState)(false);
16
+ const editContext = (0, editContext_1.useEditContext)();
17
+ const inputRef = (0, react_1.useRef)(null);
18
+ const handleSearch = (0, use_debounce_1.useDebouncedCallback)(async (searchPrompt) => {
19
+ if (!editContext)
20
+ return;
21
+ setLoading(true);
22
+ const currentQuery = searchPrompt;
23
+ const guidPattern = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
24
+ if (guidPattern.test(searchPrompt)) {
25
+ const item = await editContext.itemsRepository.getItem({
26
+ id: searchPrompt,
27
+ language: language || "en",
28
+ version: 0,
29
+ });
30
+ if (item) {
31
+ if (query === currentQuery) {
32
+ itemSelected({
33
+ ...(0, utils_1.getItemDescriptor)(item),
34
+ path: item.path || item.name,
35
+ idPath: item.idPath,
36
+ icon: item.icon,
37
+ name: item.name,
38
+ });
39
+ setLoading(false);
40
+ }
41
+ }
42
+ return;
43
+ }
44
+ const result = await (0, aiService_1.executeSearch)({
45
+ index: "master",
46
+ query: searchPrompt,
47
+ editContext,
48
+ rootItemIds,
49
+ maxResults: 6,
50
+ });
51
+ if (query === currentQuery) {
52
+ if (result.type == "success") {
53
+ setResults(() => result.data);
54
+ }
55
+ else {
56
+ editContext.showToast({
57
+ severity: "error",
58
+ summary: "Error searching",
59
+ detail: result.response.statusText,
60
+ });
61
+ }
62
+ }
63
+ setLoading(false);
64
+ }, 600);
65
+ (0, react_1.useEffect)(() => {
66
+ if (query) {
67
+ setLoading(true);
68
+ handleSearch(query);
69
+ }
70
+ else {
71
+ setResults([]);
72
+ }
73
+ }, [query]);
74
+ (0, react_1.useEffect)(() => {
75
+ if (inputRef.current && autoFocus) {
76
+ inputRef.current.focus();
77
+ }
78
+ }, []);
79
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "relative", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)(inputtext_1.InputText, { className: "w-full text-sm pr-8" // Add padding to the right to make space for the spinner
80
+ , onChange: (e) => setQuery(e.target.value), value: query, ref: inputRef }), !loading && !query && ((0, jsx_runtime_1.jsx)("i", { className: "pi pi-search px-3 text-gray-500" })), !loading && query && ((0, jsx_runtime_1.jsx)("i", { className: "pi pi-times px-3 cursor-pointer text-gray-500", onClick: () => setQuery("") })), loading && ((0, jsx_runtime_1.jsx)(progressspinner_1.ProgressSpinner, { style: { width: "24px", height: "24px", margin: "0 12px" } }))] }) }), results.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: `overflow-y-auto flex flex-col gap-1 flex-1 mt-1 ${resultClassName}`, children: results
81
+ .filter((x) => x.language)
82
+ .slice(0, 6)
83
+ .map((x) => ((0, jsx_runtime_1.jsxs)("div", { className: "text-xs cursor-pointer hover:text-gray-400 flex gap-1 items-start", onMouseEnter: () => setHoveredItem?.(x), onMouseLeave: () => setHoveredItem?.(undefined), onClick: () => itemSelected({
84
+ id: x.id,
85
+ language: x.language,
86
+ version: 0,
87
+ path: x.path,
88
+ icon: x.icon,
89
+ idPath: x.idPath,
90
+ }), children: [x.icon && (0, jsx_runtime_1.jsx)("img", { src: x.icon, width: "16", height: "16" }), " ", x.path, " ", (0, jsx_runtime_1.jsxs)("span", { className: "text-500", children: ["(", x.language, ")"] })] }, x.id + x.language))) })), results.length === 0 && !loading && query && ((0, jsx_runtime_1.jsx)("div", { className: "text-xs text-gray-500 mt-1", children: "No results found" }))] }));
91
+ };
92
+ exports.ItemSearch = ItemSearch;
93
+ exports.default = exports.ItemSearch;
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PerfectTree = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const progressspinner_1 = require("primereact/progressspinner");
40
+ // Local DropZone component to handle drag-over state.
41
+ const DropZone = (0, react_1.memo)(({ parent, index, isDragging, onDragOverZone, onDrop, onDragEnd, isLast, }) => {
42
+ const [isDragOver, setIsDragOver] = react_1.default.useState(false);
43
+ const handleDragEnter = (0, react_1.useCallback)((e) => {
44
+ e.preventDefault();
45
+ e.stopPropagation();
46
+ if (onDragOverZone) {
47
+ const allowed = onDragOverZone(parent, index, e);
48
+ setIsDragOver(allowed);
49
+ e.dataTransfer.dropEffect = allowed ? "move" : "none";
50
+ }
51
+ }, [onDragOverZone, parent, index]);
52
+ const handleDragLeave = (0, react_1.useCallback)((e) => {
53
+ e.preventDefault();
54
+ e.stopPropagation();
55
+ setIsDragOver(false);
56
+ }, []);
57
+ const handleDragOver = (0, react_1.useCallback)((e) => {
58
+ e.preventDefault();
59
+ e.stopPropagation();
60
+ if (onDragOverZone) {
61
+ const allowed = onDragOverZone(parent, index, e);
62
+ setIsDragOver(allowed);
63
+ }
64
+ }, [onDragOverZone, parent, index]);
65
+ const handleDrop = (0, react_1.useCallback)((e) => {
66
+ e.preventDefault();
67
+ e.stopPropagation();
68
+ setIsDragOver(false);
69
+ if (onDrop) {
70
+ onDrop(parent, index, e);
71
+ }
72
+ }, [onDrop, parent, index]);
73
+ if (!isDragging)
74
+ return null;
75
+ return ((0, jsx_runtime_1.jsx)("div", { className: `relative ${isLast ? "h-3" : ""}`, children: (0, jsx_runtime_1.jsx)("div", { className: `drop-zone absolute top-[-5px] right-0 left-[45px] z-1000 h-3 rounded-md transition-colors duration-100 ${isDragOver ? "bg-sky-200" : ""}`, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDrop: handleDrop, onDragLeave: handleDragLeave }) }));
76
+ });
77
+ // NodeContent component extracted and memoized
78
+ const NodeContent = (0, react_1.memo)(({ node, isExpanded, isSelected, onSelect, onToggleNode, onStartDrag, onDragEnd, onDragOverZone, onDrop, onDoubleClick, renderNode, onContextMenu, enableDragAndDrop = false, selectedKeys, isDragging, }) => {
79
+ const [isDragOver, setIsDragOver] = react_1.default.useState(false);
80
+ (0, react_1.useEffect)(() => {
81
+ if (!isDragging) {
82
+ setIsDragOver(false);
83
+ }
84
+ }, [isDragging]);
85
+ const handleDragStart = (0, react_1.useCallback)((event) => {
86
+ const isMultiSelect = isSelected && selectedKeys && selectedKeys.length > 1;
87
+ // Set drag preview for multiple items if applicable
88
+ if (isMultiSelect) {
89
+ // Create custom drag image showing count of selected items
90
+ const dragPreview = document.createElement("div");
91
+ dragPreview.className =
92
+ "bg-white shadow-md rounded-md border border-gray-300 px-2 py-1 text-sm max-w-24 absolute top-[-1000px] left-[-1000px]";
93
+ dragPreview.innerHTML = `<div class="flex items-center"><span class="font-bold mr-1">${selectedKeys.length}</span> items</div>`;
94
+ document.body.appendChild(dragPreview);
95
+ // Set custom drag image
96
+ event.dataTransfer.setDragImage(dragPreview, 15, 15);
97
+ // Remove the element after drag starts
98
+ setTimeout(() => {
99
+ console.log("removing drag preview");
100
+ document.body.removeChild(dragPreview);
101
+ }, 0);
102
+ }
103
+ if (onStartDrag) {
104
+ onStartDrag({ node, event, isMultiSelect: isMultiSelect ?? false });
105
+ }
106
+ }, [node, onStartDrag]);
107
+ const handleDragLeave = (0, react_1.useCallback)((event) => {
108
+ event.preventDefault();
109
+ setIsDragOver(false);
110
+ }, []);
111
+ const handleDragEnter = (0, react_1.useCallback)((event) => {
112
+ event.preventDefault();
113
+ if (onDragOverZone) {
114
+ const allowed = onDragOverZone(node, -1, event);
115
+ setIsDragOver(allowed);
116
+ }
117
+ }, [node, onDragOverZone]);
118
+ const handleDragOver = (0, react_1.useCallback)((event) => {
119
+ event.preventDefault();
120
+ if (onDragOverZone) {
121
+ const allowed = onDragOverZone(node, -1, event);
122
+ setIsDragOver(allowed);
123
+ event.dataTransfer.dropEffect = allowed ? "move" : "none";
124
+ }
125
+ }, [node, onDragOverZone]);
126
+ const handleDrop = (0, react_1.useCallback)((e) => {
127
+ e.preventDefault();
128
+ e.stopPropagation();
129
+ if (onDrop) {
130
+ onDrop(node, -1, e);
131
+ }
132
+ }, [node, onDrop]);
133
+ const handleDoubleClick = (0, react_1.useCallback)((e) => {
134
+ e.stopPropagation();
135
+ onDoubleClick?.(node);
136
+ }, [node, onDoubleClick]);
137
+ const handleSelect = (0, react_1.useCallback)((e) => {
138
+ e.stopPropagation();
139
+ onSelect(node.key, e);
140
+ }, [node.key, onSelect]);
141
+ const handleToggle = (0, react_1.useCallback)((e) => {
142
+ e.stopPropagation();
143
+ onToggleNode(node);
144
+ }, [node, onToggleNode]);
145
+ const renderToggle = () => {
146
+ if (node.hasChildren && node.children === null) {
147
+ return ((0, jsx_runtime_1.jsx)(progressspinner_1.ProgressSpinner, { style: { width: "18px", height: "18px", margin: "0 2px" }, className: "text-gray-500" }));
148
+ }
149
+ return ((0, jsx_runtime_1.jsx)("span", { onClick: handleToggle, className: `mr-2 inline-block transform cursor-pointer transition duration-150 select-none ${isExpanded ? "rotate-90" : "rotate-0"}`, children: (0, jsx_runtime_1.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", "data-pc-section": "togglericon", children: (0, jsx_runtime_1.jsx)("path", { d: "M4.38708 13C4.28408 13.0005 4.18203 12.9804 4.08691 12.9409C3.99178 12.9014 3.9055 12.8433 3.83313 12.7701C3.68634 12.6231 3.60388 12.4238 3.60388 12.2161C3.60388 12.0084 3.68634 11.8091 3.83313 11.6622L8.50507 6.99022L3.83313 2.31827C3.69467 2.16968 3.61928 1.97313 3.62287 1.77005C3.62645 1.56698 3.70872 1.37322 3.85234 1.22959C3.99596 1.08597 4.18972 1.00371 4.3928 1.00012C4.59588 0.996539 4.79242 1.07192 4.94102 1.21039L10.1669 6.43628C10.3137 6.58325 10.3962 6.78249 10.3962 6.99022C10.3962 7.19795 10.3137 7.39718 10.1669 7.54416L4.94102 12.7701C4.86865 12.8433 4.78237 12.9014 4.68724 12.9409C4.59212 12.9804 4.49007 13.0005 4.38708 13Z", fill: "currentColor" }) }) }));
150
+ };
151
+ const handleContextMenu = (0, react_1.useCallback)((e) => {
152
+ e.stopPropagation();
153
+ e.preventDefault();
154
+ onContextMenu?.(node, e);
155
+ }, [node, onContextMenu]);
156
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "tree-node mb-0.5 flex cursor-pointer items-center", draggable: enableDragAndDrop, onClick: handleSelect, onDragStart: (event) => handleDragStart(event), onDragEnd: onDragEnd, onDragLeave: handleDragLeave, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDrop: handleDrop, onDoubleClick: handleDoubleClick, onContextMenu: handleContextMenu, children: [node.hasChildren || node.children?.length ? (renderToggle()) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6" })), (0, jsx_runtime_1.jsx)("div", { className: `rounded-md border border-transparent p-0.5 hover:border-gray-300 ${isDragOver ? "bg-sky-200" : isSelected ? "bg-blue-100" : ""}`, onClick: handleSelect, children: renderNode(node) })] }));
157
+ });
158
+ const PerfectTree = ({ nodes, selectedKeys = [], expandedKeys = [], renderNode, onToggleExpand, onSelect, onDragOverZone, onDrop, isDragging = false, onStartDrag, onDragEnd, onLazyLoad, onDoubleClick, onContextMenu, enableDragAndDrop = false, }) => {
159
+ // When toggling a node, notify parent and trigger external lazy load if needed.
160
+ const handleToggle = (0, react_1.useCallback)((node) => {
161
+ if (onToggleExpand) {
162
+ onToggleExpand(node.key);
163
+ }
164
+ // If the node is expandable and its children haven't been loaded,
165
+ // call onLazyLoad (external async loading should update the node to `null` while loading)
166
+ if (node.hasChildren && node.children === undefined && onLazyLoad) {
167
+ onLazyLoad(node);
168
+ }
169
+ }, [onToggleExpand, onLazyLoad]);
170
+ const handleSelect = (0, react_1.useCallback)((nodeKey, event) => {
171
+ if (onSelect) {
172
+ onSelect(nodeKey, event);
173
+ }
174
+ }, [onSelect]);
175
+ // Global drag end handler.
176
+ const isDraggingRef = react_1.default.useRef(false);
177
+ (0, react_1.useEffect)(() => {
178
+ const handleGlobalDragEnd = (event) => {
179
+ if (isDraggingRef.current && onDragEnd) {
180
+ onDragEnd(event);
181
+ isDraggingRef.current = false;
182
+ }
183
+ };
184
+ document.addEventListener("dragend", handleGlobalDragEnd);
185
+ return () => {
186
+ document.removeEventListener("dragend", handleGlobalDragEnd);
187
+ };
188
+ }, [onDragEnd]);
189
+ const handleDragEnd = (0, react_1.useCallback)((event) => {
190
+ isDraggingRef.current = false;
191
+ if (onDragEnd) {
192
+ onDragEnd(event);
193
+ }
194
+ }, [onDragEnd]);
195
+ // Recursive function to render tree nodes along with drop zones.
196
+ const renderTreeList = (0, react_1.useCallback)((nodes, depth, parent = null) => {
197
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [nodes.map((node, index) => {
198
+ const children = node.children;
199
+ const isExpanded = expandedKeys.includes(node.key);
200
+ const isSelected = selectedKeys.includes(node.key);
201
+ return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(DropZone, { parent: parent, index: index, isDragging: isDragging, onDragOverZone: onDragOverZone, onDrop: onDrop, onDragEnd: onDragEnd }), (0, jsx_runtime_1.jsxs)("div", { style: {
202
+ marginLeft: depth > 0 ? "21px" : undefined,
203
+ }, className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)(NodeContent, { node: node, isExpanded: isExpanded, isSelected: isSelected, onSelect: handleSelect, onToggleNode: handleToggle, onStartDrag: onStartDrag, onDragEnd: handleDragEnd, onDragOverZone: onDragOverZone, onDrop: onDrop, onDoubleClick: onDoubleClick, onContextMenu: onContextMenu, renderNode: renderNode, enableDragAndDrop: enableDragAndDrop, selectedKeys: selectedKeys, isDragging: isDragging }), isExpanded && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children && children.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { children: renderTreeList(children, depth + 1, node) })) : null }))] })] }, node.key));
204
+ }), (0, jsx_runtime_1.jsx)(DropZone, { parent: parent, index: nodes.length, isDragging: isDragging, onDragOverZone: onDragOverZone, onDrop: onDrop, onDragEnd: onDragEnd, isLast: true })] }));
205
+ }, [
206
+ expandedKeys,
207
+ selectedKeys,
208
+ isDragging,
209
+ onDragOverZone,
210
+ onDrop,
211
+ onDragEnd,
212
+ onStartDrag,
213
+ onDoubleClick,
214
+ handleSelect,
215
+ handleToggle,
216
+ renderNode,
217
+ ]);
218
+ // Memoize the tree structure
219
+ const treeContent = (0, react_1.useMemo)(() => renderTreeList(nodes, 0), [nodes, renderTreeList]);
220
+ return (0, jsx_runtime_1.jsx)("div", { children: treeContent });
221
+ };
222
+ exports.PerfectTree = PerfectTree;
223
+ exports.default = (0, react_1.memo)(exports.PerfectTree);
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Section = Section;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const utils_1 = require("primereact/utils");
6
+ const utils_2 = require("../utils");
7
+ function Section({ title, children, }) {
8
+ const [open, setOpen] = (0, utils_2.useLocalStorage)("editor.showSection-" + title, true);
9
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.classNames)(open
10
+ ? "border-blue-500 bg-gray-600"
11
+ : "border-gray-400 bg-gray-400 hover:bg-gray-500 hover:border-gray-300", "py-2.5 px-3 border-l-[8px] text-white text-xs cursor-pointer flex justify-between items-center"), onClick: () => setOpen(!open), children: [title, (0, jsx_runtime_1.jsx)("i", { className: (0, utils_1.classNames)(open ? "pi-chevron-up" : "pi-chevron-down", "pi cursor-pointer text-xs") })] }), open && (0, jsx_runtime_1.jsx)("div", { className: "pt-4 pb-6 px-2 bg-gray-50", children: children })] }));
12
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleIconButton = SimpleIconButton;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const utils_1 = require("primereact/utils");
6
+ function SimpleIconButton({ onClick, className, icon, label, disabled, size, id, selected, }) {
7
+ return ((0, jsx_runtime_1.jsx)("button", { id: id, disabled: disabled, className: (0, utils_1.classNames)(typeof icon === "string" ? icon + " p-[6px]" : "p-[4px]", " rounded-full", disabled ? "text-gray-300" : " hover:bg-gray-200 cursor-pointer", className, size === "large" ? "text-lg" : "text-xs", selected ? "bg-gray-200" : ""), onClick: (ev) => {
8
+ if (!disabled)
9
+ onClick(ev);
10
+ }, title: label, children: typeof icon !== "string" && icon }));
11
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleMenu = SimpleMenu;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ function SimpleMenu({ items, activeItemKey, onItemClick, }) {
6
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex flex-col p-1 h-full", children: items.map((item, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "p-2 h-full flex flex-col gap-1", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-row items-center gap-2 border-b border-gray-200 pb-1 pl-2", children: [item.icon && item.icon, item.label] }), item.items?.map((subItem, subIndex) => ((0, jsx_runtime_1.jsx)("div", { className: `flex flex-col px-4 p-1 cursor-pointer hover:bg-gray-100 ${activeItemKey === subItem.key ? "bg-gray-100" : ""}`, onClick: () => {
7
+ onItemClick(subItem);
8
+ }, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-row items-center gap-2 text-sm", children: [subItem.icon && subItem.icon, subItem.label] }) }, subIndex)))] }, index))) }));
9
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleTable = SimpleTable;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const utils_1 = require("primereact/utils");
6
+ function SimpleTable({ items, columns, onRowHover, onRowClick, rowClassName, }) {
7
+ return ((0, jsx_runtime_1.jsxs)("table", { className: "table-auto min-w-full text-left text-xs font-light text-surface", children: [(0, jsx_runtime_1.jsx)("thead", { className: "border-b border-neutral-200 font-medium", children: (0, jsx_runtime_1.jsx)("tr", { children: columns.map((col, index) => ((0, jsx_runtime_1.jsx)("th", { className: "px-2 py-3", children: col.header }, index))) }) }), (0, jsx_runtime_1.jsx)("tbody", { children: items.map((item, index) => ((0, jsx_runtime_1.jsx)("tr", { className: (0, utils_1.classNames)("border-b border-neutral-200", onRowClick ? "cursor-pointer hover:bg-neutral-100" : "", rowClassName ? rowClassName(item) : ""), onClick: (ev) => {
8
+ if (onRowClick)
9
+ onRowClick({ item, event: ev });
10
+ }, onMouseOver: () => onRowHover?.(item), onMouseLeave: () => onRowHover?.(undefined), children: columns.map((col, index) => ((0, jsx_runtime_1.jsx)("td", { className: (0, utils_1.classNames)("px-2 py-2", col.className), children: col.body(item) }, index))) }, index))) })] }));
11
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleTabs = SimpleTabs;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const tailwind_merge_1 = require("tailwind-merge");
6
+ function SimpleTabs({ tabs, setActiveTab, activeTab, className, }) {
7
+ if (activeTab > tabs.length - 1) {
8
+ activeTab = 0;
9
+ }
10
+ if (activeTab < 0) {
11
+ activeTab = 0;
12
+ }
13
+ if (tabs.length === 0)
14
+ return null;
15
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: (0, tailwind_merge_1.twMerge)("flex gap-4 pb-3", className), children: tabs.map((tab, index) => ((0, jsx_runtime_1.jsx)("button", { id: tab.id, className: activeTab === index ? "active-tab" : "cursor-pointer", "data-testid": tab.testId, onClick: () => setActiveTab(index), style: {
16
+ fontWeight: index === activeTab ? "bold" : "normal",
17
+ borderBottom: index === activeTab ? "3px solid black" : "none",
18
+ marginBottom: index === activeTab ? "0" : "3px",
19
+ color: index === activeTab ? "black" : "gray",
20
+ }, children: tab.label }, tab.id))) }), tabs[activeTab]?.content] }));
21
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleToolbar = SimpleToolbar;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ function SimpleToolbar({ children }) {
6
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex gap-2 p-2 items-center bg-gray-50 rounded-md border-b border-gray-200 text-gray-500 text-sm", children: children }));
7
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Spinner = Spinner;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ function Spinner({ size = "4xl", }) {
6
+ return (0, jsx_runtime_1.jsx)("i", { className: `pi pi-cog pi-spin text-${size} text-gray-600` });
7
+ }
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Splitter = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const react_dom_1 = require("react-dom");
40
+ const Splitter = ({ panels, localStorageKey = "splitter-sizes", expandLabel = "Expand", }) => {
41
+ const totalPanels = panels.length;
42
+ const [panelSizes, setPanelSizes] = (0, react_1.useState)(() => {
43
+ // Load sizes from local storage on initial render
44
+ const storedSizes = localStorage.getItem(localStorageKey);
45
+ if (storedSizes) {
46
+ try {
47
+ const parsedSizes = JSON.parse(storedSizes);
48
+ return parsedSizes.panels;
49
+ }
50
+ catch (error) {
51
+ return null; // Or fallback to default if parsing fails
52
+ }
53
+ }
54
+ return null; // No stored sizes, initial render will handle defaults
55
+ });
56
+ const panelRefs = (0, react_1.useRef)([]);
57
+ const splitterRef = (0, react_1.useRef)(null);
58
+ const lastPanelCollapsible = panels[panels.length - 1]?.collapsible;
59
+ const [isLastPanelCollapsed, setIsLastPanelCollapsed] = (0, react_1.useState)(() => {
60
+ const storedSizes = localStorage.getItem(localStorageKey);
61
+ if (storedSizes) {
62
+ const parsedSizes = JSON.parse(storedSizes);
63
+ return parsedSizes.lastCollapsed;
64
+ }
65
+ return true;
66
+ });
67
+ const [isResizing, setIsResizing] = (0, react_1.useState)(false);
68
+ (0, react_1.useEffect)(() => {
69
+ if (!panelSizes && splitterRef.current) {
70
+ const initialSizes = {};
71
+ panels.forEach((panel) => {
72
+ initialSizes[panel.name] = panel.defaultSize;
73
+ });
74
+ setPanelSizes(initialSizes);
75
+ }
76
+ }, [panels]);
77
+ (0, react_1.useEffect)(() => {
78
+ if (panelSizes) {
79
+ const storedSizes = {
80
+ panels: panelSizes,
81
+ lastCollapsed: isLastPanelCollapsed ?? false,
82
+ };
83
+ localStorage.setItem(localStorageKey, JSON.stringify(storedSizes));
84
+ }
85
+ }, [panelSizes, localStorageKey, isLastPanelCollapsed]);
86
+ const toggleLastPanelCollapse = () => {
87
+ if (lastPanelCollapsible) {
88
+ document.startViewTransition(() => {
89
+ (0, react_dom_1.flushSync)(() => {
90
+ setIsLastPanelCollapsed((prev) => !prev);
91
+ });
92
+ });
93
+ }
94
+ };
95
+ const handleResize = (0, react_1.useCallback)((index, event) => {
96
+ event.preventDefault();
97
+ const iframes = splitterRef.current?.querySelectorAll("iframe");
98
+ iframes?.forEach((iframe) => {
99
+ iframe.classList.add("pointer-events-none");
100
+ });
101
+ const startX = event.clientX;
102
+ // create a copy with the panel name
103
+ const initialSizes = panelSizes ? { ...panelSizes } : {};
104
+ const panelElement = panelRefs.current[index];
105
+ const nextPanelElement = panelRefs.current[index + 1];
106
+ if (!panelElement || !nextPanelElement || !splitterRef.current) {
107
+ return;
108
+ }
109
+ const panelWidth = panelElement.offsetWidth;
110
+ const nextPanelWidth = nextPanelElement.offsetWidth;
111
+ setIsResizing(true);
112
+ const onMouseMove = (moveEvent) => {
113
+ const delta = moveEvent.clientX - startX;
114
+ const newPanelWidth = panelWidth + delta;
115
+ const newNextPanelWidth = nextPanelWidth - delta;
116
+ const minPanelWidth = 50;
117
+ const minNextPanelWidth = 50;
118
+ if (newNextPanelWidth < minPanelWidth &&
119
+ index == panels.length - 2 &&
120
+ lastPanelCollapsible) {
121
+ setIsLastPanelCollapsed(true);
122
+ setPanelSizes(initialSizes);
123
+ }
124
+ if (newPanelWidth < minPanelWidth ||
125
+ newNextPanelWidth < minNextPanelWidth) {
126
+ return;
127
+ }
128
+ const updatedSizes = { ...initialSizes };
129
+ updatedSizes[panels[index].name] = newPanelWidth;
130
+ updatedSizes[panels[index + 1].name] = newNextPanelWidth;
131
+ setPanelSizes(updatedSizes);
132
+ };
133
+ const onMouseUp = () => {
134
+ setTimeout(() => {
135
+ setIsResizing(false);
136
+ }, 100);
137
+ iframes?.forEach((iframe) => {
138
+ iframe.classList.remove("pointer-events-none");
139
+ });
140
+ document.removeEventListener("mousemove", onMouseMove);
141
+ document.removeEventListener("mouseup", onMouseUp, true);
142
+ };
143
+ document.addEventListener("mousemove", onMouseMove);
144
+ document.addEventListener("mouseup", onMouseUp, true);
145
+ }, [panels, panelSizes]);
146
+ const isLastResizer = (index) => index === panels.length - 2;
147
+ const getFlexBasis = (index) => {
148
+ if (!panelSizes)
149
+ return "1fr"; // Or a default like "1fr"
150
+ const panelName = panels[index].name;
151
+ const size = index === panels.length - 1 &&
152
+ isLastPanelCollapsed &&
153
+ lastPanelCollapsible
154
+ ? 0
155
+ : panelSizes[panelName] || panels[index].defaultSize;
156
+ if (typeof size === "number") {
157
+ return `${size}px`;
158
+ }
159
+ else if (size === "auto") {
160
+ return "auto";
161
+ }
162
+ return "1fr"; //default
163
+ };
164
+ const getExpandButton = () => {
165
+ return ((0, jsx_runtime_1.jsx)("div", { onClick: !isResizing ? toggleLastPanelCollapse : undefined, className: "select-none p-1 bg-gray-200 flex items-center justify-center text-gray-500 hover:bg-blue-700 hover:text-white cursor-pointer", style: { writingMode: "vertical-rl", userSelect: "none" }, children: expandLabel }));
166
+ };
167
+ const getSplitter = (index) => {
168
+ if (lastPanelCollapsible && isLastPanelCollapsed && isLastResizer(index)) {
169
+ return getExpandButton();
170
+ }
171
+ return ((0, jsx_runtime_1.jsx)("div", { className: " bg-gray-200 cursor-ew-resize select-none flex items-center justify-center hover:bg-blue-700 w-[4px] relative z-1000", onDoubleClick: isLastResizer(index) ? toggleLastPanelCollapse : undefined, onMouseDown: (event) => {
172
+ handleResize(index, event);
173
+ } }));
174
+ };
175
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex w-full h-full overflow-hidden", ref: splitterRef, children: panels.map((panel, index) => ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { ref: (el) => {
176
+ panelRefs.current[index] = el;
177
+ }, className: "relative", style: {
178
+ flex: `${panel.defaultSize === "auto" ? 1 : 0} 1 ${getFlexBasis(index)}`,
179
+ minWidth: 0,
180
+ display: panel.collapsible &&
181
+ isLastPanelCollapsed &&
182
+ index === totalPanels - 1
183
+ ? "none"
184
+ : "block",
185
+ }, children: panel.content }), index < panels.length - 1 && getSplitter(index)] }, panel.name))) }));
186
+ };
187
+ exports.Splitter = Splitter;