@cosmicdrift/kumiko-bundled-features 0.378.0 → 0.379.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 (632) hide show
  1. package/dist/account-security/feature.js +2 -2
  2. package/dist/account-security/index.d.ts +2 -2
  3. package/dist/account-security/index.js +2 -2
  4. package/dist/account-security/{constants.js → web/constants.js} +0 -1
  5. package/dist/account-security/{i18n.js → web/i18n.js} +0 -1
  6. package/dist/admin-shell/feature.js +4 -3
  7. package/dist/admin-shell/index.d.ts +2 -2
  8. package/dist/admin-shell/index.js +2 -2
  9. package/dist/admin-shell/web/client-plugin.js +2 -3
  10. package/dist/admin-shell/{constants.js → web/constants.js} +0 -1
  11. package/dist/admin-shell/web/default-translations.d.ts +2 -0
  12. package/dist/admin-shell/web/default-translations.js +4 -0
  13. package/dist/admin-shell/web/i18n.d.ts +5 -2
  14. package/dist/admin-shell/web/i18n.js +50 -5
  15. package/dist/admin-shell/web/index.js +0 -1
  16. package/dist/audit/feature.js +58 -59
  17. package/dist/audit/handlers/audit-events.d.ts +102 -0
  18. package/dist/audit/handlers/audit-events.js +112 -0
  19. package/dist/audit/handlers/audit-system-db.d.ts +1 -0
  20. package/dist/audit/handlers/audit-system-db.js +9 -0
  21. package/dist/audit/handlers/details-all-tenants.query.d.ts +15 -0
  22. package/dist/audit/handlers/details-all-tenants.query.js +20 -0
  23. package/dist/audit/handlers/details.query.d.ts +2 -1
  24. package/dist/audit/handlers/details.query.js +8 -24
  25. package/dist/audit/handlers/list-all-tenants.query.d.ts +41 -0
  26. package/dist/audit/handlers/list-all-tenants.query.js +32 -0
  27. package/dist/audit/handlers/list.query.d.ts +2 -1
  28. package/dist/audit/handlers/list.query.js +9 -99
  29. package/dist/audit/handlers/resolve-audit-tenant.d.ts +3 -1
  30. package/dist/audit/handlers/resolve-audit-tenant.js +21 -7
  31. package/dist/audit/index.d.ts +1 -1
  32. package/dist/audit/index.js +1 -1
  33. package/dist/audit/run-escape-hatch-retention.js +1 -1
  34. package/dist/audit/screens.d.ts +65 -0
  35. package/dist/audit/screens.js +73 -0
  36. package/dist/audit/web/client-plugin.js +2 -3
  37. package/dist/audit/{constants.d.ts → web/constants.d.ts} +8 -0
  38. package/dist/audit/{constants.js → web/constants.js} +8 -1
  39. package/dist/audit/web/default-translations.d.ts +2 -0
  40. package/dist/audit/web/default-translations.js +3 -0
  41. package/dist/audit/web/i18n.d.ts +5 -2
  42. package/dist/audit/web/i18n.js +31 -4
  43. package/dist/audit/web/index.js +0 -1
  44. package/dist/auth-email-password/bootstrap.d.ts +1 -1
  45. package/dist/auth-email-password/bootstrap.js +4 -4
  46. package/dist/auth-email-password/errors.js +1 -1
  47. package/dist/auth-email-password/feature.js +2 -2
  48. package/dist/auth-email-password/handlers/confirm-account-unlock.write.js +1 -1
  49. package/dist/auth-email-password/handlers/invite-accept-with-login.write.js +1 -1
  50. package/dist/auth-email-password/handlers/invite-create.write.d.ts +1 -1
  51. package/dist/auth-email-password/handlers/invite-create.write.js +3 -3
  52. package/dist/auth-email-password/handlers/invite-info.query.js +1 -1
  53. package/dist/auth-email-password/handlers/login.write.d.ts +1 -0
  54. package/dist/auth-email-password/handlers/login.write.js +26 -1
  55. package/dist/auth-email-password/handlers/request-account-unlock.write.js +1 -1
  56. package/dist/auth-email-password/handlers/request-email-verification.write.js +1 -1
  57. package/dist/auth-email-password/handlers/request-password-reset.write.js +1 -1
  58. package/dist/auth-email-password/handlers/reset-password.write.js +1 -1
  59. package/dist/auth-email-password/handlers/verify-email.write.js +1 -1
  60. package/dist/auth-email-password/index.d.ts +1 -1
  61. package/dist/auth-email-password/index.js +1 -1
  62. package/dist/auth-email-password/mail-notifications.js +1 -1
  63. package/dist/auth-email-password/signup-activation.js +1 -1
  64. package/dist/auth-email-password/web/auth-client.js +0 -1
  65. package/dist/auth-email-password/web/auth-form-logic.js +0 -1
  66. package/dist/auth-email-password/web/auth-form-primitives.js +0 -1
  67. package/dist/auth-email-password/web/auth-gate.js +0 -1
  68. package/dist/auth-email-password/web/auth-redirect.js +0 -1
  69. package/dist/auth-email-password/web/client-actions.js +0 -1
  70. package/dist/auth-email-password/web/client-plugin.js +1 -2
  71. package/dist/auth-email-password/web/confirm-account-unlock-screen.js +0 -1
  72. package/dist/auth-email-password/{constants.js → web/constants.js} +3 -6
  73. package/dist/auth-email-password/web/default-topbar-actions.js +0 -1
  74. package/dist/auth-email-password/web/forgot-password-screen.js +0 -1
  75. package/dist/auth-email-password/{i18n.js → web/i18n.js} +3 -4
  76. package/dist/auth-email-password/web/index.d.ts +1 -1
  77. package/dist/auth-email-password/web/index.js +1 -2
  78. package/dist/auth-email-password/web/invite-accept-screen.d.ts +2 -2
  79. package/dist/auth-email-password/web/invite-accept-screen.js +0 -1
  80. package/dist/auth-email-password/web/login-screen.js +0 -1
  81. package/dist/auth-email-password/{mail-i18n.js → web/mail-i18n.js} +0 -1
  82. package/dist/auth-email-password/web/request-account-unlock-screen.js +0 -1
  83. package/dist/auth-email-password/web/reset-password-screen.js +0 -1
  84. package/dist/auth-email-password/web/session-bootstrap-error.js +0 -1
  85. package/dist/auth-email-password/web/session.js +0 -1
  86. package/dist/auth-email-password/web/signup-complete-screen.d.ts +2 -2
  87. package/dist/auth-email-password/web/signup-complete-screen.js +0 -1
  88. package/dist/auth-email-password/web/signup-screen.js +0 -1
  89. package/dist/auth-email-password/web/tenant-menu-items.js +0 -1
  90. package/dist/auth-email-password/web/tenant-switcher.js +0 -1
  91. package/dist/auth-email-password/web/use-shell-user.js +0 -1
  92. package/dist/auth-email-password/web/user-menu.js +0 -1
  93. package/dist/auth-email-password/web/verify-email-screen.js +0 -1
  94. package/dist/auth-mfa/errors.d.ts +1 -1
  95. package/dist/auth-mfa/errors.js +2 -2
  96. package/dist/auth-mfa/handlers/enable-confirm-preauth.write.js +1 -1
  97. package/dist/auth-mfa/handlers/enable-start-preauth.write.js +1 -1
  98. package/dist/auth-mfa/handlers/enable-start.write.js +1 -1
  99. package/dist/auth-mfa/handlers/verify.write.js +1 -1
  100. package/dist/auth-mfa/index.d.ts +1 -1
  101. package/dist/auth-mfa/index.js +1 -1
  102. package/dist/auth-mfa/mfa-status-checker.js +1 -1
  103. package/dist/auth-mfa/screens.js +1 -1
  104. package/dist/auth-mfa/web/client-plugin.js +0 -1
  105. package/dist/auth-mfa/{constants.js → web/constants.js} +0 -1
  106. package/dist/auth-mfa/web/i18n.js +0 -1
  107. package/dist/auth-mfa/web/index.js +0 -1
  108. package/dist/auth-mfa/web/mfa-client.js +0 -1
  109. package/dist/auth-mfa/web/mfa-disable-dialog.js +1 -2
  110. package/dist/auth-mfa/web/mfa-recovery-codes-reveal.js +0 -1
  111. package/dist/auth-mfa/web/mfa-regenerate-recovery-dialog.js +1 -2
  112. package/dist/auth-mfa/web/mfa-setup-preauth-screen.js +11 -18
  113. package/dist/auth-mfa/web/mfa-verify-screen.js +0 -1
  114. package/dist/billing-foundation/checkout-core.js +1 -1
  115. package/dist/billing-foundation/consumer-protection/consent-text.d.ts +2 -2
  116. package/dist/billing-foundation/consumer-protection/consent-text.js +1 -1
  117. package/dist/billing-foundation/consumer-protection/issue-confirmation.js +7 -3
  118. package/dist/billing-foundation/consumer-protection/mail-notifications.js +3 -1
  119. package/dist/billing-foundation/consumer-protection/register-consent.js +1 -1
  120. package/dist/billing-foundation/consumer-protection/register-termination.js +8 -2
  121. package/dist/billing-foundation/consumer-protection/stored-user-email.d.ts +1 -0
  122. package/dist/billing-foundation/consumer-protection/stored-user-email.js +8 -0
  123. package/dist/billing-foundation/consumer-protection/termination-mail.d.ts +5 -1
  124. package/dist/billing-foundation/consumer-protection/termination-mail.js +3 -1
  125. package/dist/billing-foundation/consumer-protection/termination-notify.js +1 -1
  126. package/dist/billing-foundation/consumer-protection/termination-pages.js +109 -15
  127. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +8 -1
  128. package/dist/billing-foundation/consumer-protection/termination-record.js +76 -3
  129. package/dist/billing-foundation/consumer-protection/termination-request.js +33 -6
  130. package/dist/billing-foundation/consumer-protection/termination-revoke.d.ts +28 -0
  131. package/dist/billing-foundation/consumer-protection/termination-revoke.js +149 -0
  132. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +17 -1
  133. package/dist/billing-foundation/consumer-protection/termination-texts.js +39 -0
  134. package/dist/billing-foundation/events.d.ts +9 -0
  135. package/dist/billing-foundation/events.js +14 -2
  136. package/dist/billing-foundation/feature.js +1 -1
  137. package/dist/billing-foundation/handlers/process-event.write.d.ts +5 -1
  138. package/dist/billing-foundation/handlers/process-event.write.js +57 -3
  139. package/dist/billing-foundation/handlers/switch-plan.write.js +1 -1
  140. package/dist/billing-foundation/handlers/sync-subscription.write.js +1 -1
  141. package/dist/billing-foundation/index.d.ts +2 -2
  142. package/dist/billing-foundation/index.js +2 -2
  143. package/dist/billing-foundation/plan-catalog.js +1 -1
  144. package/dist/billing-foundation/screens.js +1 -1
  145. package/dist/billing-foundation/subscription-tier-sync.js +1 -1
  146. package/dist/billing-foundation/types.d.ts +14 -2
  147. package/dist/billing-foundation/types.js +1 -1
  148. package/dist/billing-foundation/validate-options.js +3 -3
  149. package/dist/billing-foundation/web/billing-contact-plan.js +1 -2
  150. package/dist/billing-foundation/web/billing-plans-panel.js +1 -2
  151. package/dist/billing-foundation/web/cancel-contract-dialog.js +1 -2
  152. package/dist/billing-foundation/web/checkout-consent-dialog.js +1 -2
  153. package/dist/billing-foundation/web/client-plugin.js +1 -1
  154. package/dist/billing-foundation/{constants.d.ts → web/constants.d.ts} +21 -14
  155. package/dist/billing-foundation/{constants.js → web/constants.js} +35 -31
  156. package/dist/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.js +0 -1
  157. package/dist/billing-foundation/{contact-card.js → web/contact-card.js} +0 -1
  158. package/dist/billing-foundation/web/index.d.ts +2 -2
  159. package/dist/billing-foundation/web/index.js +2 -3
  160. package/dist/billing-foundation/web/localized-params.js +0 -1
  161. package/dist/billing-foundation/webhook-handler.js +4 -1
  162. package/dist/cap-overview/feature.js +1 -1
  163. package/dist/cap-overview/handlers/caps-usage.query.js +1 -1
  164. package/dist/cap-overview/handlers/tenant-caps-list.query.js +2 -2
  165. package/dist/cap-overview/index.d.ts +2 -2
  166. package/dist/cap-overview/index.js +2 -2
  167. package/dist/cap-overview/screens.js +1 -1
  168. package/dist/cap-overview/web/cap-cards-panel.js +1 -1
  169. package/dist/cap-overview/web/cap-usage-bar.js +1 -2
  170. package/dist/cap-overview/web/client-plugin.js +1 -1
  171. package/dist/cap-overview/{constants.js → web/constants.js} +0 -1
  172. package/dist/cap-overview/web/index.js +0 -1
  173. package/dist/cap-overview/{usage-math.d.ts → web/usage-math.d.ts} +1 -1
  174. package/dist/compliance-profiles/feature.js +1 -1
  175. package/dist/compliance-profiles/index.d.ts +1 -1
  176. package/dist/compliance-profiles/index.js +1 -1
  177. package/dist/compliance-profiles/web/client-plugin.js +1 -2
  178. package/dist/compliance-profiles/web/compliance-profile-catalog.js +1 -2
  179. package/dist/compliance-profiles/{constants.js → web/constants.js} +0 -1
  180. package/dist/compliance-profiles/web/index.js +0 -1
  181. package/dist/config/index.d.ts +1 -1
  182. package/dist/config/index.js +1 -1
  183. package/dist/config/web/client-plugin.d.ts +1 -1
  184. package/dist/config/web/client-plugin.js +1 -2
  185. package/dist/config/{constants.js → web/constants.js} +0 -1
  186. package/dist/config/web/i18n.js +0 -1
  187. package/dist/config/web/index.d.ts +1 -1
  188. package/dist/config/web/index.js +1 -2
  189. package/dist/config/write-helpers.js +1 -1
  190. package/dist/custom-fields/feature.js +1 -1
  191. package/dist/custom-fields/handlers/clear-custom-field.write.js +1 -1
  192. package/dist/custom-fields/handlers/define-tenant-field.write.js +1 -1
  193. package/dist/custom-fields/handlers/delete-system-field.write.js +1 -1
  194. package/dist/custom-fields/handlers/delete-tenant-field.write.js +1 -1
  195. package/dist/custom-fields/handlers/set-custom-field.write.js +1 -1
  196. package/dist/custom-fields/handlers/update-tenant-field.write.js +1 -1
  197. package/dist/custom-fields/index.d.ts +1 -1
  198. package/dist/custom-fields/index.js +1 -1
  199. package/dist/custom-fields/lib/value-schema.js +1 -1
  200. package/dist/custom-fields/schemas.js +1 -1
  201. package/dist/custom-fields/web/client-plugin.js +1 -2
  202. package/dist/custom-fields/{constants.js → web/constants.js} +18 -19
  203. package/dist/custom-fields/web/custom-fields-form-section.js +1 -2
  204. package/dist/custom-fields/web/i18n.js +0 -1
  205. package/dist/custom-fields/web/index.d.ts +1 -1
  206. package/dist/custom-fields/web/index.js +1 -2
  207. package/dist/custom-fields/wire-for-entity.js +1 -1
  208. package/dist/delivery/address-opt-out.js +1 -1
  209. package/dist/delivery/attempt-log-retention.js +21 -3
  210. package/dist/delivery/constants.d.ts +1 -1
  211. package/dist/delivery/constants.js +2 -2
  212. package/dist/delivery/i18n.js +1 -1
  213. package/dist/delivery/unsubscribe-page.js +1 -1
  214. package/dist/delivery/web/client-plugin.js +1 -1
  215. package/dist/delivery/web/delivery-channel-cell.js +0 -1
  216. package/dist/delivery/web/delivery-error-cell.js +0 -1
  217. package/dist/delivery/web/delivery-status-cell.js +1 -2
  218. package/dist/delivery/web/delivery-time-cell.js +0 -1
  219. package/dist/delivery/web/delivery-type-cell.js +0 -1
  220. package/dist/delivery/web/index.js +0 -1
  221. package/dist/delivery/{public-names.js → web/public-names.js} +0 -1
  222. package/dist/document-ingest-foundation/events.d.ts +1 -0
  223. package/dist/document-ingest-foundation/events.js +3 -0
  224. package/dist/document-ingest-foundation/executor.js +2 -1
  225. package/dist/document-ingest-foundation/feature.js +16 -5
  226. package/dist/document-ingest-foundation/index.d.ts +1 -1
  227. package/dist/document-ingest-foundation/index.js +1 -1
  228. package/dist/feature-toggles/feature.d.ts +1 -1
  229. package/dist/feature-toggles/feature.js +2 -2
  230. package/dist/feature-toggles/handlers/list.query.js +1 -1
  231. package/dist/feature-toggles/handlers/registered.query.js +1 -1
  232. package/dist/feature-toggles/handlers/set.write.js +1 -1
  233. package/dist/feature-toggles/index.d.ts +1 -1
  234. package/dist/feature-toggles/index.js +1 -1
  235. package/dist/feature-toggles/web/client-plugin.js +1 -2
  236. package/dist/feature-toggles/{constants.js → web/constants.js} +0 -1
  237. package/dist/feature-toggles/web/index.js +0 -1
  238. package/dist/folders/feature.js +1 -1
  239. package/dist/folders/handlers/clear-folder.write.js +1 -1
  240. package/dist/folders/handlers/delete-folder.write.js +1 -1
  241. package/dist/folders/handlers/set-folder.write.js +1 -1
  242. package/dist/folders/index.d.ts +1 -1
  243. package/dist/folders/index.js +1 -1
  244. package/dist/folders/web/client-plugin.js +1 -2
  245. package/dist/folders/{constants.js → web/constants.js} +0 -1
  246. package/dist/folders/web/folder-manager.js +1 -2
  247. package/dist/folders/web/folder-section.js +1 -2
  248. package/dist/folders/web/i18n.js +0 -1
  249. package/dist/folders/web/index.d.ts +1 -1
  250. package/dist/folders/web/index.js +1 -2
  251. package/dist/folders/web/tree.js +0 -1
  252. package/dist/form-draft/db/queries/cleanup.d.ts +3 -2
  253. package/dist/form-draft/db/queries/cleanup.js +18 -9
  254. package/dist/form-draft/decrypt-draft.d.ts +2 -0
  255. package/dist/form-draft/decrypt-draft.js +19 -0
  256. package/dist/form-draft/entity.js +6 -9
  257. package/dist/form-draft/feature.js +1 -1
  258. package/dist/form-draft/handlers/cleanup.job.d.ts +1 -0
  259. package/dist/form-draft/handlers/cleanup.job.js +17 -4
  260. package/dist/form-draft/handlers/discard.write.js +1 -1
  261. package/dist/form-draft/handlers/get.query.js +6 -7
  262. package/dist/form-draft/handlers/list.query.js +11 -7
  263. package/dist/form-draft/handlers/save.write.js +1 -1
  264. package/dist/form-draft/index.d.ts +1 -1
  265. package/dist/form-draft/index.js +1 -1
  266. package/dist/form-draft/lookup.d.ts +2 -2
  267. package/dist/form-draft/lookup.js +7 -2
  268. package/dist/form-draft/schemas.js +1 -1
  269. package/dist/form-draft/{constants.js → web/constants.js} +0 -1
  270. package/dist/form-draft-user-data/hooks.js +2 -2
  271. package/dist/inbound-mail-foundation/retention-sweep.js +7 -5
  272. package/dist/jobs/feature.js +2 -2
  273. package/dist/jobs/handlers/retry.write.js +1 -1
  274. package/dist/jobs/handlers/trigger.write.js +1 -1
  275. package/dist/jobs/index.d.ts +1 -1
  276. package/dist/jobs/index.js +1 -1
  277. package/dist/jobs/web/client-plugin.js +2 -3
  278. package/dist/jobs/{constants.js → web/constants.js} +0 -1
  279. package/dist/jobs/web/default-translations.d.ts +2 -0
  280. package/dist/jobs/web/default-translations.js +3 -0
  281. package/dist/jobs/web/i18n.d.ts +5 -2
  282. package/dist/jobs/web/i18n.js +51 -4
  283. package/dist/jobs/web/index.js +0 -1
  284. package/dist/ledger/entity.d.ts +1 -1
  285. package/dist/ledger/entity.js +1 -1
  286. package/dist/ledger/feature.js +1 -1
  287. package/dist/ledger/handlers/confirm-schedule-period.write.js +2 -5
  288. package/dist/ledger/handlers/create-transaction.write.js +1 -1
  289. package/dist/ledger/handlers/reports.query.js +1 -1
  290. package/dist/ledger/handlers/reverse-transaction.write.js +1 -1
  291. package/dist/ledger/index.d.ts +1 -1
  292. package/dist/ledger/index.js +1 -1
  293. package/dist/ledger/recurring.d.ts +1 -1
  294. package/dist/ledger/reports.d.ts +1 -1
  295. package/dist/ledger/schemas.js +1 -1
  296. package/dist/ledger/{constants.js → web/constants.js} +0 -1
  297. package/dist/ledger/web/index.d.ts +1 -1
  298. package/dist/ledger/web/index.js +1 -2
  299. package/dist/legal-pages/feature.d.ts +1 -1
  300. package/dist/legal-pages/feature.js +1 -1
  301. package/dist/legal-pages/index.d.ts +1 -1
  302. package/dist/legal-pages/index.js +1 -1
  303. package/dist/legal-pages/lib/boot-check.d.ts +1 -1
  304. package/dist/legal-pages/lib/boot-check.js +1 -1
  305. package/dist/legal-pages/lib/validate-routes.d.ts +1 -1
  306. package/dist/legal-pages/web/client-plugin.js +1 -2
  307. package/dist/legal-pages/{constants.js → web/constants.js} +6 -8
  308. package/dist/legal-pages/web/index.js +0 -1
  309. package/dist/managed-pages/feature.js +1 -1
  310. package/dist/managed-pages/web/client-plugin.js +1 -2
  311. package/dist/managed-pages/web/default-translations.d.ts +2 -0
  312. package/dist/managed-pages/web/default-translations.js +11 -0
  313. package/dist/managed-pages/web/i18n.d.ts +5 -2
  314. package/dist/managed-pages/web/i18n.js +53 -12
  315. package/dist/managed-pages/web/index.d.ts +1 -1
  316. package/dist/managed-pages/web/index.js +1 -2
  317. package/dist/metrics/compute.d.ts +1 -1
  318. package/dist/metrics/compute.js +1 -1
  319. package/dist/metrics/feature.js +1 -1
  320. package/dist/metrics/index.d.ts +1 -1
  321. package/dist/metrics/index.js +1 -1
  322. package/dist/metrics/types.d.ts +1 -1
  323. package/dist/metrics/validate.js +1 -1
  324. package/dist/metrics/{constants.js → web/constants.js} +0 -1
  325. package/dist/metrics/window.d.ts +1 -1
  326. package/dist/notes-history/feature.js +1 -1
  327. package/dist/notes-history/handlers/add-note.write.js +1 -1
  328. package/dist/notes-history/index.d.ts +1 -1
  329. package/dist/notes-history/index.js +1 -1
  330. package/dist/notes-history/web/client-plugin.js +1 -2
  331. package/dist/notes-history/{constants.js → web/constants.js} +0 -1
  332. package/dist/notes-history/web/i18n.js +0 -1
  333. package/dist/notes-history/web/index.d.ts +1 -1
  334. package/dist/notes-history/web/index.js +1 -2
  335. package/dist/notes-history/web/notes-section.js +2 -3
  336. package/dist/personal-access-tokens/feature.d.ts +2 -2
  337. package/dist/personal-access-tokens/feature.js +6 -4
  338. package/dist/personal-access-tokens/handlers/available-scopes.query.d.ts +1 -1
  339. package/dist/personal-access-tokens/handlers/create.write.js +1 -1
  340. package/dist/personal-access-tokens/handlers/revoke.write.js +1 -1
  341. package/dist/personal-access-tokens/hash.js +1 -1
  342. package/dist/personal-access-tokens/i18n.d.ts +1 -1
  343. package/dist/personal-access-tokens/i18n.js +1 -1
  344. package/dist/personal-access-tokens/index.d.ts +5 -5
  345. package/dist/personal-access-tokens/index.js +3 -3
  346. package/dist/personal-access-tokens/resolver.d.ts +1 -1
  347. package/dist/personal-access-tokens/resolver.js +1 -1
  348. package/dist/personal-access-tokens/schema/api-token.js +1 -1
  349. package/dist/personal-access-tokens/screens.d.ts +1 -1
  350. package/dist/personal-access-tokens/screens.js +1 -1
  351. package/dist/personal-access-tokens/{constants.js → web/constants.js} +0 -1
  352. package/dist/presets/index.d.ts +0 -1
  353. package/dist/presets/index.js +0 -1
  354. package/dist/presets/security-baseline.d.ts +1 -1
  355. package/dist/presets/security-baseline.js +1 -1
  356. package/dist/secrets/feature.js +1 -1
  357. package/dist/secrets/handlers/delete.write.js +1 -1
  358. package/dist/secrets/handlers/list.query.js +1 -1
  359. package/dist/secrets/handlers/set.write.js +1 -1
  360. package/dist/secrets/i18n.js +1 -1
  361. package/dist/secrets/index.d.ts +1 -1
  362. package/dist/secrets/index.js +1 -1
  363. package/dist/secrets/{constants.js → web/constants.js} +0 -1
  364. package/dist/secrets/write-gate.js +1 -1
  365. package/dist/sessions/feature.js +7 -4
  366. package/dist/sessions/{i18n.js → web/i18n.js} +0 -1
  367. package/dist/shared/index.d.ts +1 -1
  368. package/dist/shared/index.js +1 -1
  369. package/dist/shared/purge-files-reaching-subject.js +7 -3
  370. package/dist/subscription-stripe/feature.js +2 -1
  371. package/dist/subscription-stripe/plugin-methods.d.ts +3 -0
  372. package/dist/subscription-stripe/plugin-methods.js +14 -0
  373. package/dist/subscription-stripe/verify-webhook.js +1 -0
  374. package/dist/tags/feature.js +1 -1
  375. package/dist/tags/handlers/assign-tag.write.js +11 -7
  376. package/dist/tags/handlers/create-tag.write.js +1 -1
  377. package/dist/tags/handlers/delete-tag.write.js +4 -1
  378. package/dist/tags/handlers/remove-tag.write.js +1 -1
  379. package/dist/tags/handlers/update-tag.write.js +1 -1
  380. package/dist/tags/index.d.ts +1 -1
  381. package/dist/tags/index.js +1 -1
  382. package/dist/tags/screens.js +1 -1
  383. package/dist/tags/web/client-plugin.js +1 -2
  384. package/dist/tags/{constants.d.ts → web/constants.d.ts} +1 -0
  385. package/dist/tags/{constants.js → web/constants.js} +3 -1
  386. package/dist/tags/web/entity-tags.js +1 -2
  387. package/dist/tags/web/i18n.js +2 -2
  388. package/dist/tags/web/index.d.ts +1 -1
  389. package/dist/tags/web/index.js +1 -2
  390. package/dist/tags/web/tag-filter.js +1 -2
  391. package/dist/tags/web/tag-manager.js +5 -4
  392. package/dist/tags/web/tag-picker.js +0 -1
  393. package/dist/tags/web/tag-section.js +1 -2
  394. package/dist/tags/web/tags-cell.js +1 -2
  395. package/dist/template-resolver/api.d.ts +21 -23
  396. package/dist/template-resolver/api.js +34 -6
  397. package/dist/template-resolver/compile-document-body.js +1 -1
  398. package/dist/template-resolver/compile-steps-block.js +2 -2
  399. package/dist/template-resolver/document-ops.d.ts +1 -1
  400. package/dist/template-resolver/document-ops.js +3 -3
  401. package/dist/template-resolver/document-sanitizer.d.ts +1 -1
  402. package/dist/template-resolver/document-sanitizer.js +3 -3
  403. package/dist/template-resolver/feature.d.ts +2 -0
  404. package/dist/template-resolver/feature.js +12 -4
  405. package/dist/template-resolver/handlers/by-slug.query.js +6 -1
  406. package/dist/template-resolver/handlers/by-tenant.query.js +6 -2
  407. package/dist/template-resolver/handlers/collection-item.query.js +1 -1
  408. package/dist/template-resolver/handlers/collection-list.query.js +1 -1
  409. package/dist/template-resolver/handlers/collection-set.write.d.ts +2 -1
  410. package/dist/template-resolver/handlers/collection-set.write.js +14 -2
  411. package/dist/template-resolver/handlers/copy-locale.write.js +2 -2
  412. package/dist/template-resolver/handlers/diff-to-system.query.js +5 -1
  413. package/dist/template-resolver/handlers/discard-draft.write.js +1 -1
  414. package/dist/template-resolver/handlers/document-base.d.ts +1 -1
  415. package/dist/template-resolver/handlers/document-base.js +6 -1
  416. package/dist/template-resolver/handlers/document-blocks.query.d.ts +1 -1
  417. package/dist/template-resolver/handlers/document-blocks.query.js +2 -2
  418. package/dist/template-resolver/handlers/export-bundle.query.js +5 -2
  419. package/dist/template-resolver/handlers/find-by-id.query.js +4 -2
  420. package/dist/template-resolver/handlers/layout-source.query.js +5 -5
  421. package/dist/template-resolver/handlers/list.query.js +5 -2
  422. package/dist/template-resolver/handlers/overview.query.d.ts +10 -2
  423. package/dist/template-resolver/handlers/overview.query.js +44 -12
  424. package/dist/template-resolver/handlers/patch-draft.write.js +1 -1
  425. package/dist/template-resolver/handlers/resource-shared.js +1 -1
  426. package/dist/template-resolver/handlers/resource-upload.write.js +1 -1
  427. package/dist/template-resolver/handlers/send-test.write.js +2 -2
  428. package/dist/template-resolver/handlers/set.write.js +1 -1
  429. package/dist/template-resolver/handlers/shared.js +1 -1
  430. package/dist/template-resolver/handlers/template-gates.d.ts +1 -1
  431. package/dist/template-resolver/handlers/template-gates.js +1 -1
  432. package/dist/template-resolver/handlers/template-write.d.ts +1 -1
  433. package/dist/template-resolver/handlers/template-write.js +1 -1
  434. package/dist/template-resolver/handlers/usage.query.js +3 -2
  435. package/dist/template-resolver/handlers/validate.query.d.ts +1 -1
  436. package/dist/template-resolver/handlers/validate.query.js +3 -1
  437. package/dist/template-resolver/i18n.d.ts +3 -0
  438. package/dist/template-resolver/i18n.js +24 -0
  439. package/dist/template-resolver/index.d.ts +4 -3
  440. package/dist/template-resolver/index.js +3 -3
  441. package/dist/template-resolver/layout-appearance.js +1 -1
  442. package/dist/template-resolver/layout-regions.d.ts +1 -1
  443. package/dist/template-resolver/seeding.d.ts +4 -1
  444. package/dist/template-resolver/seeding.js +13 -7
  445. package/dist/template-resolver/store-template-resource.js +2 -2
  446. package/dist/template-resolver/table.js +1 -1
  447. package/dist/template-resolver/template-bundle.js +2 -2
  448. package/dist/template-resolver/template-delivery-policy.d.ts +22 -0
  449. package/dist/template-resolver/template-delivery-policy.js +40 -0
  450. package/dist/template-resolver/template-draft.d.ts +1 -1
  451. package/dist/template-resolver/template-draft.js +1 -1
  452. package/dist/template-resolver/template-edit-policy.d.ts +1 -1
  453. package/dist/template-resolver/template-edit-policy.js +1 -1
  454. package/dist/template-resolver/template-meta.d.ts +2 -2
  455. package/dist/template-resolver/template-meta.js +2 -2
  456. package/dist/template-resolver/template-preview.d.ts +1 -1
  457. package/dist/template-resolver/template-preview.js +8 -4
  458. package/dist/template-resolver/template-usage.d.ts +1 -1
  459. package/dist/template-resolver/template-usage.js +1 -1
  460. package/dist/template-resolver/template-validation.js +1 -1
  461. package/dist/template-resolver/testing.js +1 -1
  462. package/dist/template-resolver/user-content-table.js +1 -1
  463. package/dist/template-resolver/web/client-plugin.js +1 -2
  464. package/dist/template-resolver/{constants.d.ts → web/constants.d.ts} +1 -1
  465. package/dist/template-resolver/{constants.js → web/constants.js} +7 -10
  466. package/dist/template-resolver/web/document-editor-extensions.js +2 -2
  467. package/dist/template-resolver/web/document-editor.js +0 -1
  468. package/dist/template-resolver/{document-images.js → web/document-images.js} +0 -1
  469. package/dist/template-resolver/{document-schema.js → web/document-schema.js} +0 -1
  470. package/dist/template-resolver/{document-steps.js → web/document-steps.js} +0 -1
  471. package/dist/template-resolver/web/document-tiptap-editor.js +2 -3
  472. package/dist/template-resolver/web/document-toolbar-blocks.d.ts +2 -2
  473. package/dist/template-resolver/web/document-toolbar-blocks.js +1 -1
  474. package/dist/template-resolver/web/editor-handle.js +1 -1
  475. package/dist/template-resolver/web/i18n.js +1 -1
  476. package/dist/template-resolver/web/index.d.ts +3 -3
  477. package/dist/template-resolver/web/index.js +3 -4
  478. package/dist/template-resolver/{mail-constants.js → web/mail-constants.js} +0 -1
  479. package/dist/template-resolver/{pdf-constants.js → web/pdf-constants.js} +0 -1
  480. package/dist/template-resolver/web/placeholder-line-editor-lazy.js +0 -1
  481. package/dist/template-resolver/web/placeholder-line-editor.js +6 -4
  482. package/dist/template-resolver/{qualified-names.js → web/qualified-names.js} +0 -1
  483. package/dist/template-resolver/web/use-stable-by-key.js +0 -1
  484. package/dist/tenant/handlers/add-member.write.js +1 -1
  485. package/dist/tenant/index.d.ts +1 -1
  486. package/dist/tenant/index.js +1 -1
  487. package/dist/tenant/invitation-table.js +1 -1
  488. package/dist/tenant/invited-membership.js +1 -1
  489. package/dist/tenant/last-tenant-admin.js +1 -1
  490. package/dist/tenant/member-role-options.js +1 -1
  491. package/dist/tenant/screens.js +1 -1
  492. package/dist/tenant/web/client-plugin.js +1 -2
  493. package/dist/tenant/{constants.js → web/constants.js} +3 -6
  494. package/dist/tenant/web/index.js +0 -1
  495. package/dist/tenant/web/member-roles-cell.js +0 -1
  496. package/dist/tenant/web/member-status-cell.js +0 -1
  497. package/dist/tenant-lifecycle/stages.js +2 -3
  498. package/dist/tier-engine/entity.d.ts +1 -1
  499. package/dist/tier-engine/entity.js +1 -1
  500. package/dist/tier-engine/feature.js +2 -2
  501. package/dist/tier-engine/handlers/set-tenant-tier.write.js +1 -1
  502. package/dist/tier-engine/index.d.ts +1 -1
  503. package/dist/tier-engine/index.js +1 -1
  504. package/dist/tier-engine/web/client-plugin.js +2 -3
  505. package/dist/tier-engine/{constants.js → web/constants.js} +2 -3
  506. package/dist/tier-engine/{i18n.js → web/i18n.js} +0 -1
  507. package/dist/tier-engine/web/index.js +0 -1
  508. package/dist/user/handlers/create.write.js +1 -1
  509. package/dist/user/handlers/update-roles.js +1 -1
  510. package/dist/user/handlers/update.write.js +1 -1
  511. package/dist/user/index.d.ts +1 -1
  512. package/dist/user/index.js +1 -1
  513. package/dist/user/invited-global-roles.d.ts +1 -1
  514. package/dist/user/invited-global-roles.js +1 -1
  515. package/dist/user/schema/user.js +1 -1
  516. package/dist/user/{constants.js → web/constants.js} +0 -1
  517. package/dist/user-data-rights/env.js +1 -1
  518. package/dist/user-data-rights/feature.js +3 -3
  519. package/dist/user-data-rights/index.d.ts +1 -1
  520. package/dist/user-data-rights/index.js +1 -1
  521. package/dist/user-data-rights/lib/resolve-tenant-model.js +1 -1
  522. package/dist/user-data-rights/mail-notifications.js +1 -1
  523. package/dist/user-data-rights/web/client-plugin.js +2 -3
  524. package/dist/user-data-rights/web/confirm-deletion-screen.js +0 -1
  525. package/dist/user-data-rights/{constants.js → web/constants.js} +11 -12
  526. package/dist/user-data-rights/web/default-translations.d.ts +2 -0
  527. package/dist/user-data-rights/web/default-translations.js +59 -0
  528. package/dist/user-data-rights/web/i18n.d.ts +5 -2
  529. package/dist/user-data-rights/web/i18n.js +37 -59
  530. package/dist/user-data-rights/web/index.d.ts +1 -1
  531. package/dist/user-data-rights/web/index.js +1 -2
  532. package/dist/user-data-rights/web/privacy-center-screen.js +1 -2
  533. package/dist/user-data-rights/web/request-deletion-screen.js +0 -1
  534. package/dist/user-data-rights-defaults/hooks/file-ref.userdata-hook.js +6 -1
  535. package/dist/user-profile/feature.js +1 -1
  536. package/dist/user-profile/handlers/change-email.write.js +1 -1
  537. package/dist/user-profile/index.d.ts +1 -1
  538. package/dist/user-profile/index.js +1 -1
  539. package/dist/user-profile/web/client-plugin.js +2 -3
  540. package/dist/user-profile/{constants.js → web/constants.js} +0 -1
  541. package/dist/user-profile/{i18n.js → web/i18n.js} +0 -1
  542. package/dist/user-profile/web/profile-screen.js +2 -3
  543. package/dist/waitlist/entity.js +1 -1
  544. package/dist/waitlist/feature.js +1 -1
  545. package/dist/waitlist/handlers/export-purge.write.js +1 -1
  546. package/dist/waitlist/handlers/invite.write.js +1 -1
  547. package/dist/waitlist/handlers/reject.write.js +1 -1
  548. package/dist/waitlist/handlers/submit.write.js +4 -3
  549. package/dist/waitlist/import.d.ts +1 -1
  550. package/dist/waitlist/index.d.ts +1 -1
  551. package/dist/waitlist/index.js +1 -1
  552. package/dist/waitlist/legacy-migrate.js +1 -1
  553. package/dist/waitlist/link-on-signup.js +1 -1
  554. package/dist/waitlist/mail.d.ts +0 -1
  555. package/dist/waitlist/mail.js +6 -4
  556. package/dist/waitlist/payloads.js +1 -1
  557. package/dist/waitlist/screens.js +1 -1
  558. package/dist/waitlist/{constants.js → web/constants.js} +0 -1
  559. package/kumiko-es-tables.json +102 -0
  560. package/package.json +30 -29
  561. package/src/audit/changes.json +7 -0
  562. package/src/auth-email-password/changes.json +6 -0
  563. package/src/auth-mfa/changes.json +6 -0
  564. package/src/billing-foundation/changes.json +18 -0
  565. package/src/delivery/changes.json +6 -0
  566. package/src/document-ingest-foundation/changes.json +6 -0
  567. package/src/files/changes.json +7 -0
  568. package/src/form-draft/changes.json +7 -0
  569. package/src/ledger/changes.json +7 -0
  570. package/src/presets/changes.json +7 -0
  571. package/src/tags/changes.json +6 -0
  572. package/src/template-resolver/changes.json +43 -0
  573. package/src/user-data-rights/changes.json +14 -0
  574. package/src/waitlist/changes.json +6 -0
  575. package/dist/admin-shell/i18n.d.ts +0 -5
  576. package/dist/admin-shell/i18n.js +0 -51
  577. package/dist/audit/i18n.d.ts +0 -5
  578. package/dist/audit/i18n.js +0 -22
  579. package/dist/jobs/i18n.d.ts +0 -5
  580. package/dist/jobs/i18n.js +0 -52
  581. package/dist/managed-pages/i18n.d.ts +0 -5
  582. package/dist/managed-pages/i18n.js +0 -55
  583. package/dist/presets/dsgvo-self-service.d.ts +0 -10
  584. package/dist/presets/dsgvo-self-service.js +0 -24
  585. package/dist/user-data-rights/i18n.d.ts +0 -5
  586. package/dist/user-data-rights/i18n.js +0 -39
  587. /package/dist/account-security/{constants.d.ts → web/constants.d.ts} +0 -0
  588. /package/dist/account-security/{i18n.d.ts → web/i18n.d.ts} +0 -0
  589. /package/dist/admin-shell/{constants.d.ts → web/constants.d.ts} +0 -0
  590. /package/dist/auth-email-password/{constants.d.ts → web/constants.d.ts} +0 -0
  591. /package/dist/auth-email-password/{i18n.d.ts → web/i18n.d.ts} +0 -0
  592. /package/dist/auth-email-password/{mail-i18n.d.ts → web/mail-i18n.d.ts} +0 -0
  593. /package/dist/auth-mfa/{constants.d.ts → web/constants.d.ts} +0 -0
  594. /package/dist/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.d.ts +0 -0
  595. /package/dist/billing-foundation/{contact-card.d.ts → web/contact-card.d.ts} +0 -0
  596. /package/dist/cap-overview/{constants.d.ts → web/constants.d.ts} +0 -0
  597. /package/dist/cap-overview/{usage-math.js → web/usage-math.js} +0 -0
  598. /package/dist/compliance-profiles/{constants.d.ts → web/constants.d.ts} +0 -0
  599. /package/dist/config/{constants.d.ts → web/constants.d.ts} +0 -0
  600. /package/dist/custom-fields/{constants.d.ts → web/constants.d.ts} +0 -0
  601. /package/dist/delivery/{public-names.d.ts → web/public-names.d.ts} +0 -0
  602. /package/dist/feature-toggles/{constants.d.ts → web/constants.d.ts} +0 -0
  603. /package/dist/folders/{constants.d.ts → web/constants.d.ts} +0 -0
  604. /package/dist/form-draft/{constants.d.ts → web/constants.d.ts} +0 -0
  605. /package/dist/jobs/{constants.d.ts → web/constants.d.ts} +0 -0
  606. /package/dist/ledger/{constants.d.ts → web/constants.d.ts} +0 -0
  607. /package/dist/legal-pages/{constants.d.ts → web/constants.d.ts} +0 -0
  608. /package/dist/metrics/{constants.d.ts → web/constants.d.ts} +0 -0
  609. /package/dist/notes-history/{constants.d.ts → web/constants.d.ts} +0 -0
  610. /package/dist/personal-access-tokens/{constants.d.ts → web/constants.d.ts} +0 -0
  611. /package/dist/personal-access-tokens/{scopes.d.ts → web/scopes.d.ts} +0 -0
  612. /package/dist/personal-access-tokens/{scopes.js → web/scopes.js} +0 -0
  613. /package/dist/secrets/{constants.d.ts → web/constants.d.ts} +0 -0
  614. /package/dist/sessions/{i18n.d.ts → web/i18n.d.ts} +0 -0
  615. /package/dist/template-resolver/{document-blocks.d.ts → web/document-blocks.d.ts} +0 -0
  616. /package/dist/template-resolver/{document-blocks.js → web/document-blocks.js} +0 -0
  617. /package/dist/template-resolver/{document-images.d.ts → web/document-images.d.ts} +0 -0
  618. /package/dist/template-resolver/{document-schema.d.ts → web/document-schema.d.ts} +0 -0
  619. /package/dist/template-resolver/{document-steps.d.ts → web/document-steps.d.ts} +0 -0
  620. /package/dist/template-resolver/{mail-constants.d.ts → web/mail-constants.d.ts} +0 -0
  621. /package/dist/template-resolver/{pdf-constants.d.ts → web/pdf-constants.d.ts} +0 -0
  622. /package/dist/template-resolver/{placeholder-text.d.ts → web/placeholder-text.d.ts} +0 -0
  623. /package/dist/template-resolver/{placeholder-text.js → web/placeholder-text.js} +0 -0
  624. /package/dist/template-resolver/{qualified-names.d.ts → web/qualified-names.d.ts} +0 -0
  625. /package/dist/tenant/{constants.d.ts → web/constants.d.ts} +0 -0
  626. /package/dist/tier-engine/{constants.d.ts → web/constants.d.ts} +0 -0
  627. /package/dist/tier-engine/{i18n.d.ts → web/i18n.d.ts} +0 -0
  628. /package/dist/user/{constants.d.ts → web/constants.d.ts} +0 -0
  629. /package/dist/user-data-rights/{constants.d.ts → web/constants.d.ts} +0 -0
  630. /package/dist/user-profile/{constants.d.ts → web/constants.d.ts} +0 -0
  631. /package/dist/user-profile/{i18n.d.ts → web/i18n.d.ts} +0 -0
  632. /package/dist/waitlist/{constants.d.ts → web/constants.d.ts} +0 -0
