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,306 @@
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, nothing } from 'lit';
15
+ import { customElement, property, state } from 'lit/decorators';
16
+ import '@typo3/backend/element/icon-element';
17
+ import AjaxDataHandler from '../ajax-data-handler';
18
+
19
+ @customElement('typo3-backend-editable-page-title')
20
+ export class EditablePageTitle extends LitElement {
21
+ static override styles = css`
22
+ :host {
23
+ display: block;
24
+ --input-border-color: #bebebe;
25
+ --input-hover-border-color: #bebebe;
26
+ --input-focus-border-color: #bebebe;
27
+ --button-border-radius: 2px;
28
+ --button-color: inherit;
29
+ --button-bg: transparent;
30
+ --button-border-color: transparent;
31
+ --button-hover-color: inherit;
32
+ --button-hover-bg: #cacaca;
33
+ --button-hover-border-color: #bebebe;
34
+ --button-focus-color: inherit;
35
+ --button-focus-bg: #cacaca;
36
+ --button-focus-border-color: #bebebe;
37
+ }
38
+
39
+ h1 {
40
+ display: block;
41
+ font-weight: inherit;
42
+ font-size: inherit;
43
+ font-family: inherit;
44
+ line-height: inherit;
45
+ white-space: nowrap;
46
+ text-overflow: ellipsis;
47
+ overflow: hidden;
48
+ padding: 1px 0;
49
+ margin: 0;
50
+ }
51
+
52
+ input {
53
+ outline: none;
54
+ background: transparent;
55
+ font-weight: inherit;
56
+ font-size: inherit;
57
+ font-family: inherit;
58
+ line-height: inherit;
59
+ padding: 0;
60
+ border: 0;
61
+ border-top: 1px solid transparent;
62
+ border-bottom: 1px dashed var(--input-border-color);
63
+ margin: 0;
64
+ width: 100%;
65
+ outline-offset: 0;
66
+ }
67
+
68
+ input:hover {
69
+ --input-border-color: var(--input-hover-border-color);
70
+ }
71
+
72
+ input:focus {
73
+ --input-border-color: var(--input-focus-border-color);
74
+ }
75
+
76
+ input:focus-visible {
77
+ outline: .25rem solid color-mix(in srgb, var(--input-border-color), transparent 25%);
78
+ }
79
+
80
+ .wrapper {
81
+ position: relative;
82
+ margin: -1px 0;
83
+ }
84
+
85
+ div.wrapper {
86
+ padding-inline-end: 1.5em;
87
+ }
88
+
89
+ form.wrapper {
90
+ padding-inline-end: 2.5em;
91
+ }
92
+
93
+ button {
94
+ cursor: pointer;
95
+ display: inline-flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ font-size: inherit;
99
+ line-height: inherit;
100
+ border: 0;
101
+ padding: 0;
102
+ height: 100%;
103
+ width: 1em;
104
+ position: absolute;
105
+ top: 0;
106
+ border-radius: var(--button-border-radius);
107
+ overflow: hidden;
108
+ outline: none;
109
+ color: var(--button-color);
110
+ background: var(--button-bg);
111
+ border: 1px solid var(--button-border-color);
112
+ opacity: .3;
113
+ outline-offset: 0;
114
+ transition: all .2s ease-in-out;
115
+ }
116
+
117
+ button:hover {
118
+ opacity: 1;
119
+ --button-color: var(--button-hover-color);
120
+ --button-bg: var(--button-hover-bg);
121
+ --button-border-color: var(--button-hover-border-color);
122
+ }
123
+
124
+ button:focus {
125
+ opacity: 1;
126
+ --button-color: var(--button-focus-color);
127
+ --button-bg: var(--button-focus-bg);
128
+ --button-border-color: var(--button-focus-border-color);
129
+ }
130
+
131
+ button:focus-visible {
132
+ outline: .25rem solid color-mix(in srgb, var(--button-border-color), transparent 25%);
133
+ }
134
+
135
+ button[data-action="edit"] {
136
+ inset-inline-end: 0;
137
+ }
138
+
139
+ button[data-action="save"] {
140
+ inset-inline-end: calc(1em + 2px);
141
+ }
142
+
143
+ button[data-action="close"] {
144
+ inset-inline-end: 0;
145
+ }
146
+
147
+ .screen-reader {
148
+ position: absolute;
149
+ width: 1px;
150
+ height: 1px;
151
+ padding: 0;
152
+ margin: -1px;
153
+ overflow: hidden;
154
+ clip: rect(0,0,0,0);
155
+ white-space: nowrap;
156
+ border: 0
157
+ }
158
+ `;
159
+ @property({ type: String }) pageTitle: string = '';
160
+ @property({ type: Number }) pageId: number = 0;
161
+ @property({ type: Number }) localizedPageId: number = 0;
162
+ @property({ type: Boolean }) editable: boolean = false;
163
+ @state() _isEditing: boolean = false;
164
+ @state() _isSubmitting: boolean = false;
165
+
166
+ protected labels: Record<string, string> = {
167
+ input: TYPO3?.lang?.['editablePageTitle.input.field.label'] || 'Field',
168
+ edit: TYPO3?.lang?.['editablePageTitle.button.edit.label'] || 'Edit',
169
+ save: TYPO3?.lang?.['editablePageTitle.button.save.label'] || 'Save',
170
+ cancel: TYPO3?.lang?.['editablePageTitle.button.cancel.label'] || 'Cancel',
171
+ };
172
+
173
+ async startEditing(): Promise<void> {
174
+ if (this.isEditable()) {
175
+ this._isEditing = true;
176
+ await this.updateComplete;
177
+ this.shadowRoot.querySelector('input')?.focus();
178
+ }
179
+ }
180
+
181
+ protected override render(): TemplateResult | symbol {
182
+ if (this.pageTitle === '') {
183
+ return nothing;
184
+ }
185
+
186
+ if (!this.isEditable()) {
187
+ return html`<div class="wrapper"><h1>${this.pageTitle}</h1></div>`;
188
+ }
189
+
190
+ let content;
191
+ if (!this._isEditing) {
192
+ content = html`
193
+ <div class="wrapper">
194
+ <h1 @dblclick="${(): void => { this.startEditing(); }}">${this.pageTitle}</h1>
195
+ ${this.composeEditButton()}
196
+ </div>`;
197
+ } else {
198
+ content = this.composeEditForm();
199
+ }
200
+
201
+ return content;
202
+ }
203
+
204
+ private isEditable(): boolean {
205
+ return this.editable && this.pageId > 0;
206
+ }
207
+
208
+ private endEditing(): void {
209
+ if (this.isEditable()) {
210
+ this._isEditing = false;
211
+ }
212
+ }
213
+
214
+ private updatePageTitle(e: SubmitEvent): void {
215
+ e.preventDefault();
216
+
217
+ const formData = new FormData(e.target as HTMLFormElement);
218
+ const submittedData = Object.fromEntries(formData);
219
+ const newPageTitle = submittedData.newPageTitle.toString();
220
+
221
+ if (this.pageTitle === newPageTitle) {
222
+ // Page title didn't change, no need to update anything
223
+ this.endEditing();
224
+ return;
225
+ }
226
+
227
+ this._isSubmitting = true;
228
+
229
+ let recordUid = this.pageId;
230
+ if (this.localizedPageId > 0) {
231
+ recordUid = this.localizedPageId;
232
+ }
233
+
234
+ const parameters = {
235
+ data: {
236
+ pages: {
237
+ [recordUid]: {
238
+ title: newPageTitle
239
+ }
240
+ }
241
+ }
242
+ };
243
+
244
+ AjaxDataHandler.process(parameters).then((): void => {
245
+ this.pageTitle = newPageTitle;
246
+ top.document.dispatchEvent(new CustomEvent('typo3:pagetree:refresh'));
247
+ }).finally((): void => {
248
+ this.endEditing();
249
+ this._isSubmitting = false;
250
+ });
251
+ }
252
+
253
+ private composeEditButton(): TemplateResult {
254
+ return html`
255
+ <button
256
+ data-action="edit"
257
+ type="button"
258
+ title="${this.labels.edit}"
259
+ @click="${(): void => { this.startEditing(); }}"
260
+ >
261
+ <typo3-backend-icon identifier="actions-open" size="small"></typo3-backend-icon>
262
+ <span class="screen-reader">${this.labels.edit}</span>
263
+ </button>`;
264
+ }
265
+
266
+ private composeEditForm(): TemplateResult {
267
+ return html`
268
+ <form class="wrapper" @submit="${ this.updatePageTitle }">
269
+ <label class="screen-reader" for="input">${this.labels.input}</label>
270
+ <input
271
+ autocomplete="off"
272
+ id="input"
273
+ name="newPageTitle"
274
+ required
275
+ value="${this.pageTitle}"
276
+ ?disabled="${this._isSubmitting}"
277
+ @keydown="${(e: KeyboardEvent): void => { if (e.key === 'Escape') { this.endEditing(); } }}"
278
+ >
279
+ <button
280
+ data-action="save"
281
+ type="submit"
282
+ title="${this.labels.save}"
283
+ ?disabled="${this._isSubmitting}"
284
+ >
285
+ <typo3-backend-icon identifier="actions-check" size="small"></typo3-backend-icon>
286
+ <span class="screen-reader">${this.labels.save}</span>
287
+ </button>
288
+ <button
289
+ data-action="close"
290
+ type="button"
291
+ title="${this.labels.cancel}"
292
+ ?disabled="${this._isSubmitting}"
293
+ @click="${(): void => { this.endEditing(); }}"
294
+ >
295
+ <typo3-backend-icon identifier="actions-close" size="small"></typo3-backend-icon>
296
+ <span class="screen-reader">${this.labels.cancel}</span>
297
+ </button>
298
+ </form>`;
299
+ }
300
+ }
301
+
302
+ declare global {
303
+ interface HTMLElementTagNameMap {
304
+ 'typo3-backend-editable-page-title': EditablePageTitle;
305
+ }
306
+ }
@@ -0,0 +1,84 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, LitElement, type TemplateResult, nothing } from 'lit';
15
+ import { Task } from '@lit/task';
16
+ import { customElement, property } from 'lit/decorators';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+ import { Sizes, States, MarkupIdentifiers } from '../enum/icon-types';
19
+ import Icons, { IconStyles } from '../icons';
20
+ import '@typo3/backend/element/spinner-element';
21
+
22
+ /**
23
+ * Module: @typo3/backend/element/icon-element
24
+ *
25
+ * @example
26
+ * <typo3-backend-icon identifier="data-view-page" size="small"></typo3-backend-icon>
27
+ */
28
+ @customElement('typo3-backend-icon')
29
+ export class IconElement extends LitElement {
30
+ static override styles = IconStyles.getStyles();
31
+
32
+ @property({ type: String, reflect: true }) identifier: string;
33
+ @property({ type: String, reflect: true }) size: Sizes = Sizes.default;
34
+ @property({ type: String }) state: States = States.default;
35
+ @property({ type: String }) overlay: string = null;
36
+ @property({ type: String }) markup: MarkupIdentifiers = MarkupIdentifiers.inline;
37
+
38
+ /**
39
+ * @internal Usage of `raw` attribute is discouraged due to security implications.
40
+ *
41
+ * The `raw` attribute value will be rendered unescaped into DOM as raw html (.innerHTML = raw).
42
+ * That means it is the responsibility of the callee to ensure the HTML string does not contain
43
+ * user supplied strings.
44
+ * This attribute should therefore only be used to preserve backwards compatibility,
45
+ * and must not be used in new code or with user supplied strings.
46
+ * Use `identifier` attribute if ever possible instead.
47
+ */
48
+ @property({ type: String }) raw?: string = null;
49
+
50
+ private readonly iconTask = new Task(this, {
51
+ task: async ([identifier, size, overlay, state, markup]: [string, Sizes, States, string, MarkupIdentifiers], { signal }): Promise<string> => {
52
+ return await Icons.getIcon(identifier, size, overlay, state, markup, signal);
53
+ },
54
+ args: () => [this.identifier, this.size, this.overlay, this.state, this.markup]
55
+ });
56
+
57
+ protected override render(): TemplateResult | symbol {
58
+ if (this.raw) {
59
+ return html`${unsafeHTML(this.raw)}`;
60
+ }
61
+
62
+ if (!this.identifier) {
63
+ return nothing;
64
+ }
65
+
66
+ return this.iconTask.render({
67
+ pending: () => html`<typo3-backend-spinner size=${this.size}></typo3-backend-size>`,
68
+ complete: (markup) => html`${unsafeHTML(markup)}`,
69
+ error: () => html`
70
+ <span class="t3js-icon icon icon-size-${this.size} icon-state-${this.state} icon-default-not-found" data-identifier="default-not-found" aria-hidden="true">
71
+ <span class="icon-markup">
72
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 16 16"><g><path fill="#CD201F" d="m11 12 3-2v6H2v-6l3 2 3-2 3 2z"/><path fill="#212121" d="m8 10.3 2.86 1.91.14.09.14-.09 2.61-1.74v5.28H2.25v-5.28l2.61 1.74.14.09.14-.09L8 10.3m6-.3-3 2-3-2-3 2-3-2v6h12v-6z" opacity=".2"/><path fill="#CD201F" d="M14 4v4l-3 2-3-2-3 2-3-2V0h8l4 4z"/><path fill="#212121" d="M13.75 7.87 11 9.7 8.14 7.79 8 7.7l-.14.09L5 9.7 2.25 7.87V.25H10V0H2v8l3 2 3-2 3 2 3-2V4h-.25z" opacity=".2"/><path fill="#FFF" d="M14 4h-4V0l4 4z" opacity=".3"/><path fill="#212121" d="m14 8-4-4h4v4z" opacity=".3"/></g></svg>
73
+ </span>
74
+ </span>
75
+ `
76
+ });
77
+ }
78
+ }
79
+
80
+ declare global {
81
+ interface HTMLElementTagNameMap {
82
+ 'typo3-backend-icon': IconElement;
83
+ }
84
+ }
@@ -0,0 +1,89 @@
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 Utility from '@typo3/backend/utility';
15
+ import { EventDispatcher } from '@typo3/backend/event/event-dispatcher';
16
+
17
+ /**
18
+ * Module: @typo3/backend/element/immediate-action-element
19
+ *
20
+ * @example
21
+ * <typo3-immediate-action action="TYPO3.ModuleMenu.App.refreshMenu"></typo3-immediate-action>
22
+ *
23
+ * This is based on W3C custom elements ("web components") specification, see
24
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
25
+ */
26
+ export class ImmediateActionElement extends HTMLElement {
27
+ private action: string;
28
+ private args: any[] = [];
29
+
30
+ /**
31
+ * Observed attributes handled by `attributeChangedCallback`.
32
+ */
33
+ public static get observedAttributes(): string[] {
34
+ return ['action', 'args', 'args-list'];
35
+ }
36
+
37
+ private static async getDelegate(action: string): Promise<(...args: any[]) => void> {
38
+ switch (action) {
39
+ case 'TYPO3.ModuleMenu.App.refreshMenu':
40
+ const { default: moduleMenuApp } = await import('@typo3/backend/module-menu');
41
+ return moduleMenuApp.App.refreshMenu.bind(moduleMenuApp.App);
42
+ case 'TYPO3.Backend.Topbar.refresh':
43
+ const { default: viewportObject } = await import('@typo3/backend/viewport');
44
+ return viewportObject.Topbar.refresh.bind(viewportObject.Topbar);
45
+ case 'TYPO3.WindowManager.localOpen':
46
+ const { default: windowManager } = await import('@typo3/backend/window-manager');
47
+ return windowManager.localOpen.bind(windowManager);
48
+ case 'TYPO3.Backend.Storage.ModuleStateStorage.update':
49
+ return (await import('@typo3/backend/storage/module-state-storage')).ModuleStateStorage.update;
50
+ case 'TYPO3.Backend.Storage.ModuleStateStorage.updateWithCurrentMount':
51
+ return (await import('@typo3/backend/storage/module-state-storage')).ModuleStateStorage.updateWithCurrentMount;
52
+ case 'TYPO3.Backend.Event.EventDispatcher.dispatchCustomEvent':
53
+ return EventDispatcher.dispatchCustomEvent;
54
+ default:
55
+ throw Error('Unknown action "' + action + '"');
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Custom element life-cycle callback initializing attributes.
61
+ */
62
+ public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {
63
+ if (name === 'action') {
64
+ this.action = newValue;
65
+ } else if (name === 'args') {
66
+ // `&quot;` is the only literal of a PHP `json_encode` that needs to be substituted
67
+ // all other payload values are expected to be serialized to unicode literals
68
+ const json = newValue.replace(/&quot;/g, '"');
69
+ const args = JSON.parse(json);
70
+ this.args = args instanceof Array ? Utility.trimItems(args) : [];
71
+ } else if (name === 'args-list') {
72
+ const args = newValue.split(',');
73
+ this.args = Utility.trimItems(args);
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Custom element life-cycle callback triggered when element
79
+ * becomes available in document ("connected to DOM").
80
+ */
81
+ public connectedCallback(): void {
82
+ if (!this.action) {
83
+ throw new Error('Missing mandatory action attribute');
84
+ }
85
+ ImmediateActionElement.getDelegate(this.action).then((callback): void => callback(...this.args));
86
+ }
87
+ }
88
+
89
+ window.customElements.define('typo3-immediate-action', ImmediateActionElement);
@@ -0,0 +1,59 @@
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 { html, LitElement, type TemplateResult } from 'lit';
16
+ import { range } from 'lit/directives/range';
17
+ import { map } from 'lit/directives/map';
18
+ import { classMap } from 'lit/directives/class-map';
19
+
20
+ @customElement('typo3-backend-pagination')
21
+ export class PaginationElement extends LitElement {
22
+ @property({ type: Object })
23
+ public paging: Record<string, number> | null = null;
24
+
25
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
26
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
27
+ return this;
28
+ }
29
+
30
+ protected override render(): TemplateResult {
31
+ return html`
32
+ <ul class="pagination">
33
+ <li class=${classMap({ 'page-item': true, disabled: this.paging.currentPage === 1 })}>
34
+ <button type="button" class="page-link" data-action="previous" ?disabled=${this.paging.currentPage === 1}>
35
+ <typo3-backend-icon identifier="actions-view-paging-previous" size="small"></typo3-backend-icon>
36
+ </button>
37
+ </li>
38
+ ${map(range(1, this.paging.totalPages + 1), (page) => html`
39
+ <li class=${classMap({ 'page-item': true, active: this.paging.currentPage === page })}>
40
+ <button type="button" class="page-link" data-action="page" data-page=${page}>
41
+ <span>${page}</span>
42
+ </button>
43
+ </li>
44
+ `)}
45
+ <li class=${classMap({ 'page-item': true, disabled: this.paging.currentPage === this.paging.totalPages })}>
46
+ <button type="button" class="page-link" data-action="next" ?disabled=${this.paging.currentPage === this.paging.totalPages}>
47
+ <typo3-backend-icon identifier="actions-view-paging-next" size="small"></typo3-backend-icon>
48
+ </button>
49
+ </li>
50
+ </ul>
51
+ `;
52
+ }
53
+ }
54
+
55
+ declare global {
56
+ interface HTMLElementTagNameMap {
57
+ 'typo3-backend-pagination': PaginationElement;
58
+ }
59
+ }