@lenne.tech/ng-base 18.1.3 → 22.0.0

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 (416) hide show
  1. package/CLAUDE.md +55 -0
  2. package/LICENSE +2 -2
  3. package/README.md +237 -44
  4. package/fesm2022/lenne.tech-ng-base-ai.mjs +767 -0
  5. package/fesm2022/lenne.tech-ng-base-ai.mjs.map +1 -0
  6. package/fesm2022/lenne.tech-ng-base-auth-provide.mjs +939 -0
  7. package/fesm2022/lenne.tech-ng-base-auth-provide.mjs.map +1 -0
  8. package/fesm2022/lenne.tech-ng-base-auth.mjs +454 -0
  9. package/fesm2022/lenne.tech-ng-base-auth.mjs.map +1 -0
  10. package/fesm2022/lenne.tech-ng-base-bug-bug-report-dialog-BRzVmKJr.mjs +825 -0
  11. package/fesm2022/lenne.tech-ng-base-bug-bug-report-dialog-BRzVmKJr.mjs.map +1 -0
  12. package/fesm2022/lenne.tech-ng-base-bug-bug-report-service-DWoTb_iw.mjs +351 -0
  13. package/fesm2022/lenne.tech-ng-base-bug-bug-report-service-DWoTb_iw.mjs.map +1 -0
  14. package/fesm2022/lenne.tech-ng-base-bug-capture-engine-TkjMDdqj.mjs +1046 -0
  15. package/fesm2022/lenne.tech-ng-base-bug-capture-engine-TkjMDdqj.mjs.map +1 -0
  16. package/fesm2022/lenne.tech-ng-base-bug-constants-Brm2KGHi.mjs +4 -0
  17. package/fesm2022/lenne.tech-ng-base-bug-constants-Brm2KGHi.mjs.map +1 -0
  18. package/fesm2022/lenne.tech-ng-base-bug-messages-BsP4fRQU.mjs +179 -0
  19. package/fesm2022/lenne.tech-ng-base-bug-messages-BsP4fRQU.mjs.map +1 -0
  20. package/fesm2022/lenne.tech-ng-base-bug-provide.mjs +26 -0
  21. package/fesm2022/lenne.tech-ng-base-bug-provide.mjs.map +1 -0
  22. package/fesm2022/lenne.tech-ng-base-bug-report-Tzlhe1Cm.mjs +62 -0
  23. package/fesm2022/lenne.tech-ng-base-bug-report-Tzlhe1Cm.mjs.map +1 -0
  24. package/fesm2022/lenne.tech-ng-base-bug-server.mjs +818 -0
  25. package/fesm2022/lenne.tech-ng-base-bug-server.mjs.map +1 -0
  26. package/fesm2022/lenne.tech-ng-base-bug.mjs +196 -0
  27. package/fesm2022/lenne.tech-ng-base-bug.mjs.map +1 -0
  28. package/fesm2022/lenne.tech-ng-base-files-ui.mjs +445 -0
  29. package/fesm2022/lenne.tech-ng-base-files-ui.mjs.map +1 -0
  30. package/fesm2022/lenne.tech-ng-base-files.mjs +474 -0
  31. package/fesm2022/lenne.tech-ng-base-files.mjs.map +1 -0
  32. package/fesm2022/lenne.tech-ng-base-server.mjs +408 -0
  33. package/fesm2022/lenne.tech-ng-base-server.mjs.map +1 -0
  34. package/fesm2022/lenne.tech-ng-base-share.mjs +76 -0
  35. package/fesm2022/lenne.tech-ng-base-share.mjs.map +1 -0
  36. package/fesm2022/lenne.tech-ng-base-sync.mjs +1096 -0
  37. package/fesm2022/lenne.tech-ng-base-sync.mjs.map +1 -0
  38. package/fesm2022/lenne.tech-ng-base-testing.mjs +171 -0
  39. package/fesm2022/lenne.tech-ng-base-testing.mjs.map +1 -0
  40. package/fesm2022/lenne.tech-ng-base-ui-provide.mjs +124 -0
  41. package/fesm2022/lenne.tech-ng-base-ui-provide.mjs.map +1 -0
  42. package/fesm2022/lenne.tech-ng-base-ui.mjs +34611 -0
  43. package/fesm2022/lenne.tech-ng-base-ui.mjs.map +1 -0
  44. package/fesm2022/lenne.tech-ng-base-utils.mjs +287 -0
  45. package/fesm2022/lenne.tech-ng-base-utils.mjs.map +1 -0
  46. package/fesm2022/lenne.tech-ng-base.mjs +615 -910
  47. package/fesm2022/lenne.tech-ng-base.mjs.map +1 -1
  48. package/i18n/auth/de.json +17 -0
  49. package/i18n/auth/en.json +17 -0
  50. package/i18n/bug/de.json +85 -0
  51. package/i18n/bug/en.json +85 -0
  52. package/i18n/de.json +8 -0
  53. package/i18n/en.json +8 -0
  54. package/i18n/files/de.json +27 -0
  55. package/i18n/files/en.json +27 -0
  56. package/i18n/share/de.json +8 -0
  57. package/i18n/share/en.json +8 -0
  58. package/i18n/ui/de.json +38 -0
  59. package/i18n/ui/en.json +38 -0
  60. package/package.json +127 -58
  61. package/types/lenne.tech-ng-base-ai.d.ts +830 -0
  62. package/types/lenne.tech-ng-base-auth-provide.d.ts +603 -0
  63. package/types/lenne.tech-ng-base-auth.d.ts +320 -0
  64. package/types/lenne.tech-ng-base-bug-provide.d.ts +272 -0
  65. package/types/lenne.tech-ng-base-bug-rolldown-runtime-C25Le4-w.d.ts +1 -0
  66. package/types/lenne.tech-ng-base-bug-server.d.ts +316 -0
  67. package/types/lenne.tech-ng-base-bug.d.ts +202 -0
  68. package/types/lenne.tech-ng-base-files-ui.d.ts +116 -0
  69. package/types/lenne.tech-ng-base-files.d.ts +288 -0
  70. package/types/lenne.tech-ng-base-server.d.ts +262 -0
  71. package/types/lenne.tech-ng-base-share.d.ts +21 -0
  72. package/types/lenne.tech-ng-base-sync.d.ts +380 -0
  73. package/types/lenne.tech-ng-base-testing.d.ts +327 -0
  74. package/types/lenne.tech-ng-base-ui-provide.d.ts +65 -0
  75. package/types/lenne.tech-ng-base-ui.d.ts +7732 -0
  76. package/types/lenne.tech-ng-base-utils.d.ts +150 -0
  77. package/types/lenne.tech-ng-base.d.ts +503 -0
  78. package/ui/styles/components/accordion.css +3 -0
  79. package/ui/styles/components/alert-dialog.css +4 -0
  80. package/ui/styles/components/alert.css +3 -0
  81. package/ui/styles/components/aspect-ratio.css +3 -0
  82. package/ui/styles/components/attachment.css +4 -0
  83. package/ui/styles/components/autocomplete.css +4 -0
  84. package/ui/styles/components/avatar.css +3 -0
  85. package/ui/styles/components/badge.css +3 -0
  86. package/ui/styles/components/breadcrumb.css +3 -0
  87. package/ui/styles/components/bubble.css +3 -0
  88. package/ui/styles/components/button-group.css +3 -0
  89. package/ui/styles/components/button.css +3 -0
  90. package/ui/styles/components/calendar.css +5 -0
  91. package/ui/styles/components/card.css +3 -0
  92. package/ui/styles/components/checkbox.css +3 -0
  93. package/ui/styles/components/code-block.css +4 -0
  94. package/ui/styles/components/collapsible.css +3 -0
  95. package/ui/styles/components/combobox.css +5 -0
  96. package/ui/styles/components/command.css +5 -0
  97. package/ui/styles/components/context-menu.css +3 -0
  98. package/ui/styles/components/date-picker.css +7 -0
  99. package/ui/styles/components/dialog.css +4 -0
  100. package/ui/styles/components/drawer.css +3 -0
  101. package/ui/styles/components/dropdown-menu.css +3 -0
  102. package/ui/styles/components/empty.css +3 -0
  103. package/ui/styles/components/field.css +5 -0
  104. package/ui/styles/components/hover-card.css +3 -0
  105. package/ui/styles/components/index.css +91 -0
  106. package/ui/styles/components/input-group.css +6 -0
  107. package/ui/styles/components/input-otp.css +3 -0
  108. package/ui/styles/components/input.css +3 -0
  109. package/ui/styles/components/item.css +4 -0
  110. package/ui/styles/components/kbd.css +3 -0
  111. package/ui/styles/components/label.css +3 -0
  112. package/ui/styles/components/lt-breadcrumb.css +3 -0
  113. package/ui/styles/components/lt-bug-attachments.css +5 -0
  114. package/ui/styles/components/lt-bug-journey-timeline.css +5 -0
  115. package/ui/styles/components/lt-bug-report-dialog.css +15 -0
  116. package/ui/styles/components/lt-bug-report.css +4 -0
  117. package/ui/styles/components/lt-color-mode-button.css +3 -0
  118. package/ui/styles/components/lt-confirm-dialog.css +4 -0
  119. package/ui/styles/components/lt-data-view.css +5 -0
  120. package/ui/styles/components/lt-date-picker.css +3 -0
  121. package/ui/styles/components/lt-date-time-picker.css +5 -0
  122. package/ui/styles/components/lt-enter-action.css +2 -0
  123. package/ui/styles/components/lt-footer.css +3 -0
  124. package/ui/styles/components/lt-form-field.css +4 -0
  125. package/ui/styles/components/lt-header.css +5 -0
  126. package/ui/styles/components/lt-imports.css +21 -0
  127. package/ui/styles/components/lt-navigation-menu.css +3 -0
  128. package/ui/styles/components/lt-notice.css +3 -0
  129. package/ui/styles/components/lt-overlay-defaults.css +3 -0
  130. package/ui/styles/components/lt-page-card.css +3 -0
  131. package/ui/styles/components/lt-page-title.css +2 -0
  132. package/ui/styles/components/lt-password-input.css +4 -0
  133. package/ui/styles/components/lt-readonly-field.css +2 -0
  134. package/ui/styles/components/lt-select.css +4 -0
  135. package/ui/styles/components/lt-text-field.css +5 -0
  136. package/ui/styles/components/lt-toolbar-item.css +2 -0
  137. package/ui/styles/components/lt-toolbar.css +3 -0
  138. package/ui/styles/components/lt-tus-upload-component.css +5 -0
  139. package/ui/styles/components/marker.css +3 -0
  140. package/ui/styles/components/menubar.css +3 -0
  141. package/ui/styles/components/message-scroller.css +4 -0
  142. package/ui/styles/components/message.css +3 -0
  143. package/ui/styles/components/native-select.css +3 -0
  144. package/ui/styles/components/navigation-menu.css +3 -0
  145. package/ui/styles/components/pagination.css +4 -0
  146. package/ui/styles/components/popover.css +3 -0
  147. package/ui/styles/components/progress.css +3 -0
  148. package/ui/styles/components/questionnaire.css +4 -0
  149. package/ui/styles/components/radio-group.css +3 -0
  150. package/ui/styles/components/resizable.css +3 -0
  151. package/ui/styles/components/select.css +3 -0
  152. package/ui/styles/components/separator.css +3 -0
  153. package/ui/styles/components/sheet.css +4 -0
  154. package/ui/styles/components/sidebar.css +9 -0
  155. package/ui/styles/components/skeleton.css +3 -0
  156. package/ui/styles/components/slider.css +3 -0
  157. package/ui/styles/components/sonner.css +4 -0
  158. package/ui/styles/components/spinner.css +3 -0
  159. package/ui/styles/components/switch.css +3 -0
  160. package/ui/styles/components/table.css +3 -0
  161. package/ui/styles/components/tabs.css +4 -0
  162. package/ui/styles/components/textarea.css +3 -0
  163. package/ui/styles/components/toggle-group.css +4 -0
  164. package/ui/styles/components/toggle.css +3 -0
  165. package/ui/styles/components/tooltip.css +3 -0
  166. package/ui/styles/components/trace.css +3 -0
  167. package/ui/styles/components/typography.css +3 -0
  168. package/ui/styles/components/utils.css +2 -0
  169. package/ui/styles/core.css +137 -0
  170. package/ui/styles/palette.css +94 -0
  171. package/ui/styles/theme.css +14 -0
  172. package/ui/styles/transitions.css +131 -0
  173. package/base-cms/index.d.ts +0 -5
  174. package/base-cms/interfaces/base-cms-module-config.interface.d.ts +0 -16
  175. package/base-cms/pages/base-cms/base-cms.component.d.ts +0 -92
  176. package/base-cms/public-api.d.ts +0 -5
  177. package/base-components/components/breadcrumb/breadcrumb.component.d.ts +0 -10
  178. package/base-components/components/change-password/change-password.component.d.ts +0 -24
  179. package/base-components/components/checkbox/checkbox.component.d.ts +0 -12
  180. package/base-components/components/delete-account/delete-account.component.d.ts +0 -15
  181. package/base-components/components/fab-button/fab-button.component.d.ts +0 -16
  182. package/base-components/components/input/input.component.d.ts +0 -27
  183. package/base-components/components/loading-bar/loading-bar.component.d.ts +0 -17
  184. package/base-components/components/model-form/model-form-base.component.d.ts +0 -64
  185. package/base-components/components/model-form/model-form.component.d.ts +0 -139
  186. package/base-components/components/model-form-sub/model-form-sub.component.d.ts +0 -56
  187. package/base-components/components/model-table/model-table.component.d.ts +0 -115
  188. package/base-components/components/refence-input/refence-input.component.d.ts +0 -84
  189. package/base-components/components/select/select.component.d.ts +0 -25
  190. package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +0 -10
  191. package/base-components/components/tags/tags.component.d.ts +0 -60
  192. package/base-components/components/textarea/textarea.component.d.ts +0 -21
  193. package/base-components/components/toast/toast.component.d.ts +0 -19
  194. package/base-components/components/upload-image/upload-image.component.d.ts +0 -111
  195. package/base-components/directives/back-button.directive.d.ts +0 -9
  196. package/base-components/directives/context-menu.directive.d.ts +0 -22
  197. package/base-components/directives/sort.directive.d.ts +0 -15
  198. package/base-components/directives/stop-propagation.directive.d.ts +0 -10
  199. package/base-components/index.d.ts +0 -5
  200. package/base-components/pipes/ellipses.pipe.d.ts +0 -10
  201. package/base-components/public-api.d.ts +0 -26
  202. package/base-prototype/index.d.ts +0 -5
  203. package/base-prototype/pages/email-verification/email-verification.component.d.ts +0 -18
  204. package/base-prototype/pages/forgot-password/forgot-password.component.d.ts +0 -26
  205. package/base-prototype/pages/login/login.component.d.ts +0 -33
  206. package/base-prototype/pages/profile/profile.component.d.ts +0 -24
  207. package/base-prototype/pages/register/register.component.d.ts +0 -31
  208. package/base-prototype/pages/set-password/set-password.component.d.ts +0 -29
  209. package/base-prototype/public-api.d.ts +0 -9
  210. package/esm2022/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -3
  211. package/esm2022/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -5
  212. package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +0 -238
  213. package/esm2022/base-cms/public-api.mjs +0 -8
  214. package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -23
  215. package/esm2022/base-components/components/change-password/change-password.component.mjs +0 -97
  216. package/esm2022/base-components/components/checkbox/checkbox.component.mjs +0 -38
  217. package/esm2022/base-components/components/delete-account/delete-account.component.mjs +0 -59
  218. package/esm2022/base-components/components/fab-button/fab-button.component.mjs +0 -24
  219. package/esm2022/base-components/components/input/input.component.mjs +0 -75
  220. package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +0 -37
  221. package/esm2022/base-components/components/model-form/model-form-base.component.mjs +0 -145
  222. package/esm2022/base-components/components/model-form/model-form.component.mjs +0 -591
  223. package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -117
  224. package/esm2022/base-components/components/model-table/model-table.component.mjs +0 -478
  225. package/esm2022/base-components/components/refence-input/refence-input.component.mjs +0 -278
  226. package/esm2022/base-components/components/select/select.component.mjs +0 -62
  227. package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -33
  228. package/esm2022/base-components/components/tags/tags.component.mjs +0 -227
  229. package/esm2022/base-components/components/textarea/textarea.component.mjs +0 -79
  230. package/esm2022/base-components/components/toast/toast.component.mjs +0 -69
  231. package/esm2022/base-components/components/upload-image/upload-image.component.mjs +0 -346
  232. package/esm2022/base-components/directives/back-button.directive.mjs +0 -25
  233. package/esm2022/base-components/directives/context-menu.directive.mjs +0 -112
  234. package/esm2022/base-components/directives/sort.directive.mjs +0 -61
  235. package/esm2022/base-components/directives/stop-propagation.directive.mjs +0 -24
  236. package/esm2022/base-components/lenne.tech-ng-base-base-components.mjs +0 -5
  237. package/esm2022/base-components/pipes/ellipses.pipe.mjs +0 -23
  238. package/esm2022/base-components/public-api.mjs +0 -30
  239. package/esm2022/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -5
  240. package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +0 -60
  241. package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -78
  242. package/esm2022/base-prototype/pages/login/login.component.mjs +0 -114
  243. package/esm2022/base-prototype/pages/profile/profile.component.mjs +0 -87
  244. package/esm2022/base-prototype/pages/register/register.component.mjs +0 -100
  245. package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +0 -91
  246. package/esm2022/base-prototype/public-api.mjs +0 -11
  247. package/esm2022/lenne.tech-ng-base.mjs +0 -5
  248. package/esm2022/public-api.mjs +0 -25
  249. package/esm2022/shared/classes/auth.class.mjs +0 -14
  250. package/esm2022/shared/classes/basic-user.class.mjs +0 -49
  251. package/esm2022/shared/classes/graphql-enum.class.mjs +0 -10
  252. package/esm2022/shared/classes/graphql-meta.class.mjs +0 -345
  253. package/esm2022/shared/classes/graphql-type.class.mjs +0 -14
  254. package/esm2022/shared/classes/helper.class.mjs +0 -307
  255. package/esm2022/shared/classes/sort.class.mjs +0 -38
  256. package/esm2022/shared/classes/standard.class.mjs +0 -40
  257. package/esm2022/shared/decorators/debounce.decorator.mjs +0 -12
  258. package/esm2022/shared/enums/comparison-operator.enum.mjs +0 -16
  259. package/esm2022/shared/enums/graphql-request-type.enum.mjs +0 -10
  260. package/esm2022/shared/enums/logical-operator.enum.mjs +0 -10
  261. package/esm2022/shared/enums/skeleton-type.enum.mjs +0 -7
  262. package/esm2022/shared/enums/sort-order.enum.mjs +0 -6
  263. package/esm2022/shared/enums/toast-type.enum.mjs +0 -8
  264. package/esm2022/shared/functions/ws-client.function.mjs +0 -39
  265. package/esm2022/shared/interfaces/base-module-config.interface.mjs +0 -3
  266. package/esm2022/shared/interfaces/breadcrumb.interface.mjs +0 -2
  267. package/esm2022/shared/interfaces/can-component-deactivate.interface.mjs +0 -2
  268. package/esm2022/shared/interfaces/cms-enum-values.interface.mjs +0 -2
  269. package/esm2022/shared/interfaces/cms-field-config.interface.mjs +0 -2
  270. package/esm2022/shared/interfaces/cms-model-config.interface.mjs +0 -2
  271. package/esm2022/shared/interfaces/cms-table-field.interface.mjs +0 -2
  272. package/esm2022/shared/interfaces/combined-filter-input.interface.mjs +0 -2
  273. package/esm2022/shared/interfaces/compress-options.interface.mjs +0 -2
  274. package/esm2022/shared/interfaces/cropping-options.interface.mjs +0 -2
  275. package/esm2022/shared/interfaces/field-object.interface.mjs +0 -2
  276. package/esm2022/shared/interfaces/field.interface.mjs +0 -2
  277. package/esm2022/shared/interfaces/filter-input.interface.mjs +0 -2
  278. package/esm2022/shared/interfaces/find-args.interface.mjs +0 -2
  279. package/esm2022/shared/interfaces/graphql-crud-type.interface.mjs +0 -2
  280. package/esm2022/shared/interfaces/graphql-fields-object.interface.mjs +0 -2
  281. package/esm2022/shared/interfaces/graphql-options.interface.mjs +0 -2
  282. package/esm2022/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -2
  283. package/esm2022/shared/interfaces/graphql-type-collection.interface.mjs +0 -2
  284. package/esm2022/shared/interfaces/login-config.interface.mjs +0 -2
  285. package/esm2022/shared/interfaces/register-config.interface.mjs +0 -2
  286. package/esm2022/shared/interfaces/single-filter-input.interface.mjs +0 -2
  287. package/esm2022/shared/interfaces/sort-input.interface.mjs +0 -2
  288. package/esm2022/shared/interfaces/time-components.interface.mjs +0 -2
  289. package/esm2022/shared/interfaces/toast.interface.mjs +0 -2
  290. package/esm2022/shared/lenne.tech-ng-base-shared.mjs +0 -5
  291. package/esm2022/shared/public-api.mjs +0 -74
  292. package/esm2022/shared/services/auth.service.mjs +0 -152
  293. package/esm2022/shared/services/breadcrumb.service.mjs +0 -69
  294. package/esm2022/shared/services/cms.service.mjs +0 -82
  295. package/esm2022/shared/services/file.service.mjs +0 -86
  296. package/esm2022/shared/services/forms.service.mjs +0 -61
  297. package/esm2022/shared/services/graphql-meta.service.mjs +0 -132
  298. package/esm2022/shared/services/graphql-plus.service.mjs +0 -93
  299. package/esm2022/shared/services/graphql.service.mjs +0 -510
  300. package/esm2022/shared/services/image.service.mjs +0 -102
  301. package/esm2022/shared/services/loader.service.mjs +0 -78
  302. package/esm2022/shared/services/navigation.service.mjs +0 -38
  303. package/esm2022/shared/services/scroll.service.mjs +0 -207
  304. package/esm2022/shared/services/storage.service.mjs +0 -149
  305. package/esm2022/shared/services/toast.service.mjs +0 -39
  306. package/esm2022/shared/services/user.service.mjs +0 -160
  307. package/esm2022/shared/services/ws.service.mjs +0 -17
  308. package/esm2022/shared/types/graphql-fields.type.mjs +0 -2
  309. package/esm2022/shared/types/storage.type.mjs +0 -2
  310. package/esm2022/shared/validators/email.validator.mjs +0 -7
  311. package/esm2022/shared/validators/match.validator.mjs +0 -22
  312. package/esm2022/shared/validators/secure-password.validator.mjs +0 -7
  313. package/esm2022/src/base.module.mjs +0 -64
  314. package/esm2022/src/decorators/auto-unsubscribe.decorator.mjs +0 -23
  315. package/esm2022/src/directives/lazy-load.directive.mjs +0 -48
  316. package/esm2022/src/directives/match-height.directive.mjs +0 -92
  317. package/esm2022/src/directives/resizable.directive.mjs +0 -92
  318. package/esm2022/src/factories/apollo-options.factory.mjs +0 -108
  319. package/esm2022/src/functions/extract-files.function.mjs +0 -87
  320. package/esm2022/src/guards/auth.guard.mjs +0 -91
  321. package/esm2022/src/guards/can-deactivate.guard.mjs +0 -16
  322. package/esm2022/src/guards/logout.guard.mjs +0 -34
  323. package/esm2022/src/pipes/date-ago.pipe.mjs +0 -64
  324. package/esm2022/src/pipes/safe-html.pipe.mjs +0 -22
  325. package/esm2022/src/services/fullscreen.service.mjs +0 -51
  326. package/esm2022/src/services/seo.service.mjs +0 -117
  327. package/esm2022/src/services/theme.service.mjs +0 -44
  328. package/fesm2022/lenne.tech-ng-base-base-cms.mjs +0 -251
  329. package/fesm2022/lenne.tech-ng-base-base-cms.mjs.map +0 -1
  330. package/fesm2022/lenne.tech-ng-base-base-components.mjs +0 -2917
  331. package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +0 -1
  332. package/fesm2022/lenne.tech-ng-base-base-prototype.mjs +0 -505
  333. package/fesm2022/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  334. package/fesm2022/lenne.tech-ng-base-shared.mjs +0 -2863
  335. package/fesm2022/lenne.tech-ng-base-shared.mjs.map +0 -1
  336. package/index.d.ts +0 -5
  337. package/public-api.d.ts +0 -17
  338. package/shared/classes/auth.class.d.ts +0 -10
  339. package/shared/classes/basic-user.class.d.ts +0 -27
  340. package/shared/classes/graphql-enum.class.d.ts +0 -7
  341. package/shared/classes/graphql-meta.class.d.ts +0 -66
  342. package/shared/classes/graphql-type.class.d.ts +0 -13
  343. package/shared/classes/helper.class.d.ts +0 -99
  344. package/shared/classes/sort.class.d.ts +0 -12
  345. package/shared/classes/standard.class.d.ts +0 -32
  346. package/shared/decorators/debounce.decorator.d.ts +0 -1
  347. package/shared/enums/comparison-operator.enum.d.ts +0 -14
  348. package/shared/enums/graphql-request-type.enum.d.ts +0 -8
  349. package/shared/enums/logical-operator.enum.d.ts +0 -8
  350. package/shared/enums/skeleton-type.enum.d.ts +0 -5
  351. package/shared/enums/sort-order.enum.d.ts +0 -4
  352. package/shared/enums/toast-type.enum.d.ts +0 -6
  353. package/shared/functions/ws-client.function.d.ts +0 -5
  354. package/shared/index.d.ts +0 -5
  355. package/shared/interfaces/base-module-config.interface.d.ts +0 -61
  356. package/shared/interfaces/breadcrumb.interface.d.ts +0 -4
  357. package/shared/interfaces/can-component-deactivate.interface.d.ts +0 -7
  358. package/shared/interfaces/cms-enum-values.interface.d.ts +0 -4
  359. package/shared/interfaces/cms-field-config.interface.d.ts +0 -45
  360. package/shared/interfaces/cms-model-config.interface.d.ts +0 -14
  361. package/shared/interfaces/cms-table-field.interface.d.ts +0 -10
  362. package/shared/interfaces/combined-filter-input.interface.d.ts +0 -9
  363. package/shared/interfaces/compress-options.interface.d.ts +0 -15
  364. package/shared/interfaces/cropping-options.interface.d.ts +0 -12
  365. package/shared/interfaces/field-object.interface.d.ts +0 -6
  366. package/shared/interfaces/field.interface.d.ts +0 -5
  367. package/shared/interfaces/filter-input.interface.d.ts +0 -9
  368. package/shared/interfaces/find-args.interface.d.ts +0 -11
  369. package/shared/interfaces/graphql-crud-type.interface.d.ts +0 -7
  370. package/shared/interfaces/graphql-fields-object.interface.d.ts +0 -6
  371. package/shared/interfaces/graphql-options.interface.d.ts +0 -11
  372. package/shared/interfaces/graphql-plus-options.interfacen.d.ts +0 -9
  373. package/shared/interfaces/graphql-type-collection.interface.d.ts +0 -7
  374. package/shared/interfaces/login-config.interface.d.ts +0 -6
  375. package/shared/interfaces/register-config.interface.d.ts +0 -4
  376. package/shared/interfaces/single-filter-input.interface.d.ts +0 -11
  377. package/shared/interfaces/sort-input.interface.d.ts +0 -5
  378. package/shared/interfaces/time-components.interface.d.ts +0 -6
  379. package/shared/interfaces/toast.interface.d.ts +0 -8
  380. package/shared/public-api.d.ts +0 -65
  381. package/shared/services/auth.service.d.ts +0 -44
  382. package/shared/services/breadcrumb.service.d.ts +0 -32
  383. package/shared/services/cms.service.d.ts +0 -27
  384. package/shared/services/file.service.d.ts +0 -22
  385. package/shared/services/forms.service.d.ts +0 -14
  386. package/shared/services/graphql-meta.service.d.ts +0 -45
  387. package/shared/services/graphql-plus.service.d.ts +0 -27
  388. package/shared/services/graphql.service.d.ts +0 -71
  389. package/shared/services/image.service.d.ts +0 -27
  390. package/shared/services/loader.service.d.ts +0 -32
  391. package/shared/services/navigation.service.d.ts +0 -15
  392. package/shared/services/scroll.service.d.ts +0 -85
  393. package/shared/services/storage.service.d.ts +0 -49
  394. package/shared/services/toast.service.d.ts +0 -15
  395. package/shared/services/user.service.d.ts +0 -77
  396. package/shared/services/ws.service.d.ts +0 -8
  397. package/shared/types/graphql-fields.type.d.ts +0 -5
  398. package/shared/types/storage.type.d.ts +0 -4
  399. package/shared/validators/email.validator.d.ts +0 -1
  400. package/shared/validators/match.validator.d.ts +0 -4
  401. package/shared/validators/secure-password.validator.d.ts +0 -1
  402. package/src/base.module.d.ts +0 -16
  403. package/src/decorators/auto-unsubscribe.decorator.d.ts +0 -5
  404. package/src/directives/lazy-load.directive.d.ts +0 -17
  405. package/src/directives/match-height.directive.d.ts +0 -20
  406. package/src/directives/resizable.directive.d.ts +0 -26
  407. package/src/factories/apollo-options.factory.d.ts +0 -16
  408. package/src/functions/extract-files.function.d.ts +0 -15
  409. package/src/guards/auth.guard.d.ts +0 -27
  410. package/src/guards/can-deactivate.guard.d.ts +0 -10
  411. package/src/guards/logout.guard.d.ts +0 -16
  412. package/src/pipes/date-ago.pipe.d.ts +0 -34
  413. package/src/pipes/safe-html.pipe.d.ts +0 -13
  414. package/src/services/fullscreen.service.d.ts +0 -18
  415. package/src/services/seo.service.d.ts +0 -61
  416. package/src/services/theme.service.d.ts +0 -17
