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,81 @@
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 { ImmediateActionElement } from '@typo3/backend/element/immediate-action-element.js';
15
+ import moduleMenuApp from '@typo3/backend/module-menu.js';
16
+ import viewportObject from '@typo3/backend/viewport.js';
17
+ import { expect } from '@open-wc/testing';
18
+ import { stub } from 'sinon';
19
+ import type { } from 'mocha';
20
+
21
+ describe('@typo3/backend/element/immediate-action-element', () => {
22
+ let root: HTMLElement; // This will hold the actual element under test.
23
+
24
+ beforeEach((): void => {
25
+ root = document.createElement('div');
26
+ document.body.appendChild(root);
27
+ });
28
+
29
+ afterEach((): void => {
30
+ root.remove();
31
+ root = null;
32
+ });
33
+
34
+ it('dispatches action when created via constructor', async () => {
35
+ const refreshStub = stub(viewportObject.Topbar, 'refresh');
36
+
37
+ const element = new ImmediateActionElement;
38
+ element.setAttribute('action', 'TYPO3.Backend.Topbar.refresh');
39
+ expect(refreshStub).not.to.have.been.called;
40
+ root.appendChild(element);
41
+ await import('@typo3/backend/viewport.js');
42
+ await new Promise((resolve) => setTimeout(resolve, 100));
43
+ expect(refreshStub).to.have.been.called;
44
+
45
+ refreshStub.restore();
46
+ });
47
+
48
+ it('dispatches action when created via createElement', async () => {
49
+ const refreshStub = stub(viewportObject.Topbar, 'refresh');
50
+
51
+ const element = <ImmediateActionElement>document.createElement('typo3-immediate-action');
52
+ element.setAttribute('action', 'TYPO3.Backend.Topbar.refresh');
53
+ expect(refreshStub).not.to.have.been.called;
54
+ root.appendChild(element);
55
+ await import('@typo3/backend/viewport.js');
56
+ await new Promise((resolve) => setTimeout(resolve, 100));
57
+ expect(refreshStub).to.have.been.called;
58
+
59
+ refreshStub.restore();
60
+ });
61
+
62
+ it('dispatches action when created from string', async () => {
63
+ const refreshMenuStub = stub(moduleMenuApp.App, 'refreshMenu');
64
+ const element = document.createRange().createContextualFragment('<typo3-immediate-action action="TYPO3.ModuleMenu.App.refreshMenu"></typo3-immediate-action>').querySelector('typo3-immediate-action');
65
+ expect(refreshMenuStub).not.to.have.been.called;
66
+ root.appendChild(element);
67
+ await import('@typo3/backend/module-menu.js');
68
+ await new Promise((resolve) => setTimeout(resolve, 100));
69
+ expect(refreshMenuStub).to.have.been.called;
70
+ refreshMenuStub.restore();
71
+ });
72
+
73
+ it('dispatches action when created via innerHTML', async () => {
74
+ const refreshMenuStub = stub(moduleMenuApp.App, 'refreshMenu');
75
+ root.innerHTML = '<typo3-immediate-action action="TYPO3.ModuleMenu.App.refreshMenu"></typo3-immediate-action>';
76
+ await import('@typo3/backend/module-menu.js');
77
+ await new Promise((resolve) => setTimeout(resolve, 100));
78
+ expect(refreshMenuStub).to.have.been.called;
79
+ refreshMenuStub.restore();
80
+ });
81
+ });
@@ -0,0 +1,304 @@
1
+ import FormEngineValidation from '@typo3/backend/form-engine-validation.js';
2
+ import { expect } from '@open-wc/testing';
3
+
4
+ interface FormEngineConfig {
5
+ [x: string]: any;
6
+ field: string;
7
+ }
8
+
9
+ interface FormatValueData {
10
+ description: string,
11
+ type: string,
12
+ value: string,
13
+ result: string
14
+ }
15
+
16
+ interface FormatInvalidValueData {
17
+ description: string,
18
+ type: string,
19
+ value: number|string,
20
+ }
21
+
22
+ interface ProcessValueData {
23
+ description: string,
24
+ command: string,
25
+ value: string,
26
+ config: FormEngineConfig,
27
+ result: string
28
+ }
29
+
30
+ //type Values = Array<object>|object;
31
+ type Values = any;
32
+
33
+ /**
34
+ * Helper function to implement DataProvider
35
+ * @param {Function|Array|Object} values
36
+ * @param {Function} func
37
+ */
38
+ function using(values: (() => Values)|Values, func: (...args: unknown[]) => void): void {
39
+ if (values instanceof Function) {
40
+ values = values();
41
+ }
42
+
43
+ if (values instanceof Array) {
44
+ values.forEach(function(value) {
45
+ if (!(value instanceof Array)) {
46
+ value = [value];
47
+ }
48
+
49
+ func(...value);
50
+ });
51
+ } else {
52
+ const objectKeys = Object.keys(values);
53
+
54
+ objectKeys.forEach(function(key) {
55
+ if (!(values[key] instanceof Array)) {
56
+ values[key] = [values[key]];
57
+ }
58
+
59
+ values[key].push(key);
60
+
61
+ func(...values[key]);
62
+ });
63
+ }
64
+ }
65
+
66
+ describe('TYPO3/CMS/Backend/FormEngineValidationTest:', () => {
67
+ const formatValueDataProvider: Array<FormatValueData> = [
68
+ {
69
+ 'description': 'works for type date with iso date',
70
+ 'type': 'date',
71
+ 'value': '2016-12-02T11:16:06Z',
72
+ 'result': '2016-12-02T11:16:06Z'
73
+ },
74
+ {
75
+ 'description': 'works for type date with iso date with milliseconds',
76
+ 'type': 'date',
77
+ 'value': '2016-12-02T11:16:06.000Z',
78
+ 'result': '2016-12-02T11:16:06Z'
79
+ },
80
+ {
81
+ 'description': 'works for type date with empty value',
82
+ 'type': 'date',
83
+ 'value': '',
84
+ 'result': ''
85
+ },
86
+ {
87
+ 'description': 'works for type datetime with iso date',
88
+ 'type': 'datetime',
89
+ 'value': '2016-12-02T11:16:06Z',
90
+ 'result': '2016-12-02T11:16:06Z'
91
+ },
92
+ {
93
+ 'description': 'works for type datetime with iso date with milliseconds',
94
+ 'type': 'datetime',
95
+ 'value': '2016-12-02T11:16:06.000Z',
96
+ 'result': '2016-12-02T11:16:06Z'
97
+ },
98
+ {
99
+ 'description': 'works for type datetime with empty value',
100
+ 'type': 'datetime',
101
+ 'value': '',
102
+ 'result': ''
103
+ },
104
+ {
105
+ 'description': 'works for type time with iso date',
106
+ 'type': 'time',
107
+ 'value': '2016-12-02T11:16:06Z',
108
+ 'result': '2016-12-02T11:16:06Z'
109
+ },
110
+ {
111
+ 'description': 'works for type time with empty value',
112
+ 'type': 'time',
113
+ 'value': '',
114
+ 'result': ''
115
+ },
116
+ {
117
+ 'description': 'works for type timesec with iso date',
118
+ 'type': 'timesec',
119
+ 'value': '2016-12-02T11:16:06Z',
120
+ 'result': '2016-12-02T11:16:06Z'
121
+ },
122
+ {
123
+ 'description': 'works for type timesec with empty value',
124
+ 'type': 'timesec',
125
+ 'value': '',
126
+ 'result': ''
127
+ },
128
+ ];
129
+
130
+ describe('tests for formatValue', () => {
131
+ using(formatValueDataProvider, function(testCase: FormatValueData) {
132
+ it(testCase.description, () => {
133
+ const result = FormEngineValidation.formatValue(testCase.type, testCase.value);
134
+ expect(result).to.equal(testCase.result);
135
+ });
136
+ });
137
+ });
138
+
139
+ const formatInvalidValueDataProvider: Array<FormatInvalidValueData> = [
140
+ {
141
+ 'description': 'throws error with int 0',
142
+ 'type': 'date',
143
+ 'value': 0,
144
+ },
145
+ {
146
+ 'description': 'throws error for type date with timestamp',
147
+ 'type': 'date',
148
+ 'value': 10000000,
149
+ },
150
+ {
151
+ 'description': 'throws error with non-iso date',
152
+ 'type': 'date',
153
+ 'value': 'foo',
154
+ },
155
+ {
156
+ 'description': 'throws error for type datetime with timestamp',
157
+ 'type': 'datetime',
158
+ 'value': 10000000,
159
+ },
160
+ {
161
+ 'description': 'throws error for invalid value',
162
+ 'type': 'datetime',
163
+ 'value': 'invalid',
164
+ },
165
+ {
166
+ 'description': 'throws error for type time with timestamp',
167
+ 'type': 'time',
168
+ 'value': 10000000,
169
+ },
170
+ ];
171
+
172
+ describe('tests for invalid value to formatValue', () => {
173
+ using(formatInvalidValueDataProvider, function(testCase: FormatInvalidValueData) {
174
+ it(testCase.description, () => {
175
+ expect(() => FormEngineValidation.formatValue(testCase.type, testCase.value)).to.throw();
176
+ });
177
+ });
178
+ });
179
+
180
+ const processValueDataProvider: Array<ProcessValueData> = [
181
+ {
182
+ 'description': 'works for command alpha with numeric value',
183
+ 'command': 'alpha',
184
+ 'value': '1234',
185
+ 'config': { 'field': 'foo' },
186
+ 'result': ''
187
+ },
188
+ {
189
+ 'description': 'works for command alpha with string value',
190
+ 'command': 'alpha',
191
+ 'value': 'abc',
192
+ 'config': { 'field': 'foo' },
193
+ 'result': 'abc'
194
+ },
195
+ {
196
+ 'description': 'works for command alpha with alphanum input',
197
+ 'command': 'alpha',
198
+ 'value': 'abc123',
199
+ 'config': { 'field': 'foo' },
200
+ 'result': 'abc'
201
+ },
202
+ {
203
+ 'description': 'works for command alpha with alphanum input',
204
+ 'command': 'alpha',
205
+ 'value': '123abc123',
206
+ 'config': { 'field': 'foo' },
207
+ 'result': 'abc'
208
+ },
209
+ {
210
+ 'description': 'works for command integer with numeric value',
211
+ 'command': 'integer',
212
+ 'value': '1234',
213
+ 'config': { 'field': 'foo' },
214
+ 'result': '1234'
215
+ }
216
+ ];
217
+
218
+ describe('test for processValue', () => {
219
+ using(processValueDataProvider, function(testCase: ProcessValueData) {
220
+ it(testCase.description, () => {
221
+ const result = FormEngineValidation.processValue(testCase.command, testCase.value, testCase.config);
222
+ expect(result).to.equal(testCase.result);
223
+ });
224
+ });
225
+ });
226
+
227
+ describe('tests for parseInt', () => {
228
+ it('works for value 0', () => {
229
+ expect(FormEngineValidation.parseInt(0)).to.equal(0);
230
+ });
231
+ it('works for value 1', () => {
232
+ expect(FormEngineValidation.parseInt(1)).to.equal(1);
233
+ });
234
+ it('works for value -1', () => {
235
+ expect(FormEngineValidation.parseInt(-1)).to.equal(-1);
236
+ });
237
+ it('works for value "0"', () => {
238
+ expect(FormEngineValidation.parseInt('0')).to.equal(0);
239
+ });
240
+ it('works for value "1"', () => {
241
+ expect(FormEngineValidation.parseInt('1')).to.equal(1);
242
+ });
243
+ it('works for value "-1"', () => {
244
+ expect(FormEngineValidation.parseInt('-1')).to.equal(-1);
245
+ });
246
+ it('works for value 0.5', () => {
247
+ expect(FormEngineValidation.parseInt(0.5)).to.equal(0);
248
+ });
249
+ it('works for value "0.5"', () => {
250
+ expect(FormEngineValidation.parseInt('0.5')).to.equal(0);
251
+ });
252
+ it('works for value "foo"', () => {
253
+ expect(FormEngineValidation.parseInt('foo')).to.equal(0);
254
+ });
255
+ it('works for value true', () => {
256
+ expect(FormEngineValidation.parseInt(true)).to.equal(0);
257
+ });
258
+ it('works for value false', () => {
259
+ expect(FormEngineValidation.parseInt(false)).to.equal(0);
260
+ });
261
+ it('works for value null', () => {
262
+ expect(FormEngineValidation.parseInt(null)).to.equal(0);
263
+ });
264
+ });
265
+
266
+ describe('tests for parseDouble', () => {
267
+ it('works for value 0', () => {
268
+ expect(FormEngineValidation.parseDouble(0)).to.equal('0.00');
269
+ });
270
+ it('works for value 1', () => {
271
+ expect(FormEngineValidation.parseDouble(1)).to.equal('1.00');
272
+ });
273
+ it('works for value -1', () => {
274
+ expect(FormEngineValidation.parseDouble(-1)).to.equal('-1.00');
275
+ });
276
+ it('works for value "0"', () => {
277
+ expect(FormEngineValidation.parseDouble('0')).to.equal('0.00');
278
+ });
279
+ it('works for value "1"', () => {
280
+ expect(FormEngineValidation.parseDouble('1')).to.equal('1.00');
281
+ });
282
+ it('works for value "-1"', () => {
283
+ expect(FormEngineValidation.parseDouble('-1')).to.equal('-1.00');
284
+ });
285
+ it('works for value 0.5', () => {
286
+ expect(FormEngineValidation.parseDouble(0.5)).to.equal('0.50');
287
+ });
288
+ it('works for value "0.5"', () => {
289
+ expect(FormEngineValidation.parseDouble('0.5')).to.equal('0.50');
290
+ });
291
+ it('works for value "foo"', () => {
292
+ expect(FormEngineValidation.parseDouble('foo')).to.equal('0.00');
293
+ });
294
+ it('works for value true', () => {
295
+ expect(FormEngineValidation.parseDouble(true)).to.equal('0.00');
296
+ });
297
+ it('works for value false', () => {
298
+ expect(FormEngineValidation.parseDouble(false)).to.equal('0.00');
299
+ });
300
+ it('works for value null', () => {
301
+ expect(FormEngineValidation.parseDouble(null)).to.equal('0.00');
302
+ });
303
+ });
304
+ });
@@ -0,0 +1,29 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { GridEditor } from '@typo3/backend/grid-editor.js';
15
+ import { expect } from '@open-wc/testing';
16
+ import type { } from 'mocha';
17
+
18
+ describe('@typo3/backend/grid-editor-test:', () => {
19
+
20
+ describe('tests for stripMarkup', () => {
21
+ it('works with string which contains html markup only', () => {
22
+ expect(GridEditor.stripMarkup('<b>\'formula\': "x > y"</b>')).to.equal('\'formula\': "x > y"');
23
+ });
24
+ it('works with string which contains html markup and normal text', () => {
25
+ expect(GridEditor.stripMarkup('<b>foo</b> bar')).to.equal('foo bar');
26
+ });
27
+ });
28
+
29
+ });
@@ -0,0 +1,28 @@
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 Md5 from '@typo3/backend/hashing/md5.js';
15
+ import { expect } from '@open-wc/testing';
16
+ import type { } from 'mocha';
17
+
18
+ describe('@typo3/backend/hashing/md5', () => {
19
+ describe('tests for hash', () => {
20
+ it('hashes a value as expected', () => {
21
+ expect(Md5.hash('Hello World')).to.equal('b10a8db164e0754105b7a99be72e3fe5');
22
+ expect(
23
+ Md5.hash('TYPO3 CMS is an Open Source Enterprise Content Management System with a large global community,'
24
+ + ' backed by the approximately 900 members of the TYPO3 Association.'),
25
+ ).to.equal('65b0beb76ada01bd7b5f44fb37da6139');
26
+ });
27
+ });
28
+ });
@@ -0,0 +1,23 @@
1
+ import Icons from '@typo3/backend/icons.js';
2
+ import { expect } from '@open-wc/testing';
3
+ import type { } from 'mocha';
4
+
5
+ describe('@typo3/backend/icons-test', () => {
6
+ describe('tests for Icons object', () => {
7
+ it('has all sizes', () => {
8
+ expect(Icons.sizes.small).to.equal('small');
9
+ expect(Icons.sizes.default).to.equal('default');
10
+ expect(Icons.sizes.large).to.equal('large');
11
+ expect(Icons.sizes.overlay).to.equal('overlay');
12
+ });
13
+ it('has all states', () => {
14
+ expect(Icons.states.default).to.equal('default');
15
+ expect(Icons.states.disabled).to.equal('disabled');
16
+ });
17
+ it('has all markupIdentifiers', () => {
18
+ expect(Icons.markupIdentifiers.default).to.equal('default');
19
+ expect(Icons.markupIdentifiers.inline).to.equal('inline');
20
+ });
21
+ });
22
+ });
23
+
@@ -0,0 +1,161 @@
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 DeferredAction from '@typo3/backend/action-button/deferred-action.js';
15
+ import ImmediateAction from '@typo3/backend/action-button/immediate-action.js';
16
+ import Notification from '@typo3/backend/notification.js';
17
+ import Icons from '@typo3/backend/icons.js';
18
+ import { expect } from '@open-wc/testing';
19
+ import { stub, useFakeTimers, type SinonStub, type SinonFakeTimers } from 'sinon';
20
+ import type { LitElement } from 'lit';
21
+
22
+ describe('@typo3/backend/notification:', () => {
23
+ let clock: SinonFakeTimers;
24
+ let getIconStub: SinonStub<Parameters<typeof Icons['getIcon']>, Promise<string>>;
25
+
26
+ beforeEach((): void => {
27
+ clock = useFakeTimers();
28
+ getIconStub = stub(Icons, 'getIcon');
29
+ getIconStub.returns(Promise.resolve('X'));
30
+ });
31
+
32
+ afterEach((): void => {
33
+ clock.restore();
34
+ getIconStub.restore();
35
+
36
+ const alertContainer = document.querySelector('#alert-container .alert-list');
37
+ while (alertContainer !== null && alertContainer.firstChild) {
38
+ alertContainer.removeChild(alertContainer.firstChild);
39
+ }
40
+ });
41
+
42
+ describe('can render notifications with dismiss after 1000ms', () => {
43
+ interface NotificationDataSet {
44
+ method: typeof Notification.notice | typeof Notification.info | typeof Notification.success | typeof Notification.warning | typeof Notification.error,
45
+ title: string;
46
+ message: string;
47
+ class: string;
48
+ }
49
+
50
+ function notificationProvider(): Array<NotificationDataSet> {
51
+ return [
52
+ {
53
+ method: Notification.notice,
54
+ title: 'Notice message',
55
+ message: 'This notification describes a notice',
56
+ class: 'alert-notice',
57
+ },
58
+ {
59
+ method: Notification.info,
60
+ title: 'Info message',
61
+ message: 'This notification describes an informative action',
62
+ class: 'alert-info',
63
+ },
64
+ {
65
+ method: Notification.success,
66
+ title: 'Success message',
67
+ message: 'This notification describes a successful action',
68
+ class: 'alert-success',
69
+ },
70
+ {
71
+ method: Notification.warning,
72
+ title: 'Warning message',
73
+ message: 'This notification describes a harmful action',
74
+ class: 'alert-warning',
75
+ },
76
+ {
77
+ method: Notification.error,
78
+ title: 'Error message',
79
+ message: 'This notification describes an erroneous action',
80
+ class: 'alert-danger',
81
+ },
82
+ ];
83
+ }
84
+
85
+ for (const dataSet of notificationProvider()) {
86
+ it('can render a notification of type ' + dataSet.class, async () => {
87
+ dataSet.method(dataSet.title, dataSet.message, 1);
88
+
89
+ const notificationMessage = document.querySelector('#alert-container typo3-notification-message:last-child') as LitElement;
90
+ await notificationMessage.updateComplete;
91
+
92
+ const alertSelector = 'div.alert.' + dataSet.class;
93
+ const alertBox = document.querySelector(alertSelector);
94
+ expect(alertBox).not.to.be.null;
95
+ expect(alertBox.querySelector('.alert-title').textContent).to.equal(dataSet.title);
96
+ expect(alertBox.querySelector('.alert-message').textContent).to.equal(dataSet.message);
97
+
98
+ // wait for the notification to disappear for the next assertion (which tests for auto dismiss)
99
+ await clock.tickAsync(2000);
100
+
101
+ // Notifications are hidden via an animation which cannot be faked by Sinon.
102
+ // Instead, we dispatch a custom event to enforce its removal.
103
+ notificationMessage.dispatchEvent(new CustomEvent('typo3-notification-clear-finish'));
104
+ expect(document.querySelector(alertSelector)).to.be.null;
105
+ });
106
+ }
107
+ });
108
+
109
+ it('can render action buttons', async () => {
110
+ Notification.info(
111
+ 'Info message',
112
+ 'Some text',
113
+ 1,
114
+ [
115
+ {
116
+ label: 'My action',
117
+ action: new ImmediateAction((promise: Promise<void>): Promise<void> => {
118
+ return promise;
119
+ }),
120
+ },
121
+ {
122
+ label: 'My other action',
123
+ action: new DeferredAction((promise: Promise<void>): Promise<void> => {
124
+ return promise;
125
+ }),
126
+ },
127
+ ],
128
+ );
129
+
130
+ await (document.querySelector('#alert-container typo3-notification-message:last-child') as LitElement).updateComplete;
131
+ const alertBox = document.querySelector('div.alert');
132
+ expect(alertBox.querySelector('.alert-actions')).not.to.be.null;
133
+ expect(alertBox.querySelectorAll('.alert-actions a').length).to.equal(2);
134
+ expect(alertBox.querySelectorAll('.alert-actions a')[0].textContent).to.equal('My action');
135
+ expect(alertBox.querySelectorAll('.alert-actions a')[1].textContent).to.equal('My other action');
136
+ });
137
+
138
+ it('immediate action is called', async () => {
139
+ let called = false;
140
+
141
+ Notification.info(
142
+ 'Info message',
143
+ 'Some text',
144
+ 1,
145
+ [
146
+ {
147
+ label: 'My immediate action',
148
+ action: new ImmediateAction(() => {
149
+ called = true;
150
+ }),
151
+ },
152
+ ],
153
+ );
154
+
155
+ await (document.querySelector('#alert-container typo3-notification-message:last-child') as LitElement).updateComplete;
156
+ const alertBox = document.querySelector('div.alert');
157
+ (<HTMLAnchorElement>alertBox.querySelector('.alert-actions a')).click();
158
+ await (document.querySelector('#alert-container typo3-notification-message:last-child') as LitElement).updateComplete;
159
+ expect(called).to.be.true;
160
+ });
161
+ });