@cosmicdrift/kumiko-samples 0.374.0 → 0.377.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 (199) 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-overview/web/cap-cards-panel.tsx +3 -3
  37. package/packages/bundled-features/src/cap-overview/web/client-plugin.tsx +1 -1
  38. package/packages/bundled-features/src/channel-email/changes.json +6 -0
  39. package/packages/bundled-features/src/channel-email/email-channel.ts +2 -1
  40. package/packages/bundled-features/src/compliance-profiles/web/client-plugin.tsx +1 -1
  41. package/packages/bundled-features/src/config/feature.ts +2 -2
  42. package/packages/bundled-features/src/crypto-shredding/changes.json +6 -0
  43. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +1 -1
  44. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +1 -1
  45. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +1 -1
  46. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +1 -1
  47. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +1 -1
  48. package/packages/bundled-features/src/file-provider-s3/changes.json +6 -0
  49. package/packages/bundled-features/src/file-provider-s3/env-named-feature.ts +45 -0
  50. package/packages/bundled-features/src/file-provider-s3/env-schema.ts +20 -13
  51. package/packages/bundled-features/src/file-provider-s3/index.ts +4 -0
  52. package/packages/bundled-features/src/folders/web/client-plugin.tsx +1 -1
  53. package/packages/bundled-features/src/folders/web/folder-section.tsx +3 -4
  54. package/packages/bundled-features/src/host-routing/README.md +7 -0
  55. package/packages/bundled-features/src/host-routing/changes.json +6 -0
  56. package/packages/bundled-features/src/host-routing/constants.ts +4 -0
  57. package/packages/bundled-features/src/host-routing/dispatch.ts +34 -26
  58. package/packages/bundled-features/src/host-routing/feature.ts +122 -41
  59. package/packages/bundled-features/src/host-routing/host.ts +28 -1
  60. package/packages/bundled-features/src/host-routing/index.ts +3 -0
  61. package/packages/bundled-features/src/host-routing/options.ts +45 -2
  62. package/packages/bundled-features/src/host-routing/redirects.ts +33 -0
  63. package/packages/bundled-features/src/host-routing/tenant-lookup.ts +65 -0
  64. package/packages/bundled-features/src/host-routing/validate-options.ts +48 -1
  65. package/packages/bundled-features/src/inbound-mail-foundation/changes.json +7 -0
  66. package/packages/bundled-features/src/inbound-mail-foundation/feature.ts +8 -0
  67. package/packages/bundled-features/src/inbound-mail-foundation/i18n.ts +42 -0
  68. package/packages/bundled-features/src/inbound-mail-foundation/index.ts +4 -0
  69. package/packages/bundled-features/src/inbound-mail-foundation/screens.ts +100 -0
  70. package/packages/bundled-features/src/inbound-mail-foundation/types.ts +2 -2
  71. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +1 -1
  72. package/packages/bundled-features/src/legal-pages/changes.json +6 -0
  73. package/packages/bundled-features/src/legal-pages/feature.ts +14 -1
  74. package/packages/bundled-features/src/legal-pages/layout.ts +6 -6
  75. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -1
  76. package/packages/bundled-features/src/mail-foundation/feature.ts +21 -22
  77. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -1
  78. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +1 -1
  79. package/packages/bundled-features/src/page-render/branding.ts +1 -1
  80. package/packages/bundled-features/src/page-render/layout.ts +2 -2
  81. package/packages/bundled-features/src/page-render/markdown.ts +1 -1
  82. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +1 -1
  83. package/packages/bundled-features/src/personal-access-tokens/screens.ts +1 -1
  84. package/packages/bundled-features/src/secrets/feature.ts +4 -4
  85. package/packages/bundled-features/src/seo/sitemap.ts +1 -1
  86. package/packages/bundled-features/src/shared/mail-template-body.ts +1 -1
  87. package/packages/bundled-features/src/shared/purge-files-reaching-subject.ts +127 -2
  88. package/packages/bundled-features/src/tags/web/client-plugin.tsx +1 -1
  89. package/packages/bundled-features/src/template-resolver/changes.json +18 -0
  90. package/packages/bundled-features/src/template-resolver/document-blocks.ts +34 -0
  91. package/packages/bundled-features/src/template-resolver/document-ops.ts +515 -0
  92. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +9 -0
  93. package/packages/bundled-features/src/template-resolver/feature.ts +4 -0
  94. package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +1 -0
  95. package/packages/bundled-features/src/template-resolver/handlers/document-base.ts +86 -0
  96. package/packages/bundled-features/src/template-resolver/handlers/document-blocks.query.ts +48 -0
  97. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +11 -3
  98. package/packages/bundled-features/src/template-resolver/handlers/patch-draft.write.ts +125 -0
  99. package/packages/bundled-features/src/template-resolver/handlers/preview.query.ts +2 -1
  100. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +2 -1
  101. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +22 -1
  102. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +24 -9
  103. package/packages/bundled-features/src/template-resolver/{web/placeholder-text.ts → placeholder-text.ts} +1 -1
  104. package/packages/bundled-features/src/template-resolver/qualified-names.ts +2 -0
  105. package/packages/bundled-features/src/template-resolver/seeding.ts +3 -1
  106. package/packages/bundled-features/src/template-resolver/template-bundle.ts +6 -1
  107. package/packages/bundled-features/src/template-resolver/template-preview.ts +24 -8
  108. package/packages/bundled-features/src/template-resolver/template-validation.ts +1 -1
  109. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +3 -3
  110. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +1 -1
  111. package/packages/bundled-features/src/template-resolver/web/document-toolbar-blocks.ts +7 -33
  112. package/packages/bundled-features/src/template-resolver/web/i18n.ts +24 -0
  113. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +2 -2
  114. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +1 -1
  115. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +1 -1
  116. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +1 -1
  117. package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
  118. package/packages/bundled-features/src/user-data-rights/env.ts +15 -0
  119. package/packages/bundled-features/src/user-data-rights/feature.ts +4 -2
  120. package/packages/bundled-features/src/user-data-rights/index.ts +1 -0
  121. package/packages/bundled-features/src/user-data-rights/lib/mail-transport-resolver.ts +1 -1
  122. package/packages/bundled-features/src/user-data-rights/lib/storage-provider-resolver.ts +1 -1
  123. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +1 -1
  124. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +1 -1
  125. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +2 -2
  126. package/packages/bundled-features/src/waitlist/changes.json +6 -0
  127. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +51 -2
  128. package/samples/apps/admin-console/package.json +0 -3
  129. package/samples/apps/admin-console/src/app/client.tsx +1 -1
  130. package/samples/apps/admin-console/src/app/shell.tsx +1 -1
  131. package/samples/apps/config-demo/package.json +1 -3
  132. package/samples/apps/config-demo/src/app/client.tsx +1 -1
  133. package/samples/apps/config-demo/src/app/shell.tsx +2 -2
  134. package/samples/apps/config-demo/src/features/demo/web/index.ts +1 -1
  135. package/samples/apps/config-demo/tsconfig.json +0 -12
  136. package/samples/apps/marketing-demo/package.json +1 -3
  137. package/samples/apps/marketing-demo/src/app/client.tsx +1 -1
  138. package/samples/apps/marketing-demo/src/app/shell.tsx +1 -1
  139. package/samples/apps/marketing-demo/src/features/assets/web/index.ts +1 -1
  140. package/samples/apps/marketing-demo/src/features/helpdesk/web/index.ts +1 -1
  141. package/samples/apps/showcase/package.json +1 -3
  142. package/samples/apps/showcase/src/app/client.tsx +1 -1
  143. package/samples/apps/showcase/src/app/shell.tsx +1 -1
  144. package/samples/apps/showcase/src/features/demos/web/index.ts +1 -1
  145. package/samples/apps/showcase/src/features/demos/web/pages/sidebar-panel.tsx +1 -1
  146. package/samples/apps/showcase/src/features/demos/web/pages/toast.tsx +1 -1
  147. package/samples/apps/showcase/src/features/items/web/index.ts +1 -1
  148. package/samples/apps/styleguide/package.json +1 -3
  149. package/samples/apps/styleguide/src/app/client.tsx +1 -1
  150. package/samples/apps/styleguide/src/app/shell.tsx +2 -2
  151. package/samples/apps/styleguide/src/features/ai-settings/web.ts +1 -1
  152. package/samples/apps/styleguide/src/features/content/web.tsx +2 -2
  153. package/samples/apps/styleguide/src/features/demo/web.ts +1 -1
  154. package/samples/apps/styleguide/src/features/examples/web.ts +1 -1
  155. package/samples/apps/styleguide/src/features/gallery/web/Gallery.tsx +1 -1
  156. package/samples/apps/styleguide/src/features/gallery/web/index.ts +1 -1
  157. package/samples/apps/styleguide/src/features/widgets/demo-locale.ts +1 -1
  158. package/samples/apps/styleguide/src/features/widgets/lib/format.ts +1 -1
  159. package/samples/apps/styleguide/src/features/widgets/web/DashboardFilterEcho.tsx +1 -1
  160. package/samples/apps/styleguide/src/features/widgets/web/FormExamples.tsx +1 -1
  161. package/samples/apps/styleguide/src/features/widgets/web/Widgets.tsx +1 -1
  162. package/samples/apps/styleguide/src/features/widgets/web/index.ts +1 -1
  163. package/samples/apps/styleguide/tsconfig.json +0 -12
  164. package/samples/apps/ui-walkthrough/package.json +1 -3
  165. package/samples/apps/ui-walkthrough/src/app/client.tsx +1 -1
  166. package/samples/apps/ui-walkthrough/src/app/shell.tsx +1 -1
  167. package/samples/apps/ui-walkthrough/src/features/billing/web/index.ts +1 -1
  168. package/samples/apps/ui-walkthrough/src/features/rental/web/index.ts +1 -1
  169. package/samples/apps/ui-walkthrough/src/features/tasks/web/index.ts +1 -1
  170. package/samples/apps/ui-walkthrough/src/features/vehicles/web/index.ts +1 -1
  171. package/samples/apps/use-all-bundled/bin/main.ts +3 -2
  172. package/samples/apps/use-all-bundled/e2e-billing-gallery/gallery-features.ts +12 -0
  173. package/samples/apps/use-all-bundled/e2e-billing-gallery/server.ts +1 -1
  174. package/samples/apps/use-all-bundled/feature-manifest.json +1 -0
  175. package/samples/apps/use-all-bundled/package.json +1 -3
  176. package/samples/apps/use-all-bundled/src/app/client.tsx +1 -1
  177. package/samples/apps/use-all-bundled/src/app/dev-app-options.ts +5 -4
  178. package/samples/apps/use-all-bundled/src/app/shell.tsx +1 -1
  179. package/samples/apps/use-all-bundled/src/run-config.ts +10 -1
  180. package/samples/apps/workspaces/package.json +1 -3
  181. package/samples/apps/workspaces/src/app/client.tsx +1 -1
  182. package/samples/apps/workspaces/src/app/shell.tsx +1 -1
  183. package/samples/apps/workspaces/src/features/demo/web/index.ts +1 -1
  184. package/samples/apps/workspaces/src/features/demo-driver/web/index.ts +1 -1
  185. package/samples/recipes/apex-landing/package.json +1 -1
  186. package/samples/recipes/apex-landing/src/feature.ts +1 -1
  187. package/samples/recipes/apex-surface-auth/README.md +1 -1
  188. package/samples/recipes/apex-surface-auth/src/feature.ts +2 -2
  189. package/samples/recipes/compose-stacks/README.md +7 -4
  190. package/samples/recipes/embedded-entity-form/package.json +0 -1
  191. package/samples/recipes/embedded-entity-form/src/web/accept-suggestion-drawer.tsx +1 -1
  192. package/samples/recipes/notes-history-basic/README.md +1 -1
  193. package/samples/recipes/record-detail-layout/package.json +0 -1
  194. package/samples/recipes/tags-basic/README.md +1 -1
  195. package/samples/recipes/user-profile/README.md +1 -1
  196. package/samples/recipes/wizard-form/package.json +0 -1
  197. package/samples/recipes/wizard-form/src/web/index.ts +2 -2
  198. package/samples/recipes/wizard-form/src/web/listing-review-section.tsx +2 -2
  199. package/samples/recipes/writeform-section/package.json +0 -1
