@cosmicdrift/kumiko-samples 0.374.0 → 0.378.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 (247) hide show
  1. package/package.json +1 -1
  2. package/packages/bundled-features/package.json +6 -4
  3. package/packages/bundled-features/src/account-security/changes.json +6 -0
  4. package/packages/bundled-features/src/account-security/constants.ts +1 -0
  5. package/packages/bundled-features/src/account-security/index.ts +1 -0
  6. package/packages/bundled-features/src/admin-shell/web/client-plugin.tsx +1 -1
  7. package/packages/bundled-features/src/audit/web/client-plugin.tsx +1 -1
  8. package/packages/bundled-features/src/auth-email-password/mail-notifications.ts +1 -1
  9. package/packages/bundled-features/src/auth-email-password/web/auth-client.ts +1 -1
  10. package/packages/bundled-features/src/auth-email-password/web/auth-form-primitives.tsx +1 -1
  11. package/packages/bundled-features/src/auth-email-password/web/client-plugin.ts +3 -3
  12. package/packages/bundled-features/src/auth-email-password/web/default-topbar-actions.tsx +1 -1
  13. package/packages/bundled-features/src/auth-email-password/web/index.ts +1 -1
  14. package/packages/bundled-features/src/auth-email-password/web/session.tsx +1 -1
  15. package/packages/bundled-features/src/auth-email-password/web/tenant-menu-items.tsx +1 -1
  16. package/packages/bundled-features/src/auth-email-password/web/tenant-switcher.tsx +1 -1
  17. package/packages/bundled-features/src/auth-email-password/web/user-menu.tsx +1 -1
  18. package/packages/bundled-features/src/auth-foundation/changes.json +6 -0
  19. package/packages/bundled-features/src/auth-foundation/env.ts +27 -0
  20. package/packages/bundled-features/src/auth-foundation/index.ts +1 -0
  21. package/packages/bundled-features/src/billing-foundation/changes.json +6 -0
  22. package/packages/bundled-features/src/billing-foundation/consumer-protection/confirmation-mail.ts +1 -1
  23. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-pages.ts +1 -1
  24. package/packages/bundled-features/src/billing-foundation/contact-card.ts +14 -0
  25. package/packages/bundled-features/src/billing-foundation/handlers/billing-plans.query.ts +1 -1
  26. package/packages/bundled-features/src/billing-foundation/index.ts +1 -0
  27. package/packages/bundled-features/src/billing-foundation/plan-catalog.ts +1 -0
  28. package/packages/bundled-features/src/billing-foundation/types.ts +12 -0
  29. package/packages/bundled-features/src/billing-foundation/validate-options.ts +16 -0
  30. package/packages/bundled-features/src/billing-foundation/web/billing-contact-plan.tsx +32 -0
  31. package/packages/bundled-features/src/billing-foundation/web/billing-plans-panel.tsx +5 -15
  32. package/packages/bundled-features/src/billing-foundation/web/cancel-contract-dialog.tsx +2 -2
  33. package/packages/bundled-features/src/billing-foundation/web/checkout-consent-dialog.tsx +1 -1
  34. package/packages/bundled-features/src/billing-foundation/web/client-plugin.tsx +1 -1
  35. package/packages/bundled-features/src/billing-foundation/web/localized-params.ts +14 -0
  36. package/packages/bundled-features/src/cap-counter/changes.json +12 -0
  37. package/packages/bundled-features/src/cap-counter/stock-cap-guard.ts +9 -0
  38. package/packages/bundled-features/src/cap-overview/web/cap-cards-panel.tsx +3 -3
  39. package/packages/bundled-features/src/cap-overview/web/client-plugin.tsx +1 -1
  40. package/packages/bundled-features/src/channel-email/changes.json +6 -0
  41. package/packages/bundled-features/src/channel-email/email-channel.ts +2 -1
  42. package/packages/bundled-features/src/compliance-profiles/web/client-plugin.tsx +1 -1
  43. package/packages/bundled-features/src/config/feature.ts +2 -2
  44. package/packages/bundled-features/src/config/web/i18n.ts +1 -0
  45. package/packages/bundled-features/src/crypto-shredding/changes.json +6 -0
  46. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +1 -1
  47. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +1 -1
  48. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +1 -1
  49. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +1 -1
  50. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +1 -1
  51. package/packages/bundled-features/src/file-provider-s3/changes.json +6 -0
  52. package/packages/bundled-features/src/file-provider-s3/env-named-feature.ts +45 -0
  53. package/packages/bundled-features/src/file-provider-s3/env-schema.ts +20 -13
  54. package/packages/bundled-features/src/file-provider-s3/index.ts +4 -0
  55. package/packages/bundled-features/src/folders/web/client-plugin.tsx +1 -1
  56. package/packages/bundled-features/src/folders/web/folder-section.tsx +3 -4
  57. package/packages/bundled-features/src/host-routing/README.md +7 -0
  58. package/packages/bundled-features/src/host-routing/changes.json +6 -0
  59. package/packages/bundled-features/src/host-routing/constants.ts +4 -0
  60. package/packages/bundled-features/src/host-routing/dispatch.ts +34 -26
  61. package/packages/bundled-features/src/host-routing/feature.ts +122 -41
  62. package/packages/bundled-features/src/host-routing/host.ts +28 -1
  63. package/packages/bundled-features/src/host-routing/index.ts +3 -0
  64. package/packages/bundled-features/src/host-routing/options.ts +45 -2
  65. package/packages/bundled-features/src/host-routing/redirects.ts +33 -0
  66. package/packages/bundled-features/src/host-routing/tenant-lookup.ts +65 -0
  67. package/packages/bundled-features/src/host-routing/validate-options.ts +48 -1
  68. package/packages/bundled-features/src/inbound-mail-foundation/changes.json +13 -0
  69. package/packages/bundled-features/src/inbound-mail-foundation/feature.ts +8 -0
  70. package/packages/bundled-features/src/inbound-mail-foundation/handlers/list-accounts.query.ts +11 -4
  71. package/packages/bundled-features/src/inbound-mail-foundation/i18n.ts +42 -0
  72. package/packages/bundled-features/src/inbound-mail-foundation/index.ts +4 -0
  73. package/packages/bundled-features/src/inbound-mail-foundation/screens.ts +100 -0
  74. package/packages/bundled-features/src/inbound-mail-foundation/types.ts +2 -2
  75. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +1 -1
  76. package/packages/bundled-features/src/legal-pages/changes.json +6 -0
  77. package/packages/bundled-features/src/legal-pages/feature.ts +14 -1
  78. package/packages/bundled-features/src/legal-pages/layout.ts +6 -6
  79. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -1
  80. package/packages/bundled-features/src/mail-foundation/changes.json +6 -0
  81. package/packages/bundled-features/src/mail-foundation/feature.ts +21 -22
  82. package/packages/bundled-features/src/mail-foundation/i18n.ts +3 -2
  83. package/packages/bundled-features/src/mail-transport-smtp/i18n.ts +1 -1
  84. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -1
  85. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +1 -1
  86. package/packages/bundled-features/src/page-render/branding.ts +1 -1
  87. package/packages/bundled-features/src/page-render/layout.ts +2 -2
  88. package/packages/bundled-features/src/page-render/markdown.ts +1 -1
  89. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +1 -1
  90. package/packages/bundled-features/src/personal-access-tokens/screens.ts +1 -1
  91. package/packages/bundled-features/src/secrets/feature.ts +4 -4
  92. package/packages/bundled-features/src/seo/sitemap.ts +1 -1
  93. package/packages/bundled-features/src/shared/mail-template-body.ts +1 -1
  94. package/packages/bundled-features/src/shared/purge-files-reaching-subject.ts +127 -2
  95. package/packages/bundled-features/src/tags/web/client-plugin.tsx +1 -1
  96. package/packages/bundled-features/src/template-resolver/changes.json +38 -0
  97. package/packages/bundled-features/src/template-resolver/compile-document-body.ts +61 -3
  98. package/packages/bundled-features/src/template-resolver/constants.ts +3 -0
  99. package/packages/bundled-features/src/template-resolver/document-blocks.ts +36 -0
  100. package/packages/bundled-features/src/template-resolver/document-images.ts +29 -0
  101. package/packages/bundled-features/src/template-resolver/document-ops.ts +515 -0
  102. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +44 -0
  103. package/packages/bundled-features/src/template-resolver/document-schema.ts +5 -0
  104. package/packages/bundled-features/src/template-resolver/feature.ts +79 -34
  105. package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +1 -0
  106. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  107. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -1
  108. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +2 -6
  109. package/packages/bundled-features/src/template-resolver/handlers/collection-shared.ts +0 -6
  110. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +67 -58
  111. package/packages/bundled-features/src/template-resolver/handlers/discard-draft.write.ts +36 -13
  112. package/packages/bundled-features/src/template-resolver/handlers/document-base.ts +86 -0
  113. package/packages/bundled-features/src/template-resolver/handlers/document-blocks.query.ts +48 -0
  114. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +11 -3
  115. package/packages/bundled-features/src/template-resolver/handlers/import-bundle.write.ts +37 -28
  116. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +66 -62
  117. package/packages/bundled-features/src/template-resolver/handlers/patch-draft.write.ts +134 -0
  118. package/packages/bundled-features/src/template-resolver/handlers/preview.query.ts +2 -1
  119. package/packages/bundled-features/src/template-resolver/handlers/reset-to-system.write.ts +62 -49
  120. package/packages/bundled-features/src/template-resolver/handlers/resource-link-pdf.write.ts +44 -29
  121. package/packages/bundled-features/src/template-resolver/handlers/resource-remove.write.ts +52 -36
  122. package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +126 -106
  123. package/packages/bundled-features/src/template-resolver/handlers/send-test-shared.ts +38 -0
  124. package/packages/bundled-features/src/template-resolver/handlers/send-test-status.query.ts +31 -0
  125. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +105 -110
  126. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +110 -103
  127. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +22 -1
  128. package/packages/bundled-features/src/template-resolver/handlers/toggle-status.write.ts +56 -28
  129. package/packages/bundled-features/src/template-resolver/handlers/upsert-tenant.write.ts +38 -29
  130. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +24 -9
  131. package/packages/bundled-features/src/template-resolver/index.ts +8 -1
  132. package/packages/bundled-features/src/template-resolver/{web/placeholder-text.ts → placeholder-text.ts} +1 -1
  133. package/packages/bundled-features/src/template-resolver/qualified-names.ts +4 -0
  134. package/packages/bundled-features/src/template-resolver/seeding.ts +3 -1
  135. package/packages/bundled-features/src/template-resolver/template-bundle.ts +6 -1
  136. package/packages/bundled-features/src/template-resolver/template-edit-policy.ts +91 -0
  137. package/packages/bundled-features/src/template-resolver/template-preview.ts +32 -10
  138. package/packages/bundled-features/src/template-resolver/template-validation.ts +32 -11
  139. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +3 -3
  140. package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +29 -0
  141. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +43 -5
  142. package/packages/bundled-features/src/template-resolver/web/document-toolbar-blocks.ts +9 -33
  143. package/packages/bundled-features/src/template-resolver/web/i18n.ts +30 -0
  144. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +2 -2
  145. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +1 -1
  146. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +1 -1
  147. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +1 -1
  148. package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
  149. package/packages/bundled-features/src/user-data-rights/env.ts +15 -0
  150. package/packages/bundled-features/src/user-data-rights/feature.ts +4 -2
  151. package/packages/bundled-features/src/user-data-rights/index.ts +1 -0
  152. package/packages/bundled-features/src/user-data-rights/lib/mail-transport-resolver.ts +1 -1
  153. package/packages/bundled-features/src/user-data-rights/lib/storage-provider-resolver.ts +1 -1
  154. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +1 -1
  155. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +1 -1
  156. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +2 -2
  157. package/packages/bundled-features/src/waitlist/changes.json +6 -0
  158. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +51 -2
  159. package/samples/apps/admin-console/package.json +0 -3
  160. package/samples/apps/admin-console/src/app/client.tsx +1 -1
  161. package/samples/apps/admin-console/src/app/shell.tsx +1 -1
  162. package/samples/apps/config-demo/package.json +1 -3
  163. package/samples/apps/config-demo/src/app/client.tsx +1 -1
  164. package/samples/apps/config-demo/src/app/shell.tsx +2 -2
  165. package/samples/apps/config-demo/src/features/demo/web/index.ts +1 -1
  166. package/samples/apps/config-demo/tsconfig.json +0 -12
  167. package/samples/apps/marketing-demo/package.json +1 -3
  168. package/samples/apps/marketing-demo/src/app/client.tsx +1 -1
  169. package/samples/apps/marketing-demo/src/app/shell.tsx +1 -1
  170. package/samples/apps/marketing-demo/src/features/assets/web/index.ts +1 -1
  171. package/samples/apps/marketing-demo/src/features/helpdesk/web/index.ts +1 -1
  172. package/samples/apps/showcase/package.json +1 -3
  173. package/samples/apps/showcase/src/app/client.tsx +1 -1
  174. package/samples/apps/showcase/src/app/shell.tsx +1 -1
  175. package/samples/apps/showcase/src/features/demos/web/index.ts +1 -1
  176. package/samples/apps/showcase/src/features/demos/web/pages/sidebar-panel.tsx +1 -1
  177. package/samples/apps/showcase/src/features/demos/web/pages/toast.tsx +1 -1
  178. package/samples/apps/showcase/src/features/items/web/index.ts +1 -1
  179. package/samples/apps/styleguide/package.json +1 -3
  180. package/samples/apps/styleguide/src/app/client.tsx +1 -1
  181. package/samples/apps/styleguide/src/app/shell.tsx +2 -2
  182. package/samples/apps/styleguide/src/features/ai-settings/web.ts +1 -1
  183. package/samples/apps/styleguide/src/features/content/web.tsx +2 -2
  184. package/samples/apps/styleguide/src/features/demo/web.ts +1 -1
  185. package/samples/apps/styleguide/src/features/examples/web.ts +1 -1
  186. package/samples/apps/styleguide/src/features/gallery/web/Gallery.tsx +1 -1
  187. package/samples/apps/styleguide/src/features/gallery/web/index.ts +1 -1
  188. package/samples/apps/styleguide/src/features/widgets/demo-locale.ts +1 -1
  189. package/samples/apps/styleguide/src/features/widgets/lib/format.ts +1 -1
  190. package/samples/apps/styleguide/src/features/widgets/web/DashboardFilterEcho.tsx +1 -1
  191. package/samples/apps/styleguide/src/features/widgets/web/FormExamples.tsx +1 -1
  192. package/samples/apps/styleguide/src/features/widgets/web/Widgets.tsx +1 -1
  193. package/samples/apps/styleguide/src/features/widgets/web/index.ts +1 -1
  194. package/samples/apps/styleguide/tsconfig.json +0 -12
  195. package/samples/apps/ui-walkthrough/package.json +1 -3
  196. package/samples/apps/ui-walkthrough/src/app/client.tsx +1 -1
  197. package/samples/apps/ui-walkthrough/src/app/help-action.tsx +37 -0
  198. package/samples/apps/ui-walkthrough/src/app/seed-templates.ts +2 -0
  199. package/samples/apps/ui-walkthrough/src/app/shell.tsx +7 -1
  200. package/samples/apps/ui-walkthrough/src/app/template-seed-data.ts +20 -0
  201. package/samples/apps/ui-walkthrough/src/features/billing/web/index.ts +1 -1
  202. package/samples/apps/ui-walkthrough/src/features/rental/feature.ts +65 -1
  203. package/samples/apps/ui-walkthrough/src/features/rental/i18n.ts +70 -0
  204. package/samples/apps/ui-walkthrough/src/features/rental/invoice-receive.ts +20 -0
  205. package/samples/apps/ui-walkthrough/src/features/rental/lease-support.ts +15 -0
  206. package/samples/apps/ui-walkthrough/src/features/rental/qualified-names.ts +2 -0
  207. package/samples/apps/ui-walkthrough/src/features/rental/screens.ts +79 -0
  208. package/samples/apps/ui-walkthrough/src/features/rental/web/index.ts +3 -1
  209. package/samples/apps/ui-walkthrough/src/features/rental/web/upload-standard-layout.tsx +61 -0
  210. package/samples/apps/ui-walkthrough/src/features/tasks/i18n.ts +8 -0
  211. package/samples/apps/ui-walkthrough/src/features/tasks/web/index.ts +1 -1
  212. package/samples/apps/ui-walkthrough/src/features/vehicles/web/index.ts +1 -1
  213. package/samples/apps/ui-walkthrough/src/run-config.ts +32 -3
  214. package/samples/apps/use-all-bundled/bin/main.ts +3 -2
  215. package/samples/apps/use-all-bundled/e2e-billing-gallery/gallery-features.ts +12 -0
  216. package/samples/apps/use-all-bundled/e2e-billing-gallery/server.ts +1 -1
  217. package/samples/apps/use-all-bundled/feature-manifest.json +3 -2
  218. package/samples/apps/use-all-bundled/package.json +1 -3
  219. package/samples/apps/use-all-bundled/src/app/client.tsx +1 -1
  220. package/samples/apps/use-all-bundled/src/app/dev-app-options.ts +5 -4
  221. package/samples/apps/use-all-bundled/src/app/shell.tsx +1 -1
  222. package/samples/apps/use-all-bundled/src/run-config.ts +10 -1
  223. package/samples/apps/workspaces/package.json +1 -3
  224. package/samples/apps/workspaces/src/app/client.tsx +1 -1
  225. package/samples/apps/workspaces/src/app/shell.tsx +1 -1
  226. package/samples/apps/workspaces/src/features/demo/web/index.ts +1 -1
  227. package/samples/apps/workspaces/src/features/demo-driver/web/index.ts +1 -1
  228. package/samples/recipes/apex-landing/package.json +1 -1
  229. package/samples/recipes/apex-landing/src/feature.ts +1 -1
  230. package/samples/recipes/apex-surface-auth/README.md +1 -1
  231. package/samples/recipes/apex-surface-auth/src/feature.ts +2 -2
  232. package/samples/recipes/compose-stacks/README.md +7 -4
  233. package/samples/recipes/delivery-notifications/README.md +1 -1
  234. package/samples/recipes/embedded/README.md +8 -0
  235. package/samples/recipes/embedded/src/feature.ts +8 -0
  236. package/samples/recipes/embedded/src/handlers/invoice-receive.write.ts +38 -0
  237. package/samples/recipes/embedded/src/screens/invoice-receive.screen.ts +59 -0
  238. package/samples/recipes/embedded-entity-form/package.json +0 -1
  239. package/samples/recipes/embedded-entity-form/src/web/accept-suggestion-drawer.tsx +1 -1
  240. package/samples/recipes/notes-history-basic/README.md +1 -1
  241. package/samples/recipes/record-detail-layout/package.json +0 -1
  242. package/samples/recipes/tags-basic/README.md +1 -1
  243. package/samples/recipes/user-profile/README.md +1 -1
  244. package/samples/recipes/wizard-form/package.json +0 -1
  245. package/samples/recipes/wizard-form/src/web/index.ts +2 -2
  246. package/samples/recipes/wizard-form/src/web/listing-review-section.tsx +2 -2
  247. package/samples/recipes/writeform-section/package.json +0 -1
