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,152 @@
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 { html, type TemplateResult } from 'lit';
16
+ import { DataTransferTypes } from '@typo3/backend/enum/data-transfer-types';
17
+ import Modal from '@typo3/backend/modal';
18
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
19
+ import type { TreeNodeInterface } from '@typo3/backend/tree/tree-node';
20
+ import type { ContentElementDragDropData } from '@typo3/backend/layout-module/drag-drop';
21
+ import DragDropUtility from '@typo3/backend/utility/drag-drop-utility';
22
+
23
+ /**
24
+ * A Tree based on for pages, which has a AJAX-based loading of the tree
25
+ * and also handles search + filter via AJAX.
26
+ */
27
+ export class PageTree extends Tree
28
+ {
29
+ public constructor() {
30
+ super();
31
+ this.settings.defaultProperties = {
32
+ hasChildren: false,
33
+ nameSourceField: 'title',
34
+ prefix: '',
35
+ suffix: '',
36
+ locked: false,
37
+ loaded: false,
38
+ overlayIcon: '',
39
+ selectable: true,
40
+ expanded: false,
41
+ checked: false,
42
+ stopPageTree: false,
43
+ };
44
+ }
45
+
46
+ public override getDataUrl(parentNode: TreeNodeInterface|null = null): string {
47
+ if (parentNode === null) {
48
+ return this.settings.dataUrl;
49
+ }
50
+
51
+ return this.settings.dataUrl + '&parent=' + parentNode.identifier + '&mount=' + parentNode.mountPoint + '&depth=' + parentNode.depth;
52
+ }
53
+
54
+ protected override createNodeToggle(node: TreeNodeInterface): TemplateResult {
55
+ return html`${node.stopPageTree && node.depth !== 0
56
+ ? html`
57
+ <span class="node-stop" @click="${(event: PointerEvent) => { event.preventDefault(); event.stopImmediatePropagation(); document.dispatchEvent(new CustomEvent('typo3:pagetree:mountPoint', { detail: { pageId: parseInt(node.identifier, 10) } })); }}">
58
+ <typo3-backend-icon identifier="actions-caret-end" size="small"></typo3-backend-icon>
59
+ </span>
60
+ `
61
+ : super.createNodeToggle(node)
62
+ }`;
63
+ }
64
+
65
+ protected override handleNodeDragOver(event: DragEvent): boolean {
66
+ // @todo incorporate isDropAllowed
67
+ if (super.handleNodeDragOver(event)) {
68
+ return true;
69
+ }
70
+
71
+ // @TODO Unity with parent
72
+ if (event.dataTransfer.types.includes(DataTransferTypes.content)) {
73
+ // Find the current hovered node
74
+ // Exit when no node was hovered
75
+ const targetNode = this.getNodeFromDragEvent(event);
76
+ if (targetNode === null) {
77
+ return false;
78
+ }
79
+
80
+ this.cleanDrag();
81
+
82
+ // Add hover styling to the current hovered node
83
+ // element, during the drag the default mouse over
84
+ // is disabled by the browser
85
+ const hoverElement = this.getElementFromNode(targetNode);
86
+ hoverElement.classList.add('node-hover');
87
+
88
+ // Open node with children while holding the
89
+ // node/element over this node for 1 second
90
+ if (targetNode.hasChildren && !targetNode.__expanded) {
91
+ if (this.openNodeTimeout.targetNode != targetNode) {
92
+ this.openNodeTimeout.targetNode = targetNode;
93
+ clearTimeout(this.openNodeTimeout.timeout);
94
+ this.openNodeTimeout.timeout = setTimeout(() => {
95
+ this.showChildren(this.openNodeTimeout.targetNode);
96
+ this.openNodeTimeout.targetNode = null;
97
+ this.openNodeTimeout.timeout = null;
98
+ }, 1000);
99
+ }
100
+ } else {
101
+ clearTimeout(this.openNodeTimeout.timeout);
102
+ this.openNodeTimeout.targetNode = null;
103
+ this.openNodeTimeout.timeout = null;
104
+ }
105
+
106
+ // Allow drop
107
+ event.preventDefault();
108
+
109
+ // Adjust allowed drop effect
110
+ DragDropUtility.updateEventAndTooltipToReflectCopyMoveIntention(event);
111
+
112
+ return true;
113
+ }
114
+
115
+ return false;
116
+ }
117
+
118
+ protected override handleNodeDrop(event: DragEvent): boolean {
119
+ if (super.handleNodeDrop(event)) {
120
+ return true;
121
+ }
122
+ if (event.dataTransfer.types.includes(DataTransferTypes.content)) {
123
+ const node = this.getNodeFromDragEvent(event);
124
+ if (node === null) {
125
+ return false;
126
+ }
127
+
128
+ const newNodeData = event.dataTransfer.getData(DataTransferTypes.content);
129
+ const parsedData = JSON.parse(newNodeData) as ContentElementDragDropData;
130
+
131
+ // allow drop
132
+ event.preventDefault();
133
+
134
+ const moveElementUrl = new URL(parsedData.moveElementUrl, window.origin);
135
+ moveElementUrl.searchParams.set('expandPage', node.identifier);
136
+ moveElementUrl.searchParams.set('originalPid', node.identifier);
137
+ if (DragDropUtility.isCopyModifierFromEvent(event)) {
138
+ moveElementUrl.searchParams.set('makeCopy', '1');
139
+ }
140
+
141
+ Modal.advanced({
142
+ content: moveElementUrl.toString(),
143
+ severity: SeverityEnum.notice,
144
+ size: Modal.sizes.large,
145
+ type: Modal.types.iframe,
146
+ });
147
+
148
+ return true;
149
+ }
150
+ return false;
151
+ }
152
+ }
@@ -0,0 +1,159 @@
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 AjaxRequest from '@typo3/core/ajax/ajax-request';
15
+ import { ModuleStateStorage } from '@typo3/backend/storage/module-state-storage';
16
+ import type { LitElement } from 'lit';
17
+ import type { ModuleStateUpdateEvent } from '@typo3/backend/storage/module-state-storage';
18
+ import type { TreeNodeInterface } from '@typo3/backend/tree/tree-node';
19
+ import type { Tree } from '@typo3/backend/tree/tree';
20
+ import type { Constructor } from '@lit/reactive-element/decorators/base';
21
+
22
+ export const TreeModuleState = <T extends Constructor<LitElement>>(superClass: T) => {
23
+ abstract class TreeModuleStateClass extends superClass {
24
+ protected abstract tree: Tree;
25
+ protected abstract moduleStateType: string;
26
+
27
+ public override connectedCallback(): void {
28
+ super.connectedCallback();
29
+ document.addEventListener('typo3:module-state-storage:update:' + this.moduleStateType, this.moduleStateUpdated);
30
+ }
31
+
32
+ public override disconnectedCallback(): void {
33
+ super.disconnectedCallback();
34
+ document.removeEventListener('typo3:module-state-storage:update:' + this.moduleStateType, this.moduleStateUpdated);
35
+ }
36
+
37
+ protected transformModuleStateIdentifierToNodeIdentifier(moduleStateIdentifier: string): string {
38
+ return moduleStateIdentifier;
39
+ }
40
+
41
+ protected transformNodeIdentifierToModuleStateIdentifier(nodeIdentifier: string): string {
42
+ return nodeIdentifier;
43
+ }
44
+
45
+ protected async selectActiveViaRootline(identifier: string) {
46
+ const url = new URL(this.tree.settings.rootlineUrl, window.location.origin);
47
+ url.searchParams.set('identifier', identifier);
48
+ const response = await new AjaxRequest(url.toString()).get({ cache: 'no-cache' });
49
+ const { rootline }: { rootline: string[] } = await response.resolve();
50
+ rootline.pop();
51
+ const propagate = false;
52
+ await this.selectActiveNodeByParents(identifier, rootline.map(id => this.transformModuleStateIdentifierToNodeIdentifier(id)), propagate);
53
+ }
54
+
55
+ /**
56
+ * Event listener called for each loaded node,
57
+ * here used to mark node remembered from/in ModuleState as selected
58
+ */
59
+ protected readonly selectActiveNodeInLoadedNodes = (evt: CustomEvent<{nodes: TreeNodeInterface[]}>): void => {
60
+ let moduleState = ModuleStateStorage.current(this.moduleStateType);
61
+ if (!moduleState.identifier) {
62
+ // No active node selected yet
63
+ return;
64
+ }
65
+
66
+ const { nodes } = evt.detail;
67
+ const treeIdentifier = this.transformModuleStateIdentifierToNodeIdentifier(moduleState.treeIdentifier);
68
+ const identifier = this.transformModuleStateIdentifierToNodeIdentifier(moduleState.identifier);
69
+ const nodeToActivate = nodes.find((node) => (
70
+ (moduleState.treeIdentifier !== null && node.__treeIdentifier === treeIdentifier) ||
71
+ (moduleState.treeIdentifier === null && node.identifier === identifier)
72
+ ));
73
+
74
+
75
+ if (!nodeToActivate) {
76
+ // The active node was not found. That is fine since we only enhance a
77
+ // subset of nodes here (like an ondemand loaded subtree) and we must not
78
+ // initiate new rootline requests.
79
+ // This will be checked by this.fetchActiveNodeIfMissing().
80
+ return;
81
+ }
82
+
83
+ if (moduleState.treeIdentifier === null) {
84
+ moduleState = ModuleStateStorage.updateWithTreeIdentifier(
85
+ this.moduleStateType,
86
+ this.transformNodeIdentifierToModuleStateIdentifier(nodeToActivate.identifier),
87
+ this.transformNodeIdentifierToModuleStateIdentifier(nodeToActivate.__treeIdentifier)
88
+ );
89
+ }
90
+ nodeToActivate.checked = true;
91
+ // If the parent was loaded with this chunk, expand it (and its parents) immediately
92
+ const parent = nodes.find((node) => node.__treeIdentifier === nodeToActivate.__parents.join('_'));
93
+ if (parent && !parent.__expanded) {
94
+ this.tree.updateComplete.then(() => this.tree.expandNodeParents(nodeToActivate));
95
+ }
96
+ };
97
+
98
+ protected readonly fetchActiveNodeIfMissing = async (): Promise<void> => {
99
+ const moduleState = ModuleStateStorage.current(this.moduleStateType);
100
+ if (!moduleState.identifier) {
101
+ // No active node selected yet
102
+ return;
103
+ }
104
+
105
+ if (this.tree.nodes.find((node: TreeNodeInterface) => node.checked)) {
106
+ return;
107
+ }
108
+
109
+ await this.selectActiveViaRootline(moduleState.identifier);
110
+ };
111
+
112
+ private readonly moduleStateUpdated = async (e: CustomEvent<ModuleStateUpdateEvent>): Promise<void> => {
113
+ const identifier = e.detail.state.identifier;
114
+ if (!this.tree) {
115
+ /* @todo store all module state updates in a stack to be consumed by a "slow" tree initialization */
116
+ return;
117
+ }
118
+ if (identifier && identifier === e.detail.oldState.identifier && this.tree.nodes.find((node: TreeNodeInterface) => node.checked)) {
119
+ return;
120
+ }
121
+
122
+ if (!identifier) {
123
+ console.error('invalid identifier', e.detail);
124
+ return;
125
+ }
126
+
127
+ if (this.tree.loading) {
128
+ await this.tree.loadComplete;
129
+ }
130
+
131
+ const nodeIdentifier = this.transformModuleStateIdentifierToNodeIdentifier(identifier);
132
+ const node = this.tree.nodes.find((node) => node.identifier === nodeIdentifier);
133
+ const selectedNode = this.tree.nodes.find((node: TreeNodeInterface) => node.checked);
134
+ if (node && node === selectedNode) {
135
+ // node is already selected, only ensure parents are expanded
136
+ await this.tree.expandNodeParents(node);
137
+ return;
138
+ }
139
+
140
+ const propagate = false;
141
+ if (node) {
142
+ await this.selectActiveNodeByParents(identifier, node.__parents, propagate);
143
+ return;
144
+ }
145
+
146
+ await this.selectActiveViaRootline(identifier);
147
+ };
148
+
149
+ private async selectActiveNodeByParents(identifier: string, parents: string[], propagate: boolean = true) {
150
+ await this.tree.expandParents(parents);
151
+ const nodeIdentifier = this.transformModuleStateIdentifierToNodeIdentifier(identifier);
152
+ const node = this.tree.nodes.find((node) => node.identifier === nodeIdentifier);
153
+ if (node) {
154
+ this.tree.selectNode(node, propagate);
155
+ }
156
+ }
157
+ };
158
+ return TreeModuleStateClass;
159
+ };
@@ -0,0 +1,31 @@
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 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 { customElement, property } from 'lit/decorators';
15
+ import { html, LitElement, type TemplateResult } from 'lit';
16
+ import '@typo3/backend/element/icon-element';
17
+
18
+ @customElement('typo3-backend-tree-node-toggle')
19
+ export default class TreeNodeToggle extends LitElement {
20
+ @property({ type: String, reflect: true, attribute: 'aria-expanded' }) expanded: string = 'false';
21
+
22
+ protected override render(): TemplateResult | symbol {
23
+ return html`<typo3-backend-icon size="small" identifier="${this.expanded === 'true' ? 'actions-chevron-down' : 'actions-chevron-end'}"></typo3-backend-icon>`;
24
+ }
25
+ }
26
+
27
+ declare global {
28
+ interface HTMLElementTagNameMap {
29
+ 'typo3-backend-tree-node-toggle': TreeNodeToggle;
30
+ }
31
+ }
@@ -0,0 +1,97 @@
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 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
+ export enum TreeNodeCommandEnum {
15
+ COPY = 'copy',
16
+ EDIT = 'edit',
17
+ MOVE = 'move',
18
+ DELETE = 'delete',
19
+ NEW = 'new'
20
+ }
21
+
22
+ export enum TreeNodePositionEnum {
23
+ INSIDE = 'inside',
24
+ BEFORE = 'before',
25
+ AFTER = 'after'
26
+ }
27
+
28
+
29
+ export interface TreeNodeStatusInformation {
30
+ label: string,
31
+ icon: string,
32
+ severity: number,
33
+ overlayIcon: string,
34
+ priority: number
35
+ }
36
+
37
+ export interface TreeNodeLabel {
38
+ label: string,
39
+ color: string,
40
+ priority: number,
41
+ }
42
+
43
+ /**
44
+ * Represents a single node in the tree that is rendered.
45
+ */
46
+ export interface TreeNodeInterface {
47
+
48
+ // TYPO3\CMS\Backend\Dto\Tree\TreeItem
49
+ type: string,
50
+ identifier: string,
51
+ parentIdentifier: string,
52
+ recordType: string,
53
+ name: string,
54
+ note: string,
55
+ prefix: string,
56
+ suffix: string,
57
+ tooltip: string,
58
+ depth: number,
59
+ hasChildren: boolean,
60
+ loaded: boolean,
61
+ editable: boolean,
62
+ deletable: boolean,
63
+ icon: string,
64
+ overlayIcon: string,
65
+ statusInformation: Array<TreeNodeStatusInformation>,
66
+ labels: Array<TreeNodeLabel>,
67
+
68
+ // Calculated Internal
69
+ __treeIdentifier: string,
70
+ __treeParents: Array<string>,
71
+ __treeDragAction: string,
72
+ __parents: Array<string>,
73
+ __processed: boolean,
74
+ __loading: boolean,
75
+ __hidden: boolean,
76
+ __expanded: boolean,
77
+ __indeterminate: boolean,
78
+ __x: number,
79
+ __y: number,
80
+
81
+ // TYPO3\CMS\Backend\Dto\Tree\PageTreeItem
82
+ nameSourceField?: string,
83
+ workspaceId?: number,
84
+ locked?: boolean,
85
+ stopPageTree?: boolean,
86
+ mountPoint?: number,
87
+ doktype?: number;
88
+
89
+ // TYPO3\CMS\Backend\Dto\Tree\FileTreeItem
90
+ pathIdentifier?: string,
91
+ storage?: number,
92
+ resourceType?: string,
93
+
94
+ // TYPO3\CMS\Backend\Dto\Tree\SelectTreeItem
95
+ checked?: boolean,
96
+ selectable?: boolean,
97
+ }
@@ -0,0 +1,117 @@
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, property } from 'lit/decorators';
16
+ import { lll } from '@typo3/core/lit-helper';
17
+ import DebounceEvent from '@typo3/core/event/debounce-event';
18
+ import '@typo3/backend/element/icon-element';
19
+ import { Tree } from './tree';
20
+ import type { TreeNodeInterface } from './tree-node';
21
+
22
+ @customElement('typo3-backend-tree-toolbar')
23
+ export class TreeToolbar extends LitElement {
24
+ @property({ type: Tree }) tree: Tree = null;
25
+ protected settings = {
26
+ searchInput: '.search-input',
27
+ filterTimeout: 450
28
+ };
29
+
30
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
31
+ return this;
32
+ }
33
+
34
+ protected override firstUpdated(): void
35
+ {
36
+ const inputEl = this.querySelector(this.settings.searchInput) as HTMLInputElement;
37
+ if (inputEl) {
38
+ new DebounceEvent('input', (evt: InputEvent) => {
39
+ const el = evt.target as HTMLInputElement;
40
+ this.tree.filter(el.value.trim());
41
+ }, this.settings.filterTimeout).bindTo(inputEl);
42
+ }
43
+ }
44
+
45
+ protected override render(): TemplateResult {
46
+ return html`
47
+ <div class="tree-toolbar">
48
+ <div class="tree-toolbar__menu">
49
+ <div class="tree-toolbar__search">
50
+ <label for="toolbarSearch" class="visually-hidden">
51
+ ${lll('labels.label.searchString')}
52
+ </label>
53
+ <input type="search" id="toolbarSearch" class="form-control form-control-sm search-input" placeholder="${lll('tree.searchTermInfo')}">
54
+ </div>
55
+ </div>
56
+ <div class="tree-toolbar__submenu">
57
+ <button
58
+ type="button"
59
+ class="tree-toolbar__menuitem dropdown-toggle dropdown-toggle-no-chevron float-end"
60
+ data-bs-toggle="dropdown"
61
+ aria-expanded="false"
62
+ aria-label="${lll('labels.openTreeOptionsMenu')}"
63
+ >
64
+ <typo3-backend-icon identifier="actions-menu-alternative" size="small"></typo3-backend-icon>
65
+ </button>
66
+ <ul class="dropdown-menu dropdown-menu-end">
67
+ <li>
68
+ <button class="dropdown-item" @click="${() => this.refreshTree()}">
69
+ <span class="dropdown-item-columns">
70
+ <span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
71
+ <typo3-backend-icon identifier="actions-refresh" size="small"></typo3-backend-icon>
72
+ </span>
73
+ <span class="dropdown-item-column dropdown-item-column-title">
74
+ ${lll('labels.refresh')}
75
+ </span>
76
+ </span>
77
+ </button>
78
+ </li>
79
+ <li>
80
+ <button class="dropdown-item" @click="${(evt: MouseEvent) => this.collapseAll(evt)}">
81
+ <span class="dropdown-item-columns">
82
+ <span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
83
+ <typo3-backend-icon identifier="apps-pagetree-category-collapse-all" size="small"></typo3-backend-icon>
84
+ </span>
85
+ <span class="dropdown-item-column dropdown-item-column-title">
86
+ ${lll('labels.collapse')}
87
+ </span>
88
+ </span>
89
+ </button>
90
+ </li>
91
+ </ul>
92
+ </div>
93
+ </div>
94
+ `;
95
+ }
96
+
97
+ protected refreshTree(): void {
98
+ this.tree.refreshOrFilterTree();
99
+ }
100
+
101
+ protected collapseAll(evt: MouseEvent): void {
102
+ evt.preventDefault();
103
+ // Only collapse nodes that aren't on the root level
104
+ // @TODO Implement into tree
105
+ this.tree.nodes.forEach((node: TreeNodeInterface) => {
106
+ if (node.__parents.length) {
107
+ this.tree.hideChildren(node);
108
+ }
109
+ });
110
+ }
111
+ }
112
+
113
+ declare global {
114
+ interface HTMLElementTagNameMap {
115
+ 'typo3-backend-tree-toolbar': TreeToolbar;
116
+ }
117
+ }