typo3-typescript-sources 13.4.20

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 (415) hide show
  1. package/.github/workflows/sync-and-publish.yml +265 -0
  2. package/.last-synced-tag +1 -0
  3. package/LICENSE.txt +339 -0
  4. package/README-TYPO3.md +166 -0
  5. package/README.md +28 -0
  6. package/adminpanel/admin-panel.ts +375 -0
  7. package/adminpanel/modules/cache.ts +27 -0
  8. package/adminpanel/modules/preview.ts +75 -0
  9. package/backend/action-button/abstract-action.ts +22 -0
  10. package/backend/action-button/deferred-action.ts +41 -0
  11. package/backend/action-button/immediate-action.ts +31 -0
  12. package/backend/action-dispatcher.ts +104 -0
  13. package/backend/ajax-data-handler/message-interface.ts +18 -0
  14. package/backend/ajax-data-handler/response-interface.ts +20 -0
  15. package/backend/ajax-data-handler.ts +214 -0
  16. package/backend/backend-exception.ts +22 -0
  17. package/backend/broadcast-message.ts +50 -0
  18. package/backend/broadcast-service.ts +52 -0
  19. package/backend/browse-database.ts +38 -0
  20. package/backend/clear-cache.ts +88 -0
  21. package/backend/clipboard-panel.ts +240 -0
  22. package/backend/close-current-window.ts +2 -0
  23. package/backend/code-editor/autocomplete/completion-result.ts +105 -0
  24. package/backend/code-editor/autocomplete/ts-code-completion.ts +142 -0
  25. package/backend/code-editor/autocomplete/ts-parser.ts +485 -0
  26. package/backend/code-editor/autocomplete/ts-ref.ts +164 -0
  27. package/backend/code-editor/element/code-mirror-element.ts +282 -0
  28. package/backend/code-editor/language/typoscript.ts +181 -0
  29. package/backend/code-editor/stream-parser/typoscript.ts +1600 -0
  30. package/backend/color-picker.ts +158 -0
  31. package/backend/color-scheme-switch.ts +179 -0
  32. package/backend/column-selector-button.ts +302 -0
  33. package/backend/context-help.ts +68 -0
  34. package/backend/context-menu-actions.ts +322 -0
  35. package/backend/context-menu.ts +751 -0
  36. package/backend/copy-to-clipboard.ts +79 -0
  37. package/backend/date-time-picker.ts +270 -0
  38. package/backend/document-save-actions.ts +159 -0
  39. package/backend/drag-tooltip.ts +285 -0
  40. package/backend/drag-uploader.ts +914 -0
  41. package/backend/element/alert-element.ts +116 -0
  42. package/backend/element/dispatch-modal-button.ts +50 -0
  43. package/backend/element/draggable-resizable-element.ts +249 -0
  44. package/backend/element/editable-page-title.ts +306 -0
  45. package/backend/element/icon-element.ts +84 -0
  46. package/backend/element/immediate-action-element.ts +89 -0
  47. package/backend/element/pagination.ts +59 -0
  48. package/backend/element/progress-bar-element.ts +172 -0
  49. package/backend/element/progress-tracker-element.ts +119 -0
  50. package/backend/element/pseudo-button.ts +58 -0
  51. package/backend/element/spinner-element.ts +51 -0
  52. package/backend/element/thumbnail-element.ts +80 -0
  53. package/backend/element-browser.ts +182 -0
  54. package/backend/enum/data-transfer-types.ts +21 -0
  55. package/backend/enum/icon-types.ts +31 -0
  56. package/backend/enum/key-types.ts +27 -0
  57. package/backend/enum/severity.ts +20 -0
  58. package/backend/enum/viewport/scaffold-identifier.ts +24 -0
  59. package/backend/event/client-request.ts +25 -0
  60. package/backend/event/consumable.ts +18 -0
  61. package/backend/event/consumer-scope.ts +54 -0
  62. package/backend/event/event-dispatcher.ts +26 -0
  63. package/backend/event/interaction-request-assignment.ts +24 -0
  64. package/backend/event/interaction-request-map.ts +75 -0
  65. package/backend/event/interaction-request.ts +48 -0
  66. package/backend/event/trigger-request.ts +56 -0
  67. package/backend/form/submit-interceptor.ts +66 -0
  68. package/backend/form-engine/container/files-control-container.ts +716 -0
  69. package/backend/form-engine/container/flex-form-container-container.ts +166 -0
  70. package/backend/form-engine/container/flex-form-section-container.ts +210 -0
  71. package/backend/form-engine/container/inline-control-container.ts +1230 -0
  72. package/backend/form-engine/container/site-language-container.ts +616 -0
  73. package/backend/form-engine/element/abstract-sortable-select-items.ts +186 -0
  74. package/backend/form-engine/element/category-element.ts +160 -0
  75. package/backend/form-engine/element/color-element.ts +81 -0
  76. package/backend/form-engine/element/datetime-element.ts +66 -0
  77. package/backend/form-engine/element/extra/char-counter.ts +112 -0
  78. package/backend/form-engine/element/extra/select-box-filter.ts +85 -0
  79. package/backend/form-engine/element/folder-element.ts +66 -0
  80. package/backend/form-engine/element/group-element.ts +47 -0
  81. package/backend/form-engine/element/json-element.ts +52 -0
  82. package/backend/form-engine/element/link-element.ts +121 -0
  83. package/backend/form-engine/element/mfa-info-element.ts +169 -0
  84. package/backend/form-engine/element/modifier/resizable.ts +27 -0
  85. package/backend/form-engine/element/modifier/tabbable.ts +29 -0
  86. package/backend/form-engine/element/online-media-form-element.ts +65 -0
  87. package/backend/form-engine/element/password-element.ts +71 -0
  88. package/backend/form-engine/element/select-multiple-side-by-side-element.ts +83 -0
  89. package/backend/form-engine/element/select-single-element.ts +82 -0
  90. package/backend/form-engine/element/select-tree-element.ts +148 -0
  91. package/backend/form-engine/element/select-tree-toolbar.ts +118 -0
  92. package/backend/form-engine/element/select-tree.ts +210 -0
  93. package/backend/form-engine/element/slug-element.ts +243 -0
  94. package/backend/form-engine/element/suggest/result-container.ts +118 -0
  95. package/backend/form-engine/element/suggest/result-item.ts +90 -0
  96. package/backend/form-engine/element/table-permission-element.ts +101 -0
  97. package/backend/form-engine/element/table-wizard-element.ts +427 -0
  98. package/backend/form-engine/element/text-element.ts +52 -0
  99. package/backend/form-engine/element/text-table-element.ts +31 -0
  100. package/backend/form-engine/field-control/add-record.ts +40 -0
  101. package/backend/form-engine/field-control/edit-popup.ts +64 -0
  102. package/backend/form-engine/field-control/insert-clipboard.ts +50 -0
  103. package/backend/form-engine/field-control/link-popup.ts +53 -0
  104. package/backend/form-engine/field-control/list-module.ts +40 -0
  105. package/backend/form-engine/field-control/password-generator.ts +102 -0
  106. package/backend/form-engine/field-control/reset-selection.ts +48 -0
  107. package/backend/form-engine/field-wizard/localization-state-selector.ts +67 -0
  108. package/backend/form-engine/field-wizard/value-picker.ts +123 -0
  109. package/backend/form-engine/field-wizard/value-slider.ts +86 -0
  110. package/backend/form-engine/inline-relation/ajax-dispatcher.ts +124 -0
  111. package/backend/form-engine/inline-relation/inline-response-interface.ts +41 -0
  112. package/backend/form-engine-link-browser-adapter.ts +129 -0
  113. package/backend/form-engine-review.ts +155 -0
  114. package/backend/form-engine-suggest.ts +133 -0
  115. package/backend/form-engine-validation.ts +686 -0
  116. package/backend/form-engine.ts +1391 -0
  117. package/backend/global-event-handler.ts +252 -0
  118. package/backend/grid-editor.ts +1077 -0
  119. package/backend/hashing/md5.ts +252 -0
  120. package/backend/helper.ts +24 -0
  121. package/backend/hotkeys/hotkey-storage.ts +63 -0
  122. package/backend/hotkeys.ts +216 -0
  123. package/backend/icons.ts +236 -0
  124. package/backend/image-manipulation.ts +885 -0
  125. package/backend/info-window.ts +46 -0
  126. package/backend/input/clearable.ts +128 -0
  127. package/backend/input/index.d.ts +8 -0
  128. package/backend/java-script-module-import-event-handler.ts +19 -0
  129. package/backend/key-bindings.ts +42 -0
  130. package/backend/layout-module/drag-drop.ts +359 -0
  131. package/backend/layout-module/paste.ts +165 -0
  132. package/backend/link-browser.ts +89 -0
  133. package/backend/live-search/element/backend-search.ts +34 -0
  134. package/backend/live-search/element/hint.ts +33 -0
  135. package/backend/live-search/element/provider/default-result-item.ts +52 -0
  136. package/backend/live-search/element/provider/page-provider-result-item.ts +52 -0
  137. package/backend/live-search/element/result/item/action/action-container.ts +135 -0
  138. package/backend/live-search/element/result/item/action/action.ts +56 -0
  139. package/backend/live-search/element/result/item/item-container.ts +224 -0
  140. package/backend/live-search/element/result/item/item.ts +74 -0
  141. package/backend/live-search/element/result/result-container.ts +110 -0
  142. package/backend/live-search/element/result/result-detail-container.ts +50 -0
  143. package/backend/live-search/element/result/result-pagination.ts +122 -0
  144. package/backend/live-search/element/search-option-item.ts +70 -0
  145. package/backend/live-search/live-search-configurator.ts +54 -0
  146. package/backend/live-search/live-search-shortcut.ts +29 -0
  147. package/backend/live-search/result-types/backend-module-result-type.ts +8 -0
  148. package/backend/live-search/result-types/default-result-type.ts +21 -0
  149. package/backend/live-search/result-types/page-result-type.ts +23 -0
  150. package/backend/localization.ts +390 -0
  151. package/backend/login-refresh.ts +525 -0
  152. package/backend/login.ts +179 -0
  153. package/backend/mail-link-handler.ts +45 -0
  154. package/backend/modal-interface.ts +19 -0
  155. package/backend/modal.ts +685 -0
  156. package/backend/module/iframe.ts +125 -0
  157. package/backend/module/router.ts +275 -0
  158. package/backend/module-menu.ts +550 -0
  159. package/backend/module.ts +133 -0
  160. package/backend/multi-record-selection-action.ts +44 -0
  161. package/backend/multi-record-selection-delete-action.ts +108 -0
  162. package/backend/multi-record-selection-edit-action.ts +56 -0
  163. package/backend/multi-record-selection.ts +468 -0
  164. package/backend/multi-step-wizard.ts +568 -0
  165. package/backend/new-content-element-wizard-button.ts +51 -0
  166. package/backend/new-multiple-pages.ts +108 -0
  167. package/backend/new-record-wizard.ts +680 -0
  168. package/backend/notification.ts +366 -0
  169. package/backend/offset.ts +40 -0
  170. package/backend/online-media.ts +110 -0
  171. package/backend/page-actions.ts +91 -0
  172. package/backend/page-link-handler.ts +51 -0
  173. package/backend/pagetsconfig/pagetsconfig-includes.ts +77 -0
  174. package/backend/popover.ts +165 -0
  175. package/backend/record-download-button.ts +104 -0
  176. package/backend/record-link-handler.ts +31 -0
  177. package/backend/record-search.ts +44 -0
  178. package/backend/recordlist.ts +230 -0
  179. package/backend/resource/resource.ts +35 -0
  180. package/backend/security/element/csp-reports.ts +406 -0
  181. package/backend/security/element/sudo-mode.ts +249 -0
  182. package/backend/security/sudo-mode-interceptor.ts +19 -0
  183. package/backend/settings/editor/editable-setting.ts +231 -0
  184. package/backend/settings/editor.ts +451 -0
  185. package/backend/settings/enum/settings-mode.enum.ts +24 -0
  186. package/backend/settings/type/base.ts +200 -0
  187. package/backend/settings/type/bool.ts +56 -0
  188. package/backend/settings/type/color.ts +64 -0
  189. package/backend/settings/type/int.ts +85 -0
  190. package/backend/settings/type/number.ts +61 -0
  191. package/backend/settings/type/page.ts +100 -0
  192. package/backend/settings/type/string.ts +77 -0
  193. package/backend/settings/type/stringlist.ts +87 -0
  194. package/backend/severity.ts +88 -0
  195. package/backend/site-inline-actions.ts +32 -0
  196. package/backend/sortable-table.ts +208 -0
  197. package/backend/storage/abstract-client-storage.ts +76 -0
  198. package/backend/storage/browser-session.ts +28 -0
  199. package/backend/storage/client.ts +28 -0
  200. package/backend/storage/module-state-storage.ts +118 -0
  201. package/backend/storage/persistent.ts +204 -0
  202. package/backend/switch-user.ts +82 -0
  203. package/backend/tabs.ts +72 -0
  204. package/backend/telephone-link-handler.ts +40 -0
  205. package/backend/tests/backend/storage/browser-storage-test.ts +87 -0
  206. package/backend/tests/backend/storage/client-test.ts +87 -0
  207. package/backend/tests/backend/utility/dom-helper-test.ts +51 -0
  208. package/backend/tests/backend-exception-test.ts +28 -0
  209. package/backend/tests/element/immediate-action-element-test.ts +81 -0
  210. package/backend/tests/form-engine-validation-test.ts +304 -0
  211. package/backend/tests/grid-editor-test.ts +29 -0
  212. package/backend/tests/hashing/md5Test.ts +28 -0
  213. package/backend/tests/icons-test.ts +23 -0
  214. package/backend/tests/notification-test.ts +161 -0
  215. package/backend/tests/popover-test.ts +83 -0
  216. package/backend/toolbar/clear-cache-menu.ts +88 -0
  217. package/backend/toolbar/live-search.ts +284 -0
  218. package/backend/toolbar/shortcut-menu.ts +254 -0
  219. package/backend/toolbar/system-information-menu.ts +161 -0
  220. package/backend/toolbar.ts +41 -0
  221. package/backend/tree/file-storage-browser.ts +194 -0
  222. package/backend/tree/file-storage-tree-container.ts +465 -0
  223. package/backend/tree/file-storage-tree.ts +42 -0
  224. package/backend/tree/page-browser.ts +272 -0
  225. package/backend/tree/page-tree-element.ts +602 -0
  226. package/backend/tree/page-tree.ts +152 -0
  227. package/backend/tree/tree-module-state.ts +159 -0
  228. package/backend/tree/tree-node-toggle.ts +31 -0
  229. package/backend/tree/tree-node.ts +97 -0
  230. package/backend/tree/tree-toolbar.ts +117 -0
  231. package/backend/tree/tree.ts +1595 -0
  232. package/backend/url-link-handler.ts +36 -0
  233. package/backend/user-pass-login.ts +255 -0
  234. package/backend/user-settings-manager.ts +189 -0
  235. package/backend/utility/collapse-state-persister.ts +205 -0
  236. package/backend/utility/collapse-state-search.ts +183 -0
  237. package/backend/utility/dom-helper.ts +91 -0
  238. package/backend/utility/drag-drop-utility.ts +47 -0
  239. package/backend/utility/message-utility.ts +45 -0
  240. package/backend/utility/top-level-module-import.ts +32 -0
  241. package/backend/utility.ts +194 -0
  242. package/backend/viewport/abstract-container.ts +22 -0
  243. package/backend/viewport/content-container.ts +98 -0
  244. package/backend/viewport/loader.ts +28 -0
  245. package/backend/viewport/navigation-container.ts +119 -0
  246. package/backend/viewport/resizable-navigation.ts +176 -0
  247. package/backend/viewport/toolbar.ts +27 -0
  248. package/backend/viewport/topbar.ts +39 -0
  249. package/backend/viewport.ts +46 -0
  250. package/backend/window-manager.ts +84 -0
  251. package/backend/wizard/move-content-element.ts +107 -0
  252. package/backend/wizard/move-page.ts +74 -0
  253. package/backend/wizard.ts +331 -0
  254. package/belog/backend-log.ts +88 -0
  255. package/beuser/backend-user-listing.ts +40 -0
  256. package/beuser/permissions.ts +291 -0
  257. package/core/ajax/ajax-request-types.ts +15 -0
  258. package/core/ajax/ajax-request.ts +202 -0
  259. package/core/ajax/ajax-response.ts +57 -0
  260. package/core/ajax/input-transformer.ts +92 -0
  261. package/core/ajax/simple-response-interface.ts +5 -0
  262. package/core/authentication/mfa-provider/totp.ts +54 -0
  263. package/core/cache/dedupe-async-task.ts +95 -0
  264. package/core/directive/markdown.ts +82 -0
  265. package/core/directive/nl2br.ts +16 -0
  266. package/core/document-service.ts +35 -0
  267. package/core/event/debounce-event.ts +40 -0
  268. package/core/event/event-interface.ts +24 -0
  269. package/core/event/regular-event.ts +58 -0
  270. package/core/event/request-animation-frame-event.ts +42 -0
  271. package/core/event/throttle-event.ts +54 -0
  272. package/core/java-script-item-handler.ts +29 -0
  273. package/core/java-script-item-processor.ts +171 -0
  274. package/core/lit-helper.ts +126 -0
  275. package/core/literals.ts +17 -0
  276. package/core/referrer-refresh.ts +2 -0
  277. package/core/security-utility.ts +89 -0
  278. package/core/tests/ajax/ajax-request-test.ts +290 -0
  279. package/core/tests/ajax/input-transformer-test.ts +64 -0
  280. package/core/tests/cache/dedupe-async-task-test.ts +152 -0
  281. package/core/tests/event/throttle-event-test.ts +47 -0
  282. package/core/tests/literals-test.ts +24 -0
  283. package/core/tests/security-utility-test.ts +50 -0
  284. package/core/utility/types.ts +9 -0
  285. package/dashboard/chart-initializer.ts +136 -0
  286. package/dashboard/dashboard.ts +1487 -0
  287. package/extensionmanager/distribution-image.ts +55 -0
  288. package/extensionmanager/main.ts +291 -0
  289. package/extensionmanager/repository.ts +195 -0
  290. package/extensionmanager/update.ts +118 -0
  291. package/extensionmanager/upload-form.ts +42 -0
  292. package/filelist/browse-files.ts +148 -0
  293. package/filelist/browse-folders.ts +94 -0
  294. package/filelist/context-menu-actions.ts +335 -0
  295. package/filelist/create-folder.ts +69 -0
  296. package/filelist/file-delete.ts +69 -0
  297. package/filelist/file-list-actions.ts +132 -0
  298. package/filelist/file-list-dragdrop.ts +139 -0
  299. package/filelist/file-list-rename-handler.ts +128 -0
  300. package/filelist/file-list-transfer-handler.ts +138 -0
  301. package/filelist/file-list.ts +396 -0
  302. package/filelist/file-replace.ts +37 -0
  303. package/filelist/linkbrowser-file-handler.ts +94 -0
  304. package/filelist/linkbrowser-folder-handler.ts +74 -0
  305. package/filelist/rename-file.ts +109 -0
  306. package/form/backend/form-editor/component/property-grid-editor.ts +340 -0
  307. package/form/backend/form-editor/core.ts +2104 -0
  308. package/form/backend/form-editor/helper.ts +226 -0
  309. package/form/backend/form-editor/inspector-component.ts +2323 -0
  310. package/form/backend/form-editor/mediator.ts +941 -0
  311. package/form/backend/form-editor/modals-component.ts +433 -0
  312. package/form/backend/form-editor/stage-component.ts +908 -0
  313. package/form/backend/form-editor/tree-component.ts +548 -0
  314. package/form/backend/form-editor/view-model.ts +1343 -0
  315. package/form/backend/form-editor.ts +846 -0
  316. package/form/backend/form-manager/main.ts +39 -0
  317. package/form/backend/form-manager/view-model.ts +789 -0
  318. package/form/backend/form-manager.ts +180 -0
  319. package/form/backend/helper.ts +60 -0
  320. package/form/frontend/date-picker.ts +38 -0
  321. package/frontend/default_frontend.ts +82 -0
  322. package/impexp/context-menu-actions.ts +50 -0
  323. package/impexp/import-export.ts +62 -0
  324. package/indexed-search/pagination.ts +26 -0
  325. package/indexed-search/statistics.ts +50 -0
  326. package/info/translation-status.ts +48 -0
  327. package/install/ajax/ajax-queue.ts +83 -0
  328. package/install/init-install.ts +2 -0
  329. package/install/init-installer.ts +2 -0
  330. package/install/install.ts +25 -0
  331. package/install/installer.ts +458 -0
  332. package/install/message-interface.ts +18 -0
  333. package/install/module/abstract-inline-module.ts +27 -0
  334. package/install/module/abstract-interactable-module.ts +107 -0
  335. package/install/module/environment/environment-check.ts +92 -0
  336. package/install/module/environment/folder-structure.ts +145 -0
  337. package/install/module/environment/image-processing.ts +141 -0
  338. package/install/module/environment/mail-test.ts +127 -0
  339. package/install/module/environment/php-info.ts +50 -0
  340. package/install/module/environment/system-information.ts +50 -0
  341. package/install/module/maintenance/cache.ts +59 -0
  342. package/install/module/maintenance/clear-tables.ts +134 -0
  343. package/install/module/maintenance/clear-typo3temp-files.ts +137 -0
  344. package/install/module/maintenance/create-admin.ts +126 -0
  345. package/install/module/maintenance/database-analyzer.ts +266 -0
  346. package/install/module/maintenance/dump-autoload.ts +58 -0
  347. package/install/module/maintenance/language-packs.ts +338 -0
  348. package/install/module/maintenance/reset-backend-user-uc.ts +58 -0
  349. package/install/module/password-strength.ts +56 -0
  350. package/install/module/settings/change-install-tool-password.ts +101 -0
  351. package/install/module/settings/extension-configuration.ts +224 -0
  352. package/install/module/settings/features.ts +102 -0
  353. package/install/module/settings/local-configuration.ts +316 -0
  354. package/install/module/settings/presets.ts +147 -0
  355. package/install/module/settings/system-maintainer.ts +111 -0
  356. package/install/module/upgrade/core-update.ts +255 -0
  357. package/install/module/upgrade/extension-compat-tester.ts +195 -0
  358. package/install/module/upgrade/extension-scanner.ts +381 -0
  359. package/install/module/upgrade/tca-ext-tables-check.ts +93 -0
  360. package/install/module/upgrade/tca-migrations-check.ts +101 -0
  361. package/install/module/upgrade/upgrade-docs.ts +310 -0
  362. package/install/module/upgrade/upgrade-wizards.ts +612 -0
  363. package/install/renderable/clearable.ts +113 -0
  364. package/install/renderable/flash-message.ts +64 -0
  365. package/install/renderable/info-box.ts +66 -0
  366. package/install/renderable/language-packs.ts +304 -0
  367. package/install/renderable/offset-group.ts +38 -0
  368. package/install/renderable/severity.ts +49 -0
  369. package/install/renderable/wrap-group.ts +36 -0
  370. package/install/router.ts +468 -0
  371. package/linkvalidator/linkvalidator-modal.ts +45 -0
  372. package/linkvalidator/linkvalidator.ts +101 -0
  373. package/lowlevel/query-generator.ts +132 -0
  374. package/lowlevel/reference-index.ts +44 -0
  375. package/opendocs/toolbar/opendocs-menu.ts +117 -0
  376. package/package.json +34 -0
  377. package/recycler/recycler.ts +539 -0
  378. package/redirects/event-handler.ts +108 -0
  379. package/redirects/form-engine-evaluation.ts +34 -0
  380. package/redirects/redirects-module.ts +58 -0
  381. package/rte-ckeditor/ckeditor5.ts +402 -0
  382. package/rte-ckeditor/css-prefixer.ts +94 -0
  383. package/rte-ckeditor/legacy/ckeditor5-bundle.ts +17 -0
  384. package/rte-ckeditor/legacy/ckeditor5-inspector.ts +2 -0
  385. package/rte-ckeditor/plugin/typo3-link.ts +810 -0
  386. package/rte-ckeditor/plugin/whitespace.ts +114 -0
  387. package/rte-ckeditor/rte-link-browser.ts +112 -0
  388. package/rte-ckeditor/tests/css-prefixer-test.ts +314 -0
  389. package/scheduler/scheduler-add-group.ts +119 -0
  390. package/scheduler/scheduler-editable-group-name.ts +307 -0
  391. package/scheduler/scheduler-sortable-groups.ts +59 -0
  392. package/scheduler/scheduler.ts +466 -0
  393. package/setup/setup-module.ts +122 -0
  394. package/styleguide/checkbox-demo.ts +5 -0
  395. package/styleguide/element/theme-switcher-element.ts +101 -0
  396. package/styleguide/filter.ts +22 -0
  397. package/styleguide/find-icons.ts +78 -0
  398. package/styleguide/processing-indicator.ts +78 -0
  399. package/styleguide/render-notifications.ts +64 -0
  400. package/sys-note/element/delete-button.ts +78 -0
  401. package/tstemplate/constant-editor.ts +64 -0
  402. package/tstemplate/information-module.ts +31 -0
  403. package/tstemplate/template-analyzer.ts +77 -0
  404. package/viewpage/main.ts +253 -0
  405. package/workspaces/backend.ts +979 -0
  406. package/workspaces/preview.ts +232 -0
  407. package/workspaces/renderable/comment-view.ts +79 -0
  408. package/workspaces/renderable/diff-view.ts +58 -0
  409. package/workspaces/renderable/history-view.ts +97 -0
  410. package/workspaces/renderable/record-information.ts +118 -0
  411. package/workspaces/renderable/record-table.ts +355 -0
  412. package/workspaces/renderable/send-to-stage-form.ts +108 -0
  413. package/workspaces/toolbar/workspaces-menu.ts +190 -0
  414. package/workspaces/utility/icon-helper.ts +57 -0
  415. package/workspaces/workspaces.ts +136 -0