@@ -11,10 +11,8 @@
11
11
  "dependencies": {
12
12
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
13
13
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
14
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
14
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
15
15
  "@cosmicdrift/kumiko-framework": "workspace:*",
16
- "@cosmicdrift/kumiko-headless": "workspace:*",
17
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
18
16
  "@cosmicdrift/kumiko-types": "workspace:*",
19
17
  "react": "^19.2.6",
20
18
  "react-dom": "^19.2.6",
@@ -2,7 +2,7 @@
2
2
  // shared shell, alles aus dem Framework-Default.
3
3
 
4
4
  import { localeDeClient } from "@cosmicdrift/kumiko-locale-de/web";
5
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
5
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
6
6
  import { assetsClient } from "../features/assets/web";
7
7
  import { helpdeskClient } from "../features/helpdesk/web";
8
8
  import { AppShell } from "./shell";
@@ -2,7 +2,7 @@
2
2
  // „Kumiko Demo", Light-Mode-default (kein Theme-Toggle für screenshots
3
3
  // damit immer der gleiche Look).
4
4
 
5
- import { type AppSchema, DefaultAppShell } from "@cosmicdrift/kumiko-renderer-web";
5
+ import { type AppSchema, DefaultAppShell } from "@cosmicdrift/kumiko-renderer/web";
6
6
  import type { ReactNode } from "react";
7
7
 
8
8
  // Logo-Kachel + Wortmarke — wie SidebarBrand (sidebar-brand.tsx). Die
@@ -1,7 +1,7 @@
1
1
  // Assets — ClientFeatureDefinition. Pure Schema-driven, keine Custom-
2
2
  // Components. Render läuft über Standard-RenderList + RenderEdit.
3
3
 
4
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
4
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
5
5
  import { assetsTranslations } from "../i18n";
6
6
 
7
7
  export const assetsClient: ClientFeatureDefinition = {
@@ -1,4 +1,4 @@
1
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
1
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
2
2
  import { helpdeskTranslations } from "../i18n";
3
3
 
4
4
  export const helpdeskClient: ClientFeatureDefinition = {
@@ -11,10 +11,8 @@
11
11
  "dependencies": {
12
12
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
13
13
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
14
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
14
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
15
15
  "@cosmicdrift/kumiko-framework": "workspace:*",
16
- "@cosmicdrift/kumiko-headless": "workspace:*",
17
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
18
16
  "lucide-react": "^1.14.0",
19
17
  "react": "^19.2.6",
20
18
  "react-dom": "^19.2.6",
@@ -4,7 +4,7 @@
4
4
  // via clientFeatures.components.
5
5
 
6
6
  import { localeDeClient } from "@cosmicdrift/kumiko-locale-de/web";
7
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
7
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
8
8
  import { demosClient } from "../features/demos/web";
9
9
  import { itemsClient } from "../features/items/web";
10
10
  import { AppShell } from "./shell";
@@ -9,7 +9,7 @@ import {
9
9
  ProfileMenu,
10
10
  type ProfileMenuItem,
11
11
  ThemeToggle,
12
- } from "@cosmicdrift/kumiko-renderer-web";
12
+ } from "@cosmicdrift/kumiko-renderer/web";
13
13
  import { MoonStar, Sun } from "lucide-react";
14
14
  import type { ReactNode } from "react";
15
15
 
@@ -3,7 +3,7 @@
3
3
  // merged das in den CustomScreens-Context, KumikoScreen schaut darin
4
4
  // nach wenn ein Schema-Screen `type: "custom"` hat.
5
5
 
6
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
6
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
7
7
  import { demosTranslations } from "../i18n";
8
8
  import { BannerDemo } from "./pages/banner";
9
9
  import { ButtonsDemo } from "./pages/buttons";
@@ -1,5 +1,5 @@
1
1
  import { usePrimitives } from "@cosmicdrift/kumiko-renderer";
2
- import { SidebarPanel } from "@cosmicdrift/kumiko-renderer-web";
2
+ import { SidebarPanel } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import { type ReactNode, useState } from "react";
4
4
  import { DemoPage, DemoSection } from "../components/page";
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { usePrimitives } from "@cosmicdrift/kumiko-renderer";
2
- import { useToast } from "@cosmicdrift/kumiko-renderer-web";
2
+ import { useToast } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import { type ReactNode, useState } from "react";
4
4
  import { DemoPage, DemoSection } from "../components/page";
5
5
 
@@ -6,7 +6,7 @@
6
6
  // Native-Plattform würde parallel dazu in features/items/native/
7
7
  // liegen — translations werden geteilt, components/UI nicht.
8
8
 
9
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
9
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
10
10
  import { itemsTranslations } from "../i18n";
11
11
 
12
12
  export const itemsClient: ClientFeatureDefinition = {
@@ -3,10 +3,8 @@
3
3
  "dependencies": {
4
4
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
5
5
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
6
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
6
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
7
7
  "@cosmicdrift/kumiko-framework": "workspace:*",
8
- "@cosmicdrift/kumiko-headless": "workspace:*",
9
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
10
8
  "react": "^19.2.6",
11
9
  "react-dom": "^19.2.6",
12
10
  "@cosmicdrift/kumiko-locale-de": "workspace:*"
@@ -1,6 +1,6 @@
1
1
  import { configClient } from "@cosmicdrift/kumiko-bundled-features/config/web";
2
2
  import { localeDeClient } from "@cosmicdrift/kumiko-locale-de/web";
3
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
3
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
4
4
  import { aiSettingsClient } from "../features/ai-settings/web";
5
5
  import { contentClient } from "../features/content/web";
6
6
  import { styleguideClient } from "../features/demo/web";
@@ -1,5 +1,5 @@
1
1
  import { useNav } from "@cosmicdrift/kumiko-renderer";
2
- import type { AppSchema } from "@cosmicdrift/kumiko-renderer-web";
2
+ import type { AppSchema } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import {
4
4
  DefaultAppShell,
5
5
  EditorPanel,
@@ -7,7 +7,7 @@ import {
7
7
  SidebarBrand,
8
8
  SidebarUser,
9
9
  useResolvers,
10
- } from "@cosmicdrift/kumiko-renderer-web";
10
+ } from "@cosmicdrift/kumiko-renderer/web";
11
11
  import { GalleryVerticalEnd } from "lucide-react";
12
12
  import type { ReactNode } from "react";
13
13
 
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  ClientFeatureDefinition,
3
3
  TranslationsByLocale,
4
- } from "@cosmicdrift/kumiko-renderer-web";
4
+ } from "@cosmicdrift/kumiko-renderer/web";
5
5
 
6
6
  import { toClientTranslations } from "../shared-i18n";
7
7
  import { AI_SETTINGS_I18N } from "./i18n";
@@ -6,14 +6,14 @@
6
6
  // sofort im Sidebar-Tree. Der content:edit-Resolver rendert das Anlege-
7
7
  // Formular (leeres target) bzw. die Detail-Ansicht (target mit id).
8
8
 
9
- import { CSRF_HEADER_NAME, readCsrfToken } from "@cosmicdrift/kumiko-dispatcher-live";
10
9
  import type {
11
10
  TargetRef,
12
11
  TreeChildrenSubscribe,
13
12
  TreeNode,
14
13
  } from "@cosmicdrift/kumiko-framework/engine";
15
14
  import { useDispatcher, usePrimitives, useQuery } from "@cosmicdrift/kumiko-renderer";
16
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
15
+ import { CSRF_HEADER_NAME, readCsrfToken } from "@cosmicdrift/kumiko-renderer/live";
16
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
17
17
  import { type FormEvent, type ReactNode, useEffect, useState } from "react";
18
18
 
19
19
  type Page = { readonly id: string; readonly slug: string; readonly title: string };
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  ClientFeatureDefinition,
3
3
  TranslationsByLocale,
4
- } from "@cosmicdrift/kumiko-renderer-web";
4
+ } from "@cosmicdrift/kumiko-renderer/web";
5
5
  import { toClientTranslations } from "../shared-i18n";
6
6
  import { DEMO_I18N } from "./i18n";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  ClientFeatureDefinition,
3
3
  TranslationsByLocale,
4
- } from "@cosmicdrift/kumiko-renderer-web";
4
+ } from "@cosmicdrift/kumiko-renderer/web";
5
5
 
