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,125 @@
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, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property, query } from 'lit/decorators';
16
+ import { lll } from '@typo3/core/lit-helper';
17
+ import type { ModuleState } from '../module';
18
+
19
+ /**
20
+ * Module: @typo3/backend/module/iframe
21
+ */
22
+ export const componentName = 'typo3-iframe-module';
23
+
24
+ @customElement('typo3-iframe-module')
25
+ export class IframeModuleElement extends LitElement {
26
+
27
+ @property({ type: String }) endpoint: string = '';
28
+
29
+ @query('iframe', true) iframe: HTMLIFrameElement;
30
+
31
+ public override attributeChangedCallback(name: string, old: string, value: string): void {
32
+ super.attributeChangedCallback(name, old, value);
33
+
34
+ if (name === 'endpoint' && value === old) {
35
+ // Trigger explicit reload if value has been reset to current value,
36
+ // lit doesn't re-set the attribute in this case.
37
+ this.iframe.setAttribute('src', value);
38
+ }
39
+ }
40
+
41
+ public override connectedCallback(): void {
42
+ super.connectedCallback();
43
+ if (this.endpoint) {
44
+ this.dispatch('typo3-iframe-load', { url: this.endpoint, title: null });
45
+ }
46
+ }
47
+
48
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
49
+ // Disable shadow root as <iframe> needs to be accessible
50
+ // via top.list_frame for legacy-code and backwards compatibility.
51
+ return this;
52
+ }
53
+
54
+ protected override render(): TemplateResult | symbol {
55
+ if (!this.endpoint) {
56
+ return nothing;
57
+ }
58
+
59
+ return html`
60
+ <iframe
61
+ src="${this.endpoint}"
62
+ name="list_frame"
63
+ id="typo3-contentIframe"
64
+ class="scaffold-content-module-iframe t3js-scaffold-content-module-iframe"
65
+ title="${lll('iframe.listFrame')}"
66
+ @load="${this._loaded}"
67
+ ></iframe>
68
+ `;
69
+ }
70
+
71
+ private registerPagehideHandler(iframe: HTMLIFrameElement): void {
72
+ try {
73
+ iframe.contentWindow.addEventListener('pagehide', (e: Event) => this._pagehide(e, iframe), { once: true });
74
+ } catch (e) {
75
+ console.error('Failed to access contentWindow of module iframe – using a foreign origin?');
76
+ throw e;
77
+ }
78
+ }
79
+
80
+ private retrieveModuleStateFromIFrame(iframe: HTMLIFrameElement): ModuleState {
81
+ try {
82
+ return {
83
+ url: iframe.contentWindow.location.href,
84
+ title: iframe.contentDocument.title,
85
+ module: iframe.contentDocument.body.querySelector('.module[data-module-name]')?.getAttribute('data-module-name')
86
+ };
87
+ } catch {
88
+ console.error('Failed to access contentWindow of module iframe – using a foreign origin?');
89
+ return { url: this.endpoint, title: null };
90
+ }
91
+ }
92
+
93
+ private _loaded({ target }: Event) {
94
+ const iframe = <HTMLIFrameElement> target;
95
+
96
+ // The event handler for the "pagehide" event needs to be attached
97
+ // after every iframe load (for the current iframes's contentWindow).
98
+ this.registerPagehideHandler(iframe);
99
+
100
+ const state = this.retrieveModuleStateFromIFrame(iframe);
101
+ this.dispatch('typo3-iframe-loaded', state);
102
+ }
103
+
104
+ private _pagehide(e: Event, iframe: HTMLIFrameElement) {
105
+ // Asynchronous execution needed because the URL changes immediately after
106
+ // the `pagehide` event is dispatched, but has not been changed right now.
107
+ new Promise((resolve) => window.setTimeout(resolve, 0)).then(() => {
108
+ if (iframe.contentWindow !== null) {
109
+ this.dispatch('typo3-iframe-load', { url: iframe.contentWindow.location.href, title: null });
110
+ }
111
+ });
112
+ }
113
+
114
+ private dispatch(type: 'typo3-iframe-load' | 'typo3-iframe-loaded', state: ModuleState) {
115
+ this.dispatchEvent(
116
+ new CustomEvent<ModuleState>(type, { detail: state, bubbles: true, composed: true })
117
+ );
118
+ }
119
+ }
120
+
121
+ declare global {
122
+ interface HTMLElementTagNameMap {
123
+ 'typo3-iframe-module': IframeModuleElement;
124
+ }
125
+ }
@@ -0,0 +1,275 @@
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, css, LitElement, type TemplateResult, type HasChanged } from 'lit';
15
+ import { customElement, property, query } from 'lit/decorators';
16
+ import { ModuleUtility, type ModuleState } from '@typo3/backend/module';
17
+
18
+ const IFRAME_COMPONENT = '@typo3/backend/module/iframe';
19
+
20
+ interface DecoratedModuleState {
21
+ slotName: string;
22
+ detail: ModuleState;
23
+ }
24
+
25
+ // Trigger a render cycle, even if property has been reset to
26
+ // the current value (this is to trigger a module refresh).
27
+ const alwaysUpdate: HasChanged = () => true;
28
+
29
+ /**
30
+ * Module: @typo3/backend/module/router
31
+ */
32
+ @customElement('typo3-backend-module-router')
33
+ export class ModuleRouter extends LitElement {
34
+ public static override styles = css`
35
+ :host {
36
+ width: 100%;
37
+ min-height: 100%;
38
+ flex: 1 0 auto;
39
+ display: flex;
40
+ flex-direction: row;
41
+ }
42
+ ::slotted(*) {
43
+ min-height: 100%;
44
+ width: 100%;
45
+ }
46
+ `;
47
+
48
+ @property({ type: String, hasChanged: alwaysUpdate }) module: string = '';
49
+ @property({ type: String, hasChanged: alwaysUpdate }) endpoint: string = '';
50
+ @property({ type: String, attribute: 'state-tracker' }) stateTrackerUrl: string;
51
+ @property({ type: String, attribute: 'sitename' }) sitename: string;
52
+ @property({ type: String, attribute: 'entry-point' }) entryPoint: string;
53
+ @property({ type: String, attribute: 'install-tool-path' }) installToolPath: string;
54
+ @query('slot', true) slotElement: HTMLSlotElement;
55
+
56
+ // Not a @property, since changes must not cause a module-reload
57
+ sitenameFirst: boolean = false;
58
+ titleComponents: string[]|null = null;
59
+
60
+ constructor() {
61
+ super();
62
+
63
+ this.addEventListener('typo3-module-load', ({ target, detail }: CustomEvent<ModuleState>) => {
64
+ const slotName = (target as HTMLElement).getAttribute('slot');
65
+ this.pushState({ slotName, detail });
66
+ });
67
+
68
+ this.addEventListener('typo3-module-loaded', ({ detail }: CustomEvent<ModuleState>) => {
69
+ this.updateBrowserState(detail);
70
+ });
71
+
72
+ this.addEventListener('typo3-iframe-load', ({ detail }: CustomEvent<ModuleState>) => {
73
+ let state: DecoratedModuleState = {
74
+ slotName: IFRAME_COMPONENT,
75
+ detail: detail
76
+ };
77
+
78
+ if (state.detail.url.includes(this.stateTrackerUrl + '?state=')) {
79
+ const parts = state.detail.url.split('?state=');
80
+ state = <DecoratedModuleState>JSON.parse(decodeURIComponent(parts[1] || '{}'));
81
+ }
82
+
83
+ /*
84
+ * Event came frame <typo3-iframe-module>, that means it may have been triggered by an
85
+ * a) explicit iframe src attribute change or by
86
+ * b) browser history backwards or forward navigation
87
+ *
88
+ * In case of b), the following code block manually synchronizes the slot attribute
89
+ */
90
+ if (this.slotElement.getAttribute('name') !== state.slotName) {
91
+ // The "name" attribute of <slot> gets of out sync
92
+ // due to browser history backwards or forward navigation.
93
+ // Synchronize to the state as advertised by the iframe event.
94
+ this.slotElement.setAttribute('name', state.slotName);
95
+ }
96
+
97
+ // Mark active and sync endpoint attribute for modules.
98
+ // Do not reset endpoint for iframe modules as the URL has already been
99
+ // updated and a reset would trigger a reload and another event cycle.
100
+ this.markActive(
101
+ state.slotName,
102
+ this.slotElement.getAttribute('name') === IFRAME_COMPONENT ? null : state.detail.url,
103
+ false
104
+ );
105
+
106
+ this.updateBrowserState(state.detail);
107
+
108
+ // Send load event (e.g. to be handled by ModuleMenu).
109
+ // Dispated via parent element to prevent routers own event handlers to be invoked.
110
+ // @todo: Introduce a separate event (name) to prevent the parentElement workaround?
111
+ this.parentElement.dispatchEvent(new CustomEvent<ModuleState>('typo3-module-load', {
112
+ bubbles: true,
113
+ composed: true,
114
+ detail: state.detail
115
+ }));
116
+ });
117
+
118
+ this.addEventListener('typo3-iframe-loaded', ({ detail }: CustomEvent<ModuleState>) => {
119
+ this.updateBrowserState(detail);
120
+ this.parentElement.dispatchEvent(new CustomEvent<ModuleState>('typo3-module-loaded', {
121
+ bubbles: true,
122
+ composed: true,
123
+ detail
124
+ }));
125
+ });
126
+ }
127
+
128
+ public static override get observedAttributes(): string[] {
129
+ return [
130
+ ...super.observedAttributes,
131
+ 'sitename-first',
132
+ ];
133
+ }
134
+
135
+ public override connectedCallback(): void {
136
+ super.connectedCallback();
137
+ this.sitenameFirst = this.hasAttribute('sitename-first');
138
+ }
139
+
140
+ public override attributeChangedCallback(name: string, oldValue: string|null, newValue: string): void {
141
+ super.attributeChangedCallback(name, oldValue, newValue);
142
+ if (name === 'sitename-first') {
143
+ this.sitenameFirst = newValue !== null;
144
+ this.updateBrowserTitle();
145
+ }
146
+ }
147
+
148
+ protected override render(): TemplateResult {
149
+ const moduleData = ModuleUtility.getFromName(this.module);
150
+ const jsModule = moduleData.component || IFRAME_COMPONENT;
151
+
152
+ return html`<slot name="${jsModule}"></slot>`;
153
+ }
154
+
155
+ protected override updated(): void {
156
+ const moduleData = ModuleUtility.getFromName(this.module);
157
+ const jsModule = moduleData.component || IFRAME_COMPONENT;
158
+
159
+ this.markActive(jsModule, this.endpoint);
160
+ }
161
+
162
+ private async markActive(jsModule: string, endpoint: string | null, forceEndpointReset: boolean = true): Promise<void> {
163
+ const element = await this.getModuleElement(jsModule);
164
+ if (endpoint && (forceEndpointReset || element.getAttribute('endpoint') !== endpoint)) {
165
+ element.setAttribute('endpoint', endpoint);
166
+ }
167
+ if (!element.hasAttribute('active')) {
168
+ element.setAttribute('active', '');
169
+ }
170
+ for (let previous = element.previousElementSibling; previous !== null; previous = previous.previousElementSibling) {
171
+ previous.removeAttribute('active');
172
+ }
173
+ for (let next = element.nextElementSibling; next !== null; next = next.nextElementSibling) {
174
+ next.removeAttribute('active');
175
+ }
176
+ }
177
+
178
+ private async getModuleElement(moduleName: string): Promise<Element> {
179
+ let element = this.querySelector(`*[slot="${moduleName}"]`);
180
+ if (element !== null) {
181
+ return element;
182
+ }
183
+
184
+ try {
185
+ const module = await import(moduleName + '.js');
186
+ element = this.querySelector(`*[slot="${moduleName}"]`);
187
+ if (element !== null) {
188
+ // The element has been created parallelly during the asynchronous module load; use that instance
189
+ return element;
190
+ }
191
+ if (!('componentName' in module)) {
192
+ throw new Error(`module ${moduleName} is missing the "componentName" export`);
193
+ }
194
+ element = document.createElement(module.componentName);
195
+ } catch (e) {
196
+ console.error({ msg: `Error importing ${moduleName} as backend module`, err: e });
197
+ throw e;
198
+ }
199
+
200
+ element.setAttribute('slot', moduleName);
201
+ this.appendChild(element);
202
+ return element;
203
+ }
204
+
205
+ private async pushState(state: DecoratedModuleState): Promise<void> {
206
+ const url = this.stateTrackerUrl + '?state=' + encodeURIComponent(JSON.stringify(state));
207
+ // push dummy route to iframe. to trigger an implicit browser state update
208
+ const component = await this.getModuleElement(IFRAME_COMPONENT);
209
+ component.setAttribute('endpoint', url);
210
+ }
211
+
212
+ private updateBrowserTitle(): void {
213
+ let { titleComponents } = this;
214
+
215
+ if (titleComponents === null) {
216
+ // updateBrowserState has not been invoked yet, nothing to update for now
217
+ return;
218
+ }
219
+
220
+ if (this.sitenameFirst) {
221
+ titleComponents = titleComponents.toReversed();
222
+ }
223
+ document.title = titleComponents.join(' · ');
224
+ }
225
+
226
+ private updateBrowserState(state: ModuleState): void {
227
+ const url = new URL(state.url || '', window.location.origin);
228
+ const params = new URLSearchParams(url.search);
229
+
230
+ const title = 'title' in state ? state.title : '';
231
+ // update/reset document.title if state.title is not null
232
+ // (state.title === null indicates "keep current title")
233
+ if (title !== null) {
234
+ const titleComponents = [this.sitename];
235
+ if (title !== '') {
236
+ titleComponents.unshift(title);
237
+ }
238
+ this.titleComponents = titleComponents;
239
+ this.updateBrowserTitle();
240
+ }
241
+
242
+ if (!params.has('token')) {
243
+ // InstallTool doesn't use a backend-route with a token,
244
+ // but has backend-routes that act as wrappers.
245
+ // Rewrite the URL for display in the browser URL bar.
246
+ // @todo: rewrite installtool as webcomponent backend
247
+ // module in order to advertise a proper module URL on it's own
248
+ if (params.has('install[controller]')) {
249
+ const controller = params.get('install[controller]');
250
+ params.delete('install[controller]');
251
+ params.delete('install[context]');
252
+ params.delete('install[colorScheme]');
253
+ params.delete('install[theme]');
254
+ url.pathname = url.pathname.replace(this.installToolPath, this.entryPoint + 'module/tools/' + controller);
255
+ } else {
256
+ // non token-urls cannot be mapped by
257
+ // the main backend controller right now
258
+ return;
259
+ }
260
+ }
261
+
262
+ params.delete('token');
263
+ url.search = params.toString();
264
+
265
+ const niceUrl = url.toString();
266
+ window.history.replaceState(state, '', niceUrl);
267
+ }
268
+
269
+ }
270
+
271
+ declare global {
272
+ interface HTMLElementTagNameMap {
273
+ 'typo3-backend-module-router': ModuleRouter;
274
+ }
275
+ }