@@ -0,0 +1,602 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, LitElement, type TemplateResult, nothing } from 'lit';
15
+ import { customElement, property, query } from 'lit/decorators';
16
+ import { until } from 'lit/directives/until';
17
+ import { lll } from '@typo3/core/lit-helper';
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import Persistent from '@typo3/backend/storage/persistent';
20
+ import { ModuleUtility } from '@typo3/backend/module';
21
+ import ContextMenu from '../context-menu';
22
+ import { PageTree } from '@typo3/backend/tree/page-tree';
23
+ import { TreeNodeCommandEnum, TreeNodePositionEnum, type TreeNodeInterface } from '@typo3/backend/tree/tree-node';
24
+ import { TreeToolbar } from '@typo3/backend/tree/tree-toolbar';
25
+ import { TreeModuleState } from '@typo3/backend/tree/tree-module-state';
26
+ import Modal from '../modal';
27
+ import Severity from '../severity';
28
+ import { ModuleStateStorage } from '@typo3/backend/storage/module-state-storage';
29
+ import { DataTransferTypes } from '@typo3/backend/enum/data-transfer-types';
30
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
31
+ import type { DragTooltipMetadata } from '@typo3/backend/drag-tooltip';
32
+ import type { DataTransferStringItem } from '@typo3/backend/tree/tree';
33
+
34
+ /**
35
+ * This module defines the Custom Element for rendering the navigation component for an editable page tree
36
+ * including drag+drop, deletion, in-place editing and a custom toolbar for this component.
37
+ *
38
+ * It is used as custom element via "<typo3-backend-navigation-component-pagetree>".
39
+ *
40
+ * The navigationComponentName export is used by the NavigationContainer in order to
41
+ * create an instance of PageTreeNavigationComponent via document.createElement().
42
+ */
43
+
44
+ export const navigationComponentName: string = 'typo3-backend-navigation-component-pagetree';
45
+
46
+ interface NodeChangeCommandDataInterface {
47
+ command: TreeNodeCommandEnum,
48
+ node: TreeNodeInterface,
49
+ target?: TreeNodeInterface,
50
+ position?: TreeNodePositionEnum,
51
+ title?: string,
52
+ }
53
+
54
+ interface NodePositionOptions extends NodeChangeCommandDataInterface {
55
+ command: TreeNodeCommandEnum.NEW | TreeNodeCommandEnum.COPY | TreeNodeCommandEnum.MOVE,
56
+ target: TreeNodeInterface
57
+ position: TreeNodePositionEnum,
58
+ }
59
+
60
+ interface NodeDeleteOptions extends NodeChangeCommandDataInterface {
61
+ command: TreeNodeCommandEnum.DELETE,
62
+ }
63
+
64
+ interface NodeEditOptions extends NodeChangeCommandDataInterface {
65
+ command: TreeNodeCommandEnum.EDIT,
66
+ title: string,
67
+ }
68
+ interface NodeNewOptions extends NodePositionOptions {
69
+ command: TreeNodeCommandEnum.NEW,
70
+ title: string,
71
+ position: TreeNodePositionEnum,
72
+ doktype: number,
73
+ }
74
+
75
+ /**
76
+ * PageTree which allows for drag+drop, and in-place editing, as well as
77
+ * tree highlighting from the outside
78
+ */
79
+ @customElement('typo3-backend-navigation-component-pagetree-tree')
80
+ export class EditablePageTree extends PageTree {
81
+ protected override allowNodeEdit: boolean = true;
82
+ protected override allowNodeDrag: boolean = true;
83
+ protected override allowNodeSorting: boolean = true;
84
+
85
+ public sendChangeCommand(data: NodeChangeCommandDataInterface): void {
86
+ let params: string = '';
87
+ let targetUid: string = '0';
88
+
89
+ if (data.target) {
90
+ targetUid = data.target.identifier;
91
+ if (data.position === TreeNodePositionEnum.BEFORE) {
92
+ const previousNode = this.getPreviousNode(data.target);
93
+ targetUid = ((previousNode.depth === data.target.depth) ? '-' : '') + previousNode.identifier;
94
+ }
95
+ else if (data.position === TreeNodePositionEnum.AFTER) {
96
+ targetUid = '-' + targetUid;
97
+ }
98
+ }
99
+
100
+ if (data.command === TreeNodeCommandEnum.NEW) {
101
+ const newData = data as NodeNewOptions;
102
+ params = '&data[pages][' + data.node.identifier + '][pid]=' + encodeURIComponent(targetUid) +
103
+ '&data[pages][' + data.node.identifier + '][title]=' + encodeURIComponent(newData.title) +
104
+ '&data[pages][' + data.node.identifier + '][doktype]=' + encodeURIComponent(newData.doktype);
105
+ } else if (data.command === TreeNodeCommandEnum.EDIT) {
106
+ params = '&data[pages][' + data.node.identifier + '][title]=' + encodeURIComponent(data.title);
107
+ } else if (data.command === TreeNodeCommandEnum.DELETE) {
108
+ // @todo currently it's "If uid of deleted record (data.uid) is still selected, randomly select the first node"
109
+ const moduleStateStorage = ModuleStateStorage.current('web');
110
+ if (data.node.identifier === moduleStateStorage.identifier) {
111
+ this.selectFirstNode();
112
+ }
113
+ params = '&cmd[pages][' + data.node.identifier + '][delete]=1';
114
+ } else {
115
+ params = 'cmd[pages][' + data.node.identifier + '][' + data.command + ']=' + targetUid;
116
+ }
117
+
118
+ this.requestTreeUpdate(params).then((response) => {
119
+ if (response && response.hasErrors) {
120
+ this.errorNotification(response.messages);
121
+ } else {
122
+ if (data.command === TreeNodeCommandEnum.NEW) {
123
+ const parentNode = this.getParentNode(data.node);
124
+ parentNode.loaded = false;
125
+ this.loadChildren(parentNode);
126
+ } else {
127
+ this.refreshOrFilterTree();
128
+ }
129
+ }
130
+ });
131
+ }
132
+
133
+ /**
134
+ * Initializes a drag&drop when called on the page tree. Should be moved somewhere else at some point
135
+ */
136
+ public initializeDragForNode() {
137
+ throw new Error('unused');
138
+ }
139
+
140
+ protected override async handleNodeEdit(node: TreeNodeInterface, newName: string): Promise<void> {
141
+ node.__loading = true;
142
+
143
+ if (node.identifier.startsWith('NEW')) {
144
+ const target = this.getPreviousNode(node);
145
+ const position = (node.depth === target.depth) ? TreeNodePositionEnum.AFTER : TreeNodePositionEnum.INSIDE;
146
+ const options: NodeNewOptions = {
147
+ command: TreeNodeCommandEnum.NEW,
148
+ node: node,
149
+ title: newName,
150
+ position: position,
151
+ target: target,
152
+ doktype: node.doktype
153
+ };
154
+ await this.sendChangeCommand(options);
155
+ } else {
156
+ const options: NodeEditOptions = {
157
+ command: TreeNodeCommandEnum.EDIT,
158
+ node: node,
159
+ title: newName,
160
+ };
161
+ await this.sendChangeCommand(options);
162
+ }
163
+ node.__loading = false;
164
+ }
165
+
166
+ protected override createDataTransferItemsFromNode(node: TreeNodeInterface): DataTransferStringItem[] {
167
+ return [
168
+ {
169
+ type: DataTransferTypes.treenode,
170
+ data: this.getNodeTreeIdentifier(node),
171
+ },
172
+ {
173
+ type: DataTransferTypes.pages,
174
+ data: JSON.stringify({
175
+ records: [
176
+ {
177
+ identifier: node.identifier,
178
+ tablename: 'pages',
179
+ }
180
+ ]
181
+ })
182
+ },
183
+ ];
184
+ }
185
+
186
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
187
+ protected override async handleNodeAdd(node: TreeNodeInterface, target: TreeNodeInterface, position: TreeNodePositionEnum): Promise<void> {
188
+ this.updateComplete.then(() => {
189
+ this.editNode(node);
190
+ });
191
+ }
192
+
193
+ protected override handleNodeDelete(node: TreeNodeInterface): void {
194
+ const options: NodeDeleteOptions = {
195
+ node: node,
196
+ command: TreeNodeCommandEnum.DELETE
197
+ };
198
+
199
+ if (this.settings.displayDeleteConfirmation) {
200
+ const modal = Modal.confirm(
201
+ TYPO3.lang['mess.delete.title'],
202
+ TYPO3.lang['mess.delete'].replace('%s', options.node.name),
203
+ Severity.warning, [
204
+ {
205
+ text: TYPO3.lang['labels.cancel'] || 'Cancel',
206
+ active: true,
207
+ btnClass: 'btn-default',
208
+ name: 'cancel'
209
+ },
210
+ {
211
+ text: TYPO3.lang.delete || 'Delete',
212
+ btnClass: 'btn-warning',
213
+ name: 'delete'
214
+ }
215
+ ]
216
+ );
217
+ modal.addEventListener('button.clicked', (e: Event) => {
218
+ const target = e.target as HTMLInputElement;
219
+ if (target.name === 'delete') {
220
+ this.sendChangeCommand(options);
221
+ }
222
+ Modal.dismiss();
223
+ });
224
+ } else {
225
+ this.sendChangeCommand(options);
226
+ }
227
+ }
228
+
229
+ protected override handleNodeMove(
230
+ node: TreeNodeInterface,
231
+ target: TreeNodeInterface,
232
+ position: TreeNodePositionEnum
233
+ ): void {
234
+ const options: NodePositionOptions = {
235
+ node: node,
236
+ target: target,
237
+ position: position,
238
+ command: TreeNodeCommandEnum.MOVE
239
+ };
240
+
241
+ let modalText = '';
242
+ switch(position) {
243
+ case TreeNodePositionEnum.BEFORE:
244
+ modalText = TYPO3.lang['mess.move_before'];
245
+ break;
246
+ case TreeNodePositionEnum.AFTER:
247
+ modalText = TYPO3.lang['mess.move_after'];
248
+ break;
249
+ default:
250
+ modalText = TYPO3.lang['mess.move_into'];
251
+ break;
252
+ }
253
+ modalText = modalText.replace('%s', node.name).replace('%s', target.name);
254
+
255
+ const modal = Modal.confirm(
256
+ TYPO3.lang.move_page,
257
+ modalText,
258
+ Severity.warning, [
259
+ {
260
+ text: TYPO3.lang['labels.cancel'] || 'Cancel',
261
+ active: true,
262
+ btnClass: 'btn-default',
263
+ name: 'cancel'
264
+ },
265
+ {
266
+ text: TYPO3.lang['cm.copy'] || 'Copy',
267
+ btnClass: 'btn-warning',
268
+ name: 'copy'
269
+ },
270
+ {
271
+ text: TYPO3.lang['labels.move'] || 'Move',
272
+ btnClass: 'btn-warning',
273
+ name: 'move'
274
+ }
275
+ ]
276
+ );
277
+
278
+ modal.addEventListener('button.clicked', (e: JQueryEventObject) => {
279
+ const target = e.target as HTMLInputElement;
280
+ if (target.name === 'move') {
281
+ options.command = TreeNodeCommandEnum.MOVE;
282
+ this.sendChangeCommand(options);
283
+ } else if (target.name === 'copy') {
284
+ options.command = TreeNodeCommandEnum.COPY;
285
+ this.sendChangeCommand(options);
286
+ }
287
+ modal.hideModal();
288
+ });
289
+ }
290
+
291
+ private requestTreeUpdate(params: any): Promise<any> {
292
+ return (new AjaxRequest(top.TYPO3.settings.ajaxUrls.record_process))
293
+ .post(params, {
294
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
295
+ })
296
+ .then((response) => {
297
+ return response.resolve();
298
+ })
299
+ .catch((error) => {
300
+ this.errorNotification(error);
301
+ this.loadData();
302
+ });
303
+ }
304
+ }
305
+
306
+ interface Configuration {
307
+ [keys: string]: any;
308
+ }
309
+
310
+ @customElement('typo3-backend-navigation-component-pagetree')
311
+ export class PageTreeNavigationComponent extends TreeModuleState(LitElement) {
312
+ @property({ type: String }) mountPointPath: string = null;
313
+
314
+ @query('.tree-wrapper') tree: EditablePageTree;
315
+ @query('typo3-backend-navigation-component-pagetree-toolbar') toolbar: PageTreeToolbar;
316
+
317
+ protected override moduleStateType: string = 'web';
318
+
319
+ private configuration: Configuration = null;
320
+
321
+ public override connectedCallback(): void {
322
+ super.connectedCallback();
323
+ document.addEventListener('typo3:pagetree:refresh', this.refresh);
324
+ document.addEventListener('typo3:pagetree:mountPoint', this.setMountPoint);
325
+ document.addEventListener('typo3:pagetree:selectFirstNode', this.selectFirstNode);
326
+ }
327
+
328
+ public override disconnectedCallback(): void {
329
+ document.removeEventListener('typo3:pagetree:refresh', this.refresh);
330
+ document.removeEventListener('typo3:pagetree:mountPoint', this.setMountPoint);
331
+ document.removeEventListener('typo3:pagetree:selectFirstNode', this.selectFirstNode);
332
+ super.disconnectedCallback();
333
+ }
334
+
335
+ // disable shadow dom for now
336
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
337
+ return this;
338
+ }
339
+
340
+ protected override render(): TemplateResult {
341
+ return html`
342
+ <div id="typo3-pagetree" class="tree">
343
+ ${until(this.renderTree(), '')}
344
+ </div>
345
+ `;
346
+ }
347
+
348
+ protected getConfiguration(): Promise<Configuration> {
349
+ if (this.configuration !== null) {
350
+ return Promise.resolve(this.configuration);
351
+ }
352
+
353
+ const configurationUrl = top.TYPO3.settings.ajaxUrls.page_tree_configuration;
354
+ return (new AjaxRequest(configurationUrl)).get()
355
+ .then(async (response: AjaxResponse): Promise<Configuration> => {
356
+ const configuration = await response.resolve('json');
357
+ this.configuration = configuration;
358
+ this.mountPointPath = configuration.temporaryMountPoint || null;
359
+ return configuration;
360
+ });
361
+ }
362
+
363
+ protected async renderTree(): Promise<TemplateResult> {
364
+ const configuration = await this.getConfiguration();
365
+ return html`
366
+ <typo3-backend-navigation-component-pagetree-toolbar id="typo3-pagetree-toolbar" .tree="${this.tree}"></typo3-backend-navigation-component-pagetree-toolbar>
367
+ <div id="typo3-pagetree-treeContainer" class="navigation-tree-container">
368
+ ${this.renderMountPoint()}
369
+ <typo3-backend-navigation-component-pagetree-tree
370
+ id="typo3-pagetree-tree"
371
+ class="tree-wrapper"
372
+ .setup=${configuration}
373
+ @tree:initialized=${() => { this.toolbar.tree = this.tree; this.fetchActiveNodeIfMissing(); }}
374
+ @typo3:tree:node-selected=${this.loadContent}
375
+ @typo3:tree:node-context=${this.showContextMenu}
376
+ @typo3:tree:nodes-prepared=${this.selectActiveNodeInLoadedNodes}
377
+ ></typo3-backend-navigation-component-pagetree-tree>
378
+ </div>
379
+ `;
380
+ }
381
+
382
+ private readonly refresh = (): void => {
383
+ this.tree.refreshOrFilterTree();
384
+ };
385
+
386
+ private readonly setMountPoint = (e: CustomEvent): void => {
387
+ this.setTemporaryMountPoint(e.detail.pageId as number);
388
+ };
389
+
390
+ private readonly selectFirstNode = (): void => {
391
+ this.tree.selectFirstNode();
392
+ };
393
+
394
+ private unsetTemporaryMountPoint() {
395
+ Persistent.unset('pageTree_temporaryMountPoint').then(() => {
396
+ this.mountPointPath = null;
397
+ });
398
+ }
399
+
400
+ private renderMountPoint(): TemplateResult | symbol {
401
+ if (this.mountPointPath === null) {
402
+ return nothing;
403
+ }
404
+ return html`
405
+ <div class="node-mount-point">
406
+ <div class="node-mount-point__icon"><typo3-backend-icon identifier="actions-info-circle" size="small"></typo3-backend-icon></div>
407
+ <div class="node-mount-point__text">${this.mountPointPath}</div>
408
+ <div class="node-mount-point__icon mountpoint-close" @click="${() => this.unsetTemporaryMountPoint()}" title="${lll('labels.temporaryDBmount')}">
409
+ <typo3-backend-icon identifier="actions-close" size="small"></typo3-backend-icon>
410
+ </div>
411
+ </div>
412
+ `;
413
+ }
414
+
415
+ private setTemporaryMountPoint(pid: number): void {
416
+ (new AjaxRequest(this.configuration.setTemporaryMountPointUrl))
417
+ .post('pid=' + pid, {
418
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
419
+ })
420
+ .then((response) => response.resolve())
421
+ .then((response) => {
422
+ if (response && response.hasErrors) {
423
+ this.tree.errorNotification(response.message);
424
+ this.tree.loadData();
425
+ } else {
426
+ this.mountPointPath = response.mountPointPath;
427
+ }
428
+ })
429
+ .catch((error) => {
430
+ this.tree.errorNotification(error);
431
+ this.tree.loadData();
432
+ });
433
+ }
434
+
435
+ private readonly loadContent = (evt: CustomEvent): void => {
436
+ const node = evt.detail.node as TreeNodeInterface;
437
+ if (!node?.checked) {
438
+ return;
439
+ }
440
+
441
+ // remember the selected page in the global state
442
+ ModuleStateStorage.updateWithTreeIdentifier('web', node.identifier, node.__treeIdentifier);
443
+
444
+ if (evt.detail.propagate === false) {
445
+ return;
446
+ }
447
+
448
+ // Load the currently selected module with the updated URL
449
+ const moduleMenu = top.TYPO3.ModuleMenu.App;
450
+ let contentUrl = ModuleUtility.getFromName(moduleMenu.getCurrentModule()).link;
451
+ contentUrl += contentUrl.includes('?') ? '&' : '?';
452
+ top.TYPO3.Backend.ContentContainer.setUrl(contentUrl + 'id=' + node.identifier);
453
+ };
454
+
455
+ private readonly showContextMenu = (evt: CustomEvent): void => {
456
+ const node = evt.detail.node as TreeNodeInterface;
457
+ if (!node) {
458
+ return;
459
+ }
460
+ ContextMenu.show(
461
+ node.recordType,
462
+ node.identifier,
463
+ 'tree',
464
+ '',
465
+ '',
466
+ this.tree.getElementFromNode(node),
467
+ evt.detail.originalEvent as PointerEvent
468
+ );
469
+ };
470
+ }
471
+
472
+ @customElement('typo3-backend-navigation-component-pagetree-toolbar')
473
+ class PageTreeToolbar extends TreeToolbar {
474
+ @property({ type: EditablePageTree })
475
+ override tree: EditablePageTree = null;
476
+
477
+ protected override render(): TemplateResult {
478
+ /* eslint-disable @stylistic/indent */
479
+ return html`
480
+ <div class="tree-toolbar">
481
+ <div class="tree-toolbar__menu">
482
+ <div class="tree-toolbar__search">
483
+ <label for="toolbarSearch" class="visually-hidden">
484
+ ${lll('labels.label.searchString')}
485
+ </label>
486
+ <input type="search" id="toolbarSearch" class="form-control form-control-sm search-input" placeholder="${lll('tree.searchTermInfo')}">
487
+ </div>
488
+ </div>
489
+ <div class="tree-toolbar__submenu">
490
+ ${this.tree?.settings?.doktypes?.length
491
+ ? this.tree.settings.doktypes.map((item: any) => {
492
+ return html`
493
+ <div
494
+ class="tree-toolbar__menuitem tree-toolbar__drag-node"
495
+ title="${item.title}"
496
+ draggable="true"
497
+ data-tree-icon="${item.icon}"
498
+ data-node-type="${item.nodeType}"
499
+ aria-hidden="true"
500
+ @dragstart="${(event: DragEvent) => { this.handleDragStart(event, item); }}"
501
+ >
502
+ <typo3-backend-icon identifier="${item.icon}" size="small"></typo3-backend-icon>
503
+ </div>
504
+ `;
505
+ })
506
+ : ''
507
+ }
508
+ <button
509
+ type="button"
510
+ class="tree-toolbar__menuitem dropdown-toggle dropdown-toggle-no-chevron float-end"
511
+ data-bs-toggle="dropdown"
512
+ aria-expanded="false"
513
+ aria-label="${lll('labels.openPageTreeOptionsMenu')}"
514
+ >
515
+ <typo3-backend-icon identifier="actions-menu-alternative" size="small"></typo3-backend-icon>
516
+ </button>
517
+ <ul class="dropdown-menu dropdown-menu-end">
518
+ <li>
519
+ <button class="dropdown-item" @click="${() => this.refreshTree()}">
520
+ <span class="dropdown-item-columns">
521
+ <span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
522
+ <typo3-backend-icon identifier="actions-refresh" size="small"></typo3-backend-icon>
523
+ </span>
524
+ <span class="dropdown-item-column dropdown-item-column-title">
525
+ ${lll('labels.refresh')}
526
+ </span>
527
+ </span>
528
+ </button>
529
+ </li>
530
+ <li>
531
+ <button class="dropdown-item" @click="${(evt: MouseEvent) => this.collapseAll(evt)}">
532
+ <span class="dropdown-item-columns">
533
+ <span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
534
+ <typo3-backend-icon identifier="apps-pagetree-category-collapse-all" size="small"></typo3-backend-icon>
535
+ </span>
536
+ <span class="dropdown-item-column dropdown-item-column-title">
537
+ ${lll('labels.collapse')}
538
+ </span>
539
+ </span>
540
+ </button>
541
+ </li>
542
+ </ul>
543
+ </div>
544
+ </div>
545
+ `;
546
+ }
547
+
548
+ protected handleDragStart(event: DragEvent, item: any): void {
549
+ const newNode: TreeNodeInterface = {
550
+ __hidden: false,
551
+ __expanded: false,
552
+ __indeterminate: false,
553
+ __loading: false,
554
+ __processed: false,
555
+ __treeDragAction: '',
556
+ __treeIdentifier: '',
557
+ __treeParents: [''],
558
+ __parents: [''],
559
+ __x: 0,
560
+ __y: 0,
561
+ deletable: false,
562
+ depth: 0,
563
+ editable: true,
564
+ hasChildren: false,
565
+ icon: item.icon,
566
+ overlayIcon: '',
567
+ identifier: 'NEW' + Math.floor(Math.random() * 1000000000).toString(16),
568
+ loaded: false,
569
+ name: '',
570
+ note: '',
571
+ parentIdentifier: '',
572
+ prefix: '',
573
+ recordType: 'pages',
574
+ suffix: '',
575
+ tooltip: '',
576
+ type: 'PageTreeItem',
577
+ doktype: item.nodeType,
578
+ statusInformation: [],
579
+ labels: [],
580
+ };
581
+ this.tree.draggingNode = newNode;
582
+ this.tree.nodeDragMode = TreeNodeCommandEnum.NEW;
583
+
584
+ event.dataTransfer.clearData();
585
+ const metadata: DragTooltipMetadata = {
586
+ statusIconIdentifier: this.tree.getNodeDragStatusIcon(),
587
+ tooltipIconIdentifier: item.icon,
588
+ tooltipLabel: item.title,
589
+ };
590
+ event.dataTransfer.setData(DataTransferTypes.dragTooltip, JSON.stringify(metadata));
591
+ event.dataTransfer.setData(DataTransferTypes.newTreenode, JSON.stringify(newNode));
592
+ event.dataTransfer.effectAllowed = 'move';
593
+ }
594
+ }
595
+
596
+ declare global {
597
+ interface HTMLElementTagNameMap {
598
+ 'typo3-backend-navigation-component-pagetree-tree': EditablePageTree
599
+ 'typo3-backend-navigation-component-pagetree': PageTreeNavigationComponent;
600
+ 'typo3-backend-navigation-component-pagetree-toolbar': PageTreeToolbar;
601
+ }
602
+ }