@@ -8,19 +8,19 @@
8
8
  //
9
9
  // Default ifExists="skip". The actor is `createSystemUser(SYSTEM_TENANT_ID)`,
10
10
  // deliberately not TestUsers (prod seeds are not test utilities).
11
- import { createTenantDb, deleteMany, fetchOne, } from "@cosmicdrift/kumiko-framework/db";
11
+ import { createTenantDb, fetchOne, } from "@cosmicdrift/kumiko-framework/db";
12
12
  import { createSystemUser, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-framework/engine";
13
- import { getStreamVersion, getUnscopedStreamMaxVersionForSeed, } from "@cosmicdrift/kumiko-framework/event-store";
13
+ import { deleteRowsWithoutReplayableStream, getStreamVersion, getUnscopedStreamMaxVersionForSeed, } from "@cosmicdrift/kumiko-framework/event-store";
14
14
  import { runEventStoreSeed } from "@cosmicdrift/kumiko-framework/seeding";
15
15
  import { isPlainObject } from "@cosmicdrift/kumiko-types/type-guards";
16
- import { TEXT_BLOCK_KIND } from "./constants.js";
17
16
  import { executor } from "./handlers/shared.js";
18
17
  import { evaluateTemplateWrite } from "./handlers/template-gates.js";
19
- import { TEMPLATE_RESOLVER_FEATURE, TemplateResolverHandlers } from "./qualified-names.js";
20
18
  import { templateResourcesTable } from "./table.js";
21
19
  import { activeStampChanges, servedStampChanges } from "./template-draft.js";
22
20
  import { templateSlugSchema } from "./template-meta.js";
23
21
  import { variablesFromSchema } from "./template-validation.js";
22
+ import { TEXT_BLOCK_KIND } from "./web/constants.js";
23
+ import { TEMPLATE_RESOLVER_FEATURE, TemplateResolverHandlers } from "./web/qualified-names.js";
24
24
  /** Drop projection orphans (no events anywhere) so boot seeds can recreate. */
25
25
  async function resolveExistingForEventStoreSeed(db, tdb, existingRow, tenantId) {
26
26
  if (existingRow == null)
@@ -34,12 +34,17 @@ async function resolveExistingForEventStoreSeed(db, tdb, existingRow, tenantId)
34
34
  if (unscoped !== 0) {
35
35
  throw new Error(`seed orphan check: projection ${id} has no events for tenant ${tenantId} but unscoped stream version is ${unscoped} — refusing delete/recreate to avoid wiping a live stream`);
36
36
  }
37
- // The cast strips the executor-only brand that WritableTable rejects; the orphan row has no events, so no executor verb applies.
38
- await deleteMany(tdb, templateResourcesTable, { id, tenantId });
37
+ await deleteRowsWithoutReplayableStream(tdb, { table: templateResourcesTable, ids: [id] });
39
38
  return null;
40
39
  }
41
40
  return { id, version: streamVersion };
42
41
  }
