@alpaca-editor/core 1.0.3938 → 1.0.3941

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 (357) hide show
  1. package/dist/components/ActionButton.d.ts +1 -0
  2. package/dist/components/ActionButton.js +2 -2
  3. package/dist/components/ActionButton.js.map +1 -1
  4. package/dist/editor/ContentTree.js +12 -8
  5. package/dist/editor/ContentTree.js.map +1 -1
  6. package/dist/editor/ContextMenu.d.ts +1 -1
  7. package/dist/editor/ContextMenu.js +17 -3
  8. package/dist/editor/ContextMenu.js.map +1 -1
  9. package/dist/editor/FieldActionsOverlay.d.ts +18 -0
  10. package/dist/editor/FieldActionsOverlay.js +139 -0
  11. package/dist/editor/FieldActionsOverlay.js.map +1 -0
  12. package/dist/editor/FieldHistory.d.ts +2 -1
  13. package/dist/editor/FieldHistory.js +11 -8
  14. package/dist/editor/FieldHistory.js.map +1 -1
  15. package/dist/editor/FieldListField.js +14 -17
  16. package/dist/editor/FieldListField.js.map +1 -1
  17. package/dist/editor/PictureCropper.js +65 -23
  18. package/dist/editor/PictureCropper.js.map +1 -1
  19. package/dist/editor/PictureEditor.js +43 -3
  20. package/dist/editor/PictureEditor.js.map +1 -1
  21. package/dist/editor/Titlebar.js +19 -10
  22. package/dist/editor/Titlebar.js.map +1 -1
  23. package/dist/editor/ai/AiTerminal.js +27 -41
  24. package/dist/editor/ai/AiTerminal.js.map +1 -1
  25. package/dist/editor/ai/GhostWriter.js +21 -2
  26. package/dist/editor/ai/GhostWriter.js.map +1 -1
  27. package/dist/editor/client/EditorClient.js +48 -18
  28. package/dist/editor/client/EditorClient.js.map +1 -1
  29. package/dist/editor/client/editContext.d.ts +1 -1
  30. package/dist/editor/client/editContext.js.map +1 -1
  31. package/dist/editor/client/itemsRepository.js +126 -90
  32. package/dist/editor/client/itemsRepository.js.map +1 -1
  33. package/dist/editor/commands/componentCommands.js +7 -3
  34. package/dist/editor/commands/componentCommands.js.map +1 -1
  35. package/dist/editor/media-selector/MediaFolderBrowser.d.ts +5 -0
  36. package/dist/editor/media-selector/MediaFolderBrowser.js +77 -0
  37. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -0
  38. package/dist/editor/media-selector/MediaSelector.js +1 -1
  39. package/dist/editor/media-selector/MediaSelector.js.map +1 -1
  40. package/dist/editor/media-selector/Thumbnails.js +2 -2
  41. package/dist/editor/media-selector/index.d.ts +8 -0
  42. package/dist/editor/media-selector/index.js +9 -0
  43. package/dist/editor/media-selector/index.js.map +1 -0
  44. package/dist/editor/menubar/BrowseHistory.js +3 -4
  45. package/dist/editor/menubar/BrowseHistory.js.map +1 -1
  46. package/dist/editor/menubar/PageSelector.js +62 -10
  47. package/dist/editor/menubar/PageSelector.js.map +1 -1
  48. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
  49. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  50. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +37 -11
  51. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  52. package/dist/editor/page-viewer/PageViewerFrame.js +98 -2
  53. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  54. package/dist/editor/pageModel.d.ts +14 -0
  55. package/dist/editor/reviews/Comment.js +3 -2
  56. package/dist/editor/reviews/Comment.js.map +1 -1
  57. package/dist/editor/services/aiService.js +0 -1
  58. package/dist/editor/services/aiService.js.map +1 -1
  59. package/dist/editor/services/editService.d.ts +1 -1
  60. package/dist/editor/services/editService.js +2 -1
  61. package/dist/editor/services/editService.js.map +1 -1
  62. package/dist/editor/sidebar/ComponentTree.js +3 -4
  63. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  64. package/dist/editor/ui/Icons.js +1 -1
  65. package/dist/editor/ui/Icons.js.map +1 -1
  66. package/dist/editor/ui/ItemList.d.ts +16 -0
  67. package/dist/editor/ui/ItemList.js +19 -0
  68. package/dist/editor/ui/ItemList.js.map +1 -0
  69. package/dist/editor/ui/ItemSearch.js +2 -12
  70. package/dist/editor/ui/ItemSearch.js.map +1 -1
  71. package/dist/editor/ui/SimpleTabs.d.ts +1 -0
  72. package/dist/editor/ui/SimpleTabs.js +3 -3
  73. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  74. package/dist/editor/ui/Splitter.js +61 -6
  75. package/dist/editor/ui/Splitter.js.map +1 -1
  76. package/dist/editor/views/MediaFolderEditView.d.ts +4 -0
  77. package/dist/editor/views/MediaFolderEditView.js +40 -0
  78. package/dist/editor/views/MediaFolderEditView.js.map +1 -0
  79. package/dist/editor/views/SingleEditView.js +9 -1
  80. package/dist/editor/views/SingleEditView.js.map +1 -1
  81. package/dist/revision.d.ts +2 -2
  82. package/dist/revision.js +2 -2
  83. package/dist/styles.css +64 -13
  84. package/package.json +8 -2
  85. package/.prettierrc +0 -3
  86. package/build.css +0 -3
  87. package/components.json +0 -21
  88. package/eslint.config.mjs +0 -4
  89. package/images/bg-shape-black.webp +0 -0
  90. package/images/wizard-bg.png +0 -0
  91. package/images/wizard-tour.png +0 -0
  92. package/images/wizard.png +0 -0
  93. package/src/client-components/api.ts +0 -6
  94. package/src/client-components/index.ts +0 -19
  95. package/src/components/ActionButton.tsx +0 -41
  96. package/src/components/Error.tsx +0 -57
  97. package/src/components/ui/CardConnector.tsx +0 -56
  98. package/src/components/ui/button.tsx +0 -62
  99. package/src/components/ui/card.tsx +0 -372
  100. package/src/components/ui/context-menu.tsx +0 -250
  101. package/src/config/config.tsx +0 -917
  102. package/src/config/types.ts +0 -286
  103. package/src/editor/ComponentInfo.tsx +0 -90
  104. package/src/editor/ConfirmationDialog.tsx +0 -103
  105. package/src/editor/ContentTree.tsx +0 -727
  106. package/src/editor/ContextMenu.tsx +0 -212
  107. package/src/editor/Editor.tsx +0 -90
  108. package/src/editor/EditorWarning.tsx +0 -34
  109. package/src/editor/EditorWarnings.tsx +0 -33
  110. package/src/editor/FieldEditorPopup.tsx +0 -65
  111. package/src/editor/FieldHistory.tsx +0 -74
  112. package/src/editor/FieldList.tsx +0 -190
  113. package/src/editor/FieldListField.tsx +0 -391
  114. package/src/editor/FieldListFieldWithFallbacks.tsx +0 -217
  115. package/src/editor/FloatingToolbar.tsx +0 -163
  116. package/src/editor/ImageEditor.tsx +0 -128
  117. package/src/editor/ItemInfo.tsx +0 -90
  118. package/src/editor/LinkEditorDialog.tsx +0 -196
  119. package/src/editor/MainLayout.tsx +0 -95
  120. package/src/editor/MobileLayout.tsx +0 -68
  121. package/src/editor/NewEditorClient.tsx +0 -11
  122. package/src/editor/PictureCropper.tsx +0 -503
  123. package/src/editor/PictureEditor.tsx +0 -212
  124. package/src/editor/PictureEditorDialog.tsx +0 -381
  125. package/src/editor/PublishDialog.ignore +0 -74
  126. package/src/editor/ScrollingContentTree.tsx +0 -67
  127. package/src/editor/Terminal.tsx +0 -227
  128. package/src/editor/Titlebar.tsx +0 -93
  129. package/src/editor/ai/AiPopup.tsx +0 -59
  130. package/src/editor/ai/AiResponseMessage.tsx +0 -106
  131. package/src/editor/ai/AiTerminal.tsx +0 -514
  132. package/src/editor/ai/AiToolCall.tsx +0 -61
  133. package/src/editor/ai/EditorAiTerminal.tsx +0 -20
  134. package/src/editor/ai/GhostWriter.tsx +0 -432
  135. package/src/editor/ai/aiPageModel.ts +0 -108
  136. package/src/editor/ai/editorAiContext.ts +0 -18
  137. package/src/editor/client/AboutDialog.tsx +0 -44
  138. package/src/editor/client/EditorClient.tsx +0 -2197
  139. package/src/editor/client/GenericDialog.tsx +0 -50
  140. package/src/editor/client/editContext.ts +0 -412
  141. package/src/editor/client/helpers.ts +0 -44
  142. package/src/editor/client/itemsRepository.ts +0 -538
  143. package/src/editor/client/operations.ts +0 -768
  144. package/src/editor/client/pageModelBuilder.ts +0 -219
  145. package/src/editor/commands/commands.ts +0 -22
  146. package/src/editor/commands/componentCommands.tsx +0 -424
  147. package/src/editor/commands/createVersionCommand.ts +0 -33
  148. package/src/editor/commands/deleteVersionCommand.ts +0 -71
  149. package/src/editor/commands/itemCommands.tsx +0 -351
  150. package/src/editor/commands/localizeItem/LocalizeItemDialog.tsx +0 -201
  151. package/src/editor/commands/localizeItem/LocalizeItemUtils.ts +0 -27
  152. package/src/editor/commands/undo.ts +0 -39
  153. package/src/editor/component-designer/ComponentDesigner.tsx +0 -70
  154. package/src/editor/component-designer/ComponentDesignerAiTerminal.tsx +0 -11
  155. package/src/editor/component-designer/ComponentDesignerMenu.tsx +0 -91
  156. package/src/editor/component-designer/ComponentEditor.tsx +0 -97
  157. package/src/editor/component-designer/ComponentRenderingCodeEditor.tsx +0 -31
  158. package/src/editor/component-designer/ComponentRenderingEditor.tsx +0 -104
  159. package/src/editor/component-designer/ComponentsDropdown.tsx +0 -39
  160. package/src/editor/component-designer/PlaceholdersEditor.tsx +0 -179
  161. package/src/editor/component-designer/RenderingsDropdown.tsx +0 -36
  162. package/src/editor/component-designer/TemplateEditor.tsx +0 -236
  163. package/src/editor/component-designer/aiContext.ts +0 -23
  164. package/src/editor/componentTreeHelper.tsx +0 -116
  165. package/src/editor/context-menu/CopyMoveMenu.tsx +0 -103
  166. package/src/editor/context-menu/InsertMenu.tsx +0 -347
  167. package/src/editor/control-center/About.tsx +0 -342
  168. package/src/editor/control-center/ControlCenterMenu.tsx +0 -76
  169. package/src/editor/control-center/IndexOverview.tsx +0 -50
  170. package/src/editor/control-center/IndexSettings.tsx +0 -266
  171. package/src/editor/control-center/Info.tsx +0 -104
  172. package/src/editor/control-center/QuotaInfo.tsx +0 -301
  173. package/src/editor/control-center/Status.tsx +0 -113
  174. package/src/editor/control-center/WebSocketMessages.tsx +0 -155
  175. package/src/editor/editor-warnings/ItemLocked.tsx +0 -63
  176. package/src/editor/editor-warnings/NoLanguageWriteAccess.tsx +0 -22
  177. package/src/editor/editor-warnings/NoWorkflowWriteAccess.tsx +0 -23
  178. package/src/editor/editor-warnings/NoWriteAccess.tsx +0 -16
  179. package/src/editor/editor-warnings/ValidationErrors.tsx +0 -54
  180. package/src/editor/field-types/AttachmentEditor.tsx +0 -9
  181. package/src/editor/field-types/CheckboxEditor.tsx +0 -47
  182. package/src/editor/field-types/DropLinkEditor.tsx +0 -80
  183. package/src/editor/field-types/DropListEditor.tsx +0 -84
  184. package/src/editor/field-types/ImageFieldEditor.tsx +0 -65
  185. package/src/editor/field-types/InternalLinkFieldEditor.tsx +0 -117
  186. package/src/editor/field-types/LinkFieldEditor.tsx +0 -85
  187. package/src/editor/field-types/MultiLineText.tsx +0 -82
  188. package/src/editor/field-types/PictureFieldEditor.tsx +0 -121
  189. package/src/editor/field-types/RawEditor.tsx +0 -53
  190. package/src/editor/field-types/ReactQuill.tsx +0 -580
  191. package/src/editor/field-types/RichTextEditor.tsx +0 -22
  192. package/src/editor/field-types/RichTextEditorComponent.tsx +0 -127
  193. package/src/editor/field-types/SingleLineText.tsx +0 -174
  194. package/src/editor/field-types/TreeListEditor.tsx +0 -261
  195. package/src/editor/fieldTypes.ts +0 -140
  196. package/src/editor/media-selector/AiImageSearch.tsx +0 -185
  197. package/src/editor/media-selector/AiImageSearchPrompt.tsx +0 -94
  198. package/src/editor/media-selector/MediaSelector.tsx +0 -42
  199. package/src/editor/media-selector/Preview.tsx +0 -14
  200. package/src/editor/media-selector/Thumbnails.tsx +0 -48
  201. package/src/editor/media-selector/TreeSelector.tsx +0 -292
  202. package/src/editor/media-selector/UploadZone.tsx +0 -137
  203. package/src/editor/menubar/ActionsMenu.tsx +0 -94
  204. package/src/editor/menubar/ActiveUsers.tsx +0 -17
  205. package/src/editor/menubar/ApproveAndPublish.tsx +0 -18
  206. package/src/editor/menubar/BrowseHistory.tsx +0 -37
  207. package/src/editor/menubar/ItemLanguageVersion.tsx +0 -76
  208. package/src/editor/menubar/LanguageSelector.tsx +0 -226
  209. package/src/editor/menubar/Menu.tsx +0 -83
  210. package/src/editor/menubar/NavButtons.tsx +0 -74
  211. package/src/editor/menubar/PageSelector.tsx +0 -141
  212. package/src/editor/menubar/PageViewerControls.tsx +0 -120
  213. package/src/editor/menubar/PreviewSecondaryControls.tsx +0 -18
  214. package/src/editor/menubar/SecondaryControls.tsx +0 -45
  215. package/src/editor/menubar/Separator.tsx +0 -12
  216. package/src/editor/menubar/SiteInfo.tsx +0 -53
  217. package/src/editor/menubar/User.tsx +0 -27
  218. package/src/editor/menubar/VersionSelector.tsx +0 -142
  219. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +0 -307
  220. package/src/editor/page-editor-chrome/CommentHighlightings.tsx +0 -35
  221. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +0 -59
  222. package/src/editor/page-editor-chrome/FieldActionIndicators.tsx +0 -23
  223. package/src/editor/page-editor-chrome/FieldEditedIndicator.tsx +0 -64
  224. package/src/editor/page-editor-chrome/FieldEditedIndicators.tsx +0 -35
  225. package/src/editor/page-editor-chrome/FrameMenu.tsx +0 -338
  226. package/src/editor/page-editor-chrome/FrameMenus.tsx +0 -48
  227. package/src/editor/page-editor-chrome/InlineEditor.tsx +0 -765
  228. package/src/editor/page-editor-chrome/LockedFieldIndicator.tsx +0 -61
  229. package/src/editor/page-editor-chrome/NoLayout.tsx +0 -36
  230. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +0 -122
  231. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +0 -161
  232. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +0 -169
  233. package/src/editor/page-editor-chrome/PlaceholderDropZones.tsx +0 -315
  234. package/src/editor/page-editor-chrome/SuggestionHighlighting.tsx +0 -300
  235. package/src/editor/page-editor-chrome/SuggestionHighlightings.tsx +0 -40
  236. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +0 -791
  237. package/src/editor/page-viewer/DeviceToolbar.tsx +0 -70
  238. package/src/editor/page-viewer/EditorForm.tsx +0 -258
  239. package/src/editor/page-viewer/MiniMap.tsx +0 -362
  240. package/src/editor/page-viewer/PageViewer.tsx +0 -169
  241. package/src/editor/page-viewer/PageViewerFrame.tsx +0 -879
  242. package/src/editor/page-viewer/pageModelSkeletonBuilder.ts +0 -412
  243. package/src/editor/page-viewer/pageViewContext.ts +0 -186
  244. package/src/editor/pageModel.ts +0 -208
  245. package/src/editor/picture-shared.tsx +0 -53
  246. package/src/editor/reviews/Comment.tsx +0 -308
  247. package/src/editor/reviews/Comments.tsx +0 -125
  248. package/src/editor/reviews/DiffView.tsx +0 -109
  249. package/src/editor/reviews/PreviewInfo.tsx +0 -35
  250. package/src/editor/reviews/Reviews.tsx +0 -280
  251. package/src/editor/reviews/SuggestedEdit.tsx +0 -316
  252. package/src/editor/reviews/reviewCommands.tsx +0 -47
  253. package/src/editor/reviews/useReviews.tsx +0 -70
  254. package/src/editor/services/aiService.ts +0 -174
  255. package/src/editor/services/componentDesignerService.ts +0 -151
  256. package/src/editor/services/contentService.ts +0 -180
  257. package/src/editor/services/editService.ts +0 -486
  258. package/src/editor/services/indexService.ts +0 -24
  259. package/src/editor/services/reviewsService.ts +0 -53
  260. package/src/editor/services/serviceHelper.ts +0 -95
  261. package/src/editor/services/suggestedEditsService.ts +0 -39
  262. package/src/editor/services/systemService.ts +0 -5
  263. package/src/editor/services/translationService.ts +0 -21
  264. package/src/editor/services-server/api.ts +0 -150
  265. package/src/editor/services-server/graphQL.ts +0 -106
  266. package/src/editor/sidebar/ComponentPalette.tsx +0 -161
  267. package/src/editor/sidebar/ComponentTree.tsx +0 -548
  268. package/src/editor/sidebar/ComponentTree2.tsxx +0 -490
  269. package/src/editor/sidebar/Debug.tsx +0 -111
  270. package/src/editor/sidebar/DictionaryEditor.tsx +0 -261
  271. package/src/editor/sidebar/EditHistory.tsx +0 -134
  272. package/src/editor/sidebar/GraphQL.tsx +0 -164
  273. package/src/editor/sidebar/Insert.tsx +0 -35
  274. package/src/editor/sidebar/MainContentTree.tsx +0 -102
  275. package/src/editor/sidebar/Performance.tsx +0 -53
  276. package/src/editor/sidebar/Sessions.tsx +0 -35
  277. package/src/editor/sidebar/Sidebar.tsx +0 -20
  278. package/src/editor/sidebar/SidebarView.tsx +0 -152
  279. package/src/editor/sidebar/Translations.tsx +0 -295
  280. package/src/editor/sidebar/Validation.tsx +0 -102
  281. package/src/editor/sidebar/ViewSelector.tsx +0 -60
  282. package/src/editor/sidebar/Workbox.tsx +0 -209
  283. package/src/editor/ui/CenteredMessage.tsx +0 -7
  284. package/src/editor/ui/CopyMoveTargetSelectorDialog.tsx +0 -81
  285. package/src/editor/ui/CopyToClipboardButton.tsx +0 -24
  286. package/src/editor/ui/DialogButtons.tsx +0 -11
  287. package/src/editor/ui/Icons.tsx +0 -708
  288. package/src/editor/ui/ItemNameDialogNew.tsx +0 -118
  289. package/src/editor/ui/ItemSearch.tsx +0 -190
  290. package/src/editor/ui/PerfectTree.tsx +0 -571
  291. package/src/editor/ui/Section.tsx +0 -35
  292. package/src/editor/ui/SimpleIconButton.tsx +0 -54
  293. package/src/editor/ui/SimpleMenu.tsx +0 -40
  294. package/src/editor/ui/SimpleTable.tsx +0 -60
  295. package/src/editor/ui/SimpleTabs.tsx +0 -55
  296. package/src/editor/ui/SimpleToolbar.tsx +0 -7
  297. package/src/editor/ui/Spinner.tsx +0 -9
  298. package/src/editor/ui/Splitter.tsx +0 -314
  299. package/src/editor/ui/StackedPanels.tsx +0 -134
  300. package/src/editor/ui/Toolbar.tsx +0 -7
  301. package/src/editor/utils/id-helper.ts +0 -3
  302. package/src/editor/utils/insertOptions.ts +0 -69
  303. package/src/editor/utils/itemutils.ts +0 -29
  304. package/src/editor/utils/useMemoDebug.ts +0 -28
  305. package/src/editor/utils.ts +0 -486
  306. package/src/editor/views/CompareView.tsx +0 -245
  307. package/src/editor/views/EditView.tsx +0 -27
  308. package/src/editor/views/ItemEditor.tsx +0 -58
  309. package/src/editor/views/SingleEditView.tsx +0 -46
  310. package/src/fonts/Geist-Black.woff2 +0 -0
  311. package/src/fonts/Geist-Bold.woff2 +0 -0
  312. package/src/fonts/Geist-ExtraBold.woff2 +0 -0
  313. package/src/fonts/Geist-ExtraLight.woff2 +0 -0
  314. package/src/fonts/Geist-Light.woff2 +0 -0
  315. package/src/fonts/Geist-Medium.woff2 +0 -0
  316. package/src/fonts/Geist-Regular.woff2 +0 -0
  317. package/src/fonts/Geist-SemiBold.woff2 +0 -0
  318. package/src/fonts/Geist-Thin.woff2 +0 -0
  319. package/src/fonts/Geist[wght].woff2 +0 -0
  320. package/src/fonts/index.ts +0 -10
  321. package/src/index.ts +0 -23
  322. package/src/lib/safelist.tsx +0 -16
  323. package/src/lib/utils.ts +0 -6
  324. package/src/page-wizard/PageWizard.tsx +0 -139
  325. package/src/page-wizard/WizardBox.tsx +0 -4
  326. package/src/page-wizard/WizardBoxConnector.tsx +0 -56
  327. package/src/page-wizard/WizardSteps.tsx +0 -458
  328. package/src/page-wizard/service.ts +0 -35
  329. package/src/page-wizard/startPageWizardCommand.ts +0 -26
  330. package/src/page-wizard/steps/BuildPageStep.tsx +0 -259
  331. package/src/page-wizard/steps/CollectStep.tsx +0 -296
  332. package/src/page-wizard/steps/ComponentTypesSelector.tsx +0 -454
  333. package/src/page-wizard/steps/Components.tsx +0 -193
  334. package/src/page-wizard/steps/ContentStep.tsx +0 -890
  335. package/src/page-wizard/steps/EditButton.tsx +0 -34
  336. package/src/page-wizard/steps/FieldEditor.tsx +0 -102
  337. package/src/page-wizard/steps/Generate.tsx +0 -60
  338. package/src/page-wizard/steps/ImagesStep.tsx +0 -382
  339. package/src/page-wizard/steps/LayoutStep.tsx +0 -227
  340. package/src/page-wizard/steps/MetaDataStep.tsx +0 -173
  341. package/src/page-wizard/steps/SelectStep.tsx +0 -281
  342. package/src/page-wizard/steps/schema.ts +0 -180
  343. package/src/page-wizard/steps/usePageCreator.ts +0 -325
  344. package/src/page-wizard/usePageWizard.ts +0 -79
  345. package/src/revision.ts +0 -2
  346. package/src/splash-screen/NewPage.tsx +0 -294
  347. package/src/splash-screen/OpenPage.tsx +0 -113
  348. package/src/splash-screen/RecentPages.tsx +0 -123
  349. package/src/splash-screen/SectionHeadline.tsx +0 -21
  350. package/src/splash-screen/SplashScreen.tsx +0 -195
  351. package/src/tour/Tour.tsx +0 -566
  352. package/src/tour/default-tour.tsx +0 -301
  353. package/src/tour/preview-tour.tsx +0 -128
  354. package/src/types.ts +0 -335
  355. package/styles.css +0 -765
  356. package/tsconfig.build.json +0 -31
  357. package/tsconfig.json +0 -14
