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,232 @@
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 { AjaxResponse } from '@typo3/core/ajax/ajax-response';
15
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
16
+ import DocumentService from '@typo3/core/document-service';
17
+ import Modal from '@typo3/backend/modal';
18
+ import Utility from '@typo3/backend/utility';
19
+ import Workspaces from './workspaces';
20
+ import ThrottleEvent from '@typo3/core/event/throttle-event';
21
+ import '@typo3/workspaces/renderable/send-to-stage-form';
22
+ import RegularEvent from '@typo3/core/event/regular-event';
23
+
24
+ enum Identifiers {
25
+ topbar = '.t3js-workspace-topbar',
26
+ stageSliderContainer = '.t3js-stage-slider-container',
27
+ stageSlider = '.t3js-stage-slider',
28
+ liveView = '.t3js-workspace-view-live',
29
+ workspaceView = '.t3js-workspace-view-workspace',
30
+ sendToStageAction = '[data-action="send-to-stage"]',
31
+ discardAction = '[data-action="discard"]',
32
+ stageButtonsContainer = '.t3js-stage-buttons',
33
+ previewModeContainer = '.t3js-preview-mode',
34
+ activePreviewMode = '.t3js-active-preview-mode',
35
+ workspacePreview = '.t3js-workspace-preview',
36
+ }
37
+
38
+ /**
39
+ * Loaded in "Frontend workspace preview". Contains JS for "Send to stage ..." / "Discard"
40
+ * buttons, preview mode selector, preview slider and so on.
41
+ */
42
+ class Preview extends Workspaces {
43
+ private currentSlidePosition: number = 100;
44
+ private readonly elements: { [key: string]: HTMLElement } = {};
45
+
46
+ constructor() {
47
+ super();
48
+
49
+ DocumentService.ready().then((): void => {
50
+ this.getElements();
51
+ this.resizeViews();
52
+ this.registerEvents();
53
+ this.initStageButtons();
54
+ });
55
+ }
56
+
57
+ /**
58
+ * Fetches and stores often required elements
59
+ */
60
+ private getElements(): void {
61
+ this.elements.liveView = document.querySelector(Identifiers.liveView) as HTMLElement;
62
+ this.elements.stageSliderContainer = document.querySelector(Identifiers.stageSliderContainer) as HTMLElement;
63
+ this.elements.stageSlider = document.querySelector(Identifiers.stageSlider) as HTMLElement;
64
+ this.elements.workspaceView = document.querySelector(Identifiers.workspaceView) as HTMLElement;
65
+ this.elements.stageButtonsContainer = document.querySelector(Identifiers.stageButtonsContainer) as HTMLElement;
66
+ this.elements.previewModeContainer = document.querySelector(Identifiers.previewModeContainer) as HTMLElement;
67
+ this.elements.activePreviewMode = document.querySelector(Identifiers.activePreviewMode) as HTMLElement;
68
+ this.elements.workspacePreview = document.querySelector(Identifiers.workspacePreview) as HTMLElement;
69
+ }
70
+
71
+ /**
72
+ * Registers the events
73
+ */
74
+ private registerEvents(): void {
75
+ new ThrottleEvent('resize', (): void => {
76
+ this.resizeViews();
77
+ }, 50).bindTo(window);
78
+ new RegularEvent('click', this.renderDiscardWindow.bind(this)).delegateTo(document, Identifiers.discardAction);
79
+ new RegularEvent('click', this.renderSendPageToStageWindow.bind(this)).delegateTo(document, Identifiers.sendToStageAction);
80
+ new RegularEvent('click', () => {
81
+ window.top.document.querySelectorAll('.t3js-workspace-recipient:not([disabled])').forEach((element: HTMLInputElement) => {
82
+ element.checked = true;
83
+ });
84
+ }).delegateTo(document, '.t3js-workspace-recipients-selectall');
85
+ new RegularEvent('click', () => {
86
+ window.top.document.querySelectorAll('.t3js-workspace-recipient:not([disabled])').forEach((element: HTMLInputElement) => {
87
+ element.checked = false;
88
+ });
89
+ }).delegateTo(document, '.t3js-workspace-recipients-deselectall');
90
+
91
+ new ThrottleEvent('input', this.updateSlidePosition.bind(this), 10).bindTo(document.querySelector(Identifiers.stageSlider));
92
+ new RegularEvent('click', this.changePreviewMode.bind(this)).delegateTo(this.elements.previewModeContainer, '[data-preview-mode]');
93
+ }
94
+
95
+ private initStageButtons(): void {
96
+ this.sendRemoteRequest([
97
+ this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
98
+ ], Identifiers.topbar).then(async (response: AjaxResponse): Promise<void> => {
99
+ this.renderStageButtons((await response.resolve())[0].result);
100
+ });
101
+ }
102
+
103
+ /**
104
+ * Renders the staging buttons
105
+ */
106
+ private renderStageButtons(buttons: string): void {
107
+ this.elements.stageButtonsContainer.innerHTML = buttons;
108
+ }
109
+
110
+ /**
111
+ * Updates the position of the comparison slider
112
+ */
113
+ private updateSlidePosition(e: Event): void {
114
+ this.currentSlidePosition = parseInt((e.target as HTMLInputElement).value, 10);
115
+ this.resizeViews();
116
+ }
117
+
118
+ /**
119
+ * Resize the views based on the current viewport height and slider position
120
+ */
121
+ private resizeViews(): void {
122
+ if (this.elements.activePreviewMode.dataset.activePreviewMode === 'slider') {
123
+ this.elements.liveView.style.height = (100 - this.currentSlidePosition) + '%';
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Renders the discard window
129
+ */
130
+ private renderDiscardWindow(): void {
131
+ const modal = Modal.confirm(
132
+ TYPO3.lang['window.discardAll.title'],
133
+ TYPO3.lang['window.discardAll.message'],
134
+ SeverityEnum.warning,
135
+ [
136
+ {
137
+ text: TYPO3.lang.cancel,
138
+ active: true,
139
+ btnClass: 'btn-default',
140
+ name: 'cancel',
141
+ trigger: (): void => {
142
+ modal.hideModal();
143
+ },
144
+ },
145
+ {
146
+ text: TYPO3.lang.ok,
147
+ btnClass: 'btn-warning',
148
+ name: 'ok',
149
+ },
150
+ ],
151
+ );
152
+ modal.addEventListener('button.clicked', (e: Event): void => {
153
+ if ((e.target as HTMLButtonElement).name === 'ok') {
154
+ this.sendRemoteRequest([
155
+ this.generateRemoteActionsPayload('discardStagesFromPage', [TYPO3.settings.Workspaces.id]),
156
+ this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
157
+ ], Identifiers.topbar).then(async (response: AjaxResponse): Promise<void> => {
158
+ modal.hideModal();
159
+ this.renderStageButtons((await response.resolve())[1].result);
160
+ // Reloading live view IFRAME
161
+ this.elements.workspaceView.setAttribute('src', this.elements.workspaceView.getAttribute('src'));
162
+ });
163
+ }
164
+ });
165
+ }
166
+
167
+ /**
168
+ * Renders the "send page to stage" window
169
+ */
170
+ private renderSendPageToStageWindow(e: Event, target: HTMLElement): void {
171
+ const direction = target.dataset.direction;
172
+ let actionName;
173
+
174
+ if (direction === 'prev') {
175
+ actionName = 'sendPageToPreviousStage';
176
+ } else if (direction === 'next') {
177
+ actionName = 'sendPageToNextStage';
178
+ } else {
179
+ throw 'Invalid direction ' + direction + ' requested.';
180
+ }
181
+
182
+ this.sendRemoteRequest(
183
+ this.generateRemoteActionsPayload(actionName, [TYPO3.settings.Workspaces.id]),
184
+ Identifiers.topbar
185
+ ).then(async (response: AjaxResponse): Promise<void> => {
186
+ const resolvedResponse = await response.resolve();
187
+ const modal = this.renderSendToStageWindow(resolvedResponse);
188
+ modal.addEventListener('button.clicked', (modalEvent: Event): void => {
189
+ const modalTarget = modalEvent.target as HTMLButtonElement;
190
+ if (modalTarget.name === 'ok') {
191
+ const serializedForm = Utility.convertFormToObject(modal.querySelector('form'));
192
+ serializedForm.affects = resolvedResponse[0].result.affects;
193
+ serializedForm.stageId = parseInt(target.dataset.stageId, 10);
194
+
195
+ this.sendRemoteRequest([
196
+ this.generateRemoteActionsPayload('sentCollectionToStage', [serializedForm]),
197
+ this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
198
+ ], Identifiers.topbar).then(async (updateResponse: AjaxResponse): Promise<void> => {
199
+ modal.hideModal();
200
+
201
+ this.renderStageButtons((await updateResponse.resolve())[1].result);
202
+ });
203
+ }
204
+ });
205
+ });
206
+ }
207
+
208
+ /**
209
+ * Changes the preview mode
210
+ */
211
+ private changePreviewMode(e: Event, target: HTMLElement): void {
212
+ e.preventDefault();
213
+
214
+ const currentPreviewMode = this.elements.activePreviewMode.dataset.activePreviewMode;
215
+ const newPreviewMode = target.dataset.previewMode;
216
+
217
+ this.elements.activePreviewMode.textContent = target.textContent;
218
+ this.elements.activePreviewMode.dataset.activePreviewMode = newPreviewMode;
219
+ this.elements.workspacePreview.classList.remove('typo3-workspace-preview-' + currentPreviewMode);
220
+ this.elements.workspacePreview.classList.add('typo3-workspace-preview-' + newPreviewMode);
221
+
222
+ if (newPreviewMode === 'slider') {
223
+ this.elements.stageSliderContainer.style.display = '';
224
+ this.resizeViews();
225
+ } else {
226
+ this.elements.stageSliderContainer.style.display = 'none';
227
+ this.elements.liveView.style.height = '';
228
+ }
229
+ }
230
+ }
231
+
232
+ export default new Preview();
@@ -0,0 +1,79 @@
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, nothing, type TemplateResult } from 'lit';
16
+ import { repeat } from 'lit/directives/repeat';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+ import { nl2br } from '@typo3/core/directive/nl2br';
19
+
20
+ type Comment = {
21
+ user_comment: string;
22
+ previous_stage_title: string;
23
+ stage_title: string;
24
+ tstamp: number;
25
+ user_username: string;
26
+ user_avatar: string
27
+ };
28
+
29
+ @customElement('typo3-workspaces-comment-view')
30
+ export class CommentViewElement extends LitElement {
31
+ @property({ type: Array })
32
+ public comments: Comment[] = [];
33
+
34
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
35
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
36
+ return this;
37
+ }
38
+
39
+ protected override render(): TemplateResult {
40
+ return html`
41
+ <div>
42
+ ${repeat(this.comments, (comment) => comment.tstamp, (comment) => this.renderComment(comment))}
43
+ </div>
44
+ `;
45
+ }
46
+
47
+ protected renderComment(comment: Comment): TemplateResult {
48
+ return html`
49
+ <div class="media">
50
+ <div class="media-left text-center">
51
+ <div>
52
+ ${unsafeHTML(comment.user_avatar)}
53
+ </div>
54
+ ${comment.user_username}
55
+ </div>
56
+ <div class="panel panel-default">
57
+ ${comment.user_comment ? html`
58
+ <div class="panel-body">
59
+ ${nl2br(comment.user_comment)}
60
+ </div>
61
+ ` : nothing}
62
+ <div class="panel-footer">
63
+ <span class="badge badge-success me-2">
64
+ ${comment.previous_stage_title} ⇾ ${comment.stage_title}
65
+ </span>
66
+ <span class="badge badge-info">
67
+ ${comment.tstamp}
68
+ </div>
69
+ </div>
70
+ </div>
71
+ `;
72
+ }
73
+ }
74
+
75
+ declare global {
76
+ interface HTMLElementTagNameMap {
77
+ 'typo3-workspaces-comment-view': CommentViewElement;
78
+ }
79
+ }
@@ -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 { customElement, property } from 'lit/decorators';
15
+ import { html, LitElement, type TemplateResult } from 'lit';
16
+ import { repeat } from 'lit/directives/repeat';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+
19
+ export type Diff = {
20
+ field: string,
21
+ label: string,
22
+ content: string,
23
+ html: string
24
+ };
25
+
26
+ @customElement('typo3-workspaces-diff-view')
27
+ export class DiffViewElement extends LitElement {
28
+ @property({ type: Array })
29
+ public diffs: Diff[] = [];
30
+
31
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
32
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
33
+ return this;
34
+ }
35
+
36
+ protected override render(): TemplateResult {
37
+ return html`
38
+ <div class="diff">
39
+ ${repeat(this.diffs, (diff) => diff.field, (diff) => this.renderDiffItem(diff))}
40
+ </div>
41
+ `;
42
+ }
43
+
44
+ protected renderDiffItem(diff: Diff) {
45
+ return html`
46
+ <div class="diff-item">
47
+ <div class="diff-item-title">${diff.label}</div>
48
+ <div class="diff-item-result">${unsafeHTML(diff.content)}</div>
49
+ </div>
50
+ `;
51
+ }
52
+ }
53
+
54
+ declare global {
55
+ interface HTMLElementTagNameMap {
56
+ 'typo3-workspaces-diff-view': DiffViewElement;
57
+ }
58
+ }
@@ -0,0 +1,97 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General 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, nothing, type TemplateResult } from 'lit';
16
+ import { repeat } from 'lit/directives/repeat';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+ import type { Diff } from './diff-view';
19
+
20
+ type History = {
21
+ differences: string | Diff[];
22
+ datetime: string;
23
+ user: string;
24
+ user_avatar: string;
25
+ };
26
+
27
+ @customElement('typo3-workspaces-history-view')
28
+ export class HistoryViewElement extends LitElement {
29
+ @property({ type: Array })
30
+ public historyItems: History[] = [];
31
+
32
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
33
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
34
+ return this;
35
+ }
36
+
37
+ protected override render(): TemplateResult {
38
+ return html`
39
+ <div>
40
+ ${repeat(this.historyItems, (historyItem) => historyItem.datetime, (historyItem) => this.renderHistoryItem(historyItem))}
41
+ </div>
42
+ `;
43
+ }
44
+
45
+ protected renderHistoryItem(historyItem: History): TemplateResult|typeof nothing {
46
+ if (typeof historyItem.differences === 'object' && historyItem.differences.length === 0) {
47
+ return nothing;
48
+ }
49
+
50
+ return html`
51
+ <div class="media">
52
+ <div class="media-left text-center">
53
+ <div>
54
+ ${unsafeHTML(historyItem.user_avatar)}
55
+ </div>
56
+ ${historyItem.user}
57
+ </div>
58
+ <div class="media-body">
59
+ <div class="panel panel-default">
60
+ ${typeof historyItem.differences === 'object' ? html`
61
+ <div>
62
+ <div class="diff">
63
+ ${repeat(historyItem.differences, (diff) => diff, (diff) => html`
64
+ <div class="diff-item">
65
+ <div class="diff-item-title">
66
+ ${diff.label}
67
+ </div>
68
+ <div class="diff-item-result diff-item-result-inline">
69
+ ${unsafeHTML(diff.html)}
70
+ </div>
71
+ </div>
72
+ `)}
73
+ </div>
74
+ </div>
75
+ ` : html`
76
+ <div class="panel-body">
77
+ ${historyItem.differences}
78
+ </div>
79
+ `}
80
+ <div class="panel-footer">
81
+ <span class="badge badge-info">
82
+ ${historyItem.datetime}
83
+ </span>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ `;
89
+ }
90
+ }
91
+
92
+ declare global {
93
+ interface HTMLElementTagNameMap {
94
+ 'typo3-workspaces-history-view': HistoryViewElement;
95
+ }
96
+ }
97
+
@@ -0,0 +1,118 @@
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, nothing } from 'lit';
16
+ import type { Diff } from './diff-view';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+ import '@typo3/workspaces/renderable/diff-view';
19
+ import '@typo3/workspaces/renderable/comment-view';
20
+ import '@typo3/workspaces/renderable/history-view';
21
+
22
+ type RecordInformation = {
23
+ path_Live: string,
24
+ label_Stage: string,
25
+ label_NextStage: {
26
+ title: string
27
+ },
28
+ label_PrevStage: {
29
+ title: string
30
+ },
31
+ diff: Diff[],
32
+ comments: Comment[],
33
+ history: {
34
+ data: History[]
35
+ },
36
+ stage_position: string,
37
+ stage_count: string
38
+ };
39
+
40
+ @customElement('typo3-workspaces-record-information')
41
+ export class RecordInformationElement extends LitElement {
42
+ @property({ type: Object })
43
+ public record: RecordInformation;
44
+
45
+ @property({ type: Object })
46
+ public TYPO3lang: typeof TYPO3.lang | null = null;
47
+
48
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
49
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
50
+ return this;
51
+ }
52
+
53
+ protected override render() {
54
+ return html`
55
+ <div>
56
+ <p>${unsafeHTML(this.TYPO3lang.path.replace('{0}', this.record.path_Live))}</p>
57
+ <p>${unsafeHTML(this.TYPO3lang.current_step.replace('{0}', this.record.label_Stage).replace('{1}', this.record.stage_position).replace('{2}', this.record.stage_count))}</p>
58
+ <ul class="nav nav-tabs" role="tablist">
59
+ ${ this.record.diff.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.changeSummary'], '#workspace-changes') : nothing}
60
+ ${ this.record.comments.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.changeSummary'], '#workspace-comments', this.record.comments.length) : nothing}
61
+ ${ this.record.history.data.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.history'], '#workspace-history') : nothing}
62
+ </ul>
63
+ <div class="tab-content">
64
+ ${ this.record.diff.length > 0 ? html`
65
+ <div class="tab-pane" id="workspace-changes" role="tabpanel">
66
+ <div class="form-section">
67
+ <typo3-workspaces-diff-view .diffs=${this.record.diff}></typo3-workspaces-diff-view>
68
+ </div>
69
+ </div>
70
+ ` : nothing}
71
+ ${ this.record.comments.length > 0 ? html`
72
+ <div class="tab-pane" id="workspace-comments" role="tabpanel">
73
+ <div class="form-section">
74
+ <typo3-workspaces-comment-view .comments=${this.record.comments}></typo3-workspaces-comment-view>
75
+ </div>
76
+ </div>
77
+ ` : nothing}
78
+ ${ this.record.history.data.length > 0 ? html`
79
+ <div class="tab-pane" id="workspace-history" role="tabpanel">
80
+ <div class="form-section">
81
+ <typo3-workspaces-history-view .historyItems=${this.record.history.data}></typo3-workspaces-history-view>
82
+ </div>
83
+ </div>
84
+ ` : nothing}
85
+ </div>
86
+ </div>
87
+ `;
88
+ }
89
+
90
+ protected renderNavLink(text: string, target: string, count: number = 0) {
91
+ return html`
92
+ <li class="nav-item" role="presentation">
93
+ <button
94
+ type="button"
95
+ class="nav-link"
96
+ data-bs-toggle="tab"
97
+ data-bs-target="${target}"
98
+ aria-controls="${target}"
99
+ role="tab"
100
+ >
101
+ ${text}
102
+ ${count > 0 ? html`<span class="badge">${count}</span>` : nothing}
103
+ </button>
104
+ </li>
105
+ `;
106
+ }
107
+
108
+ protected override firstUpdated(): void {
109
+ this.renderRoot.querySelector('.nav-link').classList.add('active');
110
+ this.renderRoot.querySelector('.tab-pane').classList.add('active');
111
+ }
112
+ }
113
+
114
+ declare global {
115
+ interface HTMLElementTagNameMap {
116
+ 'typo3-workspaces-record-information': RecordInformationElement;
117
+ }
118
+ }