42
+ function seedTitleColumn(opts, label) {
43
+ if (opts.title !== undefined && opts.titleI18nKey !== undefined) {
44
+ throw new Error(`${label} rejected: set either title or titleI18nKey, not both`);
45
+ }
46
+ return opts.titleI18nKey ?? opts.title ?? null;
47
+ }
43
48
  export async function seedSystemTemplate(db, opts) {
44
49
  const tenantId = SYSTEM_TENANT_ID;
45
50
  const by = opts.by ?? createSystemUser(tenantId);
@@ -48,6 +53,7 @@ export async function seedSystemTemplate(db, opts) {
48
53
  const slug = templateSlugSchema.safeParse(opts.slug);
49
54
  if (!slug.success)
50
55
  throw new Error(`${label} rejected: ${slug.error.issues[0]?.message}`);
56
+ const title = seedTitleColumn(opts, label);
51
57
  const evaluated = evaluateTemplateWrite({
52
58
  kind: opts.kind,
53
59
  scope: "system",
@@ -81,7 +87,7 @@ export async function seedSystemTemplate(db, opts) {
81
87
  variableSchema,
82
88
  ...(linkedResources !== undefined && { linkedResources }),
83
89
  meta,
84
- title: opts.title ?? null,
90
+ title,
85
91
  folder: null,
86
92
  scope: "system",
87
93
  parentTemplateId,
@@ -3,14 +3,14 @@ import { NotFoundError, UnprocessableError, writeFailure, } from "@cosmicdrift/k
3
3
  import { createFileRefFromUploadedBytes, uploadFileBytesBeforeTransaction, } from "@cosmicdrift/kumiko-framework/files";
4
4
  import { fileContextForTenant } from "../file-foundation/index.js";
5
5
  import { extensionForResourceContentType, requireForTenant } from "../shared/index.js";
6
- import { ACTIVE_TEMPLATE_STATUS, SYSTEM_TENANT_ID } from "./constants.js";
7
6
  import { DEFAULT_RESOURCE_MAX_BYTES, MAX_FILE_ATTACHMENTS_PER_TEMPLATE, RESOURCE_MAX_BYTES_CONFIG_KEY, } from "./handlers/resource-shared.js";
8
7
  import { executor } from "./handlers/shared.js";
9
8
  import { attachmentEntriesOf, parseLinkedResourceEntries, templatePdfAttachmentLinkSchema, } from "./linked-resources.js";
10
- import { TemplateResolverErrors } from "./qualified-names.js";
11
9
  import { normalizeResourceImage } from "./resource-image.js";
12
10
  import { templateResourcesTable } from "./table.js";
13
11
  import { readTemplateResource } from "./template-resources.js";
12
+ import { ACTIVE_TEMPLATE_STATUS, SYSTEM_TENANT_ID } from "./web/constants.js";
13
+ import { TemplateResolverErrors } from "./web/qualified-names.js";
14
14
  export async function readTemplateResourceMaxBytes(config, registry) {
15
15
  if (config === undefined || registry.getConfigKey(RESOURCE_MAX_BYTES_CONFIG_KEY) === undefined) {
16
16
  return DEFAULT_RESOURCE_MAX_BYTES;
@@ -1,6 +1,6 @@
1
1
  import { buildEntityTable } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { createEntity, createLongTextField, createNumberField, createSelectField, createTextField, createTimestampField, } from "@cosmicdrift/kumiko-framework/engine";
3
- import { CONTENT_FORMATS, TEMPLATE_KINDS, TEMPLATE_SCOPES, TEMPLATE_STATUSES, } from "./constants.js";
3
+ import { CONTENT_FORMATS, TEMPLATE_KINDS, TEMPLATE_SCOPES, TEMPLATE_STATUSES, } from "./web/constants.js";
4
4
  // Stored v1 events name the kind "mail-html", which is now "mail".
5
5
  const renameMailHtmlKind = {
6
6
  fromVersion: 1,
@@ -1,8 +1,8 @@
1
1
  import * as z from "zod";
2
- import { CONTENT_FORMATS, UPSERT_KINDS } from "./constants.js";
3
- import { isDocumentResourceKey } from "./document-schema.js";
4
2
  import { templatePdfAttachmentLinkSchema } from "./linked-resources.js";
5
3
  import { templateSlugSchema } from "./template-meta.js";
4
+ import { CONTENT_FORMATS, UPSERT_KINDS } from "./web/constants.js";
5
+ import { isDocumentResourceKey } from "./web/document-schema.js";
6
6
  const MAX_RESOURCES = 20;
7
7
  const MAX_LOCALES = 50;
8
8
  const MAX_RESOURCE_BYTES = 2 * 1024 * 1024;
@@ -0,0 +1,22 @@
1
+ import type { Registry } from "@cosmicdrift/kumiko-framework/engine";
2
+ type DeliveryTarget = {
3
+ readonly kind: string;
4
+ readonly slug: string;
5
+ };
6
+ export type TemplateDeliveryPolicy = {
7
+ readonly tenantEditable: readonly DeliveryTarget[];
8
+ /** Kinds of collections mounted with an explicit `access`; their tenant rows are edited by design. */
9
+ readonly collectionKinds: readonly string[];
10
+ };
11
+ export declare function isTenantOverrideServed(policy: TemplateDeliveryPolicy, target: DeliveryTarget): boolean;
12
+ export declare function isServedByCollectionOnly(policy: TemplateDeliveryPolicy, target: DeliveryTarget): boolean;
13
+ export declare function isRowServed(policy: TemplateDeliveryPolicy, row: DeliveryTarget & {
14
+ readonly tenantId: string;
15
+ }): boolean;
16
+ export declare function isRowServedTo(policy: TemplateDeliveryPolicy, user: {
17
+ readonly roles: readonly string[];
18
+ }, row: DeliveryTarget & {
19
+ readonly tenantId: string;
20
+ }): boolean;
21
+ export declare function deliveryPolicyOf(registry: Registry): TemplateDeliveryPolicy;
22
+ export {};
@@ -0,0 +1,40 @@
1
+ import { isPlainObject, propertyOf } from "@cosmicdrift/kumiko-types/type-guards";
2
+ import { isSystemAdmin } from "./template-draft.js";
3
+ import { SYSTEM_TENANT_ID } from "./web/constants.js";
4
+ import { TEMPLATE_RESOLVER_FEATURE } from "./web/qualified-names.js";
5
+ const NOTHING_UNLOCKED = { tenantEditable: [], collectionKinds: [] };
6
+ export function isTenantOverrideServed(policy, target) {
7
+ return (policy.collectionKinds.includes(target.kind) ||
8
+ policy.tenantEditable.some((entry) => entry.kind === target.kind && entry.slug === target.slug));
9
+ }
10
+ // Served only because its kind belongs to a collection with `access`, not because the template
11
+ // is listed in tenantEditable. For these a system row of the same slug must win.
12
+ export function isServedByCollectionOnly(policy, target) {
13
+ return (policy.collectionKinds.includes(target.kind) &&
14
+ !policy.tenantEditable.some((entry) => entry.kind === target.kind && entry.slug === target.slug));
15
+ }
16
+ export function isRowServed(policy, row) {
17
+ return row.tenantId === SYSTEM_TENANT_ID || isTenantOverrideServed(policy, row);
18
+ }
19
+ // A SystemAdmin sees every stored row, so a locked override can still be reset; everyone else
20
+ // sees only what is delivered, which keeps a locked override out of the template-resolver queries for a TenantAdmin (the audit log keeps the history).
21
+ export function isRowServedTo(policy, user, row) {
22
+ return isSystemAdmin(user) || isRowServed(policy, row);
23
+ }
24
+ function isDeliveryTarget(value) {
25
+ return (typeof propertyOf(value, "kind") === "string" && typeof propertyOf(value, "slug") === "string");
26
+ }
27
+ function isTemplateDeliveryPolicy(value) {
28
+ if (!isPlainObject(value))
29
+ return false;
30
+ const { tenantEditable, collectionKinds } = value;
31
+ return (Array.isArray(tenantEditable) &&
32
+ tenantEditable.every(isDeliveryTarget) &&
33
+ Array.isArray(collectionKinds) &&
34
+ collectionKinds.every((kind) => typeof kind === "string"));
35
+ }
36
+ // Fail closed: without the mounted feature (or its exports) no tenant row counts as unlocked.
37
+ export function deliveryPolicyOf(registry) {
38
+ const exported = propertyOf(propertyOf(registry.getFeature(TEMPLATE_RESOLVER_FEATURE), "exports"), "deliveryPolicy");
39
+ return isTemplateDeliveryPolicy(exported) ? exported : NOTHING_UNLOCKED;
40
+ }
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
2
- import { type ContentFormat } from "./constants.ts";
3
2
  import type { TemplateResourceRow } from "./table.ts";
3
+ import { type ContentFormat } from "./web/constants.ts";
4
4
  export type TemplateDraft = {
5
5
  readonly content: string | null;
6
6
  readonly contentFormat: ContentFormat;
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
2
2
  import * as z from "zod";
3
- import { CONTENT_FORMATS } from "./constants.js";
3
+ import { CONTENT_FORMATS } from "./web/constants.js";
4
4
  const templateDraftSchema = z.object({
5
5
  content: z.string().nullable(),
6
6
  contentFormat: z.enum(CONTENT_FORMATS),
@@ -1,6 +1,6 @@
1
1
  import { type HandlerContext, type RoleAccessRule, type SessionUser } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { type WriteFailure } from "@cosmicdrift/kumiko-framework/errors";
3
- import type { TemplateKind } from "./constants.ts";
3
+ import type { TemplateKind } from "./web/constants.ts";
4
4
  export type TenantEditableTemplate = {
5
5
  readonly kind: TemplateKind;
6
6
  readonly slug: string;
@@ -1,9 +1,9 @@
1
1
  import { fetchOne } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { hasAccess, } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { AccessDeniedError, writeFailure, } from "@cosmicdrift/kumiko-framework/errors";
4
- import { TemplateResolverErrors } from "./qualified-names.js";
5
4
  import { templateResourcesTable } from "./table.js";
6
5
  import { isSystemAdmin } from "./template-draft.js";
6
+ import { TemplateResolverErrors } from "./web/qualified-names.js";
7
7
  const SYSTEM_ADMIN_ROLE = "SystemAdmin";
8
8
  export function templateEditAccess(entries) {
9
9
  const roles = new Set([SYSTEM_ADMIN_ROLE]);
@@ -1,6 +1,6 @@
1
1
  import * as z from "zod";
2
- import { type TemplateKind } from "./constants.ts";
3
- import { MAIL_TONES, type MailTone } from "./mail-constants.ts";
2
+ import { type TemplateKind } from "./web/constants.ts";
3
+ import { MAIL_TONES, type MailTone } from "./web/mail-constants.ts";
4
4
  export declare const templateSlugSchema: z.ZodString;
5
5
  export declare const MAIL_CATEGORIES: readonly ["transactional", "marketing"];
6
6
  export type MailCategory = (typeof MAIL_CATEGORIES)[number];
@@ -1,6 +1,6 @@
1
1
  import * as z from "zod";
2
- import { HEX_COLOR_PATTERN, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "./constants.js";
3
- import { MAIL_TONES } from "./mail-constants.js";
2
+ import { HEX_COLOR_PATTERN, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "./web/constants.js";
3
+ import { MAIL_TONES } from "./web/mail-constants.js";
4
4
  // One or more kebab segments joined by ":" — notification templates are seeded
5
5
  // under their qualified name `feature:notify:name`.
6
6
  export const templateSlugSchema = z
@@ -1,10 +1,10 @@
1
1
  import { type HandlerContext, type SessionUser, type TemplateVariables } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { type KumikoError } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import { type MailAttachmentRef } from "../renderer-foundation/index.ts";
4
- import { type TemplateScope } from "./constants.ts";
5
4
  import { validateTemplateDraft } from "./handlers/validate.query.ts";
6
5
  import { type LayoutRegions, type TemplateWriteScope } from "./layout-regions.ts";
7
6
  import { type PdfTemplateMeta } from "./template-meta.ts";
7
+ import { type TemplateScope } from "./web/constants.ts";
8
8
  type LabelText = (label: string) => string;
9
9
  export declare function sampleValuesFor(variables: TemplateVariables, labelText?: LabelText): Record<string, unknown>;
10
10
  export type PreviewCheckCode = "resources_resolved" | "text_present" | "size_under_cap" | "required_placeholders";
@@ -10,15 +10,16 @@ import { fileContextForTenant } from "../file-foundation/index.js";
10
10
  import { collectRendererPlugins, createRendererFoundationApi, RendererError, } from "../renderer-foundation/index.js";
11
11
  import { createTemplateResolverApi, TemplateNotFoundError } from "./api.js";
12
12
  import { collectDocumentResourceKeys } from "./compile-document-body.js";
13
- import { DEFAULT_MAIL_LAYOUT_SLUG, DEFAULT_PDF_LAYOUT_SLUG, MAIL_PREVIEW_MAX_BYTES, SYSTEM_TENANT_ID, } from "./constants.js";
14
13
  import { parseStoredJson } from "./handlers/template-gates.js";
15
14
  import { validateTemplateDraft } from "./handlers/validate.query.js";
16
15
  import { readLayoutRegions, sanitizeLayoutHtml, } from "./layout-regions.js";
17
16
  import { parseLinkedResourceEntries } from "./linked-resources.js";
18
17
  import { buildDisplayHtml } from "./preview-display-html.js";
19
- import { TemplateResolverErrors } from "./qualified-names.js";
20
18
  import { templateResourcesTable } from "./table.js";
19
+ import { deliveryPolicyOf, isRowServedTo } from "./template-delivery-policy.js";
21
20
  import { isMailTemplateMeta, parseTemplateMeta, readPdfTemplateMeta, } from "./template-meta.js";
21
+ import { DEFAULT_MAIL_LAYOUT_SLUG, DEFAULT_PDF_LAYOUT_SLUG, MAIL_PREVIEW_MAX_BYTES, SYSTEM_TENANT_ID, } from "./web/constants.js";
22
+ import { TemplateResolverErrors } from "./web/qualified-names.js";
22
23
  const SAMPLE_LINK = "https://example.com";
23
24
  const SAMPLE_DATE = "2026-01-15";
24
25
  const SAMPLE_LIST_ROWS = 3;
@@ -86,7 +87,7 @@ const utf8Bytes = (value) => new TextEncoder().encode(value).length;
86
87
  const failed = (error) => ({ ok: false, error });
87
88
  async function loadStoredDraft(ctx, user, input) {
88
89
  try {
89
- return await createTemplateResolverApi(ctx.db).resolveTemplate({
90
+ return await createTemplateResolverApi(ctx.db, ctx.registry).resolveTemplate({
90
91
  tenantId: user.tenantId,
91
92
  slug: input.slug,
92
93
  kind: input.kind,
@@ -148,10 +149,13 @@ export function estimateMailBytes(args) {
148
149
  async function loadEditedRowResources(ctx, user, input) {
149
150
  const rows = await selectMany(ctx.db, templateResourcesTable, { tenantId: user.tenantId, slug: input.slug, kind: "mail", locale: input.locale }, { limit: 1 });
150
151
  const row = rows[0];
152
+ if (row !== undefined && !isRowServedTo(deliveryPolicyOf(ctx.registry), user, row)) {
153
+ return undefined;
154
+ }
151
155
  return row === undefined ? undefined : parseLinkedResourceEntries(row.linkedResources);
152
156
  }
153
157
  async function resolvePdfLayout(ctx, user, slug, locale) {
154
- const api = createTemplateResolverApi(ctx.db);
158
+ const api = createTemplateResolverApi(ctx.db, ctx.registry);
155
159
  const find = async (tenantId) => {
156
160
  try {
157
161
  return await api.resolveLayout({ tenantId, slug, kind: "pdf-layout", locale });
@@ -1,5 +1,5 @@
1
1
  import { type Registry } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type TemplateKind } from "./constants.ts";
2
+ import { type TemplateKind } from "./web/constants.ts";
3
3
  type UsageRole = "template" | "layout";
4
4
  export type TemplateUsageEntry = {
5
5
  readonly qualifiedName: string;
@@ -1,5 +1,5 @@
1
1
  import { parseQn, } from "@cosmicdrift/kumiko-framework/engine";
2
- import { DEFAULT_MAIL_LAYOUT_SLUG } from "./constants.js";
2
+ import { DEFAULT_MAIL_LAYOUT_SLUG } from "./web/constants.js";
3
3
  function layoutSlugsOf(qualifiedName, notification, effectiveLayouts) {
4
4
  const stored = effectiveLayouts.get(qualifiedName);
5
5
  const locales = new Set([
@@ -1,6 +1,6 @@
1
1
  import * as z from "zod";
2
2
  import { conditionScopeElement, withParsedDocument } from "./document-sanitizer.js";
3
- import { DOCUMENT_CONDITION_ATTRIBUTE, isDocumentPlaceholderHref, isDocumentReferenceName, } from "./document-schema.js";
3
+ import { DOCUMENT_CONDITION_ATTRIBUTE, isDocumentPlaceholderHref, isDocumentReferenceName, } from "./web/document-schema.js";
4
4
  export const SYSTEM_PLACEHOLDERS = new Set([
5
5
  "tenantName",
6
6
  "signature",
@@ -3,8 +3,8 @@
3
3
  // No bun:test here — callers register cases with their own test runner.
4
4
  import { seedRow } from "@cosmicdrift/kumiko-testing/helpers";
5
5
  import { TemplateNotFoundError } from "./api.js";
6
- import { FALLBACK_LOCALE, SYSTEM_TENANT_ID, } from "./constants.js";
7
6
  import { templateResourcesTable } from "./table.js";
7
+ import { FALLBACK_LOCALE, SYSTEM_TENANT_ID, } from "./web/constants.js";
8
8
  export class ConformanceAssertionError extends Error {
9
9
  constructor(message) {
10
10
  super(message);
@@ -1,6 +1,6 @@
1
1
  import { buildEntityTable } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { createEntity, createLongTextField, createSelectField, createTextField, } from "@cosmicdrift/kumiko-framework/engine";
3
- import { CONTENT_FORMATS, TEMPLATE_KINDS } from "./constants.js";
3
+ import { CONTENT_FORMATS, TEMPLATE_KINDS } from "./web/constants.js";
4
4
  // UserContentEntry — the per-user half of the content store: mail signatures
5
5
  // and personal reply snippets, one row per (tenantId, ownerId, slug, kind,
6
6
  // locale).
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-renderer/headless";
3
- // @runtime client
4
3
  // Client feature factory for the text-block content tree. Apps mount it via
5
4
  // createKumikoApp({ clientFeatures: [textBlocksClient()] }); it loads the
6
5
  // blocks from the by-tenant query, groups them by their `folder` field and
@@ -16,10 +15,10 @@ import { ContentPreview, useAppFeatures, useContentEditor, useDispatcher, usePri
16
15
  import { CSRF_HEADER_NAME, readCsrfToken } from "@cosmicdrift/kumiko-renderer/live";
17
16
  import { PlainContentEditor, RichContentEditor, } from "@cosmicdrift/kumiko-renderer/web";
18
17
  import { useEffect, useId, useState } from "react";
19
- import { collectionHandlerName, collectionQueryName, TemplateResolverHandlers, TemplateResolverQueries, } from "../qualified-names.js";
20
18
  import { DocumentBlocksContext, DocumentContentEditor } from "./document-editor.js";
21
19
  import { documentBlocksForKind } from "./document-toolbar-blocks.js";
22
20
  import { defaultTranslations } from "./i18n.js";
21
+ import { collectionHandlerName, collectionQueryName, TemplateResolverHandlers, TemplateResolverQueries, } from "./qualified-names.js";
23
22
  function newFolderNode() {
24
23
  return { leaves: [], subFolders: new Map() };
25
24
  }
@@ -24,7 +24,7 @@ export declare const DEFAULT_MAIL_LAYOUT_SLUG = "default";
24
24
  export declare const DEFAULT_PDF_LAYOUT_SLUG = "default";
25
25
  export declare const MAIL_PREVIEW_MAX_BYTES: number;
26
26
  export declare const TEST_MAIL_SUBJECT_PREFIX = "[TEST] ";
27
- export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
27
+ export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
28
28
  export declare const FALLBACK_LOCALE = "de";
29
29
  export declare const DEFAULT_COLLECTION_ACCESS: {
30
30
  readonly roles: readonly ["SystemAdmin"];
@@ -1,11 +1,9 @@
1
- // @runtime client
2
1
  // Plain data, no imports — the content tree in web/ needs TEXT_BLOCK_KIND to
3
2
  // pick between the public and the admin query.
4
3
  //
5
- // RenderKind identifiziert die Konsumenten-Klasse eines Templates.
6
- // Plugin-Renderer in `renderer-foundation` matchen auf kind; der
7
- // Resolver hier ist kind-agnostisch — er lädt nur, das Content-Format
8
- // (markdown/mjml/html) entscheidet wer's rendert.
4
+ // RenderKind identifies the consumer class of a template. Plugin renderers in
5
+ // `renderer-foundation` match on kind; the resolver here is kind-agnostic: it
6
+ // only loads, and the content format (markdown/mjml/html) decides who renders it.
9
7
  export const RENDER_KINDS = ["mail", "document-pdf", "image-snapshot"];
10
8
  // Kinds whose html body is a rich document: the server rebuilds it through the
11
9
  // document schema on every write (see document-sanitizer.ts).
@@ -60,11 +58,10 @@ export const DEFAULT_PDF_LAYOUT_SLUG = "default";
60
58
  // The mail transport enforces no size limit of its own; 10 MiB is a common provider ceiling.
61
59
  export const MAIL_PREVIEW_MAX_BYTES = 10 * 1024 * 1024;
62
60
  export const TEST_MAIL_SUBJECT_PREFIX = "[TEST] ";
63
- // System-Templates leben unter der canonical SYSTEM_TENANT_ID-Sentinel-UUID.
64
- // Re-Export aus framework — single source of truth, vermeidet Drift.
65
- export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
66
- // Default-Locale wenn Tenant keinen eigenen Default konfiguriert. Resolver
67
- // fällt darauf zurück wenn requested locale + tenant-default fehlen.
61
+ // System templates live under the SYSTEM_TENANT_ID sentinel; the client-safe types package is its single source.
62
+ export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
63
+ // Default locale when the tenant configures none. The resolver falls back to
64
+ // it when the requested locale and the tenant default are missing.
68
65
  export const FALLBACK_LOCALE = "de";
69
66
  // A collection mounted without `access` is maintained by the platform only; TenantAdmin access is an explicit mount decision.
70
67
  export const DEFAULT_COLLECTION_ACCESS = { roles: ["SystemAdmin"] };
@@ -1,7 +1,7 @@
1
1
  import { ListKeymap } from "@tiptap/extension-list";
2
2
  import { Dropcursor, Gapcursor, Placeholder, UndoRedo } from "@tiptap/extensions";
3
- import { DocumentButton, DocumentImages, DocumentPageBreak, DocumentResource, DocumentSteps, DocumentVariable, documentExtensions, } from "../document-schema.js";
4
- import { readDocumentStepsAttribute } from "../document-steps.js";
3
+ import { DocumentButton, DocumentImages, DocumentPageBreak, DocumentResource, DocumentSteps, DocumentVariable, documentExtensions, } from "./document-schema.js";
4
+ import { readDocumentStepsAttribute } from "./document-steps.js";
5
5
  const DOCUMENT_RESOURCE_SIZE_TOKEN = "{size}";
6
6
  export const DOCUMENT_BLOCK_ATTRIBUTE = "data-document-block";
7
7
  function createElementWithClass(tag, className, text) {
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // @runtime client
3
2
  //
4
3
  // Lazy boundary: tiptap only loads when a "document" collection is rendered.
5
4
  // Never import document-tiptap-editor or document-editor-extensions statically here.
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // The record's photos: a block bound to an `images` variable whose FileRef ids the
3
2
  // app passes at render time. Universal like document-schema.ts.
4
3
  import { Node } from "@tiptap/core";
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Canonical document model for template bodies (kinds mail, document-pdf).
3
2
  // Universal on purpose: the web editor and the server sanitizer load the same
4
3
  // extension list, so what the editor can produce is exactly what the server
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // A progress row: fixed stages stored in the template, the reached stage read
3
2
  // from a variable at render time. Universal like document-schema.ts.
4
3
  import { Node } from "@tiptap/core";
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  //
4
3
  // tiptap-backed implementation behind DocumentContentEditor's lazy() boundary —
5
4
  // never import this file statically, tiptap must only load when a "document"
@@ -13,9 +12,9 @@ import { BubbleMenu } from "@tiptap/react/menus";
13
12
  import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold as BoldIcon, Braces, ChevronDown, GalleryThumbnails, Image as ImageIcon, Italic as ItalicIcon, Link as LinkIcon, List, ListChecks, ListOrdered, Minus, MousePointerClick, Repeat, Scissors, Table as TableIcon, Underline as UnderlineIcon, } from "lucide-react";
14
13
  import { Fragment, useEffect, useMemo, useState } from "react";
15
14
  import { createPortal } from "react-dom";
16
- import { DOCUMENT_TEXT_ALIGNMENTS, isAllowedDocumentLinkHref, isDocumentPlaceholderHref, isDocumentReferenceName, isDocumentResourceKey, } from "../document-schema.js";
17
- import { parseDocumentStepsInput } from "../document-steps.js";
18
15
  import { createDocumentEditorExtensions, DOCUMENT_BLOCK_ATTRIBUTE, } from "./document-editor-extensions.js";
16
+ import { DOCUMENT_TEXT_ALIGNMENTS, isAllowedDocumentLinkHref, isDocumentPlaceholderHref, isDocumentReferenceName, isDocumentResourceKey, } from "./document-schema.js";
17
+ import { parseDocumentStepsInput } from "./document-steps.js";
19
18
  import { MAIL_DOCUMENT_BLOCKS, } from "./document-toolbar-blocks.js";
20
19
  import { createEditorHandle } from "./editor-handle.js";
21
20
  import { useStableByKey } from "./use-stable-by-key.js";
@@ -1,6 +1,6 @@
1
1
  import type { ContentEditorProps } from "@cosmicdrift/kumiko-renderer";
2
2
  import type { ReactNode } from "react";
3
- import type { DocumentToolbarBlock } from "../document-blocks.ts";
3
+ import type { DocumentToolbarBlock } from "./document-blocks.ts";
4
4
  /** Imperative access for an outside panel (placeholder list, resource list). */
5
5
  export type DocumentEditorHandle = {
6
6
  readonly insertPlaceholder: (name: string) => void;
@@ -37,4 +37,4 @@ export type DocumentEditorProps = ContentEditorProps & {
37
37
  /** Called with the handle once the editor exists and with null when it is destroyed (unmount or rebuild), so a held handle never outlives its editor. */
38
38
  readonly onEditorReady?: (handle: DocumentEditorHandle | null) => void;
39
39
  };
40
- export { type DocumentToolbarBlock, documentBlocksForKind, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "../document-blocks.ts";
40
+ export { type DocumentToolbarBlock, documentBlocksForKind, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-blocks.ts";
@@ -1 +1 @@
1
- export { documentBlocksForKind, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "../document-blocks.js";
1
+ export { documentBlocksForKind, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-blocks.js";
@@ -1,4 +1,4 @@
1
- import { isDocumentReferenceName, isDocumentResourceKey } from "../document-schema.js";
1
+ import { isDocumentReferenceName, isDocumentResourceKey } from "./document-schema.js";
2
2
  export function createEditorHandle(editor) {
3
3
  return {
4
4
  insertPlaceholder: (name) => {
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Default translation bundle for the text-block editor. textBlocksClient()
3
2
  // hangs it into the LocaleProvider as a fallback bundle — apps override
4
3
  // individual keys via mergeTranslations at the createKumikoApp level.
@@ -95,6 +94,7 @@ export const defaultTranslations = {
95
94
  "templateResolver.errors.noDraft": "There is no draft to discard.",
96
95
  "templateResolver.errors.systemOnlyTemplate": "Only the platform maintains this template; it cannot be overridden per tenant.",
97
96
  "templateResolver.errors.templateNotTenantEditable": "Only the platform may edit this template.",
97
+ "templateResolver.overview.lockedOverride": "Own version stored but not delivered: the template is not unlocked for tenants.",
98
98
  "templateResolver.errors.template.invalidMeta": "The template settings are invalid.",
99
99
  "templateResolver.errors.template.meta.subject.required": "The subject is missing.",
100
100
  "templateResolver.errors.template.meta.subject.invalid": "The subject is invalid (at most 200 characters, no line breaks).",
@@ -1,7 +1,7 @@
1
- export { MAIL_TONES, type MailTone } from "../mail-constants.ts";
2
- export { PDF_DEFAULT_MARGIN_MM, PDF_FOOTER_MARGIN_MM, PDF_HEADER_MARGIN_MM, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "../pdf-constants.ts";
3
- export { TemplateResolverErrors, TemplateResolverHandlers, TemplateResolverQueries, } from "../qualified-names.ts";
4
1
  export { textBlocksClient } from "./client-plugin.tsx";
5
2
  export { DocumentContentEditor } from "./document-editor.tsx";
6
3
  export { type DocumentEditorChrome, type DocumentEditorHandle, type DocumentEditorProps, type DocumentResourcePreview, type DocumentToolbarBlock, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-toolbar-blocks.ts";
4
+ export { MAIL_TONES, type MailTone } from "./mail-constants.ts";
5
+ export { PDF_DEFAULT_MARGIN_MM, PDF_FOOTER_MARGIN_MM, PDF_HEADER_MARGIN_MM, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "./pdf-constants.ts";
7
6
  export { PlaceholderLineEditor, type PlaceholderLineEditorProps, } from "./placeholder-line-editor-lazy.tsx";
7
+ export { TemplateResolverErrors, TemplateResolverHandlers, TemplateResolverQueries, } from "./qualified-names.ts";
@@ -1,13 +1,12 @@
1
- // @runtime client
2
1
  // Public exports for the browser side of template-resolver. Consumed through
3
2
  // the sub-path export `@cosmicdrift/kumiko-bundled-features/template-resolver/web`
4
3
  // — the server side (defineFeature) lives in
5
4
  // `@cosmicdrift/kumiko-bundled-features/template-resolver` and has no React or
6
5
  // DOM deps.
7
- export { MAIL_TONES } from "../mail-constants.js";
8
- export { PDF_DEFAULT_MARGIN_MM, PDF_FOOTER_MARGIN_MM, PDF_HEADER_MARGIN_MM, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "../pdf-constants.js";
9
- export { TemplateResolverErrors, TemplateResolverHandlers, TemplateResolverQueries, } from "../qualified-names.js";
10
6
  export { textBlocksClient } from "./client-plugin.js";
11
7
  export { DocumentContentEditor } from "./document-editor.js";
12
8
  export { MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-toolbar-blocks.js";
9
+ export { MAIL_TONES } from "./mail-constants.js";
10
+ export { PDF_DEFAULT_MARGIN_MM, PDF_FOOTER_MARGIN_MM, PDF_HEADER_MARGIN_MM, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "./pdf-constants.js";
13
11
  export { PlaceholderLineEditor, } from "./placeholder-line-editor-lazy.js";
12
+ export { TemplateResolverErrors, TemplateResolverHandlers, TemplateResolverQueries, } from "./qualified-names.js";
@@ -1,3 +1,2 @@
1
- // @runtime client
2
1
  // No imports: web/ re-exports these, and template-meta.ts pulls in zod and the framework engine.
3
2
  export const MAIL_TONES = ["accent", "info", "success", "warning", "danger", "neutral"];
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // No imports: web/ re-exports these, and constants.ts pulls in the framework engine.
3
2
  export const PDF_PAGE_FORMATS = ["A4", "Letter"];
4
3
  export const PDF_ORIENTATIONS = ["portrait", "landscape"];
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // @runtime client
3
2
  //
4
3
  // Lazy boundary for the placeholder line editor: tiptap loads with the chunk,
5
4
  // the fallback is a plain text input holding the same `{{name}}` text.
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // @runtime client
3
2
  //
4
3
  // Single-line editor for plain-text fields that carry {{placeholders}}
5
4
  // (subject, preheader). The stored value stays plain text; placeholders show
@@ -10,10 +9,10 @@ import { Placeholder, UndoRedo } from "@tiptap/extensions";
10
9
  import { EditorContent, useEditor } from "@tiptap/react";
11
10
  import StarterKit from "@tiptap/starter-kit";
12
11
  import { useMemo, useState } from "react";
13
- import { DocumentVariable } from "../document-schema.js";
14
- import { contentToLine, lineToContent, singleLine } from "../placeholder-text.js";
15
12
  import { createVariableView } from "./document-editor-extensions.js";
13
+ import { DocumentVariable } from "./document-schema.js";
16
14
  import { createEditorHandle } from "./editor-handle.js";
15
+ import { contentToLine, lineToContent, singleLine } from "./placeholder-text.js";
17
16
  import { useStableByKey } from "./use-stable-by-key.js";
18
17
  const LineDocument = Node.create({ name: "doc", topNode: true, content: "paragraph" });
19
18
  // One line only: Enter must not split the paragraph.
@@ -75,7 +74,10 @@ function LineEditorBody({ id, initialValue, onChange, variableLabels, systemVari
75
74
  onDestroy: () => onEditorReady?.(null),
76
75
  onUpdate: ({ editor: e }) => onChange(contentToLine(e.getJSON().content?.[0]?.content)),
77
76
  });
78
- return (_jsx(EditorContent, { editor: editor, className: cn("flex items-center bg-transparent text-base md:text-sm", flat ? "min-h-10" : "min-h-9 rounded-md border border-input px-3", "[&_.ProseMirror]:w-full [&_.ProseMirror]:whitespace-nowrap [&_.ProseMirror]:outline-none", "[&_p]:m-0", "[&_.is-editor-empty]:before:pointer-events-none [&_.is-editor-empty]:before:float-left [&_.is-editor-empty]:before:h-0 [&_.is-editor-empty]:before:text-muted-foreground [&_.is-editor-empty]:before:content-[attr(data-placeholder)]", readOnly && "opacity-60") }));
77
+ return (_jsx(EditorContent, { editor: editor, className: cn("flex items-center bg-transparent text-base md:text-sm", flat ? "min-h-10" : "min-h-9 rounded-md border border-input px-3", "[&_.ProseMirror]:w-full [&_.ProseMirror]:whitespace-nowrap [&_.ProseMirror]:outline-none", "[&_p]:m-0",
78
+ // Absolute and truncated: a hint longer than the field ends in an ellipsis instead of
79
+ // running past the frame or over the text below it.
80
+ "[&_.is-editor-empty]:relative [&_.is-editor-empty]:before:pointer-events-none [&_.is-editor-empty]:before:absolute [&_.is-editor-empty]:before:inset-x-0 [&_.is-editor-empty]:before:truncate [&_.is-editor-empty]:before:text-muted-foreground [&_.is-editor-empty]:before:content-[attr(data-placeholder)]", readOnly && "opacity-60") }));
79
81
  }
80
82
  export default function PlaceholderLineEditor({ id, value, onChange, variableLabels = NO_LABELS, systemVariables = NO_NAMES, readOnly = false, flat = false, placeholder, onEditorReady, "aria-label": ariaLabel, }) {
81
83
  const stableLabels = useStableByKey(variableLabels, JSON.stringify(variableLabels));
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Feature name + qualified handler/query names (QN: scope:type:name).
3
2
  export const TEMPLATE_RESOLVER_FEATURE = "template-resolver";
4
3
  export const TemplateResolverHandlers = {
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  import { useState } from "react";
3
2
  // Callers often pass fresh object literals every render; this keeps the first
4
3
  // value for as long as the content key is unchanged, so memoized extension
@@ -2,9 +2,9 @@ import { createEventStoreExecutor, fetchOne } from "@cosmicdrift/kumiko-framewor
2
2
  import { defineWriteHandler, SYSTEM_ROLE, SYSTEM_USER_ID, } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { AccessDeniedError, ConflictError, InternalError, writeFailure, } from "@cosmicdrift/kumiko-framework/errors";
4
4
  import * as z from "zod";
5
- import { TenantErrors } from "../constants.js";
6
5
  import { findForbiddenMembershipRole, reservedMembershipRoleError } from "../membership-roles.js";
7
6
  import { tenantMembershipEntity, tenantMembershipsTable } from "../membership-table.js";
7
+ import { TenantErrors } from "../web/constants.js";
8
8
  const executor = createEventStoreExecutor(tenantMembershipsTable, tenantMembershipEntity, {
9
9
  entityName: "tenant-membership",
10
10
  });
@@ -1,6 +1,5 @@
1
1
  export { cancelPendingInvitation } from "./cancel-pending-invitation.ts";
2
2
  export { TenantCommandSchemas } from "./command-schemas.ts";
3
- export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./constants.ts";
4
3
  export { decryptTenantNames } from "./decrypt-tenant-names.ts";
5
4
  export { collectAssignableAppRoles, createTenantFeature } from "./feature.ts";
6
5
  export type { InvitationStatus } from "./invitation-table.ts";
@@ -8,3 +7,4 @@ export { INVITATION_STATUS, INVITATION_STATUSES, tenantInvitationEntity, tenantI
8
7
  export { isTenantServingPublicContent } from "./is-tenant-serving-public-content.ts";
9
8
  export { tenantMembershipEntity, tenantMembershipsTable } from "./membership-table.ts";
10
9
  export { TENANT_LIFECYCLE_STATUSES, type TenantLifecycleStatus, tenantEntity, tenantTable, } from "./schema/tenant.ts";
10
+ export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./web/constants.ts";