6
6
  import { toClientTranslations } from "../shared-i18n";
7
7
  import { EXAMPLES_I18N } from "./i18n";
@@ -3,7 +3,7 @@ import {
3
3
  PageSection,
4
4
  ResultTable,
5
5
  usePrimitives,
6
- } from "@cosmicdrift/kumiko-renderer-web";
6
+ } from "@cosmicdrift/kumiko-renderer/web";
7
7
  import { Check, ChevronDown, Search, X } from "lucide-react";
8
8
  import type { ReactNode } from "react";
9
9
 
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  ClientFeatureDefinition,
3
3
  TranslationsByLocale,
4
- } from "@cosmicdrift/kumiko-renderer-web";
4
+ } from "@cosmicdrift/kumiko-renderer/web";
5
5
  import { Gallery } from "./Gallery";
6
6
 
7
7
  const labels: Record<string, string> = {
@@ -1,5 +1,5 @@
1
1
  // Server-side locale helpers for the dashboard demo queries. Not shared with
2
- // renderer-web's format.ts: server code must not import renderer-web.
2
+ // renderer/web's format.ts: server code must not import renderer/web.
3
3
 
4
4
  import { WIDGETS_I18N } from "./i18n";
5
5
 
@@ -1,4 +1,4 @@
1
- import { formatMoney } from "@cosmicdrift/kumiko-renderer-web";
1
+ import { formatMoney } from "@cosmicdrift/kumiko-renderer/web";
2
2
 
3
3
  // `locale` comes from useLocale(), whose default resolver reads it
4
4
  // unvalidated from localStorage/navigator.language — a structurally invalid
@@ -4,7 +4,7 @@
4
4
  // DashboardFilterDefinition in feature.ts).
5
5
 
6
6
  import { type ExtensionSectionProps, useTranslation } from "@cosmicdrift/kumiko-renderer";
7
- import { SectionCard } from "@cosmicdrift/kumiko-renderer-web";
7
+ import { SectionCard } from "@cosmicdrift/kumiko-renderer/web";
8
8
  import type { ReactNode } from "react";
9
9
 
10
10
  export function DashboardFilterEcho({ filterParams }: ExtensionSectionProps): ReactNode {
@@ -14,7 +14,7 @@ import {
14
14
  TextareaField,
15
15
  TextField,
16
16
  useDraft,
17
- } from "@cosmicdrift/kumiko-renderer-web";
17
+ } from "@cosmicdrift/kumiko-renderer/web";
18
18
  import type { ReactNode } from "react";
19
19
 
20
20
  export function FormExamples(): ReactNode {
@@ -36,7 +36,7 @@ import {
36
36
  TextField,
37
37
  TimeseriesChart,
38
38
  useDraft,
39
- } from "@cosmicdrift/kumiko-renderer-web";
39
+ } from "@cosmicdrift/kumiko-renderer/web";
40
40
  import { Wallet } from "lucide-react";
41
41
  import { type ReactNode, useEffect, useMemo, useState } from "react";
42
42
  import { euro, percent } from "../lib/format";
@@ -1,5 +1,5 @@
1
1
  import type { TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
2
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import { WIDGETS_I18N } from "../i18n";
4
4
  import { DashboardFilterEcho } from "./DashboardFilterEcho";
5
5
  import { DashboardKpiIcon } from "./DashboardKpiIcon";
@@ -14,18 +14,6 @@
14
14
  "@cosmicdrift/kumiko-dev-server/*": [
15
15
  "../../../packages/dev-server/src/*"
16
16
  ],
17
- "@cosmicdrift/kumiko-renderer-web": [
18
- "../../../packages/renderer-web/src/index.ts"
19
- ],
20
- "@cosmicdrift/kumiko-renderer-web/*": [
21
- "../../../packages/renderer-web/src/*"
22
- ],
23
- "@cosmicdrift/kumiko-dispatcher-live": [
24
- "../../../packages/dispatcher-live/src/index.ts"
25
- ],
26
- "@cosmicdrift/kumiko-headless": [
27
- "../../../packages/headless/src/index.ts"
28
- ],
29
17
  "@cosmicdrift/kumiko-renderer": [
30
18
  "../../../packages/renderer/src/index.ts"
31
19
  ],
@@ -11,12 +11,10 @@
11
11
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
12
12
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
13
13
  "@cosmicdrift/kumiko-document-designer": "workspace:*",
14
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
14
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
15
15
  "@cosmicdrift/kumiko-framework": "workspace:*",
16
- "@cosmicdrift/kumiko-headless": "workspace:*",
17
16
  "@cosmicdrift/kumiko-renderer-mail-html": "workspace:*",
18
17
  "@cosmicdrift/kumiko-renderer-puppeteer-client": "workspace:*",
19
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
20
18
  "@cosmicdrift/kumiko-server-runtime": "workspace:*",
21
19
  "react": "^19.2.6",
22
20
  "react-dom": "^19.2.6",
@@ -5,7 +5,7 @@ import { emailPasswordClient } from "@cosmicdrift/kumiko-bundled-features/auth-e
5
5
  import { textBlocksClient } from "@cosmicdrift/kumiko-bundled-features/template-resolver/web";
6
6
  import { documentDesignerClient } from "@cosmicdrift/kumiko-document-designer/web";
7
7
  import { localeDeClient } from "@cosmicdrift/kumiko-locale-de/web";
8
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
8
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
9
9
  import { billingClient } from "../features/billing/web";
10
10
  import { rentalClient } from "../features/rental/web";
11
11
  import { tasksClient } from "../features/tasks/web";
@@ -0,0 +1,37 @@
1
+ import { useTranslation } from "@cosmicdrift/kumiko-renderer";
2
+ import { Drawer } from "@cosmicdrift/kumiko-renderer/web";
3
+ import { CircleHelp } from "lucide-react";
4
+ import { type ReactNode, useState } from "react";
5
+
6
+ // A non-modal side panel: the screen behind stays usable and narrows instead of being covered.
7
+ export function HelpAction(): ReactNode {
8
+ const t = useTranslation();
9
+ const [open, setOpen] = useState(false);
10
+ return (
11
+ <>
12
+ <button
13
+ type="button"
14
+ data-testid="help-action"
15
+ aria-label={t("tasks.help.label")}
16
+ aria-pressed={open}
17
+ onClick={() => setOpen((current) => !current)}
18
+ className="inline-flex size-9 items-center justify-center rounded-md border border-border bg-card text-foreground hover:bg-accent"
19
+ >
20
+ <CircleHelp className="h-4 w-4" aria-hidden="true" />
21
+ </button>
22
+ <Drawer
23
+ open={open}
24
+ onOpenChange={setOpen}
25
+ side="right"
26
+ modal={false}
27
+ belowHeader
28
+ width={360}
29
+ title={t("tasks.help.label")}
30
+ description={t("tasks.help.description")}
31
+ testId="help-drawer"
32
+ >
33
+ <p className="py-2 text-sm text-muted-foreground">{t("tasks.help.body")}</p>
34
+ </Drawer>
35
+ </>
36
+ );
37
+ }
@@ -31,6 +31,7 @@ import {
31
31
  SYSTEM_INVOICE_DOCUMENTS,
32
32
  SYSTEM_INVOICE_ISSUED,
33
33
  SYSTEM_PDF_LAYOUT,
34
+ SYSTEM_PROPERTY_EXPOSE,
34
35
  SYSTEM_TENANCY_CERTIFICATE,
35
36
  SYSTEM_TERMS_CHANGED,
36
37
  TENANT_INVOICE_OVERRIDES,
@@ -168,6 +169,7 @@ export const seedTemplates: SeedFn = async (stack) => {
168
169
  await upsertSystem(SYSTEM_INVOICE_ISSUED);
169
170
  await upsertSystem(SYSTEM_TERMS_CHANGED);
170
171
  for (const document of SYSTEM_INVOICE_DOCUMENTS) await upsertSystem(document);
172
+ await upsertSystem(SYSTEM_PROPERTY_EXPOSE);
171
173
  const certificate = await upsertSystem(SYSTEM_TENANCY_CERTIFICATE);
172
174
  await stack.http.writeOk(
173
175
  TemplateResolverHandlers.archiveSystem,
@@ -14,8 +14,9 @@ import {
14
14
  SidebarBrand,
15
15
  ThemeMenuItem,
16
16
  ThemeToggle,
17
+ useNav,
17
18
  useTranslation,
18
- } from "@cosmicdrift/kumiko-renderer-web";
19
+ } from "@cosmicdrift/kumiko-renderer/web";
19
20
  import { MoonStar, Sun } from "lucide-react";
20
21
  import type { ReactNode } from "react";
21
22
  import { AssistantAction } from "./assistant-action";
@@ -25,8 +26,10 @@ import {
25
26
  NORDLICHT_TENANT_ID,
26
27
  NORDLICHT_TENANT_NAME,
27
28
  } from "./auth-constants";
29
+ import { HelpAction } from "./help-action";
28
30
 
29
31
  const APP_NAME = "Kumiko Walkthrough";
32
+ const HELP_SCREEN_ID = "vehicle-edit";
30
33
 
31
34
  const tenantName = (tenantId: string): string => {
32
35
  if (tenantId === DEV_TENANT_ID) return "Dev Tenant";
@@ -49,6 +52,7 @@ export function AppShell({
49
52
  }): ReactNode {
50
53
  const t = useTranslation();
51
54
  const session = useSession();
55
+ const nav = useNav();
52
56
  // Without the user the shell hides role-gated navs and KumikoScreen denies role-gated screens.
53
57
  const user = session.user !== null ? { id: session.user.id, roles: session.roles } : undefined;
54
58
  return (
@@ -58,6 +62,8 @@ export function AppShell({
58
62
  {...(user !== undefined && { user })}
59
63
  headerActions={
60
64
  <>
65
+ {/* Only here: the editor screens need the header width for their own actions. */}
66
+ {nav.route?.screenId === HELP_SCREEN_ID && <HelpAction />}
61
67
  <AssistantAction />
62
68
  <ThemeToggle />
63
69
  </>
@@ -535,6 +535,26 @@ export const SYSTEM_TENANCY_CERTIFICATE: SeedTemplate = {
535
535
  },
536
536
  };
537
537
 
538
+ export const SYSTEM_PROPERTY_EXPOSE: SeedTemplate = {
539
+ slug: "rental:property-expose",
540
+ kind: "document-pdf",
541
+ locale: "de",
542
+ title: "Exposé",
543
+ content: [
544
+ `<h1>Exposé ${v("propertyAddress")}</h1>`,
545
+ `<p>${v("propertySummary")}</p>`,
546
+ "<h2>Objektfotos</h2>",
547
+ '<div data-images="photos"></div>',
548
+ ].join(""),
549
+ meta: { layoutSlug: "default", pageFormat: "A4", fileName: "Expose.pdf" },
550
+ variableSchema: {
551
+ propertyAddress: { type: "text", required: true },
552
+ propertySummary: { type: "text", required: true },
553
+ // The app passes the FileRef ids of the property photos when it renders the PDF.
554
+ photos: { type: "images", label: "Objektfotos" },
555
+ },
556
+ };
557
+
538
558
  // Two other tenants customise the invoice for the "Anpassungen der Mandanten" drawer: one
539
559
  // published copy with a second save, one draft.
540
560
  export type TenantInvoiceOverride = {
@@ -1,4 +1,4 @@
1
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
1
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
2
2
  import { billingTranslations } from "../i18n";
3
3
 
4
4
  export const billingClient: ClientFeatureDefinition = {
@@ -1,12 +1,18 @@
1
1
  import type { EventStoreExecutor } from "@cosmicdrift/kumiko-framework/db";
2
- import { defineFeature, i18nKey } from "@cosmicdrift/kumiko-framework/engine";
2
+ import { defineFeature, defineWriteHandler, i18nKey } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { failNotFound } from "@cosmicdrift/kumiko-framework/errors";
4
+ import {
5
+ renderPdfBeforeTransaction,
6
+ storeRenderedPdf,
7
+ } from "@cosmicdrift/kumiko-renderer-puppeteer-client";
4
8
  import { z } from "zod";
5
9
  import { openToAllSignedIn, toKeyFirst } from "../translations";
6
10
  import { leaseEntity, leasePartyEntity, leasePositionEntity } from "./entities";
7
11
  import { rentalTranslations } from "./i18n";
12
+ import { receiveInvoicePayloadSchema } from "./invoice-receive";
8
13
  import {
9
14
  dayBefore,
15
+ fileRefIdsPayloadSchema,
10
16
  formatGermanDate,
11
17
  formatGermanMoney,
12
18
  germanStatusLabel,
@@ -18,6 +24,7 @@ import {
18
24
  positionExecutor,
19
25
  positionListRowSchema,
20
26
  positionRowSchema,
27
+ propertyExposePayloadSchema,
21
28
  type RecordedPositionItem,
22
29
  recordPositionsPayloadSchema,
23
30
  rentAdjustPayloadSchema,
@@ -32,8 +39,10 @@ import {
32
39
  leaseListScreen,
33
40
  leaseListShortScreen,
34
41
  leaseSuccessionListScreen,
42
+ leaseUnterlagenScreen,
35
43
  partyEditScreen,
36
44
  positionEditScreen,
45
+ receiveInvoiceScreen,
37
46
  recordPositionsScreen,
38
47
  rentalDashboardScreen,
39
48
  } from "./screens";
@@ -95,6 +104,17 @@ export const rentalFeature = defineFeature("rental", (r) => {
95
104
  });
96
105
  r.crud("leaseParty", leasePartyEntity, { write: open, read: open });
97
106
 
107
+ r.queryHandler({
108
+ name: "lease:unterlagen",
109
+ schema: fileRefIdsPayloadSchema,
110
+ handler: async (query) => ({
111
+ id: "unterlagen",
112
+ titel: "Unterlagen",
113
+ unterlagen: query.payload.id,
114
+ }),
115
+ ...open,
116
+ });
117
+
98
118
  r.queryHandler({
99
119
  name: "lease:akte",
100
120
  schema: idPayloadSchema,
@@ -217,6 +237,28 @@ export const rentalFeature = defineFeature("rental", (r) => {
217
237
  ...open,
218
238
  });
219
239
 
240
+ r.writeHandler({
241
+ name: "invoice:receive",
242
+ schema: receiveInvoicePayloadSchema,
243
+ handler: async (event) => ({ isSuccess: true, data: event.payload }),
244
+ ...open,
245
+ });
246
+
247
+ r.writeHandler(
248
+ defineWriteHandler({
249
+ name: "generate-property-expose",
250
+ schema: propertyExposePayloadSchema,
251
+ access: { roles: ["TenantAdmin"] },
252
+ beforeTransaction: async (event, ctx) =>
253
+ renderPdfBeforeTransaction(ctx, {
254
+ slug: "rental:property-expose",
255
+ locale: "de",
256
+ variables: event.payload,
257
+ }),
258
+ handler: async (event, ctx) => storeRenderedPdf(ctx, event.prepared),
259
+ }),
260
+ );
261
+
220
262
  r.writeHandler({
221
263
  name: "rent:adjust",
222
264
  schema: rentAdjustPayloadSchema,
@@ -270,6 +312,14 @@ export const rentalFeature = defineFeature("rental", (r) => {
270
312
  r.screen(rentalDashboardScreen);
271
313
  r.screen(adjustRentScreen);
272
314
  r.screen(recordPositionsScreen);
315
+ r.screen(receiveInvoiceScreen);
316
+ r.screen(leaseUnterlagenScreen);
317
+ r.screen({
318
+ id: "upload-standard-layout",
319
+ type: "custom",
320
+ renderer: { react: { __component: "upload-standard-layout" } },
321
+ description: "Receipt upload on the standard form screen layout.",
322
+ });
273
323
 
274
324
  r.nav({
275
325
  id: "contracts",
@@ -290,4 +340,18 @@ export const rentalFeature = defineFeature("rental", (r) => {
290
340
  screen: "rental:screen:rental-dashboard",
291
341
  order: 20,
292
342
  });
343
+ r.nav({
344
+ id: "receive-invoice",
345
+ label: i18nKey("rental.nav.receiveInvoice"),
346
+ parent: "rental:nav:contracts",
347
+ screen: "rental:screen:receive-invoice",
348
+ order: 40,
349
+ });
350
+ r.nav({
351
+ id: "upload-standard-layout",
352
+ label: i18nKey("rental.nav.upload"),
353
+ parent: "rental:nav:contracts",
354
+ screen: "rental:screen:upload-standard-layout",
355
+ order: 30,
356
+ });
293
357
  });