@@ -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";
@@ -15,7 +15,7 @@ import {
15
15
  ThemeMenuItem,
16
16
  ThemeToggle,
17
17
  useTranslation,
18
- } from "@cosmicdrift/kumiko-renderer-web";
18
+ } from "@cosmicdrift/kumiko-renderer/web";
19
19
  import { MoonStar, Sun } from "lucide-react";
20
20
  import type { ReactNode } from "react";
21
21
  import { AssistantAction } from "./assistant-action";
@@ -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,4 +1,4 @@
1
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
1
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
2
2
  import { rentalTranslations } from "../i18n";
3
3
  import { LeaseHubHeader, LeaseHubHistory } from "./lease-hub-components";
4
4
 
@@ -1,7 +1,7 @@
1
1
  // Tasks-Feature — Web-Plattform-Plugin. Heute nur Translations,
2
2
  // keine Custom-Components.
3
3
 
4
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
4
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
5
5
  import { tasksTranslations } from "../i18n";
6
6
 
7
7
  export const tasksClient: 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 { vehiclesTranslations } from "../i18n";
3
3
 
4
4
  export const vehiclesClient: ClientFeatureDefinition = {
@@ -8,7 +8,7 @@ import { InMemoryKmsAdapter } from "@cosmicdrift/kumiko-framework/crypto";
8
8
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
9
9
  import { composeEnvSchema } from "@cosmicdrift/kumiko-framework/env";
10
10
  import { runProdApp } from "@cosmicdrift/kumiko-server-runtime";
11
- import { APP_FEATURES, AUTH_COMPOSE_OPTIONS } from "../src/run-config";
11
+ import { APP_FEATURES, AUTH_COMPOSE_OPTIONS, BOOT_FEATURES } from "../src/run-config";
12
12
 
13
13
  const SMOKE_TENANT_ID = "00000000-0000-4000-8000-000000000001" as TenantId;
14
14
 
@@ -18,7 +18,8 @@ const envSchema = composeEnvSchema({
18
18
  });
19
19
 
20
20
  await runProdApp({
21
- features: APP_FEATURES,
21
+ features: BOOT_FEATURES,
22
+ featureToggles: true,
22
23
  envSchema,
23
24
  // Smoke-only: exercises the hard PII boot gate + blind-index gate with
24
25
  // every bundled feature mounted. Real apps wire createPgKmsAdapter(...).
@@ -75,6 +75,12 @@ export function createGalleryBillingFeature(baseUrl: string): FeatureDefinition
75
75
  successPath: GALLERY_PLAN_PATH,
76
76
  cancelPath: GALLERY_PLAN_PATH,
77
77
  providerName: GALLERY_PROVIDER,
78
+ contact: {
79
+ labelKey: "gallery-screens:plan.enterprise.label",
80
+ benefits: [{ labelKey: "gallery-screens:plan.enterprise.benefit" }],
81
+ actionLabelKey: "gallery-screens:plan.enterprise.action",
82
+ href: "mailto:sales@gallery.example",
83
+ },
78
84
  },
79
85
  consumerProtection: {
80
86
  termsTextBlock: GALLERY_TERMS_SLUG,
@@ -140,6 +146,12 @@ export const galleryScreensFeature: FeatureDefinition = defineFeature("gallery-s
140
146
  "gallery-screens:plan.free.label": { de: "Free", en: "Free" },
141
147
  "gallery-screens:plan.starter.label": { de: "Starter", en: "Starter" },
142
148
  "gallery-screens:plan.pro.label": { de: "Pro", en: "Pro" },
149
+ "gallery-screens:plan.enterprise.label": { de: "Enterprise", en: "Enterprise" },
150
+ "gallery-screens:plan.enterprise.benefit": {
151
+ de: "Individuelle Konditionen und persönlicher Ansprechpartner",
152
+ en: "Custom terms and a dedicated contact",
153
+ },
154
+ "gallery-screens:plan.enterprise.action": { de: "Kontakt aufnehmen", en: "Contact us" },
143
155
  "gallery-screens:plan.starter.benefit": { de: "Für kleine Teams", en: "For small teams" },
144
156
  "gallery-screens:plan.pro.benefit": { de: "Für wachsende Teams", en: "For growing teams" },
145
157
  "gallery-screens:plan.free.benefit": { de: "Zum Ausprobieren", en: "To try things out" },
@@ -13,8 +13,8 @@ import { createDeliveryTestContext } from "@cosmicdrift/kumiko-bundled-features/
13
13
  import { createTemplateResolverApi } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
14
14
  import { seedTextBlock } from "@cosmicdrift/kumiko-bundled-features/template-resolver/seeding";
15
15
  import { runDevApp, type SeedFn } from "@cosmicdrift/kumiko-dev-server";
16
+ import { createE2eSeedRoutes } from "@cosmicdrift/kumiko-dev-server/testing";
16
17
  import { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
17
- import { createE2eSeedRoutes } from "@cosmicdrift/kumiko-testing/e2e/seed-route";
18
18
  import { devAppOptions } from "../src/app/dev-app-options";
19
19
  import { GALLERY_TENANT_HOST, GALLERY_TERMS_SLUG } from "./gallery-constants";
20
20
  import {
@@ -2644,6 +2644,7 @@
2644
2644
  "template-resolver:write:discard-draft-system",
2645
2645
  "template-resolver:write:import-bundle",
2646
2646
  "template-resolver:write:import-bundle-system",
2647
+ "template-resolver:write:patch-draft",
2647
2648
  "template-resolver:write:publish",
2648
2649
  "template-resolver:write:publish-system",
2649
2650
  "template-resolver:write:reply-snippets-set",
@@ -17,13 +17,11 @@
17
17
  "dependencies": {
18
18
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
19
19
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
20
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
20
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
21
21
  "@cosmicdrift/kumiko-document-designer": "workspace:*",
22
22
  "@cosmicdrift/kumiko-framework": "workspace:*",
23
- "@cosmicdrift/kumiko-headless": "workspace:*",
24
23
  "@cosmicdrift/kumiko-renderer-mail-html": "workspace:*",
25
24
  "@cosmicdrift/kumiko-renderer-puppeteer-client": "workspace:*",
26
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
27
25
  "@cosmicdrift/kumiko-server-runtime": "workspace:*",
28
26
  "@cosmicdrift/kumiko-types": "workspace:*",
29
27
  "react": "^19.2.6",
@@ -37,7 +37,7 @@ import { documentDesignerClient } from "@cosmicdrift/kumiko-document-designer/we
37
37
  import { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine/types";
38
38
  import { localeDeClient } from "@cosmicdrift/kumiko-locale-de/web";
39
39
  import type { TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
40
- import { type ClientFeatureDefinition, createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
40
+ import { type ClientFeatureDefinition, createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
41
41
  import { AppShell } from "./shell";
42
42
 
43
43
  const APP_TRANSLATIONS: TranslationsByLocale = {
@@ -13,7 +13,7 @@
13
13
  import { createTemplateResolverApi } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
14
14
  import type { RunDevAppOptions } from "@cosmicdrift/kumiko-dev-server";
15
15
  import { SYSTEM_TENANT_ID, type TenantId } from "@cosmicdrift/kumiko-framework/engine";
16
- import { APP_FEATURES, AUTH_COMPOSE_OPTIONS } from "../run-config";
16
+ import { AUTH_COMPOSE_OPTIONS, BOOT_FEATURES } from "../run-config";
17
17
  import { ADMIN_EMAIL, ADMIN_PASSWORD, BETA_TENANT_ID, DEV_TENANT_ID } from "./auth-constants";
18
18
  import { notesFeature } from "./notes-feature";
19
19
  import { appScreensFeature } from "./screens-feature";
@@ -24,10 +24,11 @@ import { seedScreenshotData } from "./seed";
24
24
  // würde den Resolver auf jedem Write aktivieren (inkl. Login) und braucht
25
25
  // per-Tenant Tier-Assignments — disproportional für einen Preview-Screenshot.
26
26
 
27
- export const devAppOptions: RunDevAppOptions = {
27
+ export const devAppOptions = {
28
28
  // notesFeature is dev-only (app-owned tag host) — see notes-feature.ts for why
29
29
  // it stays out of APP_FEATURES. appScreensFeature places the user-profile screen.
30
- features: [...APP_FEATURES, appScreensFeature, notesFeature],
30
+ features: [...BOOT_FEATURES, appScreensFeature, notesFeature],
31
+ featureToggles: true,
31
32
  port: Number.parseInt(process.env["PORT"] ?? "4186", 10),
32
33
  clientEntry: "./src/app/client.tsx",
33
34
  htmlPath: "./public/index.html",
@@ -72,4 +73,4 @@ export const devAppOptions: RunDevAppOptions = {
72
73
  emailVerification: AUTH_COMPOSE_OPTIONS.emailVerification,
73
74
  accountUnlock: AUTH_COMPOSE_OPTIONS.accountUnlock,
74
75
  },
75
- };
76
+ } satisfies RunDevAppOptions;
@@ -2,7 +2,7 @@ import {
2
2
  DefaultTopbarActions,
3
3
  useShellUser,
4
4
  } from "@cosmicdrift/kumiko-bundled-features/auth-email-password/web";
5
- import { type AppSchema, LanguageSwitcher, WorkspaceShell } from "@cosmicdrift/kumiko-renderer-web";
5
+ import { type AppSchema, LanguageSwitcher, WorkspaceShell } from "@cosmicdrift/kumiko-renderer/web";
6
6
  import { MoonStar, Sun } from "lucide-react";
7
7
  import type { ReactNode } from "react";
8
8
  import { BETA_TENANT_ID, DEV_TENANT_ID } from "./auth-constants";
@@ -43,7 +43,10 @@ import { createDataRetentionFeature } from "@cosmicdrift/kumiko-bundled-features
43
43
  import { createDeliveryFeature } from "@cosmicdrift/kumiko-bundled-features/delivery";
44
44
  import { createDerivativesSharpFeature } from "@cosmicdrift/kumiko-bundled-features/derivatives-sharp";
45
45
  import { createDocumentIngestFoundationFeature } from "@cosmicdrift/kumiko-bundled-features/document-ingest-foundation";
46
- import { createFeatureTogglesFeature } from "@cosmicdrift/kumiko-bundled-features/feature-toggles";
46
+ import {
47
+ createFeatureTogglesFeature,
48
+ FEATURE_TOGGLES_FEATURE,
49
+ } from "@cosmicdrift/kumiko-bundled-features/feature-toggles";
47
50
  import { createFileDerivativesFeature } from "@cosmicdrift/kumiko-bundled-features/file-derivatives";
48
51
  import { createFilesTenantDataFeature } from "@cosmicdrift/kumiko-bundled-features/files-tenant-data";
49
52
  import { createFoldersFeature } from "@cosmicdrift/kumiko-bundled-features/folders";
@@ -405,6 +408,12 @@ export const APP_FEATURES = [
405
408
  createAgentToolsFeature(),
406
409
  ] as const;
407
410
 
411
+ // runProdApp / runDevApp mount feature-toggles themselves with `featureToggles: true`
412
+ // and reject a second copy in `features`; APP_FEATURES keeps it for schema and coverage tooling.
413
+ export const BOOT_FEATURES = APP_FEATURES.filter(
414
+ (feature) => feature.name !== FEATURE_TOGGLES_FEATURE,
415
+ );
416
+
408
417
  // Smoke signup — enables createAuthSelfRegistrationToggleFeature via
409
418
  // composeFeatures when passed as authOptions (#1521 Option A). Same shape
410
419
  // as run{Dev,Prod}App's auth.signup; appUrl is a stub (no real mail in boot).
@@ -9,10 +9,8 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "@cosmicdrift/kumiko-dev-server": "workspace:*",
12
- "@cosmicdrift/kumiko-dispatcher-live": "workspace:*",
12
+ "@cosmicdrift/kumiko-renderer": "workspace:*",
13
13
  "@cosmicdrift/kumiko-framework": "workspace:*",
14
- "@cosmicdrift/kumiko-headless": "workspace:*",
15
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
16
14
  "react": "^19.2.6",
17
15
  "react-dom": "^19.2.6",
18
16
  "@cosmicdrift/kumiko-locale-de": "workspace:*"
@@ -1,6 +1,6 @@
1
1
  import { emailPasswordClient } from "@cosmicdrift/kumiko-bundled-features/auth-email-password/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 { demoClient } from "../features/demo/web";
5
5
  import { driverClient } from "../features/demo-driver/web";
6
6
  import { AppShell } from "./shell";
@@ -5,7 +5,7 @@ import {
5
5
  DefaultTopbarActions,
6
6
  useShellUser,
7
7
  } from "@cosmicdrift/kumiko-bundled-features/auth-email-password/web";
8
- import { type AppSchema, WorkspaceShell } from "@cosmicdrift/kumiko-renderer-web";
8
+ import { type AppSchema, WorkspaceShell } from "@cosmicdrift/kumiko-renderer/web";
9
9
  import { MoonStar, Sun } from "lucide-react";
10
10
  import type { ReactNode } from "react";
11
11
 
@@ -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 { demoTranslations } from "../i18n";
3
3
 
4
4
  export const demoClient: 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 { driverTranslations } from "../i18n";
3
3
 
4
4
  export const driverClient: ClientFeatureDefinition = {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
11
- "@cosmicdrift/kumiko-headless": "workspace:*"
11
+ "@cosmicdrift/kumiko-renderer": "workspace:*"
12
12
  },
13
13
  "devDependencies": {
14
14
  "@cosmicdrift/kumiko-testing": "workspace:*",
@@ -18,7 +18,7 @@ import {
18
18
  type ApexPage,
19
19
  type ApexPricingTier,
20
20
  renderApexPage,
21
- } from "@cosmicdrift/kumiko-headless/apex";
21
+ } from "@cosmicdrift/kumiko-renderer/headless/apex";
22
22
  import { HERO_SCREENSHOT } from "./constants";
23
23
 
24
24
  // --- Inputs: shapes the surrounding features hand you -----------------------
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  RequestAccountDeletionScreen, ConfirmAccountDeletionScreen,
36
36
  } from "@cosmicdrift/kumiko-bundled-features/user-data-rights/web";
37
- import { createPublicSurface } from "@cosmicdrift/kumiko-renderer-web";
37
+ import { createPublicSurface } from "@cosmicdrift/kumiko-renderer/web";
38
38
 
39
39
  // createLoginRoute, not a raw LoginScreen render — it owns the challenge-
40
40
  // swap for a second factor, so mounting auth-mfa later doesn't need this
@@ -11,7 +11,7 @@
11
11
  // 2. Client (Kommentar unten + README): wie createPublicSurface + AuthShell
12
12
  // die Screens in der Apex-Chrome mounten.
13
13
  //
14
- // CLIENT-WIRING (apex.tsx der App — renderer-web, hier nur als Referenz, da
14
+ // CLIENT-WIRING (apex.tsx der App — renderer/web, hier nur als Referenz, da
15
15
  // Recipes keine Browser-Deps ziehen):
16
16
  //
17
17
  // import {
@@ -22,7 +22,7 @@
22
22
  // RequestAccountDeletionScreen, ConfirmAccountDeletionScreen,
23
23
  // defaultTranslations as deletionI18n,
24
24
  // } from "@cosmicdrift/kumiko-bundled-features/user-data-rights/web";
25
- // import { createPublicSurface } from "@cosmicdrift/kumiko-renderer-web";
25
+ // import { createPublicSurface } from "@cosmicdrift/kumiko-renderer/web";
26
26
  //
27
27
  // // AuthShell: die Auth-Card rendert in der Marketing-Chrome statt
28
28
  // // Fullscreen. Default (ohne Provider) bleibt der Fullscreen-Wrapper.
@@ -36,22 +36,25 @@ the option.
36
36
  | `composeGdprStack` | `kmsMode` | `kms` or `allowPlaintextPii` |
37
37
  | `composeGdprStack({ selfService })`, `composeUserDataRightsStack` | `mail` | a mounted `channel-email` |
38
38
  | `composeSecurityStack` | `kmsMode`, `rateLimit` not `false` | `kms` or `allowPlaintextPii` |
39
- | `composeSaasStack({ billing: "stripe" })` | `billing` | a mounted subscription provider |
39
+ | `composeSaasStack({ billing: "stripe" })` | `billing` (warning only) | a mounted subscription provider |
40
40
 
41
41
  A missing option fails the boot with:
42
42
 
43
43
  ```
44
44
  [runProdApp] stacks in `features` need boot options that are not set:
45
- - composeSaasStack needs the boot option `billing`: set billing: { stripe: { priceToTier }, defaultTier }
45
+ - composeGdprStack needs the boot option `kmsMode`: set kmsMode: "required" (or { plaintextReason } for a demo)
46
46
  ```
47
47
 
48
+ A stripe `composeSaasStack` without `billing` boots and logs the same line as a warning, so an
49
+ app can go live before its prices exist.
50
+
48
51
  ## Flow
49
52
 
50
53
  1. `src/app.ts` lists the stacks and the boot options they need.
51
54
  2. The test boots with `KUMIKO_DRY_RUN_ENV=boot`, which runs the whole
52
55
  validation and stops before any DB or Redis connection: with the options
53
- the boot passes, without `billing` or `kmsMode` it fails and names the
54
- stacks.
56
+ the boot passes, without `kmsMode` it fails and names the stacks, and
57
+ without `billing` it warns.
55
58
 
56
59
  ## Tests
57
60
 
@@ -5,7 +5,6 @@
5
5
  "dependencies": {
6
6
  "@cosmicdrift/kumiko-framework": "workspace:*",
7
7
  "@cosmicdrift/kumiko-renderer": "workspace:*",
8
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
9
8
  "react": "^19.2.6"
10
9
  },
11
10
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  import type { RenderEditControls } from "@cosmicdrift/kumiko-renderer";
2
2
  import { RenderEdit, useDispatcher, usePrimitives } from "@cosmicdrift/kumiko-renderer";
3
- import { Drawer } from "@cosmicdrift/kumiko-renderer-web";
3
+ import { Drawer } from "@cosmicdrift/kumiko-renderer/web";
4
4
  import { type ReactNode, useMemo, useRef, useState } from "react";
5
5
  import { z } from "zod";
6
6
  import { prospectEntity } from "../entities/prospect";
@@ -47,7 +47,7 @@ handler as above. Register `notesHistoryClient()` once (for its component +
47
47
  i18n), then mount it either way:
48
48
 
49
49
  ```tsx illustration
50
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
50
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
51
51
  import { notesHistoryClient, NotesSection, NOTES_SECTION_EXTENSION_NAME } from "@cosmicdrift/kumiko-bundled-features/notes-history/web";
52
52
 
53
53
  // once, at app boot — required even for standalone use (registers i18n):
@@ -9,7 +9,6 @@
9
9
  "dependencies": {
10
10
  "@cosmicdrift/kumiko-framework": "workspace:*",
11
11
  "@cosmicdrift/kumiko-renderer": "workspace:*",
12
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
13
12
  "react": "^19.2.6"
14
13
  },
15
14
  "devDependencies": {
@@ -48,7 +48,7 @@ as above. Register `tagsClient()` once (for its component + i18n), then mount it
48
48
  either way:
49
49
 
50
50
  ```tsx illustration
51
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
51
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
52
52
  import { tagsClient, TagSection, TAGS_SECTION_EXTENSION_NAME } from "@cosmicdrift/kumiko-bundled-features/tags/web";
53
53
 
54
54
  // once, at app boot — required even for standalone use (registers i18n):
@@ -46,7 +46,7 @@ itself needs no client registration):
46
46
  ```tsx illustration
47
47
  import { userProfileClient } from "@cosmicdrift/kumiko-bundled-features/user-profile/web";
48
48
  import { emailPasswordClient } from "@cosmicdrift/kumiko-bundled-features/auth-email-password/web";
49
- import { createKumikoApp } from "@cosmicdrift/kumiko-renderer-web";
49
+ import { createKumikoApp } from "@cosmicdrift/kumiko-renderer/web";
50
50
 
51
51
  createKumikoApp({
52
52
  clientFeatures: [emailPasswordClient(), userProfileClient()],
@@ -10,7 +10,6 @@
10
10
  "@cosmicdrift/kumiko-bundled-features": "workspace:*",
11
11
  "@cosmicdrift/kumiko-framework": "workspace:*",
12
12
  "@cosmicdrift/kumiko-renderer": "workspace:*",
13
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
14
13
  "react": "^19.2.6"
15
14
  },
16
15
  "devDependencies": {
@@ -3,11 +3,11 @@
3
3
  // A `kind: "extension"` section only resolves through
4
4
  // clientFeatures.extensionSectionComponents (createKumikoApp → ExtensionSectionsProvider)
5
5
  // — never imported directly from feature.ts, which keeps the server file
6
- // free of the renderer-web graph. Without registering this export, an app
6
+ // free of the renderer/web graph. Without registering this export, an app
7
7
  // mounting this recipe gets RenderEdit's fallback placeholder instead of
8
8
  // the real review step.
9
9
 
10
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
10
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
11
11
  import { ListingReviewSection } from "./listing-review-section";
12
12
 
13
13
  export const listingsClient: ClientFeatureDefinition = {
@@ -1,11 +1,11 @@
1
1
  import type { ExtensionSectionProps } from "@cosmicdrift/kumiko-renderer";
2
- import { DetailList } from "@cosmicdrift/kumiko-renderer-web";
2
+ import { DetailList } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import type { ReactNode } from "react";
4
4
 
5
5
  // Registered under the `__component` name the feature's review section
6
6
  // points at (see feature.ts) — never imported by feature.ts itself, the
7
7
  // string name is the only link so the server file stays free of the
8
- // renderer-web graph.
8
+ // renderer/web graph.
9
9
  export function ListingReviewSection({ values }: ExtensionSectionProps): ReactNode {
10
10
  return (
11
11
  <DetailList
@@ -10,7 +10,6 @@
10
10
  "dependencies": {
11
11
  "@cosmicdrift/kumiko-framework": "workspace:*",
12
12
  "@cosmicdrift/kumiko-renderer": "workspace:*",
13
- "@cosmicdrift/kumiko-renderer-web": "workspace:*",
14
13
  "react": "^19.2.6"
15
14
  },
16
15
  "devDependencies": {