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,568 @@
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 { SeverityEnum } from './enum/severity';
15
+ import $ from 'jquery';
16
+ import { Carousel } from 'bootstrap';
17
+ import Modal, { type ModalElement } from './modal';
18
+ import Severity from './severity';
19
+ import Icons from './icons';
20
+ import { topLevelModuleImport } from './utility/top-level-module-import';
21
+ import type { Stage } from '@typo3/backend/element/progress-tracker-element';
22
+
23
+ type SlideCallback = ($slide: JQuery, settings: MultiStepWizardSettings, identifier: string) => void;
24
+
25
+ export interface MultiStepWizardSettings {
26
+ [key: string]: any;
27
+ }
28
+
29
+ interface MultiStepWizardSetup {
30
+ slides: Slide[];
31
+ settings: MultiStepWizardSettings;
32
+ forceSelection: boolean;
33
+ $carousel: JQuery;
34
+ carousel: Carousel;
35
+ }
36
+
37
+ interface Slide {
38
+ identifier: string;
39
+ title: string;
40
+ progressBarTitle: string;
41
+ content: string | JQuery | Element | DocumentFragment;
42
+ severity: SeverityEnum;
43
+ callback?: SlideCallback;
44
+ }
45
+
46
+ /**
47
+ * Module: @typo3/backend/multi-step-wizard
48
+ * Multi step wizard within a modal
49
+ * @exports @typo3/backend/multi-step-wizard
50
+ */
51
+ class MultiStepWizard {
52
+ public setup: MultiStepWizardSetup;
53
+ private readonly originalSetup: MultiStepWizardSetup;
54
+
55
+ constructor() {
56
+ this.setup = {
57
+ slides: [],
58
+ settings: {},
59
+ forceSelection: true,
60
+ $carousel: null,
61
+ carousel: null,
62
+ };
63
+ this.originalSetup = $.extend(true, {}, this.setup);
64
+ }
65
+
66
+ /**
67
+ * @param {string} key
68
+ * @param {any} value
69
+ * @returns {MultiStepWizard}
70
+ */
71
+ public set(key: string, value: any): MultiStepWizard {
72
+ this.setup.settings[key] = value;
73
+ return this;
74
+ }
75
+
76
+ /**
77
+ * Add a slide item to carousel as an additional step
78
+ *
79
+ * @param {string} identifier
80
+ * @param {string} title
81
+ * @param {string} progressBarTitle
82
+ * @param {string} content
83
+ * @param {SeverityEnum} severity
84
+ * @param {Function} callback
85
+ * @returns {MultiStepWizard}
86
+ */
87
+ public addSlide(
88
+ identifier: string,
89
+ title: string,
90
+ content: string | JQuery | Element | DocumentFragment = '',
91
+ severity: SeverityEnum = SeverityEnum.info,
92
+ progressBarTitle: string,
93
+ callback?: SlideCallback,
94
+ ): MultiStepWizard {
95
+ const slide: Slide = {
96
+ identifier: identifier,
97
+ title: title,
98
+ content: content,
99
+ severity: severity,
100
+ progressBarTitle: progressBarTitle,
101
+ callback: callback,
102
+ };
103
+ this.setup.slides.push(slide);
104
+ return this;
105
+ }
106
+
107
+ /**
108
+ * Add the final processing slide as the last step
109
+ *
110
+ * @param {Function} callback
111
+ * @returns {Promise<string>}
112
+ */
113
+ public async addFinalProcessingSlide(callback?: SlideCallback): Promise<void> {
114
+ if (!callback) {
115
+ callback = (): void => {
116
+ this.dismiss();
117
+ };
118
+ }
119
+
120
+ const spinnerIcon = await Icons.getIcon('spinner-circle', Icons.sizes.large, null, null);
121
+ const processingSlide = document.createElement('div');
122
+ processingSlide.classList.add('text-center');
123
+ processingSlide.append(document.createRange().createContextualFragment(spinnerIcon));
124
+
125
+ this.addSlide(
126
+ 'final-processing-slide', top.TYPO3.lang['wizard.processing.title'],
127
+ processingSlide,
128
+ Severity.notice,
129
+ top.TYPO3.lang['wizard.progressStep.finish'],
130
+ callback,
131
+ );
132
+ }
133
+
134
+ /**
135
+ * Create wizard with modal, buttons, progress bar and carousel
136
+ */
137
+ public show(): void {
138
+ const $slides = this.generateSlides();
139
+ const firstSlide = this.setup.slides[0];
140
+
141
+ Modal.advanced({
142
+ title: firstSlide.title,
143
+ content: $slides,
144
+ severity: firstSlide.severity,
145
+ staticBackdrop: true,
146
+ buttons: [{
147
+ text: top.TYPO3.lang['wizard.button.cancel'],
148
+ active: true,
149
+ btnClass: 'btn-default float-start',
150
+ name: 'cancel',
151
+ trigger: (): void => {
152
+ this.getComponent().trigger('wizard-dismiss');
153
+ },
154
+ }, {
155
+ text: top.TYPO3.lang['wizard.button.prev'],
156
+ btnClass: 'btn-' + Severity.getCssClass(firstSlide.severity),
157
+ name: 'prev',
158
+ }, {
159
+ text: top.TYPO3.lang['wizard.button.next'],
160
+ btnClass: 'btn-' + Severity.getCssClass(firstSlide.severity),
161
+ name: 'next',
162
+ }],
163
+ additionalCssClasses: ['modal-multi-step-wizard'],
164
+ callback: (modal: ModalElement): void => {
165
+ topLevelModuleImport('@typo3/backend/element/progress-tracker-element.js').then((): void => {
166
+ this.setup.carousel = new Carousel(modal.querySelector('.carousel'));
167
+ this.addButtonContainer();
168
+ this.addProgressBar();
169
+ this.initializeEvents();
170
+ });
171
+ }
172
+ });
173
+
174
+ this.getComponent().on('wizard-visible', (): void => {
175
+ if (this.setup.forceSelection) {
176
+ // @todo: This is a hack as modal buttons cannot be initially disabled.
177
+ this.lockPrevStep();
178
+ this.lockNextStep();
179
+ }
180
+
181
+ this.runSlideCallback(firstSlide, this.setup.$carousel.find('.carousel-item').first());
182
+ }).on('wizard-dismissed', (): void => {
183
+ this.setup = $.extend(true, {}, this.originalSetup);
184
+ });
185
+ }
186
+
187
+ /**
188
+ * @returns {JQuery}
189
+ */
190
+ public getComponent(): JQuery {
191
+ if (this.setup.$carousel === null) {
192
+ this.generateSlides();
193
+ }
194
+ return this.setup.$carousel;
195
+ }
196
+
197
+ /**
198
+ * Close the modal / wizard
199
+ */
200
+ public dismiss(): void {
201
+ Modal.dismiss();
202
+ }
203
+
204
+ /**
205
+ * Lock the button for the next step
206
+ *
207
+ * @returns {JQuery}
208
+ */
209
+ public lockNextStep(): JQuery {
210
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="next"]');
211
+ $button.prop('disabled', true);
212
+ return $button;
213
+ }
214
+
215
+ public next(): void {
216
+ this.setup.carousel.next();
217
+ }
218
+
219
+ public previous(): void {
220
+ this.setup.carousel.prev();
221
+ }
222
+
223
+ /**
224
+ * Unlock the button for the next step
225
+ *
226
+ * @returns {JQuery}
227
+ */
228
+ public unlockNextStep(): JQuery {
229
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="next"]');
230
+ $button.prop('disabled', false);
231
+ return $button;
232
+ }
233
+
234
+ /**
235
+ * Lock the button for the prev step
236
+ *
237
+ * @returns {JQuery}
238
+ */
239
+ public lockPrevStep(): JQuery {
240
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="prev"]');
241
+ $button.prop('disabled', true);
242
+ return $button;
243
+ }
244
+
245
+ /**
246
+ * Unlock the button for the prev step
247
+ *
248
+ * @returns {JQuery}
249
+ */
250
+ public unlockPrevStep(): JQuery {
251
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="prev"]');
252
+ $button.prop('disabled', false);
253
+ return $button;
254
+ }
255
+
256
+ /**
257
+ * Trigger a step button (prev or next)
258
+ *
259
+ * @param {string} direction
260
+ * @returns {JQuery}
261
+ */
262
+ public triggerStepButton(direction: string): JQuery {
263
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="' + direction + '"]');
264
+ if ($button.length > 0 && $button.prop('disabled') !== true) {
265
+ $button.get(0).click();
266
+ }
267
+ return $button;
268
+ }
269
+
270
+ /**
271
+ * Blur the button for the cancel step
272
+ *
273
+ * @returns {JQuery}
274
+ */
275
+ public blurCancelStep(): JQuery {
276
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="cancel"]');
277
+ $button.trigger('blur');
278
+ return $button;
279
+ }
280
+
281
+ /**
282
+ * Register all events
283
+ *
284
+ * @private
285
+ */
286
+ private initializeEvents(): void {
287
+ const $modal = this.setup.$carousel.closest('.modal');
288
+ this.initializeSlideNextEvent($modal);
289
+ this.initializeSlidePrevEvent($modal);
290
+
291
+ // Event fires when the slide transition is invoked
292
+ this.setup.$carousel.get(0).addEventListener('slide.bs.carousel', (evt: Event & Carousel.Event): void => {
293
+ if (evt.direction === 'left') {
294
+ this.nextSlideChanges($modal);
295
+ } else {
296
+ this.prevSlideChanges($modal);
297
+ }
298
+ });
299
+
300
+ // Event is fired when the carousel has completed its slide transition
301
+ this.setup.$carousel.get(0).addEventListener('slid.bs.carousel', (evt: Event & Carousel.Event): void => {
302
+ const currentIndex = this.setup.$carousel.data('currentIndex');
303
+ const slide = this.setup.slides[currentIndex];
304
+
305
+ if (this.setup.forceSelection) {
306
+ this.lockNextStep();
307
+ }
308
+
309
+ this.runSlideCallback(slide, $(evt.relatedTarget));
310
+ });
311
+
312
+ // Custom event, closes the wizard
313
+ const cmp = this.getComponent();
314
+ cmp.on('wizard-dismiss', this.dismiss);
315
+
316
+ Modal.currentModal.addEventListener('typo3-modal-hidden', (): void => {
317
+ cmp.trigger('wizard-dismissed');
318
+ });
319
+ Modal.currentModal.addEventListener('typo3-modal-shown', (): void => {
320
+ cmp.trigger('wizard-visible');
321
+ });
322
+ }
323
+
324
+ private initializeSlideNextEvent($modal: JQuery) {
325
+ const $modalFooter = $modal.find('.modal-footer');
326
+ const $nextButton = $modalFooter.find('button[name="next"]');
327
+ $nextButton.off().on('click', (): void => {
328
+ this.setup.carousel.next();
329
+ });
330
+ }
331
+
332
+ private initializeSlidePrevEvent($modal: JQuery) {
333
+ const $modalFooter = $modal.find('.modal-footer');
334
+ const $prevButton = $modalFooter.find('button[name="prev"]');
335
+ $prevButton.off().on('click', (): void => {
336
+ this.setup.carousel.prev();
337
+ });
338
+ }
339
+
340
+ /**
341
+ * All changes after applying the next-button
342
+ *
343
+ * @param {JQuery} $modal
344
+ * @private
345
+ */
346
+ private nextSlideChanges($modal: JQuery): void {
347
+ this.initializeSlideNextEvent($modal);
348
+
349
+ const $modalTitle = $modal.find('.modal-title');
350
+ const nextSlideNumber = this.setup.$carousel.data('currentSlide') + 1;
351
+ const currentIndex = this.setup.$carousel.data('currentIndex');
352
+ const nextIndex = currentIndex + 1;
353
+ const $slideContent = $modal.find('.carousel-item:eq(' + nextIndex + ')');
354
+
355
+ // Flush content when sliding
356
+ $slideContent.empty().append(this.setup.slides[nextIndex].content);
357
+ $modalTitle.text(this.setup.slides[nextIndex].title);
358
+
359
+ // Always unlock previous step
360
+ this.unlockPrevStep();
361
+
362
+ this.setup.$carousel.data('currentSlide', nextSlideNumber);
363
+ this.setup.$carousel.data('currentIndex', nextIndex);
364
+
365
+ const progressTracker = $modal.find('typo3-backend-progress-tracker');
366
+ progressTracker.attr('active', nextIndex + 1);
367
+
368
+ this.updateCurrentSeverity($modal, currentIndex, nextIndex);
369
+ }
370
+
371
+ /**
372
+ * All changes after applying the prev-button
373
+ *
374
+ * @param {JQuery} $modal
375
+ * @private
376
+ */
377
+ private prevSlideChanges($modal: JQuery): void {
378
+ this.initializeSlidePrevEvent($modal);
379
+
380
+ const $modalTitle = $modal.find('.modal-title');
381
+ const $modalFooter = $modal.find('.modal-footer');
382
+ const $nextButton = $modalFooter.find('button[name="next"]');
383
+ const nextSlideNumber = this.setup.$carousel.data('currentSlide') - 1;
384
+ const currentIndex = this.setup.$carousel.data('currentIndex');
385
+ const nextIndex = currentIndex - 1;
386
+ const $slideContent = $modal.find('.carousel-item:eq(' + nextIndex + ')');
387
+
388
+ // Flush content when sliding
389
+ $slideContent.empty().append(this.setup.slides[nextIndex].content);
390
+ $modalTitle.text(this.setup.slides[nextIndex].title);
391
+
392
+ // Always unlock previous step if there is any
393
+ if (nextIndex > 0) {
394
+ this.unlockPrevStep();
395
+ } else {
396
+ this.lockPrevStep();
397
+ }
398
+
399
+ this.setup.$carousel.data('currentSlide', nextSlideNumber);
400
+ this.setup.$carousel.data('currentIndex', nextIndex);
401
+
402
+ $nextButton.text(top.TYPO3.lang['wizard.button.next']);
403
+
404
+ const progressTracker = $modal.find('typo3-backend-progress-tracker');
405
+ progressTracker.attr('active', nextIndex + 1);
406
+
407
+ this.updateCurrentSeverity($modal, currentIndex, nextIndex);
408
+ }
409
+
410
+ /**
411
+ * Update severity of modal and buttons when changing slides.
412
+ *
413
+ * @param $modal
414
+ * @param currentIndex
415
+ * @param nextIndex
416
+ * @private
417
+ */
418
+ private updateCurrentSeverity($modal: JQuery, currentIndex: number, nextIndex: number): void {
419
+ const $modalFooter = $modal.find('.modal-footer');
420
+ const $nextButton = $modalFooter.find('button[name="next"]');
421
+
422
+ $nextButton
423
+ .removeClass('btn-' + Severity.getCssClass(this.setup.slides[currentIndex].severity))
424
+ .addClass('btn-' + Severity.getCssClass(this.setup.slides[nextIndex].severity));
425
+
426
+ $modal
427
+ .removeClass('modal-severity-' + Severity.getCssClass(this.setup.slides[currentIndex].severity))
428
+ .addClass('modal-severity-' + Severity.getCssClass(this.setup.slides[nextIndex].severity));
429
+ }
430
+
431
+ /**
432
+ * @param {Slide} slide
433
+ * @param {JQuery} $slide
434
+ * @private
435
+ */
436
+ private runSlideCallback(slide: Slide, $slide: JQuery): void {
437
+ if (typeof slide.callback === 'function') {
438
+ slide.callback($slide, this.setup.settings, slide.identifier);
439
+ }
440
+ }
441
+
442
+ /**
443
+ * Create the progress bar within the modal footer
444
+ *
445
+ * @private
446
+ */
447
+ private addProgressBar(): void {
448
+ const realSlideCount = this.setup.$carousel.find('.carousel-item').length;
449
+ const slideCount = Math.max(1, realSlideCount);
450
+ const initialStep = Math.round(100 / slideCount);
451
+
452
+ this.setup.$carousel
453
+ .data('initialStep', initialStep)
454
+ .data('slideCount', slideCount)
455
+ .data('realSlideCount', realSlideCount)
456
+ .data('currentIndex', 0)
457
+ .data('currentSlide', 1);
458
+
459
+ // Append progress bar to modal footer
460
+ if (slideCount > 1) {
461
+ const progressTracker = document.createElement('typo3-backend-progress-tracker');
462
+ progressTracker.stages = this.setup.slides
463
+ .map((slide: Slide): Stage => {
464
+ return slide.progressBarTitle;
465
+ });
466
+
467
+ const modalContent = this.setup.$carousel.get(0).closest('.modal-content');
468
+ const modalBody = modalContent.querySelector('.modal-body');
469
+ const modalProgress = document.createElement('div');
470
+ modalProgress.classList.add('modal-progress');
471
+ modalProgress.appendChild(progressTracker);
472
+
473
+ modalContent.insertBefore(modalProgress, modalBody);
474
+ }
475
+ }
476
+
477
+ /**
478
+ * Wrap all the buttons of modal footer
479
+ *
480
+ * @private
481
+ */
482
+ private addButtonContainer(): void {
483
+ const $modal = this.setup.$carousel.closest('.modal');
484
+ const $modalFooterButtons = $modal.find('.modal-footer .btn');
485
+
486
+ $modalFooterButtons.wrapAll('<div class="modal-btn-group" />');
487
+ }
488
+
489
+ /**
490
+ * Generate slides of carousel
491
+ *
492
+ * @returns {JQuery}
493
+ * @private
494
+ */
495
+ private generateSlides(): JQuery {
496
+ // Check whether the slides were already generated
497
+ if (this.setup.$carousel !== null) {
498
+ return this.setup.$carousel;
499
+ }
500
+
501
+ const carouselOuter = document.createElement('div');
502
+ carouselOuter.classList.add('carousel', 'slide');
503
+ carouselOuter.dataset.bsRide = 'false';
504
+ const carouselInner = document.createElement('div');
505
+ carouselInner.classList.add('carousel-inner');
506
+ carouselInner.role = 'listbox';
507
+ carouselOuter.append(carouselInner);
508
+
509
+ for (let i = 0; i < this.setup.slides.length; ++i) {
510
+ const currentSlide: Slide = this.setup.slides[i];
511
+ const slideInner = document.createElement('div');
512
+ if (typeof currentSlide.content === 'string') {
513
+ slideInner.textContent = currentSlide.content;
514
+ } else {
515
+ if (currentSlide.content instanceof $) {
516
+ slideInner.replaceChildren((currentSlide.content as JQuery).get(0));
517
+ } else {
518
+ slideInner.replaceChildren(currentSlide.content as Element | DocumentFragment);
519
+ }
520
+ }
521
+ const slide = document.createElement('div');
522
+ slide.classList.add('carousel-item');
523
+ slide.dataset.bsSlide = currentSlide.identifier;
524
+ slide.dataset.step = i.toString(10);
525
+ slide.append(slideInner);
526
+ carouselInner.append(slide);
527
+ }
528
+
529
+ this.setup.$carousel = $(carouselOuter);
530
+ this.setup.$carousel.find('.carousel-item').first().addClass('active');
531
+
532
+ return this.setup.$carousel;
533
+ }
534
+ }
535
+
536
+ let multistepWizardObject: MultiStepWizard;
537
+ try {
538
+ // fetch from opening window
539
+ if (window.opener && window.opener.TYPO3 && window.opener.TYPO3.MultiStepWizard) {
540
+ multistepWizardObject = <MultiStepWizard>window.opener.TYPO3.MultiStepWizard;
541
+ }
542
+
543
+ // fetch from parent
544
+ if (parent && parent.window.TYPO3 && parent.window.TYPO3.MultiStepWizard) {
545
+ multistepWizardObject = <MultiStepWizard>parent.window.TYPO3.MultiStepWizard;
546
+ }
547
+
548
+ // fetch object from outer frame
549
+ if (top && top.TYPO3 && top.TYPO3.MultiStepWizard) {
550
+ multistepWizardObject = <MultiStepWizard>top.TYPO3.MultiStepWizard;
551
+ }
552
+ } catch {
553
+ // This only happens if the opener, parent or top is some other url (eg a local file)
554
+ // which loaded the current window. Then the browser's cross domain policy jumps in
555
+ // and raises an exception.
556
+ // For this case we are safe and we can create our global object below.
557
+ }
558
+
559
+ if (!multistepWizardObject) {
560
+ multistepWizardObject = new MultiStepWizard();
561
+
562
+ // attach to global frame
563
+ if (typeof TYPO3 !== 'undefined') {
564
+ TYPO3.MultiStepWizard = multistepWizardObject;
565
+ }
566
+ }
567
+
568
+ export default multistepWizardObject;
@@ -0,0 +1,51 @@
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 { customElement, property } from 'lit/decorators';
15
+ import { PseudoButtonLitElement } from '@typo3/backend/element/pseudo-button';
16
+ import Modal from '@typo3/backend/modal';
17
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
18
+ import '@typo3/backend/new-record-wizard';
19
+
20
+ /**
21
+ * Module: @typo3/backend/new-content-element-wizard-button
22
+ *
23
+ * @example
24
+ * <typo3-backend-new-content-element-wizard-button class="btn btn-default" url="link/to/endpoint" subject="Wizard title" ></typo3-backend-new-content-element-wizard-button>
25
+ */
26
+ @customElement('typo3-backend-new-content-element-wizard-button')
27
+ export class NewContentElementWizardButton extends PseudoButtonLitElement {
28
+ @property({ type: String }) url: string;
29
+ @property({ type: String }) subject: string;
30
+
31
+ protected override buttonActivated(): void {
32
+ if (!this.url) {
33
+ // Return in case no url is defined
34
+ return;
35
+ }
36
+
37
+ Modal.advanced({
38
+ content: this.url,
39
+ title: this.subject,
40
+ severity: SeverityEnum.notice,
41
+ size: Modal.sizes.large,
42
+ type: Modal.types.ajax
43
+ });
44
+ }
45
+ }
46
+
47
+ declare global {
48
+ interface HTMLElementTagNameMap {
49
+ 'typo3-backend-new-content-element-wizard-button': NewContentElementWizardButton;
50
+ }
51
+ }