@@ -0,0 +1,316 @@
1
+ import { LtEnv, LtNodeMiddleware } from "@lenne.tech/ng-base/server";
2
+ /** Report types (mapped onto Linear labels). */
3
+ export declare const LT_BUG_REPORT_TYPES: readonly ["bug", "feature", "enhancement", "other"];
4
+ /** Kind of report. */
5
+ type LtBugServerReportType = (typeof LT_BUG_REPORT_TYPES)[number];
6
+ /** Size limits applied to an incoming report (texts are cut, lists keep their newest entries). */
7
+ export declare const LT_BUG_REPORT_LIMITS: Readonly<{
8
+ /** Attachments per report (including the screenshot). */
9
+ attachments: 10;
10
+ /** Characters of one attachment / screenshot data URL (about 11 MB decoded). */
11
+ attachmentDataUrl: 15000000;
12
+ consoleLogs: 100;
13
+ description: 20000;
14
+ networkRequests: 100;
15
+ text: 10000;
16
+ title: 255;
17
+ userInteractions: 200;
18
+ }>;
19
+ /** A decoded file of a report. */
20
+ interface LtBugServerFile {
21
+ contentType: string;
22
+ data: Buffer;
23
+ isScreenshot: boolean;
24
+ name: string;
25
+ }
26
+ /** Console entry after validation. */
27
+ interface LtBugServerConsoleLog {
28
+ level: string;
29
+ message: string[];
30
+ stack?: string;
31
+ timestamp: string;
32
+ }
33
+ /** Network entry after validation (headers and request bodies are dropped). */
34
+ interface LtBugServerNetworkRequest {
35
+ error?: string;
36
+ method: string;
37
+ responseBody?: string;
38
+ status: number;
39
+ statusText: string;
40
+ timestamp: string;
41
+ url: string;
42
+ }
43
+ /** User journey entry after validation. */
44
+ interface LtBugServerInteraction {
45
+ metadata?: {
46
+ errorMessage?: string;
47
+ key?: string;
48
+ text?: string;
49
+ toUrl?: string;
50
+ url?: string;
51
+ value?: string;
52
+ };
53
+ target: string;
54
+ timestamp: string;
55
+ type: string;
56
+ }
57
+ /** Browser details after validation. */
58
+ interface LtBugServerBrowserInfo {
59
+ browser?: {
60
+ name?: string;
61
+ version?: string;
62
+ };
63
+ language?: string;
64
+ os?: {
65
+ name?: string;
66
+ version?: string;
67
+ };
68
+ platform?: string;
69
+ timestamp?: string;
70
+ url?: string;
71
+ userAgent?: string;
72
+ viewport?: {
73
+ height: number;
74
+ width: number;
75
+ };
76
+ }
77
+ /** A validated, size-capped and redacted report. */
78
+ interface LtBugServerReport {
79
+ attachments: LtBugServerFile[];
80
+ browserInfo?: LtBugServerBrowserInfo;
81
+ consoleLogs: LtBugServerConsoleLog[];
82
+ description: string;
83
+ expectedBehavior?: string;
84
+ networkRequests: LtBugServerNetworkRequest[];
85
+ /** Attachments dropped because they exceeded the limits. */
86
+ skippedAttachments: number;
87
+ stepsToReproduce?: string;
88
+ title: string;
89
+ type: LtBugServerReportType;
90
+ userInteractions: LtBugServerInteraction[];
91
+ }
92
+ /** Result of {@link validateLtBugReport}. */
93
+ type LtBugReportValidation = {
94
+ error: string;
95
+ ok: false;
96
+ } | {
97
+ ok: true;
98
+ report: LtBugServerReport;
99
+ };
100
+ /** Message for a report without title, type or description (same text as `@lenne.tech/bug.lt`). */
101
+ export declare const LT_BUG_MISSING_FIELDS = "Missing required fields: title, type, and description are required";
102
+ /**
103
+ * Validate an incoming report by hand: title, type and description are required strings, `type` one of
104
+ * {@link LT_BUG_REPORT_TYPES}; files must be base64 `data:` URLs (never fetched: no URL is ever requested by the server).
105
+ * Texts are cut, lists keep their newest entries, files above the limit are dropped and counted, everything is redacted.
106
+ */
107
+ export declare function validateLtBugReport(body: unknown): LtBugReportValidation;
108
+ /** Default endpoint (the same as `@lenne.tech/bug.lt` and `provideLtBug()`). */
109
+ export declare const LT_BUG_SERVER_DEFAULT_ENDPOINT = "/_bug-lt/report";
110
+ /** Default request body limit (30 MB: one 10 MB file plus screenshot fit, base64 included). */
111
+ export declare const LT_BUG_DEFAULT_MAX_BODY_BYTES: number;
112
+ /** Options of {@link ltBugReport}. */
113
+ interface LtBugReportHandlerOptions {
114
+ /**
115
+ * Force the endpoint on or off (env `NG_PUBLIC_LT_BUG_ENABLED` wins). Default: on when `NG_PUBLIC_APP_ENV` is set and
116
+ * not `production`; without `NG_PUBLIC_APP_ENV` it stays off (fail closed). Off answers `404`.
117
+ */
118
+ enabled?: boolean;
119
+ /** Route (default `/_bug-lt/report`); must match `provideLtBug({ endpoint })`. */
120
+ endpoint?: string;
121
+ /** Environment (default `process.env`). */
122
+ env?: LtEnv;
123
+ /** `fetch` used for Linear (default the global `fetch`; for tests or an outbound proxy). */
124
+ fetch?: typeof fetch;
125
+ /** Linear API key; env `NG_LINEAR_API_KEY` wins. Server only, never sent to the browser. */
126
+ linearApiKey?: string;
127
+ /** Linear project name (optional); env `NG_LINEAR_PROJECT_NAME` wins. */
128
+ linearProjectName?: string;
129
+ /** Linear team name or key; env `NG_LINEAR_TEAM_NAME` wins. */
130
+ linearTeamName?: string;
131
+ /** Logger for server-side diagnostics (default `console`); messages are redacted and never contain the API key. */
132
+ logger?: Pick<Console, 'error' | 'warn'>;
133
+ /** Request body limit in bytes (default {@link LT_BUG_DEFAULT_MAX_BODY_BYTES}); larger bodies get `413`. */
134
+ maxBodyBytes?: number;
135
+ /** Reports per client address and window (default 20 per 10 minutes); `false` turns the limit off. */
136
+ rateLimit?: false | {
137
+ max: number;
138
+ windowMs: number;
139
+ };
140
+ /** Time zone of the times in the issue (default `Europe/Berlin`). */
141
+ timeZone?: string;
142
+ }
143
+ /** Linear settings of one request. */
144
+ interface LinearConfig {
145
+ apiKey: string;
146
+ projectName?: string;
147
+ teamName: string;
148
+ }
149
+ /**
150
+ * Whether the bug report endpoint is on, in this order:
151
+ *
152
+ * 1. `NG_PUBLIC_LT_BUG_ENABLED` (`true`/`false`), the same switch the browser part reads, so one variable turns the
153
+ * reporter on or off per stage on both sides.
154
+ * 2. The `enabled` option.
155
+ * 3. On when `NG_PUBLIC_APP_ENV` is set and neither `production` nor `prod`; without `NG_PUBLIC_APP_ENV` it is off
156
+ * (fail closed, also locally: set e.g. `local`).
157
+ */
158
+ export declare function isLtBugServerEnabled(enabled: boolean | undefined, env: LtEnv): boolean;
159
+ /**
160
+ * `POST /_bug-lt/report`: validates a report of `provideLtBug()` / `<lt-bug-report>` and creates a Linear issue (team
161
+ * and optional project resolved by name, label per type found or created, screenshot and attachments uploaded and
162
+ * linked), the counterpart of the Nitro handler of `@lenne.tech/bug.lt`.
163
+ *
164
+ * - Credentials only here: `NG_LINEAR_API_KEY`, `NG_LINEAR_TEAM_NAME`, `NG_LINEAR_PROJECT_NAME` (or the options).
165
+ * - Off (`404`) when `NG_PUBLIC_APP_ENV` is `production` or missing, unless `NG_PUBLIC_LT_BUG_ENABLED` or `enabled` turn it on.
166
+ * - JSON only (`415` otherwise, which also blocks simple cross-site form posts), body limit (`413`), per-client rate
167
+ * limit (`429`), hand-written validation (`400`), files only as base64 data URLs (no URL is ever fetched).
168
+ * - Redacts tokens, passwords and auth bodies once more before writing to Linear; answers never contain the API key or
169
+ * Linear's error messages (`502` with a generic text, details only in the server log).
170
+ *
171
+ * Register it before `express.json()` (which would reject large reports with its 100 kB default) and before the Angular
172
+ * handler.
173
+ *
174
+ * @example server.ts
175
+ * app.use(ltBugReport());
176
+ */
177
+ export declare function ltBugReport(options?: LtBugReportHandlerOptions): LtNodeMiddleware;
178
+ /** Team or project setup does not match the Linear workspace. */
179
+ export declare class LtBugConfigError extends Error {}
180
+ /**
181
+ * Create the Linear issue of a validated report: resolve the team (required) and project (optional), find or create
182
+ * the type label, create the issue, then upload and link every file (failures are logged and skipped).
183
+ */
184
+ export declare function createLtLinearIssue(report: LtBugServerReport, config: LinearConfig, options?: {
185
+ fetch?: typeof fetch;
186
+ logger?: Pick<Console, 'error' | 'warn'>;
187
+ timeZone?: string;
188
+ }): Promise<{
189
+ identifier?: string;
190
+ issueId: string;
191
+ issueUrl?: string;
192
+ }>;
193
+ /** Linear GraphQL endpoint. */
194
+ export declare const LT_LINEAR_API_URL = "https://api.linear.app/graphql";
195
+ /** Label name and color per report type (same mapping as `@lenne.tech/bug.lt`). */
196
+ export declare const LT_BUG_LABELS: Readonly<Record<string, {
197
+ color: string;
198
+ name: string;
199
+ }>>;
200
+ /** Error of a Linear request. The message may contain Linear's answer: log it server-side only, never send it out. */
201
+ export declare class LtLinearError extends Error {
202
+ readonly status?: number | undefined;
203
+ constructor(message: string, status?: number | undefined);
204
+ }
205
+ /** Options of {@link LtLinearClient}. */
206
+ interface LtLinearClientOptions {
207
+ /** Linear personal API key (sent as `Authorization`). */
208
+ apiKey: string;
209
+ /** GraphQL endpoint (default {@link LT_LINEAR_API_URL}). */
210
+ apiUrl?: string;
211
+ /** `fetch` implementation (default the global `fetch`). */
212
+ fetch?: typeof fetch;
213
+ /** Timeout per request in ms (default 15000). */
214
+ timeoutMs?: number;
215
+ }
216
+ /** Issue created by {@link LtLinearClient.createIssue}. */
217
+ interface LtLinearIssue {
218
+ id: string;
219
+ identifier?: string;
220
+ url?: string;
221
+ }
222
+ /**
223
+ * Minimal Linear GraphQL client for bug reports (the port of `LinearApiClient` of `@lenne.tech/bug.lt`): team and project
224
+ * lookup by name (paginated, case-insensitive), label lookup/creation, issue creation and the two-step file upload
225
+ * (signed URL from `fileUpload`, `PUT` to storage, then `attachmentCreate`).
226
+ */
227
+ export declare class LtLinearClient {
228
+ private readonly options;
229
+ private readonly apiUrl;
230
+ private readonly fetchFn;
231
+ private readonly timeoutMs;
232
+ constructor(options: LtLinearClientOptions);
233
+ /** Run a GraphQL request; throws {@link LtLinearError} on HTTP and GraphQL errors. */
234
+ request<T>(query: string, variables?: Record<string, unknown>): Promise<T>;
235
+ /** All teams (paginated). */
236
+ getTeams(): Promise<{
237
+ id: string;
238
+ key: string;
239
+ name: string;
240
+ }[]>;
241
+ /** Team by name or key (case-insensitive), `null` when none matches. */
242
+ findTeam(nameOrKey: string): Promise<{
243
+ id: string;
244
+ key: string;
245
+ name: string;
246
+ } | null>;
247
+ /** Project by name (case-insensitive), `null` when none matches. */
248
+ findProject(name: string): Promise<{
249
+ id: string;
250
+ name: string;
251
+ } | null>;
252
+ /** Id of the label `name` usable in `teamId` (a team label or a workspace label), `null` when there is none. */
253
+ findLabel(teamId: string, name: string): Promise<string | null>;
254
+ /** Create a team label; returns its id. */
255
+ createLabel(teamId: string, name: string, color: string): Promise<string | null>;
256
+ /** Create an issue. */
257
+ createIssue(input: {
258
+ description: string;
259
+ labelIds?: string[];
260
+ projectId?: string;
261
+ teamId: string;
262
+ title: string;
263
+ }): Promise<LtLinearIssue>;
264
+ /** Upload a file to Linear's storage; returns the asset URL. */
265
+ uploadFile(content: Uint8Array, filename: string, contentType: string): Promise<string>;
266
+ /** Link an uploaded file to an issue. */
267
+ createAttachment(issueId: string, url: string, title: string): Promise<string | null>;
268
+ private collect;
269
+ }
270
+ /** Options of {@link formatLtBugReportForLinear}. */
271
+ interface LtLinearFormatOptions {
272
+ /** Time zone of the journey times (default `Europe/Berlin`; the browser sends UTC timestamps). */
273
+ timeZone?: string;
274
+ }
275
+ /** Title and Markdown description of the Linear issue. */
276
+ interface LtLinearIssueText {
277
+ description: string;
278
+ title: string;
279
+ }
280
+ /**
281
+ * Linear issue text of a report, in the layout of `@lenne.tech/bug.lt` (German headings): bug report, context table,
282
+ * user journey table, technical details (last 10 console logs and network requests, failed requests with the start of
283
+ * their response) and an attachments note. Table cells are escaped, so `|` or line breaks in data keep the tables intact.
284
+ */
285
+ export declare function formatLtBugReportForLinear(report: LtBugServerReport, options?: LtLinearFormatOptions): LtLinearIssueText;
286
+ /** Replacement of every redacted value. */
287
+ export declare const LT_BUG_REDACTED = "[redacted]";
288
+ /** Headers whose values are never recorded (compared case-insensitively). */
289
+ export declare const LT_BUG_SENSITIVE_HEADERS: readonly string[];
290
+ /**
291
+ * Path segments whose request and response bodies are never recorded: nest-server IAM (`/iam/…`: passwords, tokens,
292
+ * 2FA codes, reset and verify tokens), the first-admin setup (`/system-setup/…`) and other auth-like endpoints.
293
+ */
294
+ export declare const LT_BUG_BODY_EXCLUDED_SEGMENTS: readonly string[];
295
+ /** Whether a header carries credentials (`Authorization`, `Cookie`, `Set-Cookie`, `X-System-Setup-Token` …). */
296
+ export declare function isLtSensitiveHeader(name: string): boolean;
297
+ /**
298
+ * Whether an object key / form field name / query parameter holds a secret (`password`, `newPassword`, `token`,
299
+ * `access_token`, `code`, `otp`, `user[password]` …).
300
+ */
301
+ export declare function isLtSensitiveKey(key: string): boolean;
302
+ /** Whether request and response bodies of `url` must not be recorded (see {@link LT_BUG_BODY_EXCLUDED_SEGMENTS}). */
303
+ export declare function isLtBodyExcludedUrl(url: string): boolean;
304
+ /**
305
+ * Redact secrets in free text and URLs: query/hash/form parameters (`token`, `code`, `password`, `secret`, `otp`, …,
306
+ * also inside nested and percent-encoded `callbackURL` values), tokens in reset/verify paths, URL credentials,
307
+ * `Bearer` tokens, JWTs, JSON pairs with secret keys and `password: …` labels.
308
+ */
309
+ export declare function redactLtText(text: string): string;
310
+ /** Redact a URL (alias of {@link redactLtText}, which handles URLs inside text as well). */
311
+ export declare function redactLtUrl(url: string): string;
312
+ /** Redact and truncate a request/response body: JSON deep, everything else (form data, text) as text. */
313
+ export declare function redactLtBody(body: string, maxLength?: number): string;
314
+ /** Copy of a header map with credential headers replaced by `[redacted]` and the other values redacted as text. */
315
+ export declare function redactLtHeaders(headers: Record<string, string>): Record<string, string>;
316
+ export type { LtBugReportHandlerOptions, LtBugReportValidation, LtBugServerBrowserInfo, LtBugServerConsoleLog, LtBugServerFile, LtBugServerInteraction, LtBugServerNetworkRequest, LtBugServerReport, LtBugServerReportType, LtLinearClientOptions, LtLinearFormatOptions, LtLinearIssue, LtLinearIssueText };
@@ -0,0 +1,202 @@
1
+ import { LtBugOptions, LtResolvedBugOptions } from "@lenne.tech/ng-base/bug/provide";
2
+ import * as i0 from "@angular/core";
3
+ import { InjectionToken } from "@angular/core";
4
+ import { LtI18nService } from "@lenne.tech/ng-base";
5
+ export * from "@lenne.tech/ng-base/bug/provide";
6
+ /** Default endpoint, the same as `@lenne.tech/bug.lt` (outside `/api`, so an API proxy does not swallow it). */
7
+ export declare const LT_BUG_DEFAULT_ENDPOINT = "/_bug-lt/report";
8
+ /** Defaults of {@link LtBugOptions} (the module defaults of `@lenne.tech/bug.lt` 1.6.9, except the button color). */
9
+ export declare const LT_BUG_DEFAULTS: LtResolvedBugOptions;
10
+ /** Resolved options: defaults ← `provideLtBug(options)` ← runtime `lt.bug` (`LT_RUNTIME_CONFIG`). */
11
+ export declare const LT_BUG_OPTIONS: InjectionToken<LtResolvedBugOptions>;
12
+ /** Merge options onto the defaults; `userJourney` is merged per key, `undefined` never overrides, sizes are clamped. */
13
+ export declare function resolveLtBugOptions(...overrides: (LtBugOptions | Record<string, unknown> | null | undefined)[]): LtResolvedBugOptions;
14
+ import * as import__lenne_tech_ng_base_bug_provide$1 from "@lenne.tech/ng-base/bug/provide";
15
+ /** Values of the report form. */
16
+ interface LtBugReportFormValue {
17
+ description: string;
18
+ expectedBehavior: string;
19
+ stepsToReproduce: string;
20
+ title: string;
21
+ type: bug_types_d_exports.LtBugReportType | null;
22
+ }
23
+ /** Which collected data the user chose to include. */
24
+ interface LtBugReportIncludes {
25
+ browserInfo: boolean;
26
+ consoleLogs: boolean;
27
+ networkRequests: boolean;
28
+ userJourney: boolean;
29
+ }
30
+ /** Error of {@link LtBugReportService.submit}; `message` is the translated text shown to the user. */
31
+ export declare class LtBugSubmitError extends Error {
32
+ readonly status: number;
33
+ constructor(message: string, status: number);
34
+ }
35
+ /**
36
+ * State and actions of the bug reporter, the counterpart of `useBugReport()` of `@lenne.tech/bug.lt`.
37
+ *
38
+ * `<lt-bug-report>` calls {@link start} when it is created: when the reporter is {@link active} it loads the capture engine
39
+ * (a chunk of its own) and installs the hooks (console, `fetch`/`XMLHttpRequest`, user journey, `ErrorHandler`);
40
+ * otherwise it loads and installs nothing. `<lt-bug-report>` renders the button and opens the dialog for {@link open}
41
+ * requests.
42
+ */
43
+ export declare class LtBugReportService {
44
+ /** Resolved options. */
45
+ readonly options: import("@lenne.tech/ng-base/bug").LtResolvedBugOptions;
46
+ private readonly document;
47
+ private readonly injector;
48
+ private readonly i18n;
49
+ private readonly i18nOptions;
50
+ private readonly toast;
51
+ private readonly screenshotLoader;
52
+ /**
53
+ * Whether the reporter runs: `provideLtBug()` is present, the code runs in the browser and the runtime decision says
54
+ * on (`enabled`, else app env not `production`, else dev mode only). Decided once at startup.
55
+ */
56
+ readonly active: boolean;
57
+ /** The dialog is open (or about to open). */
58
+ readonly isOpen: import("@angular/core").WritableSignal<boolean>;
59
+ /** A report is being sent. */
60
+ readonly isSubmitting: import("@angular/core").WritableSignal<boolean>;
61
+ /** Message of the last failed submission (shown in the dialog). */
62
+ readonly error: import("@angular/core").WritableSignal<string | null>;
63
+ /** The last captured error (pre-fills the form). */
64
+ readonly lastError: import("@angular/core").WritableSignal<bug_types_d_exports.LtBugErrorInfo | null>;
65
+ /** Screenshot taken before the dialog opened (data URL). */
66
+ readonly screenshot: import("@angular/core").WritableSignal<string | null>;
67
+ /** A screenshot is being taken. */
68
+ readonly capturingScreenshot: import("@angular/core").WritableSignal<boolean>;
69
+ /** Whether `modern-screenshot` could be loaded (`null` until the first attempt). */
70
+ readonly screenshotAvailable: import("@angular/core").WritableSignal<boolean | null>;
71
+ /** An {@link open} request waits for `<lt-bug-report>` (read and reset by the component). */
72
+ readonly openRequested: import("@angular/core").WritableSignal<boolean>;
73
+ private engine;
74
+ private engineLoad;
75
+ private pendingErrors;
76
+ private started;
77
+ constructor();
78
+ /** Whether the capture hooks are installed. */
79
+ get running(): boolean;
80
+ /**
81
+ * Load the capture engine and install the hooks for the enabled features (idempotent; does nothing while not
82
+ * {@link active}). Errors reported before the engine is ready are handed over once it is.
83
+ */
84
+ start(): void;
85
+ /** Resolves once {@link start} has installed the hooks (`false` when inactive or the engine failed to load). */
86
+ whenReady(): Promise<boolean>;
87
+ /** Remove every capture hook and restore the patched globals. */
88
+ stop(): void;
89
+ /**
90
+ * Ask `<lt-bug-report>` to take a screenshot and open the dialog (also when the floating button is hidden with
91
+ * `autoShow: false`); `error` pre-fills the form. Ignored while the reporter is not active.
92
+ */
93
+ open(error?: bug_types_d_exports.LtBugErrorInfo): void;
94
+ /** Report an error by hand (e.g. from a `catch` block): it becomes {@link lastError} and may auto-open the dialog. */
95
+ reportError(error: unknown, source?: string): void;
96
+ /** Record a custom user journey event (no-op while the journey is off). */
97
+ recordInteraction(type: bug_types_d_exports.LtUserInteractionType, target: string, metadata?: bug_types_d_exports.LtUserInteractionMetadata): void;
98
+ /** The captured console entries (newest `maxConsoleLogs`). */
99
+ getConsoleLogs(): bug_types_d_exports.LtConsoleLogEntry[];
100
+ /** The captured network requests (newest `maxNetworkRequests`). */
101
+ getNetworkRequests(): bug_types_d_exports.LtNetworkRequestEntry[];
102
+ /** The captured user journey (newest `userJourney.maxEvents`). */
103
+ getUserJourney(): bug_types_d_exports.LtUserInteractionEvent[];
104
+ /** Browser details of the current page (`null` while inactive or outside the browser). */
105
+ getBrowserInfo(): bug_types_d_exports.LtBrowserInfo | null;
106
+ /**
107
+ * Take a viewport screenshot into {@link screenshot} (without the reporter's UI; network capture paused meanwhile).
108
+ * Resolves `null` when screenshots are disabled, `modern-screenshot` is missing or the capture failed.
109
+ */
110
+ captureScreenshot(): Promise<string | null>;
111
+ /** Assemble the payload from the form, the attachments and the collected data the user kept switched on. */
112
+ buildReport(form: LtBugReportFormValue, attachments: readonly bug_types_d_exports.LtBugAttachment[], includes: LtBugReportIncludes): Promise<bug_types_d_exports.LtBugReportData>;
113
+ /**
114
+ * POST the report to the endpoint. Shows a success or error toast; on failure sets {@link error} and rejects with a
115
+ * {@link LtBugSubmitError} carrying the translated message.
116
+ */
117
+ submit(report: bug_types_d_exports.LtBugReportData): Promise<bug_types_d_exports.LtBugReportResponse>;
118
+ /** Forget screenshot, pre-fill error and submission error (after a sent report). */
119
+ reset(): void;
120
+ private onCapturedError;
121
+ private messageForStatus;
122
+ static ɵfac: i0.ɵɵFactoryDeclaration<LtBugReportService, never>;
123
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
124
+ }
125
+ /** Attribute that marks the reporter's own UI (button, dialog): left out of the user journey and the screenshot. */
126
+ export declare const LT_BUG_UI_ATTRIBUTE = "data-lt-bug-ui";
127
+ /** The part of `modern-screenshot` the reporter uses (structural, so the peer stays optional). */
128
+ interface LtScreenshotLibrary {
129
+ domToPng(node: Node, options?: Record<string, unknown>): Promise<string>;
130
+ }
131
+ /**
132
+ * Loader of the screenshot library (default: lazy `import('modern-screenshot')`, `null` when the optional peer is
133
+ * missing: the screenshot feature is then hidden). Replace it in tests.
134
+ */
135
+ export declare const LT_BUG_SCREENSHOT_LOADER: InjectionToken<() => Promise<LtScreenshotLibrary | null>>;
136
+ /**
137
+ * Floating bug report button (the counterpart of `<BugReportButton>` of `@lenne.tech/bug.lt`). A click takes a
138
+ * screenshot of the current page and opens the report dialog; the dialog (form, attachments, user journey) is loaded
139
+ * on first use, so this component stays small. Creating it starts the capture (`LtBugReportService.start()`), it
140
+ * serves `LtBugReportService.open()` requests, e.g. from `autoOpenOnError`, and renders nothing while the reporter is
141
+ * inactive (production, or without `provideLtBug()`).
142
+ *
143
+ * Inputs override the `provideLtBug()` options for this instance. Render it once in the app shell, deferred and only
144
+ * while the reporter is active (`LT_BUG_ACTIVE` from `@lenne.tech/ng-base/bug/provide`):
145
+ *
146
+ * @example
147
+ * @if (bugActive) { @defer (on immediate) { <lt-bug-report /> } }
148
+ */
149
+ export declare class LtBugReport {
150
+ /** Button background (default option `buttonColor`). */
151
+ readonly color: import("@angular/core").InputSignal<string | undefined>;
152
+ /** ng-icons name of the icon (default option `buttonIcon`, else the Lucide bug); register custom icons yourself. */
153
+ readonly icon: import("@angular/core").InputSignal<string | undefined>;
154
+ /** Corner (default option `position`). */
155
+ readonly position: import("@angular/core").InputSignal<bug_types_d_exports.LtBugPosition | undefined>;
156
+ /** Show the floating button (default option `autoShow`). */
157
+ readonly show: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
158
+ /** Text next to the icon (default option `buttonText`). */
159
+ readonly text: import("@angular/core").InputSignal<string | undefined>;
160
+ protected readonly bug: LtBugReportService;
161
+ protected readonly i18n: LtI18nService;
162
+ private readonly injector;
163
+ /** Polite announcement after a sent report. */
164
+ protected readonly announcement: import("@angular/core").WritableSignal<string>;
165
+ protected readonly visible: import("@angular/core").Signal<boolean>;
166
+ protected readonly positionClass: import("@angular/core").Signal<string>;
167
+ protected readonly buttonColor: import("@angular/core").Signal<string>;
168
+ protected readonly buttonText: import("@angular/core").Signal<string>;
169
+ protected readonly buttonIcon: import("@angular/core").Signal<string>;
170
+ constructor();
171
+ /** Take the screenshot, then open the dialog; resolves `true` when a report was sent. */
172
+ openDialog(): Promise<boolean>;
173
+ static ɵfac: i0.ɵɵFactoryDeclaration<LtBugReport, never>;
174
+ static ɵcmp: i0.ɵɵComponentDeclaration<LtBugReport, "lt-bug-report", never, {
175
+ "color": {
176
+ "alias": "color";
177
+ "required": false;
178
+ "isSignal": true;
179
+ };
180
+ "icon": {
181
+ "alias": "icon";
182
+ "required": false;
183
+ "isSignal": true;
184
+ };
185
+ "position": {
186
+ "alias": "position";
187
+ "required": false;
188
+ "isSignal": true;
189
+ };
190
+ "show": {
191
+ "alias": "show";
192
+ "required": false;
193
+ "isSignal": true;
194
+ };
195
+ "text": {
196
+ "alias": "text";
197
+ "required": false;
198
+ "isSignal": true;
199
+ };
200
+ }, {}, never, never, true, never>;
201
+ }
202
+ export type { LtBugReportFormValue, LtBugReportIncludes, LtScreenshotLibrary };
@@ -0,0 +1,116 @@
1
+ import { LtUploadItem, LtUploadStatus, formatLtFileSize } from "@lenne.tech/ng-base/files";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Upload UI (drop zone, file list with progress, pause/resume/cancel/retry), the counterpart of the Nuxt starter's
5
+ * `TusFileUpload.vue`. Built on `injectLtTusUpload()` and the `/ui` helm components.
6
+ *
7
+ * Keyboard: the drop zone holds a real button that opens the file dialog; every row action is a labelled button.
8
+ * Validation (`accept` for dropped files, `maxFileSize`, `maxFiles`, single file without `multiple`) rejects files with a
9
+ * message (`role="alert"`); finished and failed uploads are announced in a polite live region. With `multiple` off a new
10
+ * file replaces the previous one. Inputs are read when a file is added or started, so changing them takes effect for
11
+ * the next file.
12
+ *
13
+ * @example <lt-tus-upload accept="image/*" [multiple]="true" (uploaded)="onUploaded($event)" />
14
+ */
15
+ export declare class LtTusUploadComponent {
16
+ /** `accept` attribute of the file input; dropped files are checked against it as well. */
17
+ readonly accept: import("@angular/core").InputSignal<string>;
18
+ /** Start uploads right after selection (default `true`). */
19
+ readonly autoStart: import("@angular/core").InputSignal<boolean>;
20
+ /** Disable the drop zone. */
21
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
22
+ /** TUS endpoint (default from `provideLtFiles()`). */
23
+ readonly endpoint: import("@angular/core").InputSignal<string | undefined>;
24
+ /** Maximum file size in bytes (`0` = unlimited); larger files are rejected with a message. */
25
+ readonly maxFileSize: import("@angular/core").InputSignal<number>;
26
+ /** Maximum number of files (`0` = unlimited). */
27
+ readonly maxFiles: import("@angular/core").InputSignal<number>;
28
+ /** Extra TUS metadata for every file. */
29
+ readonly metadata: import("@angular/core").InputSignal<Record<string, string>>;
30
+ /** Allow several files. */
31
+ readonly multiple: import("@angular/core").InputSignal<boolean>;
32
+ /** A file finished uploading (`fileId` from `X-File-Id`). */
33
+ readonly uploaded: import("@angular/core").OutputEmitterRef<LtUploadItem>;
34
+ /** A file failed. */
35
+ readonly failed: import("@angular/core").OutputEmitterRef<LtUploadItem>;
36
+ /** Files were selected or dropped (the ones that passed validation and were added to the queue). */
37
+ readonly filesAdded: import("@angular/core").OutputEmitterRef<File[]>;
38
+ protected readonly i18n: import("@lenne.tech/ng-base").LtI18nService;
39
+ protected readonly upload: import("@lenne.tech/ng-base/files").LtTusUploadState;
40
+ protected readonly hintId: string;
41
+ protected readonly dragging: import("@angular/core").WritableSignal<boolean>;
42
+ protected readonly rejections: import("@angular/core").WritableSignal<string[]>;
43
+ protected readonly announcement: import("@angular/core").WritableSignal<string>;
44
+ protected readonly formatSize: typeof formatLtFileSize;
45
+ protected readonly hint: import("@angular/core").Signal<string>;
46
+ private dragDepth;
47
+ /** Status text of an item. */
48
+ protected statusLabel(status: LtUploadStatus): string;
49
+ /** Progress details of an uploading item (`42 % · 1.2 MB/s · noch 5s`). */
50
+ protected progressLabel(item: LtUploadItem): string;
51
+ /** Accessible label of a row action, naming the file. */
52
+ protected actionLabel(key: string, item: LtUploadItem): string;
53
+ /** Progress value clamped into the range the progress bar accepts. */
54
+ protected progressValue(item: LtUploadItem): number;
55
+ protected openFileDialog(input: HTMLInputElement): void;
56
+ protected onInputChange(input: HTMLInputElement): void;
57
+ protected onDragEnter(event: DragEvent): void;
58
+ protected onDragOver(event: DragEvent): void;
59
+ protected onDragLeave(event: DragEvent): void;
60
+ protected onDrop(event: DragEvent): void;
61
+ /** Validate and queue files; returns the accepted ones. */
62
+ private handleFiles;
63
+ private uploadOptions;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<LtTusUploadComponent, never>;
65
+ static ɵcmp: i0.ɵɵComponentDeclaration<LtTusUploadComponent, "lt-tus-upload", never, {
66
+ "accept": {
67
+ "alias": "accept";
68
+ "required": false;
69
+ "isSignal": true;
70
+ };
71
+ "autoStart": {
72
+ "alias": "autoStart";
73
+ "required": false;
74
+ "isSignal": true;
75
+ };
76
+ "disabled": {
77
+ "alias": "disabled";
78
+ "required": false;
79
+ "isSignal": true;
80
+ };
81
+ "endpoint": {
82
+ "alias": "endpoint";
83
+ "required": false;
84
+ "isSignal": true;
85
+ };
86
+ "maxFileSize": {
87
+ "alias": "maxFileSize";
88
+ "required": false;
89
+ "isSignal": true;
90
+ };
91
+ "maxFiles": {
92
+ "alias": "maxFiles";
93
+ "required": false;
94
+ "isSignal": true;
95
+ };
96
+ "metadata": {
97
+ "alias": "metadata";
98
+ "required": false;
99
+ "isSignal": true;
100
+ };
101
+ "multiple": {
102
+ "alias": "multiple";
103
+ "required": false;
104
+ "isSignal": true;
105
+ };
106
+ }, {
107
+ "uploaded": "uploaded";
108
+ "failed": "failed";
109
+ "filesAdded": "filesAdded";
110
+ }, never, never, true, never>;
111
+ }
112
+ /**
113
+ * Whether `file` matches an `accept` attribute value (`image/*`, `application/pdf`, `.png`, comma separated). An empty
114
+ * value and `*` / `*\/*` accept everything.
115
+ */
116
+ export declare function matchesLtAccept(file: File, accept: string): boolean;