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,24 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ export enum SettingsMode {
15
+ minimal = 'minimal',
16
+ basic = 'basic',
17
+ advanced = 'advanced',
18
+ }
19
+
20
+ export function sanitizeSettingsMode(value: string | undefined | null): SettingsMode {
21
+ return Object.values(SettingsMode).includes(value as SettingsMode)
22
+ ? (value as SettingsMode)
23
+ : SettingsMode.basic;
24
+ }
@@ -0,0 +1,200 @@
1
+
2
+ /*
3
+ * This file is part of the TYPO3 CMS project.
4
+ *
5
+ * It is free software; you can redistribute it and/or modify it under
6
+ * the terms of the GNU General Public License, either version 2
7
+ * of the License, or any later version.
8
+ *
9
+ * For the full copyright and license information, please read the
10
+ * LICENSE.txt file that was distributed with this source code.
11
+ *
12
+ * The TYPO3 project - inspiring people to share!
13
+ */
14
+
15
+ /* eslint-disable @typescript-eslint/member-ordering */
16
+
17
+ import { LitElement, type PropertyDeclaration, type ReactiveElement } from 'lit';
18
+ import { defaultConverter } from '@lit/reactive-element';
19
+ import { property } from 'lit/decorators';
20
+
21
+ export const internals = Symbol('internals');
22
+ const privateInternals = Symbol('privateInternals');
23
+ export const getFormValue = Symbol('getFormValue');
24
+ export const getFormState = Symbol('getFormState');
25
+
26
+ /**
27
+ * Base element class for settings type to act as
28
+ * a form associated custom element.
29
+ *
30
+ * See https://web.dev/articles/more-capable-form-controls#defining_a_form-associated_custom_element
31
+ */
32
+ export abstract class BaseElement<
33
+ T = string,
34
+ OptionsType extends Record<string, unknown> = Record<string, unknown>
35
+ > extends LitElement {
36
+ @property({ type: String }) key: string;
37
+ @property({ type: String }) formid: string;
38
+ @property({ type: Boolean }) readonly: boolean = false;
39
+ @property({ type: Object }) enum: Record<string, string>;
40
+ @property({ type: Boolean }) debug: boolean = false;
41
+ @property({ type: Object }) options: OptionsType;
42
+
43
+ static readonly formAssociated = true;
44
+
45
+ /* @property annotation needs to be provided by extending class */
46
+ abstract value: T;
47
+
48
+ [privateInternals]?: ElementInternals;
49
+
50
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
51
+ return this;
52
+ }
53
+
54
+ protected get [internals]() {
55
+ // Create internals in getter so that it can be used in methods called on
56
+ // construction in `ReactiveElement`, such as `requestUpdate()`.
57
+ if (!this[privateInternals]) {
58
+ this[privateInternals] = this.attachInternals();
59
+ }
60
+
61
+ return this[privateInternals];
62
+ }
63
+
64
+ public get form() {
65
+ return this[internals].form;
66
+ }
67
+
68
+ protected get labels() {
69
+ return this[internals].labels;
70
+ }
71
+
72
+ // Use @property for the `name` and `disabled` properties to add them to the
73
+ // `observedAttributes` array and trigger `attributeChangedCallback()`.
74
+ //
75
+ // We don't use Lit's default getter/setter (`noAccessor: true`) because
76
+ // the attributes need to be updated synchronously to work with synchronous
77
+ // form APIs, and Lit updates attributes async by default.
78
+ @property({ noAccessor: true })
79
+ public get name() {
80
+ return this.getAttribute('name') ?? '';
81
+ }
82
+ public set name(name: string) {
83
+ // Note: setting name to null or empty does not remove the attribute.
84
+ this.setAttribute('name', name);
85
+ // We don't need to call `requestUpdate()` since it's called synchronously
86
+ // in `attributeChangedCallback()`.
87
+ }
88
+
89
+ @property({ type: Boolean, noAccessor: true })
90
+ public get disabled() {
91
+ return this.hasAttribute('disabled');
92
+ }
93
+
94
+ public set disabled(disabled: boolean) {
95
+ this.toggleAttribute('disabled', disabled);
96
+ // We don't need to call `requestUpdate()` since it's called synchronously
97
+ // in `attributeChangedCallback()`.
98
+ }
99
+
100
+ public override attributeChangedCallback(
101
+ name: string,
102
+ old: string | null,
103
+ value: string | null,
104
+ ) {
105
+ // Manually `requestUpdate()` for `name` and `disabled` when their
106
+ // attribute or property changes.
107
+ // The properties update their attributes, so this callback is invoked
108
+ // immediately when the properties are set. We call `requestUpdate()` here
109
+ // instead of letting Lit set the properties from the attribute change.
110
+ // That would cause the properties to re-set the attribute and invoke this
111
+ // callback again in a loop. This leads to stale state when Lit tries to
112
+ // determine if a property changed or not.
113
+ if (name === 'name' || name === 'disabled') {
114
+ // Disabled's value is only false if the attribute is missing and null.
115
+ const oldValue = name === 'disabled' ? old !== null : old;
116
+ // Trigger a lit update when the attribute changes.
117
+ this.requestUpdate(name, oldValue);
118
+ return;
119
+ }
120
+
121
+ super.attributeChangedCallback(name, old, value);
122
+ }
123
+
124
+ public override requestUpdate(
125
+ name?: PropertyKey,
126
+ oldValue?: unknown,
127
+ options?: PropertyDeclaration,
128
+ ) {
129
+ super.requestUpdate(name, oldValue, options);
130
+ if (name === 'value') {
131
+ this.dispatchEvent(new CustomEvent('typo3:setting:changed', { detail: { value: this.value } }));
132
+ // Update the form value synchronously in `requestUpdate()` rather than
133
+ // `update()` or `updated()`, which are async. This is necessary to ensure
134
+ // that form data is updated in time for synchronous event listeners.
135
+ this[internals].setFormValue(this[getFormValue](), this[getFormState]());
136
+ }
137
+ }
138
+
139
+ public formDisabledCallback(disabled: boolean) {
140
+ this.disabled = disabled;
141
+ }
142
+
143
+ /**
144
+ * Callback triggered when <button type=reset> or form.reset() is triggered.
145
+ */
146
+ public formResetCallback() {
147
+ const oldValue = this.value;
148
+ const defaultValue = this.getAttribute('value');
149
+
150
+ // Workaround to trigger string to property conversion
151
+ this.attributeChangedCallback('value', this.valueToString(oldValue), null);
152
+ this.attributeChangedCallback('value', null, defaultValue);
153
+ }
154
+
155
+ /**
156
+ * Callback triggered when form is (re-)loaded by browser-back button.
157
+ */
158
+ public formStateRestoreCallback(state: FormValue): void {
159
+ if (typeof state === 'string') {
160
+ this.attributeChangedCallback('value', this.valueToString(this.value), null);
161
+ this.attributeChangedCallback('value', null, state);
162
+ } else {
163
+ throw new Error(`formStateRestoreCallback() needs to be implemented for <${this.localName}> for state type "${typeof state}"`);
164
+ }
165
+ }
166
+
167
+ protected [getFormState](): FormValue | null {
168
+ return this[getFormValue]();
169
+ }
170
+
171
+ protected [getFormValue](): string {
172
+ return this.valueToString(this.value);
173
+ }
174
+
175
+ protected valueToString(value: T): string {
176
+ const ctor = this.constructor as typeof ReactiveElement;
177
+ const options = ctor.getPropertyOptions('value');
178
+ const converter = typeof options.converter === 'object' && typeof options.converter?.toAttribute === 'function' ?
179
+ options.converter.toAttribute : defaultConverter.toAttribute;
180
+ return converter(value, options.type) as string;
181
+ }
182
+ }
183
+
184
+ export type FormValue = File | string | FormData;
185
+
186
+ /**
187
+ * A value to be restored for a component's form value. If a component's form
188
+ * state is a `FormData` object, its entry list of name and values will be
189
+ * provided.
190
+ */
191
+ export type FormRestoreState =
192
+ | File
193
+ | string
194
+ | Array<[string, FormDataEntryValue]>;
195
+
196
+ /**
197
+ * The reason a form component is being restored for, either `'restore'` for
198
+ * browser restoration or `'autocomplete'` for restoring user values.
199
+ */
200
+ export type FormRestoreReason = 'restore' | 'autocomplete';
@@ -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 { html, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { BaseElement } from './base';
17
+
18
+ export const componentName = 'typo3-backend-settings-type-bool';
19
+
20
+ @customElement(componentName)
21
+ export class BoolTypeElement extends BaseElement<boolean> {
22
+
23
+ @property({
24
+ type: Boolean,
25
+ converter: {
26
+ toAttribute: (value: boolean): string => {
27
+ return value ? '1' : '0';
28
+ },
29
+ fromAttribute: (value: string): boolean => {
30
+ return value === '1' || value === 'true';
31
+ }
32
+ }
33
+ }) override value: boolean;
34
+
35
+ protected override render(): TemplateResult {
36
+ return html`
37
+ <div class="form-check form-check-type-toggle">
38
+ <input
39
+ type="checkbox"
40
+ id=${this.formid}
41
+ class="form-check-input"
42
+ value="1"
43
+ ?disabled=${this.readonly}
44
+ .checked=${this.value}
45
+ @change=${(e: InputEvent) => this.value = (e.target as HTMLInputElement).checked}
46
+ />
47
+ </div>
48
+ `;
49
+ }
50
+ }
51
+
52
+ declare global {
53
+ interface HTMLElementTagNameMap {
54
+ 'typo3-backend-settings-type-bool': BoolTypeElement;
55
+ }
56
+ }
@@ -0,0 +1,64 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { BaseElement } from './base';
17
+ import '@typo3/backend/color-picker';
18
+ import RegularEvent from '@typo3/core/event/regular-event';
19
+
20
+ export const componentName = 'typo3-backend-settings-type-color';
21
+
22
+ @customElement(componentName)
23
+ export class ColorTypeElement extends BaseElement {
24
+
25
+ @property({ type: String }) override value: string;
26
+
27
+ protected override firstUpdated(): void {
28
+ const inputElement = this.getInputElement();
29
+ if (inputElement) {
30
+ new RegularEvent('blur', (e: Event): void => {
31
+ this.updateValue((e.target as HTMLInputElement).value);
32
+ }).bindTo(inputElement);
33
+ }
34
+ }
35
+
36
+ protected updateValue(value: string) {
37
+ this.value = value;
38
+ }
39
+
40
+ protected override render(): TemplateResult {
41
+ return html`
42
+ <typo3-backend-color-picker>
43
+ <input
44
+ type="text"
45
+ id=${this.formid}
46
+ class="form-control"
47
+ ?readonly=${this.readonly}
48
+ .value=${this.value}
49
+ @change=${(e: InputEvent) => this.updateValue((e.target as HTMLInputElement).value)}
50
+ />
51
+ </typo3-backend-color-picker>
52
+ `;
53
+ }
54
+
55
+ protected getInputElement(): HTMLInputElement {
56
+ return this.querySelector<HTMLInputElement>('input');
57
+ }
58
+ }
59
+
60
+ declare global {
61
+ interface HTMLElementTagNameMap {
62
+ 'typo3-backend-settings-type-color': ColorTypeElement;
63
+ }
64
+ }
@@ -0,0 +1,85 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { live } from 'lit/directives/live';
17
+ import { BaseElement } from './base';
18
+
19
+ export const componentName = 'typo3-backend-settings-type-int';
20
+
21
+ @customElement(componentName)
22
+ export class IntTypeElement extends BaseElement<
23
+ number,
24
+ {
25
+ min?: number,
26
+ max?: number,
27
+ step?: number,
28
+ }
29
+ > {
30
+
31
+ @property({ type: Number }) override value: number;
32
+
33
+ protected handleChange(e: InputEvent): void {
34
+ const input = e.target as HTMLInputElement|HTMLSelectElement;
35
+ if (input.reportValidity()) {
36
+ if (input instanceof HTMLInputElement) {
37
+ this.value = input.valueAsNumber;
38
+ } else {
39
+ this.value = parseInt(input.value, 10);
40
+ }
41
+ }
42
+ }
43
+
44
+ protected renderEnum(): TemplateResult {
45
+ return html`
46
+ <select
47
+ id=${this.formid}
48
+ class="form-select"
49
+ ?readonly=${this.readonly}
50
+ .value=${live(this.value)}
51
+ @change=${this.handleChange}
52
+ >
53
+ ${Object.entries(this.enum).map(([value, label]) => html`
54
+ <option ?selected=${this.value.toString() === value} value=${value}>${label}${this.debug ? html` [${value}]` : nothing}</option>
55
+ `)}
56
+ </select>
57
+ `;
58
+ }
59
+
60
+ protected override render(): TemplateResult {
61
+ if (typeof this.enum === 'object') {
62
+ return this.renderEnum();
63
+ }
64
+ return html`
65
+ <input
66
+ type="number"
67
+ id=${this.formid}
68
+ class="form-control"
69
+ ?readonly=${this.readonly}
70
+ .value=${live(String(this.value))}
71
+ required
72
+ min=${this.options.min ?? nothing}
73
+ max=${this.options.max ?? nothing}
74
+ step=${this.options.step ?? nothing}
75
+ @change=${this.handleChange}
76
+ />
77
+ `;
78
+ }
79
+ }
80
+
81
+ declare global {
82
+ interface HTMLElementTagNameMap {
83
+ 'typo3-backend-settings-type-int': IntTypeElement;
84
+ }
85
+ }
@@ -0,0 +1,61 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { live } from 'lit/directives/live';
17
+ import { BaseElement } from './base';
18
+
19
+ export const componentName = 'typo3-backend-settings-type-number';
20
+
21
+ @customElement(componentName)
22
+ export class NumberTypeElement extends BaseElement<
23
+ number,
24
+ {
25
+ min?: number,
26
+ max?: number,
27
+ step?: number,
28
+ }
29
+ > {
30
+ @property({ type: Number }) override value: number;
31
+
32
+ protected handleChange(e: InputEvent): void {
33
+ const input = e.target as HTMLInputElement;
34
+ if (input.reportValidity()) {
35
+ this.value = input.valueAsNumber;
36
+ }
37
+ }
38
+
39
+ protected override render(): TemplateResult {
40
+ return html`
41
+ <input
42
+ type="number"
43
+ id=${this.formid}
44
+ class="form-control"
45
+ ?readonly=${this.readonly}
46
+ .value=${live(this.value)}
47
+ required
48
+ min=${this.options.min ?? nothing}
49
+ max=${this.options.max ?? nothing}
50
+ step=${this.options.step ?? '0.01'}
51
+ @change=${this.handleChange}
52
+ />
53
+ `;
54
+ }
55
+ }
56
+
57
+ declare global {
58
+ interface HTMLElementTagNameMap {
59
+ 'typo3-backend-settings-type-number': NumberTypeElement;
60
+ }
61
+ }
@@ -0,0 +1,100 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { lll } from '@typo3/core/lit-helper';
17
+ import { MessageUtility } from '@typo3/backend/utility/message-utility';
18
+ import { BaseElement } from './base';
19
+ import { default as Modal } from '@typo3/backend/modal';
20
+ import '@typo3/backend/element/icon-element';
21
+
22
+ export const componentName = 'typo3-backend-settings-type-page';
23
+
24
+ @customElement(componentName)
25
+ export class PageTypeElement extends BaseElement<number> {
26
+
27
+ @property({ type: Number }) override value: number;
28
+
29
+ protected override render(): TemplateResult {
30
+ /* eslint-disable @stylistic/indent */
31
+ return html`
32
+ <div class="input-grouped">
33
+ <input
34
+ type="number"
35
+ id=${this.formid}
36
+ class="form-control"
37
+ ?readonly=${this.readonly}
38
+ .value=${this.value}
39
+ @change=${(e: InputEvent) => this.value = parseInt((e.target as HTMLInputElement).value, 10)}
40
+ />
41
+ ${this.canUseElementBrowser()
42
+ ? html`
43
+ <button
44
+ type="button"
45
+ class="btn btn-default"
46
+ @click=${() => this.openElementBrowser()}
47
+ >
48
+ <typo3-backend-icon identifier="apps-pagetree-page" size="small"></typo3-backend-icon>
49
+ ${lll('settingseditor.type.page.button') || 'Select page'}
50
+ </button>
51
+ `
52
+ : nothing
53
+ }
54
+ </div>
55
+ `;
56
+ }
57
+
58
+ private canUseElementBrowser(): boolean {
59
+ return top.TYPO3.settings?.Wizards?.elementBrowserUrl !== undefined;
60
+ }
61
+
62
+ private openElementBrowser() {
63
+ const mode = 'db';
64
+ const params = this.formid + '|||pages';
65
+
66
+ const modal = Modal.advanced({
67
+ type: Modal.types.iframe,
68
+ content: top.TYPO3.settings.Wizards.elementBrowserUrl + '&mode=' + mode + '&bparams=' + params,
69
+ size: Modal.sizes.large,
70
+ });
71
+ window.addEventListener('message', this.elementBrowserListener);
72
+ modal.addEventListener('typo3-modal-hide', () => {
73
+ window.removeEventListener('message', this.elementBrowserListener);
74
+ });
75
+ }
76
+
77
+ private readonly elementBrowserListener = (e: MessageEvent): void => {
78
+ if (!MessageUtility.verifyOrigin(e.origin)) {
79
+ throw 'Denied message sent by ' + e.origin;
80
+ }
81
+
82
+ if (e.data.actionName === 'typo3:elementBrowser:elementAdded') {
83
+ if (typeof e.data.fieldName === 'undefined') {
84
+ throw 'fieldName not defined in message';
85
+ }
86
+
87
+ if (typeof e.data.value === 'undefined') {
88
+ throw 'value not defined in message';
89
+ }
90
+
91
+ this.value = e.data.value.split('_').pop();
92
+ }
93
+ };
94
+ }
95
+
96
+ declare global {
97
+ interface HTMLElementTagNameMap {
98
+ 'typo3-backend-settings-type-page': PageTypeElement;
99
+ }
100
+ }
@@ -0,0 +1,77 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { html, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { live } from 'lit/directives/live';
17
+ import { BaseElement } from './base';
18
+
19
+ export const componentName = 'typo3-backend-settings-type-string';
20
+
21
+ @customElement(componentName)
22
+ export class StringTypeElement extends BaseElement<
23
+ string,
24
+ {
25
+ min?: number,
26
+ max?: number,
27
+ }
28
+ > {
29
+ @property({ type: String }) override value: string;
30
+
31
+ protected handleChange(e: InputEvent): void {
32
+ const input = e.target as HTMLInputElement|HTMLSelectElement;
33
+ if (input.reportValidity()) {
34
+ this.value = input.value;
35
+ }
36
+ }
37
+
38
+ protected renderEnum(): TemplateResult {
39
+ return html`
40
+ <select
41
+ id=${this.formid}
42
+ class="form-select"
43
+ ?readonly=${this.readonly}
44
+ .value=${live(this.value)}
45
+ @change=${this.handleChange}
46
+ >
47
+ ${Object.entries(this.enum).map(([value, label]) => html`
48
+ <option ?selected=${this.value === value} value=${value}>${label}${this.debug ? html` [${value}]` : nothing}</option>
49
+ `)}
50
+ </select>
51
+ `;
52
+ }
53
+
54
+ protected override render(): TemplateResult {
55
+ if (typeof this.enum === 'object') {
56
+ return this.renderEnum();
57
+ }
58
+ return html`
59
+ <input
60
+ type="text"
61
+ id=${this.formid}
62
+ class="form-control"
63
+ ?readonly=${this.readonly}
64
+ .value=${live(this.value)}
65
+ minlength=${this.options.min ?? nothing}
66
+ maxlength=${this.options.max ?? nothing}
67
+ @change=${this.handleChange}
68
+ />
69
+ `;
70
+ }
71
+ }
72
+
73
+ declare global {
74
+ interface HTMLElementTagNameMap {
75
+ 'typo3-backend-settings-type-string': StringTypeElement;
76
+ }
77
+ }