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,54 @@
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 } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { PseudoButtonLitElement } from '@typo3/backend/element/pseudo-button';
17
+ import Modal from '@typo3/backend/modal';
18
+
19
+ @customElement('typo3-mfa-totp-url-info-button')
20
+ export class MfaTotpUrlButton extends PseudoButtonLitElement {
21
+ @property({ type: String, attribute: 'data-url' }) modalUrl: string;
22
+ @property({ type: String, attribute: 'data-title' }) modalTitle: string;
23
+ @property({ type: String, attribute: 'data-description' }) modalDescription: string;
24
+ @property({ type: String, attribute: 'data-button-ok' }) buttonOk: string;
25
+
26
+ protected override buttonActivated(): void {
27
+ this.showTotpAuthUrlModal();
28
+ }
29
+
30
+ private showTotpAuthUrlModal(): void {
31
+ Modal.advanced({
32
+ title: this.modalTitle,
33
+ content: html`
34
+ <p>${this.modalDescription}</p>
35
+ <pre>${this.modalUrl}</pre>
36
+ `,
37
+ buttons: [
38
+ {
39
+ trigger: (): void => Modal.dismiss(),
40
+ text: this.buttonOk || 'OK',
41
+ active: true,
42
+ btnClass: 'btn-default',
43
+ name: 'ok'
44
+ }
45
+ ]
46
+ });
47
+ }
48
+ }
49
+
50
+ declare global {
51
+ interface HTMLElementTagNameMap {
52
+ 'typo3-mfa-totp-url-info-button': MfaTotpUrlButton;
53
+ }
54
+ }
@@ -0,0 +1,95 @@
1
+ interface Cache<T> {
2
+ promise: Promise<T>,
3
+ abortController: AbortController,
4
+ refCount: number,
5
+ }
6
+
7
+ /**
8
+ * (abortable) deduping caching strategy for promises
9
+ */
10
+ export class DedupeAsyncTask<T> {
11
+ private promises: Record<string, Cache<T>> = {};
12
+ private results: Record<string, T> = {};
13
+
14
+ public async get(
15
+ key: string,
16
+ task: (signal: AbortSignal) => Promise<T>,
17
+ signal?: AbortSignal | null,
18
+ ): Promise<T> {
19
+ if (signal?.aborted) {
20
+ signal.throwIfAborted();
21
+ }
22
+
23
+ if (key in this.results) {
24
+ return this.results[key];
25
+ }
26
+
27
+ const promise = this.getPromise(key, task);
28
+ if (signal) {
29
+ return await this.getAbortablePromise(key, promise, signal);
30
+ }
31
+
32
+ return await promise;
33
+ }
34
+
35
+ private getPromise(
36
+ key: string,
37
+ task: (signal: AbortSignal) => Promise<T>,
38
+ ): Promise<T> {
39
+ if (key in this.promises) {
40
+ this.promises[key].refCount++;
41
+ return this.promises[key].promise;
42
+ }
43
+
44
+ const abortController = new AbortController();
45
+ const refCount = 1;
46
+ const promise = task(abortController.signal)
47
+ .then((value: T): T => {
48
+ this.results[key] = value;
49
+ return value;
50
+ })
51
+ .finally(() => {
52
+ if (key in this.promises) {
53
+ delete this.promises[key];
54
+ }
55
+ });
56
+
57
+ this.promises[key] = { promise, abortController, refCount };
58
+
59
+ return promise;
60
+ }
61
+
62
+ private getAbortablePromise(
63
+ key: string,
64
+ promise: Promise<T>,
65
+ signal: AbortSignal,
66
+ ): Promise<T> {
67
+ return new Promise<T>((resolve, reject) => {
68
+ const abortListener = () => {
69
+ if (key in this.promises && --this.promises[key].refCount < 1) {
70
+ this.promises[key].abortController.abort();
71
+ delete this.promises[key];
72
+ }
73
+ try {
74
+ signal.throwIfAborted();
75
+ } catch (e) {
76
+ reject(e);
77
+ }
78
+ };
79
+
80
+ signal.addEventListener('abort', abortListener, { once: true });
81
+ promise.then(
82
+ (value: T) => {
83
+ signal.removeEventListener('abort', abortListener);
84
+ if (!signal.aborted) {
85
+ resolve(value);
86
+ }
87
+ },
88
+ (e: unknown) => {
89
+ signal.removeEventListener('abort', abortListener);
90
+ reject(e);
91
+ }
92
+ );
93
+ });
94
+ }
95
+ }
@@ -0,0 +1,82 @@
1
+ import { marked, type MarkedOptions } from 'marked';
2
+ import dompurify, { type Config as DOMPurifyConfig } from 'dompurify';
3
+ import { html, type TemplateResult } from 'lit';
4
+ import { until } from 'lit/directives/until';
5
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
6
+
7
+ export type ProfileType = 'minimal' | 'default';
8
+
9
+ interface ProfileConfig {
10
+ markdown: MarkedOptions,
11
+ dompurify: DOMPurifyConfig,
12
+ }
13
+
14
+ /**
15
+ * Parse `markdown` as markdown and render as lit HTML.
16
+ *
17
+ * @example
18
+ *
19
+ * ```
20
+ * html`<div class="description">${markdown(myDescription, 'minimal')}</div>`
21
+ * ```
22
+ *
23
+ * @internal
24
+ */
25
+ export const markdown = (
26
+ markdown: string,
27
+ profile: ProfileType = 'default'
28
+ ): TemplateResult =>
29
+ html`${until(render(markdown, profiles[profile]), markdown)}`;
30
+
31
+ dompurify.addHook('afterSanitizeAttributes', (node) => {
32
+ if ('target' in node && !node.hasAttribute('target')) {
33
+ node.setAttribute('target', '_blank');
34
+ }
35
+ });
36
+
37
+ const profiles: Record<ProfileType, ProfileConfig> = {
38
+ minimal: {
39
+ markdown: {
40
+ gfm: true,
41
+ pedantic: false,
42
+ },
43
+ dompurify: {
44
+ ALLOWED_TAGS: ['a', 'blockquote', 'br', 'code', 'kbd', 'li', 'p', 'pre', 'strong', 'ul', 'ol'],
45
+ ALLOWED_ATTR: ['href', 'target', 'title', 'role'],
46
+ },
47
+ },
48
+ default: {
49
+ markdown: {
50
+ gfm: true,
51
+ pedantic: false,
52
+ },
53
+ dompurify: {
54
+ USE_PROFILES: {
55
+ html: true,
56
+ },
57
+ },
58
+ },
59
+ };
60
+
61
+ async function render(markdown: string, config: ProfileConfig) {
62
+ let parsed, sanitized: string;
63
+ try {
64
+ parsed = await marked.parse(markdown, {
65
+ async: true,
66
+ ...config.markdown,
67
+ });
68
+ } catch (e) {
69
+ console.error('Invalid Markdown', markdown, e);
70
+ return markdown;
71
+ }
72
+ try {
73
+ sanitized = dompurify.sanitize(
74
+ parsed,
75
+ config.dompurify,
76
+ );
77
+ } catch (e) {
78
+ console.error('Invalid HTML', parsed, e);
79
+ return markdown;
80
+ }
81
+ return unsafeHTML(sanitized);
82
+ }
@@ -0,0 +1,16 @@
1
+ import { html, type TemplateResult } from 'lit';
2
+
3
+ /**
4
+ * Render a multiline string by replacing \n with <br> as lit HTML.
5
+ *
6
+ * @example
7
+ *
8
+ * ```
9
+ * html`<div class="description">${nl2br(myDescription)}</div>`
10
+ * ```
11
+ *
12
+ * @internal
13
+ */
14
+ export const nl2br = (text: string): TemplateResult => html`${
15
+ text.split('\n').map((line, index) => index === 0 ? line : html`<br>${line}`)
16
+ }`;
@@ -0,0 +1,35 @@
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
+ /**
15
+ * Module: @typo3/core/document-service
16
+ * @exports @typo3/core/document-service
17
+ */
18
+ class DocumentService {
19
+ private promise: Promise<Document> = null;
20
+
21
+ public ready(): Promise<Document> {
22
+ return this.promise ?? (this.promise = this.createPromise());
23
+ }
24
+
25
+ private async createPromise(): Promise<Document> {
26
+ if (document.readyState !== 'loading') {
27
+ return document;
28
+ }
29
+ await new Promise<void>(resolve => document.addEventListener('DOMContentLoaded', () => resolve(), { once: true }));
30
+ return document;
31
+ }
32
+ }
33
+
34
+ const documentService = new DocumentService();
35
+ export default documentService;
@@ -0,0 +1,40 @@
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 RegularEvent from './regular-event';
15
+ import type { Listener } from './event-interface';
16
+
17
+ /**
18
+ * Debounces an event listener that is executed after the event happened.
19
+ * A debounced event listener is not executed again until a certain amount of time has passed without it being called.
20
+ */
21
+ class DebounceEvent extends RegularEvent {
22
+ constructor(eventName: string, callback: Listener, wait: number = 250) {
23
+ super(eventName, callback);
24
+ this.callback = this.debounce(this.callback, wait);
25
+ }
26
+
27
+ private debounce(callback: Listener, wait: number): Listener {
28
+ let timeout: number = null;
29
+
30
+ return function (this: Node, ...args: unknown[]): void {
31
+ clearTimeout(timeout);
32
+ timeout = setTimeout((): void => {
33
+ timeout = null;
34
+ callback.apply(this, args);
35
+ }, wait);
36
+ };
37
+ }
38
+ }
39
+
40
+ export default DebounceEvent;
@@ -0,0 +1,24 @@
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
+ export type Listener = EventListenerWithTarget | EventListener;
15
+
16
+ export interface EventListenerWithTarget {
17
+ (evt: Event, target?: Element): void;
18
+ }
19
+
20
+ export interface EventInterface {
21
+ bindTo(element: EventTarget): void;
22
+ delegateTo(element: EventTarget, selector: string): void;
23
+ release(): void;
24
+ }
@@ -0,0 +1,58 @@
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 type { EventInterface, Listener } from './event-interface';
15
+
16
+ class RegularEvent implements EventInterface {
17
+ protected eventName: string;
18
+ protected callback: Listener;
19
+ protected options: AddEventListenerOptions | boolean;
20
+ private boundElement: EventTarget;
21
+
22
+ constructor(eventName: string, callback: Listener, options: AddEventListenerOptions | boolean = false) {
23
+ this.eventName = eventName;
24
+ this.callback = callback;
25
+ this.options = options;
26
+ }
27
+
28
+ public bindTo(element: EventTarget): void {
29
+ if (!element) {
30
+ console.warn(`Binding event ${this.eventName} failed, element was not found.`);
31
+ return;
32
+ }
33
+ this.boundElement = element;
34
+ element.addEventListener(this.eventName, this.callback, this.options);
35
+ }
36
+
37
+ public delegateTo(element: EventTarget, selector: string): void {
38
+ if (!element) {
39
+ console.warn(`Delegating event ${this.eventName} failed, element was not found.`);
40
+ return;
41
+ }
42
+ this.boundElement = element;
43
+ element.addEventListener(this.eventName, (e: Event): void => {
44
+ for (let targetElement = <HTMLElement>e.target; targetElement && targetElement !== this.boundElement; targetElement = targetElement.parentElement) {
45
+ if (targetElement.matches(selector)) {
46
+ this.callback.call(targetElement, e, targetElement);
47
+ break;
48
+ }
49
+ }
50
+ }, this.options);
51
+ }
52
+
53
+ public release(): void {
54
+ this.boundElement.removeEventListener(this.eventName, this.callback);
55
+ }
56
+ }
57
+
58
+ export default RegularEvent;
@@ -0,0 +1,42 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import RegularEvent from './regular-event';
15
+ import type { Listener } from './event-interface';
16
+
17
+ /**
18
+ * Creates a event aimed for high performance visual operations
19
+ */
20
+ class RequestAnimationFrameEvent extends RegularEvent {
21
+ constructor(eventName: string, callback: Listener) {
22
+ super(eventName, callback);
23
+ this.callback = this.req(this.callback);
24
+ }
25
+
26
+ private req(callback: Listener): Listener {
27
+ let timeout: number = null;
28
+
29
+ return (...args: unknown[]) => {
30
+ if (timeout) {
31
+ window.cancelAnimationFrame(timeout);
32
+ }
33
+
34
+ timeout = window.requestAnimationFrame(() => {
35
+ // Run our scroll functions
36
+ callback.apply(this, args);
37
+ });
38
+ };
39
+ }
40
+ }
41
+
42
+ export default RequestAnimationFrameEvent;
@@ -0,0 +1,54 @@
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 RegularEvent from './regular-event';
15
+ import type { Listener } from './event-interface';
16
+
17
+ /**
18
+ * Throttles the event listener to be called only after a defined time during the event's execution over time.
19
+ */
20
+ class ThrottleEvent extends RegularEvent {
21
+ constructor(eventName: string, callback: Listener, limit: number) {
22
+ super(eventName, callback);
23
+ this.callback = this.throttle(callback, limit);
24
+ }
25
+
26
+ private throttle(callback: Listener, limit: number): Listener {
27
+ let eventData: unknown[] | null = null;
28
+ let intervalId: number | null = null;
29
+
30
+ return function (this: Node, ...args: unknown[]): void {
31
+ eventData = args;
32
+ if (intervalId !== null) {
33
+ // Bail out, a previous call to dispatch invoked an interval
34
+ // that will pick up eventData once the timeout occured.
35
+ return;
36
+ }
37
+ const dispatch = () => {
38
+ if (eventData === null) {
39
+ // No event since the last immediate dispatch, start a new fresh interval-phase
40
+ clearInterval(intervalId);
41
+ intervalId = null;
42
+ return;
43
+ }
44
+ callback.apply(this, eventData);
45
+ eventData = null;
46
+ };
47
+ // immediate dispatch, no need to wait as no timer is active
48
+ dispatch();
49
+ intervalId = setInterval(dispatch, limit);
50
+ };
51
+ }
52
+ }
53
+
54
+ export default ThrottleEvent;
@@ -0,0 +1,29 @@
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
+ * This handler is used as client-side counterpart of `\TYPO3\CMS\Core\Page\JavaScriptRenderer`.
15
+ *
16
+ * @module @typo3/core/java-script-item-handler
17
+ * @internal Use in TYPO3 core only, API can change at any time!
18
+ */
19
+ if (document.currentScript) {
20
+ const scriptElement = document.currentScript;
21
+ // extracts JSON payload from `/* [JSON] */` content
22
+ const textContent = scriptElement.textContent.replace(/^\s*\/\*\s*|\s*\*\/\s*/g, '');
23
+ const items = JSON.parse(textContent);
24
+
25
+ import('@typo3/core/java-script-item-processor').then(({ JavaScriptItemProcessor }) => {
26
+ const processor = new JavaScriptItemProcessor();
27
+ processor.processItems(items);
28
+ });
29
+ }