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,465 @@
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 } from 'lit';
15
+ import { customElement, query } from 'lit/decorators';
16
+ import '@typo3/backend/element/icon-element';
17
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
18
+ import '@typo3/backend/tree/tree-toolbar';
19
+ import { TreeNodePositionEnum, type TreeNodeInterface } from '@typo3/backend/tree/tree-node';
20
+ import { FileStorageTree } from '@typo3/backend/tree/file-storage-tree';
21
+ import { TreeModuleState } from '@typo3/backend/tree/tree-module-state';
22
+ import ContextMenu from '@typo3/backend/context-menu';
23
+ import Notification from '@typo3/backend/notification';
24
+ import { ModuleStateStorage } from '@typo3/backend/storage/module-state-storage';
25
+ import { ModuleUtility } from '@typo3/backend/module';
26
+ import { FileListDragDropEvent, type FileListDragDropDetail } from '@typo3/filelist/file-list-dragdrop';
27
+ import { Resource, type ResourceInterface } from '@typo3/backend/resource/resource';
28
+ import { DataTransferTypes } from '@typo3/backend/enum/data-transfer-types';
29
+ import type { TreeToolbar } from '@typo3/backend/tree/tree-toolbar';
30
+ import type { DataTransferStringItem } from '@typo3/backend/tree/tree';
31
+
32
+ export const navigationComponentName: string = 'typo3-backend-navigation-component-filestoragetree';
33
+
34
+ interface DragDropTargetPosition {
35
+ target: TreeNodeInterface,
36
+ position: TreeNodePositionEnum
37
+ }
38
+
39
+ /**
40
+ * FileStorageTree which allows for drag+drop, and in-place editing, as well as
41
+ * tree highlighting from the outside
42
+ */
43
+ @customElement('typo3-backend-navigation-component-filestorage-tree')
44
+ export class EditableFileStorageTree extends FileStorageTree {
45
+ protected override allowNodeDrag: boolean = true;
46
+
47
+ protected override handleNodeMove(
48
+ node: TreeNodeInterface,
49
+ target: TreeNodeInterface,
50
+ position: TreeNodePositionEnum
51
+ ): void {
52
+ if (!this.isDropAllowed(target, node)) {
53
+ return;
54
+ }
55
+ const options = this.getDropCommandDetails(target, node, position);
56
+ if (options === null) {
57
+ return;
58
+ }
59
+ const fileOperationCollection = FileOperationCollection.fromNodePositionOptions(options);
60
+ const operationConflicts = fileOperationCollection.getConflictingOperationsForTreeNode(options.target);
61
+ if (operationConflicts.length > 0) {
62
+ operationConflicts.forEach((operation: FileOperation) => {
63
+ Notification.showMessage(
64
+ TYPO3.lang['drop.conflict'],
65
+ TYPO3.lang['mess.drop.conflict']
66
+ .replace('%s', operation.resource.name)
67
+ .replace('%s', decodeURIComponent(options.target.identifier)),
68
+ SeverityEnum.error
69
+ );
70
+ });
71
+ return;
72
+ }
73
+ this.initiateDropAction(fileOperationCollection);
74
+ }
75
+
76
+ protected override createDataTransferItemsFromNode(node: TreeNodeInterface): DataTransferStringItem[] {
77
+ return [
78
+ {
79
+ type: DataTransferTypes.treenode,
80
+ data: this.getNodeTreeIdentifier(node),
81
+ },
82
+ {
83
+ type: DataTransferTypes.falResources,
84
+ data: JSON.stringify([
85
+ FileResource.fromTreeNode(node),
86
+ ]),
87
+ },
88
+ ];
89
+ }
90
+
91
+ protected override handleNodeDragOver(event: DragEvent): boolean {
92
+ // @todo incorporate isDropAllowed
93
+ if (super.handleNodeDragOver(event)) {
94
+ return true;
95
+ }
96
+
97
+ // @TODO Unity with parent
98
+ if (event.dataTransfer.types.includes(DataTransferTypes.falResources)) {
99
+
100
+ // Find the current hovered node
101
+ // Exit when no node was hovered
102
+ const targetNode = this.getNodeFromDragEvent(event);
103
+ if (targetNode === null) {
104
+ return false;
105
+ }
106
+
107
+ this.cleanDrag();
108
+
109
+ // Add hover styling to the current hovered node
110
+ // element, during the drag the default mouse over
111
+ // is disabled by the browser
112
+ const hoverElement = this.getElementFromNode(targetNode);
113
+ hoverElement.classList.add('node-hover');
114
+
115
+ // Open node with children while holding the
116
+ // node/element over this node for 1 second
117
+ if (targetNode.hasChildren && !targetNode.__expanded) {
118
+ if (this.openNodeTimeout.targetNode != targetNode) {
119
+ this.openNodeTimeout.targetNode = targetNode;
120
+ clearTimeout(this.openNodeTimeout.timeout);
121
+ this.openNodeTimeout.timeout = setTimeout(() => {
122
+ this.showChildren(this.openNodeTimeout.targetNode);
123
+ this.openNodeTimeout.targetNode = null;
124
+ this.openNodeTimeout.timeout = null;
125
+ }, 1000);
126
+ }
127
+ } else {
128
+ clearTimeout(this.openNodeTimeout.timeout);
129
+ this.openNodeTimeout.targetNode = null;
130
+ this.openNodeTimeout.timeout = null;
131
+ }
132
+
133
+ // allow drop
134
+ event.preventDefault();
135
+ return true;
136
+ }
137
+
138
+ return false;
139
+ }
140
+
141
+ protected override getTooltipDescription(node: TreeNodeInterface): string {
142
+ return decodeURIComponent(node.identifier);
143
+ }
144
+
145
+ protected override handleNodeDrop(event: DragEvent): boolean {
146
+ if (super.handleNodeDrop(event)) {
147
+ return true;
148
+ }
149
+ if (event.dataTransfer.types.includes(DataTransferTypes.falResources)) {
150
+ const node = this.getNodeFromDragEvent(event);
151
+ if (node === null) {
152
+ return false;
153
+ }
154
+
155
+ if (node) {
156
+ const targetResource = FileResource.fromTreeNode(node);
157
+ const fileOperationCollection = FileOperationCollection.fromDataTransfer(event.dataTransfer, targetResource);
158
+ const operationConflicts = fileOperationCollection.getConflictingOperationsForTreeNode(node);
159
+ if (operationConflicts.length > 0) {
160
+ operationConflicts.forEach((operation: FileOperation) => {
161
+ Notification.showMessage(
162
+ TYPO3.lang['drop.conflict'],
163
+ TYPO3.lang['mess.drop.conflict']
164
+ .replace('%s', operation.resource.name)
165
+ .replace('%s', decodeURIComponent(node.identifier)),
166
+ SeverityEnum.error
167
+ );
168
+ });
169
+ return false;
170
+ }
171
+ // allow drop
172
+ event.preventDefault();
173
+ this.initiateDropAction(fileOperationCollection);
174
+ return true;
175
+ }
176
+ }
177
+ return false;
178
+ }
179
+
180
+ /**
181
+ * Prepares all the details, which node is dropped on which other, if it is inside or before
182
+ * the target node (= droppedNode).
183
+ */
184
+ private getDropCommandDetails(droppedNode: TreeNodeInterface, draggingNode: TreeNodeInterface, position: TreeNodePositionEnum): null | NodePositionOptions {
185
+ const nodes = this.nodes;
186
+ const identifier = draggingNode.identifier;
187
+ let target = droppedNode/* || draggingNode*/;
188
+
189
+ if (identifier === target.identifier) {
190
+ return null;
191
+ }
192
+
193
+ if (position === TreeNodePositionEnum.BEFORE) {
194
+ const index = nodes.indexOf(droppedNode);
195
+ const positionAndTarget = this.setNodePositionAndTarget(index);
196
+ if (positionAndTarget === null) {
197
+ return null;
198
+ }
199
+ position = positionAndTarget.position;
200
+ target = positionAndTarget.target;
201
+ }
202
+
203
+ return {
204
+ node: draggingNode,
205
+ identifier: identifier, // dragged node id
206
+ target: target, // hovered node
207
+ position: position // before, in, after
208
+ };
209
+ }
210
+
211
+ /**
212
+ * Returns position and target node where it should be added
213
+ */
214
+ private setNodePositionAndTarget(index: number): null | DragDropTargetPosition {
215
+ const nodes = this.nodes;
216
+ const nodeOver = nodes[index];
217
+ const nodeOverDepth = nodeOver.depth;
218
+ if (index > 0) {
219
+ index--;
220
+ }
221
+ const nodeBefore = nodes[index];
222
+ const nodeBeforeDepth = nodeBefore.depth;
223
+ const target = this.nodes[index];
224
+
225
+ if (nodeBeforeDepth === nodeOverDepth) {
226
+ return { position: TreeNodePositionEnum.AFTER, target };
227
+ } else if (nodeBeforeDepth < nodeOverDepth) {
228
+ return { position: TreeNodePositionEnum.INSIDE, target };
229
+ } else {
230
+ for (let i = index; i >= 0; i--) {
231
+ if (nodes[i].depth === nodeOverDepth) {
232
+ return { position: TreeNodePositionEnum.AFTER, target: this.nodes[i] };
233
+ } else if (nodes[i].depth < nodeOverDepth) {
234
+ return { position: TreeNodePositionEnum.AFTER, target: nodes[i] };
235
+ }
236
+ }
237
+ }
238
+ return null;
239
+ }
240
+
241
+ private isDropAllowed(target: TreeNodeInterface, draggingNode: TreeNodeInterface): boolean {
242
+ if (target === draggingNode) {
243
+ return false;
244
+ }
245
+ // @todo: why needed?
246
+ if (!this.isOverRoot) {
247
+ return false;
248
+ }
249
+ return true;
250
+ }
251
+
252
+ private initiateDropAction(fileOperationCollection: FileOperationCollection): void {
253
+ const detail: FileListDragDropDetail = {
254
+ action: 'transfer',
255
+ resources: fileOperationCollection.getResources(),
256
+ target: fileOperationCollection.target,
257
+ };
258
+ top.document.dispatchEvent(new CustomEvent(FileListDragDropEvent.transfer, { detail: detail }));
259
+ }
260
+ }
261
+
262
+ /**
263
+ * Responsible for setting up the viewport for the Navigation Component for the File Tree
264
+ */
265
+ @customElement('typo3-backend-navigation-component-filestoragetree')
266
+ export class FileStorageTreeNavigationComponent extends TreeModuleState(LitElement) {
267
+ @query('.tree-wrapper') tree: EditableFileStorageTree;
268
+ @query('typo3-backend-tree-toolbar') toolbar: TreeToolbar;
269
+
270
+ protected override moduleStateType: string = 'media';
271
+
272
+ public override connectedCallback(): void {
273
+ super.connectedCallback();
274
+ document.addEventListener('typo3:filestoragetree:refresh', this.refresh);
275
+ document.addEventListener('typo3:filestoragetree:selectFirstNode', this.selectFirstNode);
276
+ }
277
+
278
+ public override disconnectedCallback(): void {
279
+ document.removeEventListener('typo3:filestoragetree:refresh', this.refresh);
280
+ document.removeEventListener('typo3:filestoragetree:selectFirstNode', this.selectFirstNode);
281
+ super.disconnectedCallback();
282
+ }
283
+
284
+ // disable shadow dom for now
285
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
286
+ return this;
287
+ }
288
+
289
+ protected override render(): TemplateResult {
290
+ const treeSetup = {
291
+ dataUrl: top.TYPO3.settings.ajaxUrls.filestorage_tree_data,
292
+ rootlineUrl: top.TYPO3.settings.ajaxUrls.filestorage_tree_rootline,
293
+ filterUrl: top.TYPO3.settings.ajaxUrls.filestorage_tree_filter,
294
+ showIcons: true
295
+ };
296
+
297
+ return html`
298
+ <div id="typo3-filestoragetree" class="tree">
299
+ <typo3-backend-tree-toolbar .tree="${this.tree}" id="filestoragetree-toolbar"></typo3-backend-tree-toolbar>
300
+ <div class="navigation-tree-container">
301
+ <typo3-backend-navigation-component-filestorage-tree
302
+ id="typo3-filestoragetree-tree"
303
+ class="tree-wrapper"
304
+ .setup=${treeSetup}
305
+ @typo3:tree:node-selected=${this.loadContent}
306
+ @typo3:tree:node-context=${this.showContextMenu}
307
+ @typo3:tree:nodes-prepared=${this.selectActiveNodeInLoadedNodes}
308
+ @tree:initialized=${this.fetchActiveNodeIfMissing}
309
+ ></typo3-backend-navigation-component-filestorage-tree>
310
+ </div>
311
+ </div>
312
+ `;
313
+ }
314
+
315
+ protected override firstUpdated(): void {
316
+ this.toolbar.tree = this.tree;
317
+ }
318
+
319
+ protected override transformModuleStateIdentifierToNodeIdentifier(moduleStateIdentifier: string): string {
320
+ return encodeURIComponent(moduleStateIdentifier);
321
+ }
322
+
323
+ protected override transformNodeIdentifierToModuleStateIdentifier(nodeIdentifier: string): string {
324
+ return decodeURIComponent(nodeIdentifier);
325
+ }
326
+
327
+ private readonly refresh = (): void => {
328
+ this.tree.refreshOrFilterTree();
329
+ };
330
+
331
+ private readonly selectFirstNode = (): void => {
332
+ const node = this.tree.nodes[0];
333
+ if (node) {
334
+ this.tree.selectNode(node, true);
335
+ }
336
+ };
337
+
338
+ private readonly loadContent = (evt: CustomEvent): void => {
339
+ const node = evt.detail.node as TreeNodeInterface;
340
+ if (!node?.checked) {
341
+ return;
342
+ }
343
+
344
+ // remember the selected folder in the global state
345
+ ModuleStateStorage.updateWithTreeIdentifier('media', decodeURIComponent(node.identifier), decodeURIComponent(node.__treeIdentifier));
346
+
347
+ if (evt.detail.propagate === false) {
348
+ return;
349
+ }
350
+
351
+ // Load the currently selected module with the updated URL
352
+ const moduleMenu = top.TYPO3.ModuleMenu.App;
353
+ let contentUrl = ModuleUtility.getFromName(moduleMenu.getCurrentModule()).link;
354
+ contentUrl += contentUrl.includes('?') ? '&' : '?';
355
+ top.TYPO3.Backend.ContentContainer.setUrl(contentUrl + 'id=' + node.identifier);
356
+ };
357
+
358
+ private readonly showContextMenu = (evt: CustomEvent): void => {
359
+ const node = evt.detail.node as TreeNodeInterface;
360
+ if (!node) {
361
+ return;
362
+ }
363
+ ContextMenu.show(
364
+ node.recordType,
365
+ decodeURIComponent(node.identifier),
366
+ 'tree',
367
+ '',
368
+ '',
369
+ this.tree.getElementFromNode(node),
370
+ evt.detail.originalEvent as PointerEvent
371
+ );
372
+ };
373
+ }
374
+
375
+ interface NodePositionOptions {
376
+ node: TreeNodeInterface,
377
+ target: TreeNodeInterface,
378
+ identifier: string,
379
+ position: TreeNodePositionEnum
380
+ }
381
+
382
+
383
+ /**
384
+ * Internal helper class for drag&drop handling
385
+ */
386
+ class FileOperation {
387
+ public constructor(
388
+ public readonly resource: ResourceInterface,
389
+ public readonly position: TreeNodePositionEnum = TreeNodePositionEnum.INSIDE
390
+ ) {
391
+ }
392
+
393
+ public hasConflictWithTreeNode(node: TreeNodeInterface): boolean {
394
+ return this.resource.type === 'folder' && (
395
+ node.identifier === this.resource.identifier
396
+ || node.__parents[0] == this.resource.identifier
397
+ || node.__parents.includes(this.resource.identifier)
398
+ );
399
+ }
400
+ }
401
+
402
+ class FileResource extends Resource {
403
+ public static fromTreeNode(node: TreeNodeInterface): ResourceInterface {
404
+ return new FileResource(
405
+ decodeURIComponent(node.resourceType),
406
+ decodeURIComponent(node.identifier),
407
+ decodeURIComponent(node.name)
408
+ );
409
+ }
410
+ }
411
+
412
+ class FileOperationCollection {
413
+ protected constructor(
414
+ public readonly operations: FileOperation[],
415
+ public readonly target: ResourceInterface,
416
+ ) {
417
+ }
418
+
419
+ public static fromDataTransfer(dataTransfer: DataTransfer, target: ResourceInterface): FileOperationCollection {
420
+ return FileOperationCollection.fromArray(JSON.parse(dataTransfer.getData(DataTransferTypes.falResources)), target);
421
+ }
422
+
423
+ public static fromArray(items: ResourceInterface[], target: ResourceInterface): FileOperationCollection {
424
+ const operations: FileOperation[] = [];
425
+
426
+ for (const item of items) {
427
+ operations.push(new FileOperation(item, TreeNodePositionEnum.INSIDE));
428
+ }
429
+
430
+ return new FileOperationCollection(operations, target);
431
+ }
432
+
433
+ public static fromNodePositionOptions(options: NodePositionOptions): FileOperationCollection {
434
+ const resource = FileResource.fromTreeNode(options.node);
435
+ const targetResource = FileResource.fromTreeNode(options.target);
436
+ const operations: FileOperation[] = [
437
+ new FileOperation(
438
+ resource,
439
+ options.position
440
+ )
441
+ ];
442
+
443
+ return new FileOperationCollection(operations, targetResource);
444
+ }
445
+
446
+ public getConflictingOperationsForTreeNode(node: TreeNodeInterface): FileOperation[] {
447
+ return this.operations.filter((operation: FileOperation) => operation.hasConflictWithTreeNode(node));
448
+ }
449
+
450
+ public getResources(): ResourceInterface[] {
451
+ const resources: ResourceInterface[] = [];
452
+ this.operations.forEach((operation: FileOperation) => {
453
+ resources.push(operation.resource);
454
+ });
455
+
456
+ return resources;
457
+ }
458
+ }
459
+
460
+ declare global {
461
+ interface HTMLElementTagNameMap {
462
+ 'typo3-backend-navigation-component-filestorage-tree': EditableFileStorageTree;
463
+ 'typo3-backend-navigation-component-filestoragetree': FileStorageTreeNavigationComponent;
464
+ }
465
+ }
@@ -0,0 +1,42 @@
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 { Tree } from '@typo3/backend/tree/tree';
15
+ import type { TreeNodeInterface } from '@typo3/backend/tree/tree-node';
16
+
17
+ /**
18
+ * A tree for folders / storages
19
+ */
20
+ export class FileStorageTree extends Tree
21
+ {
22
+ public constructor() {
23
+ super();
24
+ this.settings.defaultProperties = {
25
+ hasChildren: false,
26
+ nameSourceField: 'title',
27
+ type: 'sys_file',
28
+ prefix: '',
29
+ suffix: '',
30
+ locked: false,
31
+ loaded: false,
32
+ overlayIcon: '',
33
+ selectable: true,
34
+ expanded: false,
35
+ checked: false,
36
+ };
37
+ }
38
+
39
+ protected override getNodeTitle(node: TreeNodeInterface): string {
40
+ return decodeURIComponent(node.name);
41
+ }
42
+ }