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,165 @@
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 DocumentService from '@typo3/core/document-service';
15
+ /**
16
+ * Module: @typo3/backend/layout-module/paste
17
+ * Dynamically adds "Paste" Icons in the Page Layout module (Web => Page)
18
+ * and triggers a modal window. which then calls the AjaxDataHandler
19
+ * to execute the action to paste the current clipboard contents.
20
+ */
21
+ import DataHandler from '../ajax-data-handler';
22
+ import { default as Modal, type ModalElement, type Button } from '@typo3/backend/modal';
23
+ import Severity from '../severity';
24
+ import '@typo3/backend/element/icon-element';
25
+ import { SeverityEnum } from '../enum/severity';
26
+ import RegularEvent from '@typo3/core/event/regular-event';
27
+ import type ResponseInterface from '../ajax-data-handler/response-interface';
28
+
29
+ type PasteOptions = {
30
+ itemOnClipboardUid: number;
31
+ itemOnClipboardTitle: string;
32
+ copyMode: string;
33
+ };
34
+
35
+ class Paste {
36
+ private readonly itemOnClipboardUid: number = 0;
37
+ private readonly itemOnClipboardTitle: string = '';
38
+ private readonly copyMode: string = '';
39
+ private readonly elementIdentifier: string = '.t3js-page-ce';
40
+ private pasteAfterLinkTemplate: string = '';
41
+ private pasteIntoLinkTemplate: string = '';
42
+
43
+ /**
44
+ * initializes paste icons for all content elements on the page
45
+ */
46
+ constructor(args: PasteOptions) {
47
+ this.itemOnClipboardUid = args.itemOnClipboardUid;
48
+ this.itemOnClipboardTitle = args.itemOnClipboardTitle;
49
+ this.copyMode = args.copyMode;
50
+
51
+ DocumentService.ready().then((): void => {
52
+ if (document.querySelectorAll('.t3js-page-columns').length > 0) {
53
+ this.generateButtonTemplates();
54
+ this.activatePasteIcons();
55
+ this.initializeEvents();
56
+ }
57
+ });
58
+ }
59
+
60
+ private static determineColumn(element: HTMLElement): number {
61
+ const columnContainer = element.closest('[data-colpos]') as HTMLElement|null;
62
+ return parseInt(columnContainer?.dataset?.colpos ?? '0', 10);
63
+ }
64
+
65
+ private initializeEvents(): void
66
+ {
67
+ new RegularEvent('click', (evt: Event, target: HTMLElement): void => {
68
+ evt.preventDefault();
69
+
70
+ this.activatePasteModal(target);
71
+ }).delegateTo(document, '.t3js-paste');
72
+ }
73
+
74
+ private generateButtonTemplates(): void {
75
+ if (!this.itemOnClipboardUid) {
76
+ return;
77
+ }
78
+ this.pasteAfterLinkTemplate = '<button'
79
+ + ' type="button"'
80
+ + ' class="t3js-paste t3js-paste' + (this.copyMode ? '-' + this.copyMode : '') + ' t3js-paste-after btn btn-default btn-sm"'
81
+ + ' title="' + TYPO3.lang?.pasteAfterRecord + '">'
82
+ + '<typo3-backend-icon identifier="actions-document-paste-into" size="small"></typo3-backend-icon>'
83
+ + '</button>';
84
+ this.pasteIntoLinkTemplate = '<button'
85
+ + ' type="button"'
86
+ + ' class="t3js-paste t3js-paste' + (this.copyMode ? '-' + this.copyMode : '') + ' t3js-paste-into btn btn-default btn-sm"'
87
+ + ' title="' + TYPO3.lang?.pasteIntoColumn + '">'
88
+ + '<typo3-backend-icon identifier="actions-document-paste-into" size="small"></typo3-backend-icon>'
89
+ + '</button>';
90
+ }
91
+
92
+ /**
93
+ * activates the paste into / paste after icons outside the context menus
94
+ */
95
+ private activatePasteIcons(): void {
96
+ if (this.pasteAfterLinkTemplate && this.pasteIntoLinkTemplate) {
97
+ document.querySelectorAll('.t3js-page-new-ce').forEach((el: HTMLElement): void => {
98
+ const template = el.parentElement.dataset.page ? this.pasteIntoLinkTemplate : this.pasteAfterLinkTemplate;
99
+ el.append(document.createRange().createContextualFragment(template));
100
+ });
101
+ }
102
+ }
103
+
104
+ /**
105
+ * generates the paste into / paste after modal
106
+ */
107
+ private activatePasteModal(element: HTMLElement): void {
108
+ const title = (TYPO3.lang['paste.modal.title.paste'] || 'Paste record') + ': "' + this.itemOnClipboardTitle + '"';
109
+ const content = TYPO3.lang['paste.modal.paste'] || 'Do you want to paste the record to this position?';
110
+
111
+ let buttons: Array<Button> = [];
112
+ buttons = [
113
+ {
114
+ text: TYPO3.lang['paste.modal.button.cancel'] || 'Cancel',
115
+ active: true,
116
+ btnClass: 'btn-default',
117
+ trigger: (e: Event, modal: ModalElement): void => modal.hideModal(),
118
+ },
119
+ {
120
+ text: TYPO3.lang['paste.modal.button.paste'] || 'Paste',
121
+ btnClass: 'btn-' + Severity.getCssClass(SeverityEnum.warning),
122
+ trigger: (e: Event, modal: ModalElement): void => {
123
+ modal.hideModal();
124
+ this.execute(element);
125
+ },
126
+ },
127
+ ];
128
+
129
+ Modal.show(title, content, SeverityEnum.warning, buttons);
130
+ }
131
+
132
+ /**
133
+ * Send an AJAX request via the AjaxDataHandler
134
+ */
135
+ private execute(element: HTMLElement): void {
136
+ const colPos = Paste.determineColumn(element);
137
+ const closestElement = element.closest(this.elementIdentifier) as HTMLElement;
138
+ const targetFound = closestElement.dataset.uid;
139
+ let targetPid;
140
+ if (typeof targetFound === 'undefined') {
141
+ targetPid = parseInt(closestElement.dataset.page, 10);
142
+ } else {
143
+ targetPid = 0 - parseInt(targetFound, 10);
144
+ }
145
+ const language = parseInt((element.closest('[data-language-uid]') as HTMLElement).dataset.languageUid, 10);
146
+ const parameters = {
147
+ CB: {
148
+ paste: 'tt_content|' + targetPid,
149
+ pad: 'normal',
150
+ update: {
151
+ colPos: colPos,
152
+ sys_language_uid: language,
153
+ },
154
+ },
155
+ };
156
+
157
+ DataHandler.process(parameters).then((result: ResponseInterface): void => {
158
+ if (!result.hasErrors) {
159
+ window.location.reload();
160
+ }
161
+ });
162
+ }
163
+ }
164
+
165
+ export default Paste;
@@ -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 RegularEvent from '@typo3/core/event/regular-event';
15
+
16
+ export interface LinkAttributes {
17
+ [s: string]: any;
18
+ }
19
+
20
+ export interface LinkBrowserFieldChangeFunc {
21
+ name: string;
22
+ data: Record<string, string>;
23
+ }
24
+
25
+ export interface LinkBrowserParameters {
26
+ table: string;
27
+ uid: string;
28
+ pid: string;
29
+ field?: string;
30
+ fieldName?: string;
31
+ formName?: string;
32
+ itemName?: string;
33
+ hmac?: string;
34
+ recordType?: string;
35
+ richtextConfigurationName?: string;
36
+ fieldChangeFunc?:LinkBrowserFieldChangeFunc[];
37
+ fieldChangeFuncHash?: string;
38
+ curUrl?: Record<string, string>,
39
+ currentValue?: string;
40
+ currentSelectedValues?: string;
41
+ }
42
+
43
+ /**
44
+ * Module: @typo3/backend/link-browser
45
+ * @exports @typo3/backend/link-browser
46
+ */
47
+ class LinkBrowser {
48
+ public parameters: LinkBrowserParameters;
49
+ private readonly linkAttributeFields: LinkAttributes;
50
+
51
+ constructor() {
52
+ this.parameters = JSON.parse(document.body.dataset.linkbrowserParameters || '{}');
53
+ this.linkAttributeFields = JSON.parse(document.body.dataset.linkbrowserAttributeFields || '{}');
54
+
55
+ new RegularEvent('click', (event: PointerEvent): void => {
56
+ event.preventDefault();
57
+ this.finalizeFunction(document.body.dataset.linkbrowserCurrentLink);
58
+ }).delegateTo(document, 'button.t3js-linkCurrent');
59
+
60
+ new RegularEvent('change', this.loadTarget)
61
+ .delegateTo(document, '.t3js-targetPreselect');
62
+ }
63
+
64
+ public getLinkAttributeValues(): LinkAttributes {
65
+ const linkAttributeValues: LinkAttributes = {};
66
+ for (const fieldName of this.linkAttributeFields.values()) {
67
+ const linkAttribute: HTMLInputElement = document.querySelector('[name="l' + fieldName + '"]');
68
+ if (linkAttribute !== null) {
69
+ linkAttributeValues[fieldName] = linkAttribute.value;
70
+ }
71
+ }
72
+
73
+ return linkAttributeValues;
74
+ }
75
+
76
+ public loadTarget(this: HTMLSelectElement): void {
77
+ const linkTarget: HTMLInputElement = document.querySelector('.t3js-linkTarget');
78
+ if (linkTarget !== null) {
79
+ linkTarget.value = this.value;
80
+ this.selectedIndex = 0;
81
+ }
82
+ }
83
+
84
+ public finalizeFunction(link: string): void {
85
+ throw 'The link browser requires the finalizeFunction to be set in order for ' + link + ' to be handled. Seems like you discovered a major bug.';
86
+ }
87
+ }
88
+
89
+ export default new LinkBrowser();
@@ -0,0 +1,34 @@
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 } from 'lit/decorators';
15
+ import { LitElement } from 'lit';
16
+
17
+ /**
18
+ * Module: @typo3/backend/live-search/element/backend-search
19
+ * Simple wrapper element around search container
20
+ * @exports @typo3/backend/live-search/element/backend-search
21
+ */
22
+ @customElement('typo3-backend-live-search')
23
+ export class BackendSearch extends LitElement {
24
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
25
+ // Avoid shadow DOM for Bootstrap CSS to be applied
26
+ return this;
27
+ }
28
+ }
29
+
30
+ declare global {
31
+ interface HTMLElementTagNameMap {
32
+ 'typo3-backend-live-search': BackendSearch;
33
+ }
34
+ }
@@ -0,0 +1,33 @@
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 { markdown } from '@typo3/core/directive/markdown';
17
+ import '@typo3/backend/element/icon-element';
18
+
19
+ @customElement('typo3-backend-live-search-hint')
20
+ export class Hint extends LitElement {
21
+ @property({ type: String }) hint: string;
22
+
23
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
24
+ return this;
25
+ }
26
+
27
+ protected override render(): TemplateResult | symbol {
28
+ if (this.hint === '') {
29
+ return nothing;
30
+ }
31
+ return html`<typo3-backend-icon identifier="actions-lightbulb-on" size="small"></typo3-backend-icon> ${markdown(this.hint, 'minimal')}`;
32
+ }
33
+ }
@@ -0,0 +1,52 @@
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 '@typo3/backend/element/icon-element';
17
+ import { lll } from '@typo3/core/lit-helper';
18
+
19
+ @customElement('typo3-backend-live-search-result-item-default')
20
+ export class DefaultProviderResultItem extends LitElement {
21
+ @property({ type: Object, attribute: false }) icon: Record<string, string>;
22
+ @property({ type: String, attribute: false }) itemTitle: string;
23
+ @property({ type: String, attribute: false }) typeLabel: string;
24
+ @property({ type: Object, attribute: false }) extraData: { [key: string]: any };
25
+
26
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
27
+ // Avoid shadow DOM for Bootstrap CSS to be applied
28
+ return this;
29
+ }
30
+
31
+ protected override render(): TemplateResult {
32
+ return html`
33
+ <div class="livesearch-result-item-icon">
34
+ <typo3-backend-icon title="${this.icon.title}" identifier="${this.icon.identifier}" overlay="${this.icon.overlay}" size="small"></typo3-backend-icon>
35
+ </div>
36
+ <div class="livesearch-result-item-summary">
37
+ <div class="livesearch-result-item-title">
38
+ <div class="livesearch-result-item-title-contentlabel">${this.itemTitle}</div>
39
+ ${this.extraData.inWorkspace ? html`<div class="livesearch-result-item-title-indicator"><typo3-backend-icon title="${lll('liveSearch.versionizedRecord')}" identifier="actions-dot" size="small" class="text-warning"></typo3-backend-icon></div>` : nothing}
40
+ </div>
41
+ ${this.extraData.breadcrumb !== undefined ? html`<small>${this.extraData.breadcrumb}</small>` : nothing}
42
+ </div>
43
+
44
+ `;
45
+ }
46
+ }
47
+
48
+ declare global {
49
+ interface HTMLElementTagNameMap {
50
+ 'typo3-backend-live-search-result-item-default': DefaultProviderResultItem;
51
+ }
52
+ }
@@ -0,0 +1,52 @@
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 '@typo3/backend/element/icon-element';
17
+ import { lll } from '@typo3/core/lit-helper';
18
+
19
+ @customElement('typo3-backend-live-search-result-item-page-provider')
20
+ export default class PageProviderResultItem extends LitElement {
21
+ @property({ type: Object, attribute: false }) icon: Record<string, string>;
22
+ @property({ type: String, attribute: false }) itemTitle: string;
23
+ @property({ type: String, attribute: false }) typeLabel: string;
24
+ @property({ type: Object, attribute: false }) extraData: { [key: string]: any };
25
+
26
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
27
+ // Avoid shadow DOM for Bootstrap CSS to be applied
28
+ return this;
29
+ }
30
+
31
+ protected override render(): TemplateResult {
32
+ return html`
33
+ <div class="livesearch-result-item-icon">
34
+ <typo3-backend-icon title="${this.icon.title}" identifier="${this.icon.identifier}" overlay="${this.icon.overlay}" size="small"></typo3-backend-icon>
35
+ <typo3-backend-icon title="${this.extraData.flagIcon.title}" identifier="${this.extraData.flagIcon.identifier}" size="small"></typo3-backend-icon>
36
+ </div>
37
+ <div class="livesearch-result-item-summary">
38
+ <div class="livesearch-result-item-title">
39
+ <div class="livesearch-result-item-title-contentlabel">${this.itemTitle}</div>
40
+ ${this.extraData.inWorkspace ? html`<div class="livesearch-result-item-title-indicator"><typo3-backend-icon title="${lll('liveSearch.versionizedRecord')}" identifier="actions-dot" size="small" class="text-warning"></typo3-backend-icon></div>` : nothing}
41
+ </div>
42
+ <small>${this.extraData.breadcrumb}</small>
43
+ </div>
44
+ `;
45
+ }
46
+ }
47
+
48
+ declare global {
49
+ interface HTMLElementTagNameMap {
50
+ 'typo3-backend-live-search-result-item-page-provider': PageProviderResultItem;
51
+ }
52
+ }
@@ -0,0 +1,135 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { css, html, LitElement, type TemplateResult } from 'lit';
17
+ import { type Action } from './action';
18
+ import type { ResultItemActionInterface, ResultItemInterface } from '../item';
19
+ import type { InvokeActionEventData } from '@typo3/backend/live-search/element/result/result-container';
20
+
21
+ export const componentName = 'typo3-backend-live-search-result-item-action-container';
22
+
23
+ @customElement('typo3-backend-live-search-result-item-action-container')
24
+ export class ActionContainer extends LitElement {
25
+ @property({ type: Object, attribute: false }) resultItem: ResultItemInterface|null = null;
26
+
27
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
28
+ // Avoid shadow DOM for Bootstrap CSS to be applied
29
+ return this;
30
+ }
31
+
32
+ protected override render(): TemplateResult {
33
+ return html`<typo3-backend-live-search-result-action-list>
34
+ ${this.resultItem.actions.map((action: ResultItemActionInterface) => this.renderActionItem(this.resultItem, action))}
35
+ </typo3-backend-live-search-result-action-list>`;
36
+ }
37
+
38
+ private renderActionItem(resultItem: ResultItemInterface, action: ResultItemActionInterface): TemplateResult {
39
+ return html`<typo3-backend-live-search-result-item-action
40
+ .resultItem="${resultItem}"
41
+ .resultItemAction="${action}"
42
+ @click="${() => this.invokeAction(this.resultItem, action)}">
43
+ </typo3-backend-live-search-result-item-action>`;
44
+ }
45
+
46
+ private invokeAction(resultItem: ResultItemInterface, action: ResultItemActionInterface): void {
47
+ this.closest('typo3-backend-live-search-result-container').dispatchEvent(new CustomEvent<InvokeActionEventData>('livesearch:invoke-action', {
48
+ detail: {
49
+ resultItem: resultItem,
50
+ action: action
51
+ }
52
+ }));
53
+ }
54
+ }
55
+
56
+ @customElement('typo3-backend-live-search-result-action-list')
57
+ export class ActionList extends LitElement {
58
+ static override styles = css`
59
+ :host {
60
+ display: block;
61
+ }
62
+ `;
63
+
64
+ private parentContainer: HTMLElement;
65
+ private resultItemContainer: HTMLElement;
66
+
67
+ public override async connectedCallback(): Promise<void> {
68
+ await DocumentService.ready();
69
+ this.parentContainer = this.closest('typo3-backend-live-search-result-container');
70
+ this.resultItemContainer = this.parentContainer.querySelector('typo3-backend-live-search-result-item-container');
71
+
72
+ super.connectedCallback();
73
+ this.addEventListener('keydown', this.handleKeyDown);
74
+ this.addEventListener('keyup', this.handleKeyUp);
75
+ }
76
+
77
+ public override disconnectedCallback(): void {
78
+ this.removeEventListener('keydown', this.handleKeyDown);
79
+ this.removeEventListener('keyup', this.handleKeyUp);
80
+
81
+ super.disconnectedCallback();
82
+ }
83
+
84
+ protected override render(): TemplateResult {
85
+ return html`<slot></slot>`;
86
+ }
87
+
88
+ private handleKeyDown(e: KeyboardEvent): void {
89
+ if (!['ArrowDown', 'ArrowUp', 'ArrowLeft'].includes(e.key)) {
90
+ return;
91
+ }
92
+ if (document.activeElement.tagName.toLowerCase() !== 'typo3-backend-live-search-result-item-action') {
93
+ return;
94
+ }
95
+
96
+ e.preventDefault();
97
+
98
+ let focusableCandidate;
99
+ if (e.key === 'ArrowDown') {
100
+ focusableCandidate = document.activeElement.nextElementSibling;
101
+ } else if (e.key === 'ArrowUp') {
102
+ focusableCandidate = document.activeElement.previousElementSibling;
103
+ } else if (e.key === 'ArrowLeft') {
104
+ focusableCandidate = this.resultItemContainer.querySelector('typo3-backend-live-search-result-item.active');
105
+ }
106
+
107
+ if (focusableCandidate !== null) {
108
+ (focusableCandidate as HTMLElement).focus();
109
+ }
110
+ }
111
+
112
+ private handleKeyUp(e: KeyboardEvent): void {
113
+ // @todo Enter should (probably) be handled in keydown, like buttons do
114
+ if (!['Enter', ' '].includes(e.key)) {
115
+ return;
116
+ }
117
+
118
+ e.preventDefault();
119
+
120
+ const actionElement = e.target as Action;
121
+ this.parentContainer.dispatchEvent(new CustomEvent<InvokeActionEventData>('livesearch:invoke-action', {
122
+ detail: {
123
+ resultItem: actionElement.resultItem,
124
+ action: actionElement.resultItemAction
125
+ }
126
+ }));
127
+ }
128
+ }
129
+
130
+ declare global {
131
+ interface HTMLElementTagNameMap {
132
+ 'typo3-backend-live-search-result-item-action-container': ActionContainer;
133
+ 'typo3-backend-live-search-result-action-list': ActionList;
134
+ }
135
+ }
@@ -0,0 +1,56 @@
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 { ifDefined } from 'lit/directives/if-defined';
16
+ import { html, LitElement, type TemplateResult } from 'lit';
17
+ import '@typo3/backend/element/icon-element';
18
+ import type { ResultItemActionInterface, ResultItemInterface } from '../item';
19
+
20
+ @customElement('typo3-backend-live-search-result-item-action')
21
+ export class Action extends LitElement {
22
+ @property({ type: Object, attribute: false }) resultItem: ResultItemInterface;
23
+ @property({ type: Object, attribute: false }) resultItemAction: ResultItemActionInterface;
24
+
25
+ public override connectedCallback(): void {
26
+ super.connectedCallback();
27
+
28
+ if (!this.hasAttribute('tabindex')) {
29
+ this.setAttribute('tabindex', '0');
30
+ }
31
+ }
32
+
33
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
34
+ // Avoid shadow DOM for Bootstrap CSS to be applied
35
+ return this;
36
+ }
37
+
38
+ protected override render(): TemplateResult {
39
+ return html`
40
+ <div>
41
+ <div class="livesearch-result-item-icon">
42
+ <typo3-backend-icon identifier="${ifDefined(this.resultItemAction.icon.identifier || 'actions-arrow-right')}" overlay="${this.resultItemAction.icon.overlay}" size="small"></typo3-backend-icon>
43
+ </div>
44
+ <div class="livesearch-result-item-title">
45
+ ${this.resultItemAction.label}
46
+ </div>
47
+ </div>
48
+ `;
49
+ }
50
+ }
51
+
52
+ declare global {
53
+ interface HTMLElementTagNameMap {
54
+ 'typo3-backend-live-search-result-item-action': Action;
55
+ }
56
+ }