@@ -1,571 +0,0 @@
1
- import React, { useEffect, useMemo, useCallback, memo } from "react";
2
- import { Spinner } from "./Spinner";
3
- import { ProgressSpinner } from "primereact/progressspinner";
4
- export interface TreeNode<T = any> {
5
- key: string;
6
- label: string;
7
- icon?: React.ReactNode;
8
- data?: T;
9
- /** Indicates if the node is expandable (has or can have children) */
10
- hasChildren?: boolean;
11
- /**
12
- * If present, contains the node's children.
13
- * Use undefined to signal that children have not yet been loaded.
14
- * Use null to signal that children are currently loading.
15
- */
16
- children?: TreeNode<T>[] | null;
17
- }
18
-
19
- export interface TreeProps<T = any> {
20
- /** Array of tree nodes */
21
- nodes: TreeNode<T>[];
22
- /** Keys of currently selected nodes */
23
- selectedKeys?: string[];
24
- /** Keys of expanded nodes */
25
- expandedKeys?: string[];
26
- /** Callback to render a single node (template) */
27
- renderNode: (node: TreeNode<T>) => React.ReactNode;
28
- /** Called when a node's expand/collapse toggle is activated */
29
- onToggleExpand?: (key: string) => void;
30
- /** Called when a node is clicked for selection */
31
- onSelect?: (key: string, event: React.MouseEvent) => void;
32
- /**
33
- * Called during a drag over a drop zone between nodes.
34
- * @param parent The parent node of the current list (null for root level)
35
- * @param index The position where a new node would be inserted (0 = before first node)
36
- */
37
- onDragOverZone?: (
38
- parent: TreeNode<T> | null,
39
- index: number,
40
- event: React.DragEvent,
41
- ) => boolean;
42
- isValidDropZone?: (parent: TreeNode<T> | null, index: number) => boolean;
43
- /**
44
- * Called when an item is dropped into a drop zone between nodes.
45
- * @param parent The parent node of the current list (null for root level)
46
- * @param index The position where a new node should be inserted (0 = before first node)
47
- */
48
- onDrop?: (
49
- parent: TreeNode<T> | null,
50
- index: number,
51
- event: React.DragEvent,
52
- ) => void;
53
- isDragging?: boolean;
54
- onStartDrag?: (data: {
55
- node: TreeNode<T>;
56
- event: React.DragEvent<any>;
57
- isMultiSelect: boolean;
58
- }) => void;
59
- onDragEnd?: (event: React.DragEvent | null) => void;
60
- enableDragAndDrop?: boolean;
61
-
62
- /**
63
- * Callback that notifies when a lazy load should occur.
64
- * When a node is toggled and its children haven't been loaded yet (i.e. undefined),
65
- * this callback is invoked so you can load the children asynchronously and update your tree model.
66
- */
67
- onLazyLoad?: (node: TreeNode<T>) => void;
68
- onDoubleClick?: (node: TreeNode<T>) => void;
69
- onContextMenu?: (node: TreeNode<T>, event: React.MouseEvent) => void;
70
- }
71
-
72
- // Local DropZone component to handle drag-over state.
73
- const DropZone = memo(
74
- ({
75
- parent,
76
- index,
77
- isDragging,
78
- onDragOverZone,
79
- onDrop,
80
- onDragEnd,
81
- isLast,
82
- isValidDropZone,
83
- }: {
84
- parent: TreeNode<any> | null;
85
- index: number;
86
- isDragging: boolean;
87
- onDragOverZone?: (
88
- parent: TreeNode<any> | null,
89
- index: number,
90
- e: React.DragEvent,
91
- ) => boolean;
92
- onDrop?: (
93
- parent: TreeNode<any> | null,
94
- index: number,
95
- e: React.DragEvent,
96
- ) => void;
97
- onDragEnd?: (event: React.DragEvent | null) => void;
98
- isLast?: boolean;
99
- isValidDropZone?: (parent: TreeNode<any> | null, index: number) => boolean;
100
- }) => {
101
- const [isDragOver, setIsDragOver] = React.useState(false);
102
- const [isValidDrop, setIsValidDrop] = React.useState(true);
103
-
104
- useEffect(() => {
105
- if (isDragging) {
106
- if (isValidDropZone) {
107
- const isValid = isValidDropZone(parent, index);
108
- setIsValidDrop(isValid);
109
- } else {
110
- setIsValidDrop(true);
111
- }
112
- }
113
- }, [isValidDropZone, parent, index, isDragging]);
114
-
115
- const handleDragEnter = useCallback(
116
- (e: React.DragEvent<HTMLDivElement>) => {
117
- e.preventDefault();
118
- e.stopPropagation();
119
- if (onDragOverZone) {
120
- const allowed = onDragOverZone(parent, index, e);
121
- setIsDragOver(allowed);
122
- // e.dataTransfer.dropEffect = allowed ? "move" : "none";
123
- }
124
- },
125
- [onDragOverZone, parent, index],
126
- );
127
-
128
- const handleDragLeave = useCallback(
129
- (e: React.DragEvent<HTMLDivElement>) => {
130
- e.preventDefault();
131
- e.stopPropagation();
132
- setIsDragOver(false);
133
- },
134
- [],
135
- );
136
-
137
- const handleDragOver = useCallback(
138
- (e: React.DragEvent<HTMLDivElement>) => {
139
- e.preventDefault();
140
- e.stopPropagation();
141
- if (onDragOverZone) {
142
- const allowed = onDragOverZone(parent, index, e);
143
- setIsDragOver(allowed);
144
- }
145
- },
146
- [onDragOverZone, parent, index],
147
- );
148
-
149
- const handleDrop = useCallback(
150
- (e: React.DragEvent<HTMLDivElement>) => {
151
- e.preventDefault();
152
- e.stopPropagation();
153
- setIsDragOver(false);
154
- if (onDrop) {
155
- onDrop(parent, index, e);
156
- }
157
- },
158
- [onDrop, parent, index],
159
- );
160
-
161
- if (!isDragging || !isValidDrop) return null;
162
-
163
- return (
164
- <div className={`relative ${isLast ? "h-3" : ""}`}>
165
- <div
166
- className={`drop-zone absolute top-[-5px] right-0 left-[45px] z-1000 h-3 rounded-md transition-colors duration-100 ${
167
- isDragOver ? "bg-sky-200" : ""
168
- }`}
169
- onDragEnter={handleDragEnter}
170
- onDragOver={handleDragOver}
171
- onDrop={handleDrop}
172
- onDragLeave={handleDragLeave}
173
- />
174
- </div>
175
- );
176
- },
177
- );
178
-
179
- // NodeContent component extracted and memoized
180
- const NodeContent = memo(
181
- ({
182
- node,
183
- isExpanded,
184
- isSelected,
185
- onSelect,
186
- onToggleNode,
187
- onStartDrag,
188
- onDragEnd,
189
- onDragOverZone,
190
- onDrop,
191
- onDoubleClick,
192
- renderNode,
193
- onContextMenu,
194
- enableDragAndDrop = false,
195
- selectedKeys,
196
- isDragging,
197
- }: {
198
- node: TreeNode<any>;
199
- isExpanded: boolean;
200
- isSelected: boolean;
201
- onSelect: (nodeKey: string, e: React.MouseEvent) => void;
202
- onToggleNode: (node: TreeNode<any>) => void;
203
- onStartDrag?: (data: {
204
- node: TreeNode<any>;
205
- event: React.DragEvent<any>;
206
- isMultiSelect: boolean;
207
- }) => void;
208
- onDragEnd?: (event: React.DragEvent<any>) => void;
209
- onDragOverZone?: (
210
- parent: TreeNode<any> | null,
211
- index: number,
212
- e: React.DragEvent<any>,
213
- ) => boolean;
214
- onDrop?: (
215
- parent: TreeNode<any> | null,
216
- index: number,
217
- e: React.DragEvent<any>,
218
- ) => void;
219
- onDoubleClick?: (node: TreeNode<any>) => void;
220
- onContextMenu?: (node: TreeNode<any>, event: React.MouseEvent) => void;
221
- renderNode: (node: TreeNode<any>) => React.ReactNode;
222
- enableDragAndDrop?: boolean;
223
- selectedKeys?: string[];
224
- isDragging: boolean;
225
- }) => {
226
- const [isDragOver, setIsDragOver] = React.useState(false);
227
-
228
- useEffect(() => {
229
- if (!isDragging) {
230
- setIsDragOver(false);
231
- }
232
- }, [isDragging]);
233
-
234
- const handleDragStart = useCallback(
235
- (event: React.DragEvent<any>) => {
236
- const isMultiSelect =
237
- isSelected && selectedKeys && selectedKeys.length > 1;
238
-
239
- // Set drag preview for multiple items if applicable
240
- if (isMultiSelect) {
241
- // Create custom drag image showing count of selected items
242
- const dragPreview = document.createElement("div");
243
- dragPreview.className =
244
- "bg-white shadow-md rounded-md border border-gray-300 px-2 py-1 text-sm max-w-24 absolute top-[-1000px] left-[-1000px]";
245
- dragPreview.innerHTML = `<div class="flex items-center"><span class="font-bold mr-1">${selectedKeys.length}</span> items</div>`;
246
- document.body.appendChild(dragPreview);
247
-
248
- // Set custom drag image
249
- event.dataTransfer.setDragImage(dragPreview, 15, 15);
250
- event.dataTransfer.dropEffect = "move";
251
-
252
- // Remove the element after drag starts
253
- setTimeout(() => {
254
- document.body.removeChild(dragPreview);
255
- }, 0);
256
- }
257
- if (onStartDrag) {
258
- onStartDrag({ node, event, isMultiSelect: isMultiSelect ?? false });
259
- }
260
- },
261
- [node, onStartDrag],
262
- );
263
-
264
- const handleDragLeave = useCallback((event: React.DragEvent<any>) => {
265
- event.preventDefault();
266
- setIsDragOver(false);
267
- }, []);
268
-
269
- const handleDragEnter = useCallback(
270
- (event: React.DragEvent<any>) => {
271
- event.preventDefault();
272
- if (onDragOverZone) {
273
- const allowed = onDragOverZone(node, -1, event);
274
- setIsDragOver(allowed);
275
- }
276
- },
277
- [node, onDragOverZone],
278
- );
279
-
280
- const handleDragOver = useCallback(
281
- (event: React.DragEvent<any>) => {
282
- event.preventDefault();
283
- if (onDragOverZone) {
284
- const allowed = onDragOverZone(node, -1, event);
285
- setIsDragOver(allowed);
286
- if (!allowed) {
287
- event.dataTransfer.dropEffect = "none";
288
- }
289
- }
290
- },
291
- [node, onDragOverZone],
292
- );
293
-
294
- const handleDrop = useCallback(
295
- (e: React.DragEvent<any>) => {
296
- console.log("Dropping", node, -1, e);
297
- e.preventDefault();
298
- e.stopPropagation();
299
- if (onDrop) {
300
- onDrop(node, -1, e);
301
- }
302
- },
303
- [node, onDrop],
304
- );
305
-
306
- const handleDoubleClick = useCallback(
307
- (e: React.MouseEvent<any>) => {
308
- e.stopPropagation();
309
- onDoubleClick?.(node);
310
- },
311
- [node, onDoubleClick],
312
- );
313
-
314
- const handleSelect = useCallback(
315
- (e: React.MouseEvent<any>) => {
316
- e.stopPropagation();
317
- onSelect(node.key, e);
318
- },
319
- [node.key, onSelect],
320
- );
321
-
322
- const handleToggle = useCallback(
323
- (e: React.MouseEvent<any>) => {
324
- e.stopPropagation();
325
- onToggleNode(node);
326
- },
327
- [node, onToggleNode],
328
- );
329
-
330
- const renderToggle = () => {
331
- if (node.hasChildren && node.children === null) {
332
- return (
333
- <ProgressSpinner
334
- style={{ width: "16px", height: "16px" }}
335
- className="text-gray-500"
336
- />
337
- );
338
- }
339
-
340
- return (
341
- <span
342
- onClick={handleToggle}
343
- className={`ml-0.5 inline-block transform cursor-pointer text-gray-500 transition duration-150 select-none ${
344
- isExpanded ? "rotate-90" : "rotate-0"
345
- }`}
346
- >
347
- <svg
348
- width="14"
349
- height="14"
350
- viewBox="0 0 14 14"
351
- fill="none"
352
- xmlns="http://www.w3.org/2000/svg"
353
- aria-hidden="true"
354
- data-pc-section="togglericon"
355
- >
356
- <path
357
- 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"
358
- fill="currentColor"
359
- ></path>
360
- </svg>
361
- </span>
362
- );
363
- };
364
-
365
- const handleContextMenu = useCallback(
366
- (e: React.MouseEvent<any>) => {
367
- e.stopPropagation();
368
- e.preventDefault();
369
- onContextMenu?.(node, e);
370
- },
371
- [node, onContextMenu],
372
- );
373
-
374
- return (
375
- <div
376
- className="tree-node mb-0.5 flex cursor-pointer items-center gap-0.5"
377
- draggable={enableDragAndDrop}
378
- onClick={handleSelect}
379
- onDragStart={(event) => handleDragStart(event)}
380
- onDragEnd={onDragEnd as any}
381
- onDragLeave={handleDragLeave}
382
- onDragEnter={handleDragEnter}
383
- onDragOver={handleDragOver}
384
- onDrop={handleDrop}
385
- onDoubleClick={handleDoubleClick}
386
- onContextMenu={handleContextMenu}
387
- >
388
- {/* Render toggle arrow only if the node is expandable */}
389
- {node.hasChildren || node.children?.length ? (
390
- renderToggle()
391
- ) : (
392
- <div className="w-[16px]" />
393
- )}
394
- <div
395
- className={`flex-1 rounded-md border border-transparent p-0.5 pr-1.5 hover:border-gray-300 ${
396
- isDragOver ? "bg-sky-200" : isSelected ? "bg-blue-100" : ""
397
- }`}
398
- onClick={handleSelect}
399
- >
400
- {renderNode(node)}
401
- </div>
402
- </div>
403
- );
404
- },
405
- );
406
-
407
- export const PerfectTree = <T,>({
408
- nodes,
409
- selectedKeys = [],
410
- expandedKeys = [],
411
- renderNode,
412
- onToggleExpand,
413
- onSelect,
414
- onDragOverZone,
415
- onDrop,
416
- isDragging = false,
417
- onStartDrag,
418
- onDragEnd,
419
- onLazyLoad,
420
- onDoubleClick,
421
- onContextMenu,
422
- enableDragAndDrop = false,
423
- isValidDropZone,
424
- }: TreeProps<T>) => {
425
- // When toggling a node, notify parent and trigger external lazy load if needed.
426
- const handleToggle = useCallback(
427
- (node: TreeNode<T>) => {
428
- if (onToggleExpand) {
429
- onToggleExpand(node.key);
430
- }
431
- // If the node is expandable and its children haven't been loaded,
432
- // call onLazyLoad (external async loading should update the node to `null` while loading)
433
- if (node.hasChildren && node.children === undefined && onLazyLoad) {
434
- onLazyLoad(node);
435
- }
436
- },
437
- [onToggleExpand, onLazyLoad],
438
- );
439
-
440
- const handleSelect = useCallback(
441
- (nodeKey: string, event: React.MouseEvent) => {
442
- if (onSelect) {
443
- onSelect(nodeKey, event);
444
- }
445
- },
446
- [onSelect],
447
- );
448
-
449
- // Global drag end handler.
450
- const isDraggingRef = React.useRef(false);
451
- useEffect(() => {
452
- const handleGlobalDragEnd = (event: DragEvent) => {
453
- if (isDraggingRef.current && onDragEnd) {
454
- onDragEnd(event as unknown as React.DragEvent);
455
- isDraggingRef.current = false;
456
- }
457
- };
458
-
459
- document.addEventListener("dragend", handleGlobalDragEnd);
460
- return () => {
461
- document.removeEventListener("dragend", handleGlobalDragEnd);
462
- };
463
- }, [onDragEnd]);
464
-
465
- const handleDragEnd = useCallback(
466
- (event: React.DragEvent<HTMLDivElement>) => {
467
- isDraggingRef.current = false;
468
- if (onDragEnd) {
469
- onDragEnd(event);
470
- }
471
- },
472
- [onDragEnd],
473
- );
474
-
475
- // Recursive function to render tree nodes along with drop zones.
476
- const renderTreeList = useCallback(
477
- (
478
- nodes: TreeNode<T>[],
479
- depth: number,
480
- parent: TreeNode<T> | null = null,
481
- ) => {
482
- return (
483
- <div className="flex flex-col">
484
- {nodes.map((node, index) => {
485
- const children = node.children;
486
- const isExpanded = expandedKeys.includes(node.key);
487
- const isSelected = selectedKeys.includes(node.key);
488
-
489
- return (
490
- <React.Fragment key={node.key}>
491
- <DropZone
492
- parent={parent}
493
- index={index}
494
- isDragging={isDragging}
495
- onDragOverZone={onDragOverZone}
496
- onDrop={onDrop}
497
- onDragEnd={onDragEnd}
498
- isValidDropZone={isValidDropZone}
499
- />
500
- <div
501
- style={{
502
- marginLeft: depth > 0 ? "21px" : undefined,
503
- }}
504
- className="flex flex-col"
505
- >
506
- <NodeContent
507
- node={node}
508
- isExpanded={isExpanded}
509
- isSelected={isSelected}
510
- onSelect={handleSelect}
511
- onToggleNode={handleToggle}
512
- onStartDrag={onStartDrag}
513
- onDragEnd={handleDragEnd}
514
- onDragOverZone={onDragOverZone}
515
- onDrop={onDrop}
516
- onDoubleClick={onDoubleClick}
517
- onContextMenu={onContextMenu}
518
- renderNode={renderNode}
519
- enableDragAndDrop={enableDragAndDrop}
520
- selectedKeys={selectedKeys}
521
- isDragging={isDragging}
522
- />
523
- {isExpanded && (
524
- <>
525
- {children && children.length > 0 ? (
526
- <div>{renderTreeList(children, depth + 1, node)}</div>
527
- ) : null}
528
- </>
529
- )}
530
- </div>
531
- </React.Fragment>
532
- );
533
- })}
534
- <DropZone
535
- parent={parent}
536
- index={nodes.length}
537
- isDragging={isDragging}
538
- onDragOverZone={onDragOverZone}
539
- onDrop={onDrop}
540
- onDragEnd={onDragEnd}
541
- isLast={true}
542
- isValidDropZone={isValidDropZone}
543
- />
544
- </div>
545
- );
546
- },
547
- [
548
- expandedKeys,
549
- selectedKeys,
550
- isDragging,
551
- onDragOverZone,
552
- onDrop,
553
- onDragEnd,
554
- onStartDrag,
555
- onDoubleClick,
556
- handleSelect,
557
- handleToggle,
558
- renderNode,
559
- ],
560
- );
561
-
562
- // Memoize the tree structure
563
- const treeContent = useMemo(
564
- () => renderTreeList(nodes, 0),
565
- [nodes, renderTreeList],
566
- );
567
-
568
- return <div>{treeContent}</div>;
569
- };
570
-
571
- export default memo(PerfectTree);
@@ -1,35 +0,0 @@
1
- import { classNames } from "primereact/utils";
2
- import { useLocalStorage } from "../utils";
3
-
4
- export function Section({
5
- title,
6
- children,
7
- }: {
8
- title: string;
9
- children: React.ReactNode;
10
- }) {
11
- const [open, setOpen] = useLocalStorage("editor.showSection-" + title, true);
12
-
13
- return (
14
- <div>
15
- <div
16
- className={classNames(
17
- open
18
- ? "border-blue-500 bg-gray-600"
19
- : "border-gray-400 bg-gray-400 hover:border-gray-300 hover:bg-gray-500",
20
- "flex cursor-pointer items-center justify-between border-l-[8px] px-3 py-2 text-xs text-white",
21
- )}
22
- onClick={() => setOpen(!open)}
23
- >
24
- {title}
25
- <i
26
- className={classNames(
27
- open ? "pi-chevron-up" : "pi-chevron-down",
28
- "pi cursor-pointer text-xs",
29
- )}
30
- ></i>
31
- </div>
32
- {open && <div className="bg-gray-50 px-2 pt-4 pb-6">{children}</div>}
33
- </div>
34
- );
35
- }
@@ -1,54 +0,0 @@
1
- import { classNames } from "primereact/utils";
2
- import { MouseEventHandler } from "react";
3
-
4
- export function SimpleIconButton({
5
- onClick,
6
- className,
7
- icon,
8
- label,
9
- disabled,
10
- size,
11
- id,
12
- selected,
13
- dark = false,
14
- }: {
15
- onClick: MouseEventHandler;
16
- className?: string;
17
- icon?: React.ReactNode;
18
- label: string;
19
- disabled?: boolean;
20
- id?: string;
21
- size?: "large" | "small";
22
- selected?: boolean;
23
- dark?: boolean;
24
- }) {
25
- const color = disabled
26
- ? "text-gray-300"
27
- : dark
28
- ? "text-gray-400"
29
- : "text-gray-600";
30
-
31
- return (
32
- <button
33
- id={id}
34
- disabled={disabled}
35
- className={classNames(
36
- typeof icon === "string" ? icon + " p-[6px]" : "p-[2px]",
37
- "rounded-full",
38
- color,
39
- disabled
40
- ? "cursor-none"
41
- : "cursor-pointer hover:bg-gray-200 hover:text-gray-600",
42
- className,
43
- size === "large" ? "text-lg" : "text-xs",
44
- selected ? "bg-gray-200 text-gray-600" : "",
45
- )}
46
- onClick={(ev) => {
47
- if (!disabled) onClick(ev);
48
- }}
49
- title={label}
50
- >
51
- {typeof icon !== "string" && icon}
52
- </button>
53
- );
54
- }
@@ -1,40 +0,0 @@
1
- import { ReactNode } from "react";
2
- import { MenuItem } from "../../config/types";
3
- export function SimpleMenu({
4
- items,
5
- activeItemKey,
6
- onItemClick,
7
- }: {
8
- items: MenuItem[];
9
- activeItemKey: string | null;
10
- onItemClick: (item: MenuItem) => void;
11
- }) {
12
- return (
13
- <div className="flex h-full flex-col p-1">
14
- {items.map((item, index) => (
15
- <div key={index} className="flex flex-col gap-1 p-2">
16
- <div className="flex flex-row items-center gap-2 border-b border-gray-200 pb-1 pl-2">
17
- {item.icon && item.icon}
18
- {item.label}
19
- </div>
20
- {item.items?.map((subItem, subIndex) => (
21
- <div
22
- key={subIndex}
23
- className={`flex cursor-pointer flex-col p-1 px-4 hover:bg-gray-100 ${
24
- activeItemKey === subItem.id ? "bg-gray-100" : ""
25
- }`}
26
- onClick={() => {
27
- onItemClick(subItem);
28
- }}
29
- >
30
- <div className="flex flex-row items-center gap-2 text-sm">
31
- {subItem.icon && subItem.icon}
32
- {subItem.label}
33
- </div>
34
- </div>
35
- ))}
36
- </div>
37
- ))}
38
- </div>
39
- );
40
- }