@cosmicdrift/kumiko-bundled-features 0.368.0 → 0.370.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 (620) hide show
  1. package/dist/account-security/constants.d.ts +4 -0
  2. package/dist/account-security/constants.js +5 -0
  3. package/dist/account-security/feature.d.ts +14 -0
  4. package/dist/account-security/feature.js +62 -0
  5. package/dist/account-security/i18n.d.ts +6 -0
  6. package/dist/account-security/i18n.js +6 -0
  7. package/dist/account-security/index.d.ts +3 -0
  8. package/dist/account-security/index.js +3 -0
  9. package/dist/admin-shell/feature.d.ts +1 -1
  10. package/dist/admin-shell/index.d.ts +4 -4
  11. package/dist/admin-shell/overview-panels.d.ts +1 -1
  12. package/dist/admin-shell/web/index.d.ts +1 -1
  13. package/dist/agent-tools/agent-manifest.d.ts +1 -1
  14. package/dist/agent-tools/index.d.ts +8 -8
  15. package/dist/agent-tools/manifest-deny-qns.d.ts +1 -1
  16. package/dist/agent-tools/tool-catalog.d.ts +1 -1
  17. package/dist/agent-tools/tool-dispatch.d.ts +1 -1
  18. package/dist/audit/handlers/resolve-audit-tenant.d.ts +1 -1
  19. package/dist/audit/index.d.ts +3 -3
  20. package/dist/audit/web/index.d.ts +1 -1
  21. package/dist/auth-email-password/bootstrap.d.ts +1 -1
  22. package/dist/auth-email-password/feature.d.ts +7 -6
  23. package/dist/auth-email-password/feature.js +3 -1
  24. package/dist/auth-email-password/handlers/confirm-token-flow.d.ts +1 -1
  25. package/dist/auth-email-password/handlers/invite-accept-with-login.write.d.ts +1 -1
  26. package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
  27. package/dist/auth-email-password/handlers/invite-signup-complete.write.d.ts +1 -1
  28. package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
  29. package/dist/auth-email-password/handlers/request-account-unlock.write.d.ts +1 -1
  30. package/dist/auth-email-password/handlers/request-email-verification.write.d.ts +1 -1
  31. package/dist/auth-email-password/handlers/request-password-reset.write.d.ts +1 -1
  32. package/dist/auth-email-password/handlers/signup-confirm.write.d.ts +1 -1
  33. package/dist/auth-email-password/handlers/signup-request.write.d.ts +1 -1
  34. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
  35. package/dist/auth-email-password/handlers/token-request-handler.d.ts +2 -2
  36. package/dist/auth-email-password/index.d.ts +13 -13
  37. package/dist/auth-email-password/lockout-store.d.ts +1 -1
  38. package/dist/auth-email-password/magic-link-mail.d.ts +1 -1
  39. package/dist/auth-email-password/seeding.d.ts +3 -3
  40. package/dist/auth-email-password/signed-token.d.ts +1 -1
  41. package/dist/auth-email-password/signup-token-store.d.ts +1 -1
  42. package/dist/auth-email-password/testing.d.ts +1 -1
  43. package/dist/auth-email-password/web/auth-gate.d.ts +1 -1
  44. package/dist/auth-email-password/web/client-plugin.d.ts +2 -2
  45. package/dist/auth-email-password/web/index.d.ts +42 -42
  46. package/dist/auth-email-password/web/session-bootstrap-error.d.ts +1 -1
  47. package/dist/auth-email-password/web/session.d.ts +1 -1
  48. package/dist/auth-email-password/web/signup-complete-screen.d.ts +1 -1
  49. package/dist/auth-foundation/feature.d.ts +2 -6
  50. package/dist/auth-foundation/feature.js +0 -2
  51. package/dist/auth-foundation/index.d.ts +3 -3
  52. package/dist/auth-foundation/index.js +1 -1
  53. package/dist/auth-foundation/resolve-anonymous-access.d.ts +1 -1
  54. package/dist/auth-mfa/env.d.ts +13 -0
  55. package/dist/auth-mfa/env.js +24 -0
  56. package/dist/auth-mfa/errors.d.ts +1 -1
  57. package/dist/auth-mfa/feature-exports.d.ts +12 -0
  58. package/dist/auth-mfa/feature-exports.js +72 -0
  59. package/dist/auth-mfa/feature.d.ts +6 -12
  60. package/dist/auth-mfa/feature.js +53 -70
  61. package/dist/auth-mfa/handlers/reencrypt.job.d.ts +1 -1
  62. package/dist/auth-mfa/index.d.ts +12 -9
  63. package/dist/auth-mfa/index.js +4 -2
  64. package/dist/auth-mfa/mfa-challenge-token.d.ts +1 -1
  65. package/dist/auth-mfa/mfa-preauth-setup-token.d.ts +1 -1
  66. package/dist/auth-mfa/mfa-status-checker.d.ts +1 -1
  67. package/dist/auth-mfa/mfa-verify-attempts.d.ts +1 -1
  68. package/dist/auth-mfa/testing.d.ts +1 -1
  69. package/dist/auth-mfa/token-secrets.d.ts +7 -0
  70. package/dist/auth-mfa/token-secrets.js +13 -0
  71. package/dist/auth-mfa/verify-factor.d.ts +1 -1
  72. package/dist/auth-mfa/web/index.d.ts +15 -15
  73. package/dist/auth-mfa/web/mfa-client.d.ts +1 -1
  74. package/dist/auth-mfa-user-data/index.d.ts +0 -4
  75. package/dist/auth-mfa-user-data/index.js +0 -2
  76. package/dist/billing-foundation/checkout-core.d.ts +2 -2
  77. package/dist/billing-foundation/consumer-protection/confirmation-mail.d.ts +2 -2
  78. package/dist/billing-foundation/consumer-protection/consent-gate.d.ts +1 -1
  79. package/dist/billing-foundation/consumer-protection/consent-text.d.ts +2 -2
  80. package/dist/billing-foundation/consumer-protection/issue-confirmation.d.ts +1 -1
  81. package/dist/billing-foundation/consumer-protection/register-consent.d.ts +1 -1
  82. package/dist/billing-foundation/consumer-protection/register-termination.d.ts +1 -1
  83. package/dist/billing-foundation/consumer-protection/termination-mail.d.ts +3 -3
  84. package/dist/billing-foundation/consumer-protection/termination-notify.d.ts +5 -5
  85. package/dist/billing-foundation/consumer-protection/termination-pages.d.ts +2 -2
  86. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +3 -3
  87. package/dist/billing-foundation/consumer-protection/termination-request.d.ts +2 -2
  88. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +2 -2
  89. package/dist/billing-foundation/feature.d.ts +1 -3
  90. package/dist/billing-foundation/feature.js +0 -2
  91. package/dist/billing-foundation/handlers/billing-plans.query.d.ts +1 -1
  92. package/dist/billing-foundation/handlers/create-checkout-session.write.d.ts +1 -1
  93. package/dist/billing-foundation/handlers/create-portal-session.write.d.ts +1 -1
  94. package/dist/billing-foundation/handlers/start-plan-checkout.write.d.ts +1 -1
  95. package/dist/billing-foundation/handlers/switch-plan.write.d.ts +1 -1
  96. package/dist/billing-foundation/index.d.ts +16 -16
  97. package/dist/billing-foundation/index.js +1 -1
  98. package/dist/billing-foundation/plan-catalog.d.ts +1 -1
  99. package/dist/billing-foundation/subscription-tier-sync.d.ts +3 -1
  100. package/dist/billing-foundation/subscription-tier-sync.js +3 -2
  101. package/dist/billing-foundation/types.d.ts +3 -3
  102. package/dist/billing-foundation/validate-options.d.ts +1 -1
  103. package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +1 -1
  104. package/dist/billing-foundation/web/index.d.ts +6 -6
  105. package/dist/cap-counter/calendar-cap-usage-reservation.d.ts +4 -4
  106. package/dist/cap-counter/cap-reservation.d.ts +1 -1
  107. package/dist/cap-counter/enforce-cap.d.ts +1 -1
  108. package/dist/cap-counter/feature.d.ts +0 -4
  109. package/dist/cap-counter/feature.js +0 -2
  110. package/dist/cap-counter/index.d.ts +13 -13
  111. package/dist/cap-counter/index.js +1 -1
  112. package/dist/cap-counter/value-cap-guard.d.ts +1 -1
  113. package/dist/cap-counter/with-cap-enforcement.d.ts +1 -1
  114. package/dist/cap-overview/feature.d.ts +1 -1
  115. package/dist/cap-overview/handlers/caps-usage.query.d.ts +1 -1
  116. package/dist/cap-overview/handlers/tenant-caps-list.query.d.ts +1 -1
  117. package/dist/cap-overview/index.d.ts +6 -6
  118. package/dist/cap-overview/screens.d.ts +1 -1
  119. package/dist/cap-overview/types.d.ts +1 -1
  120. package/dist/cap-overview/usage-math.d.ts +1 -1
  121. package/dist/cap-overview/web/cap-usage-bar.d.ts +1 -1
  122. package/dist/cap-overview/web/index.d.ts +4 -4
  123. package/dist/channel-discord/discord-channel.d.ts +1 -1
  124. package/dist/channel-discord/feature.d.ts +1 -1
  125. package/dist/channel-discord/index.d.ts +2 -2
  126. package/dist/channel-email/email-channel.d.ts +15 -7
  127. package/dist/channel-email/email-channel.js +17 -3
  128. package/dist/channel-email/env.d.ts +14 -0
  129. package/dist/channel-email/env.js +27 -0
  130. package/dist/channel-email/feature.d.ts +14 -3
  131. package/dist/channel-email/feature.js +6 -2
  132. package/dist/channel-email/index.d.ts +6 -5
  133. package/dist/channel-email/index.js +2 -1
  134. package/dist/channel-email/pii-guard.d.ts +1 -1
  135. package/dist/channel-email/smtp-transport.d.ts +1 -1
  136. package/dist/channel-email/types.d.ts +1 -1
  137. package/dist/channel-in-app/in-app-channel.d.ts +1 -1
  138. package/dist/channel-in-app/index.d.ts +4 -4
  139. package/dist/channel-push/feature.d.ts +1 -1
  140. package/dist/channel-push/index.d.ts +3 -3
  141. package/dist/channel-push/push-channel.d.ts +2 -2
  142. package/dist/channel-slack/feature.d.ts +1 -1
  143. package/dist/channel-slack/index.d.ts +2 -2
  144. package/dist/channel-slack/slack-channel.d.ts +1 -1
  145. package/dist/channel-teams/feature.d.ts +1 -1
  146. package/dist/channel-teams/index.d.ts +2 -2
  147. package/dist/channel-teams/teams-channel.d.ts +1 -1
  148. package/dist/channel-telegram/feature.d.ts +1 -1
  149. package/dist/channel-telegram/index.d.ts +2 -2
  150. package/dist/channel-telegram/telegram-channel.d.ts +1 -1
  151. package/dist/compliance-profiles/feature.d.ts +1 -1
  152. package/dist/compliance-profiles/index.d.ts +3 -3
  153. package/dist/compliance-profiles/web/index.d.ts +2 -2
  154. package/dist/compliance-profiles-ops/index.d.ts +0 -8
  155. package/dist/compliance-profiles-ops/index.js +0 -2
  156. package/dist/config/feature.d.ts +1 -1
  157. package/dist/config/handlers/reencrypt.job.d.ts +1 -1
  158. package/dist/config/index.d.ts +8 -8
  159. package/dist/config/web/client-plugin.d.ts +1 -1
  160. package/dist/config/web/i18n.js +1 -2
  161. package/dist/config/web/index.d.ts +2 -2
  162. package/dist/crypto-shredding/env/index.d.ts +21 -0
  163. package/dist/crypto-shredding/env/index.js +78 -0
  164. package/dist/crypto-shredding/feature.d.ts +17 -2
  165. package/dist/crypto-shredding/feature.js +5 -1
  166. package/dist/crypto-shredding/index.d.ts +4 -3
  167. package/dist/crypto-shredding/index.js +1 -0
  168. package/dist/custom-fields/feature.d.ts +0 -17
  169. package/dist/custom-fields/feature.js +0 -2
  170. package/dist/custom-fields/index.d.ts +10 -10
  171. package/dist/custom-fields/index.js +1 -1
  172. package/dist/custom-fields/lib/define-or-resurrect.d.ts +2 -2
  173. package/dist/custom-fields/lib/field-access.d.ts +1 -1
  174. package/dist/custom-fields/lib/field-definition-row.d.ts +1 -1
  175. package/dist/custom-fields/lib/quota.d.ts +1 -1
  176. package/dist/custom-fields/web/index.d.ts +3 -3
  177. package/dist/data-retention/_internal/parse-override.d.ts +1 -1
  178. package/dist/data-retention/feature.d.ts +7 -7
  179. package/dist/data-retention/handlers/policy-for.query.d.ts +1 -1
  180. package/dist/data-retention/index.d.ts +3 -3
  181. package/dist/data-retention/resolve-for-tenant.d.ts +2 -2
  182. package/dist/data-retention/resolve-tenant-preset.d.ts +1 -1
  183. package/dist/data-retention/resolver.d.ts +1 -1
  184. package/dist/data-retention/run-retention-cleanup.d.ts +2 -2
  185. package/dist/delivery/attachment-ref.d.ts +1 -1
  186. package/dist/delivery/attempt-log.d.ts +1 -1
  187. package/dist/delivery/channel-context.d.ts +2 -2
  188. package/dist/delivery/chat-webhook-channel.d.ts +2 -2
  189. package/dist/delivery/constants.d.ts +1 -1
  190. package/dist/delivery/delivery-service.d.ts +2 -2
  191. package/dist/delivery/feature.js +3 -1
  192. package/dist/delivery/handlers/log.query.d.ts +1 -1
  193. package/dist/delivery/handlers/unsubscribe-page-chrome.query.d.ts +5 -0
  194. package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +44 -0
  195. package/dist/delivery/index.d.ts +20 -19
  196. package/dist/delivery/index.js +3 -2
  197. package/dist/delivery/notify-factory.d.ts +1 -1
  198. package/dist/delivery/public-names.d.ts +1 -0
  199. package/dist/delivery/public-names.js +1 -0
  200. package/dist/delivery/testing.d.ts +3 -3
  201. package/dist/delivery/types.d.ts +3 -3
  202. package/dist/delivery/unsubscribe-link.d.ts +1 -1
  203. package/dist/delivery/unsubscribe-page-strings.d.ts +4 -0
  204. package/dist/delivery/unsubscribe-page-strings.js +4 -0
  205. package/dist/delivery/unsubscribe-page.d.ts +27 -0
  206. package/dist/delivery/unsubscribe-page.js +192 -0
  207. package/dist/delivery/unsubscribe.d.ts +22 -1
  208. package/dist/delivery/unsubscribe.js +152 -65
  209. package/dist/delivery/web/index.d.ts +2 -2
  210. package/dist/derivatives-sharp/feature.d.ts +0 -4
  211. package/dist/derivatives-sharp/feature.js +0 -2
  212. package/dist/derivatives-sharp/index.d.ts +2 -2
  213. package/dist/derivatives-sharp/index.js +1 -1
  214. package/dist/document-ingest-foundation/feature.d.ts +0 -7
  215. package/dist/document-ingest-foundation/feature.js +0 -2
  216. package/dist/document-ingest-foundation/index.d.ts +7 -7
  217. package/dist/document-ingest-foundation/index.js +1 -1
  218. package/dist/document-ingest-foundation/pages.d.ts +1 -1
  219. package/dist/document-ingest-foundation/providers.d.ts +1 -1
  220. package/dist/document-ingest-foundation/write-document-extract.d.ts +1 -1
  221. package/dist/feature-toggles/compose-tier-resolver.d.ts +1 -1
  222. package/dist/feature-toggles/feature.d.ts +5 -5
  223. package/dist/feature-toggles/handlers/set.write.d.ts +1 -1
  224. package/dist/feature-toggles/index.d.ts +3 -3
  225. package/dist/feature-toggles/toggle-sync-signal.d.ts +1 -1
  226. package/dist/feature-toggles/web/index.d.ts +1 -1
  227. package/dist/file-derivatives/feature.d.ts +0 -2
  228. package/dist/file-derivatives/feature.js +0 -2
  229. package/dist/file-derivatives/index.d.ts +4 -4
  230. package/dist/file-derivatives/index.js +1 -1
  231. package/dist/file-foundation/feature.d.ts +0 -6
  232. package/dist/file-foundation/feature.js +0 -2
  233. package/dist/file-foundation/index.d.ts +2 -2
  234. package/dist/file-foundation/index.js +1 -1
  235. package/dist/file-provider-inmemory/feature.d.ts +0 -4
  236. package/dist/file-provider-inmemory/feature.js +0 -2
  237. package/dist/file-provider-inmemory/index.d.ts +1 -1
  238. package/dist/file-provider-inmemory/index.js +1 -1
  239. package/dist/file-provider-s3/env-feature.d.ts +12 -2
  240. package/dist/file-provider-s3/env-feature.js +9 -6
  241. package/dist/file-provider-s3/env-schema.d.ts +38 -0
  242. package/dist/file-provider-s3/env-schema.js +51 -0
  243. package/dist/file-provider-s3/feature.d.ts +1 -14
  244. package/dist/file-provider-s3/feature.js +0 -2
  245. package/dist/file-provider-s3/index.d.ts +2 -1
  246. package/dist/file-provider-s3/index.js +2 -1
  247. package/dist/file-provider-s3/lib/env-helper.d.ts +1 -1
  248. package/dist/file-provider-s3/lib/index.d.ts +3 -3
  249. package/dist/files/index.d.ts +1 -1
  250. package/dist/files-tenant-data/index.d.ts +2 -2
  251. package/dist/folders/feature.d.ts +0 -4
  252. package/dist/folders/feature.js +0 -2
  253. package/dist/folders/index.d.ts +7 -7
  254. package/dist/folders/index.js +1 -1
  255. package/dist/folders/web/folder-manager.d.ts +1 -1
  256. package/dist/folders/web/index.d.ts +5 -5
  257. package/dist/folders-user-data/index.d.ts +0 -4
  258. package/dist/folders-user-data/index.js +0 -2
  259. package/dist/form-draft/db/queries/cleanup.d.ts +1 -1
  260. package/dist/form-draft/feature.d.ts +0 -4
  261. package/dist/form-draft/feature.js +0 -2
  262. package/dist/form-draft/handlers/cleanup.job.d.ts +1 -1
  263. package/dist/form-draft/handlers/get.query.d.ts +1 -1
  264. package/dist/form-draft/index.d.ts +10 -10
  265. package/dist/form-draft/index.js +1 -1
  266. package/dist/form-draft/lookup.d.ts +1 -1
  267. package/dist/form-draft/release-file-refs.d.ts +1 -1
  268. package/dist/form-draft-user-data/index.d.ts +0 -4
  269. package/dist/form-draft-user-data/index.js +0 -2
  270. package/dist/foundation-shared/build-info-env.d.ts +7 -0
  271. package/dist/foundation-shared/build-info-env.js +15 -0
  272. package/dist/foundation-shared/demo-admin-env.d.ts +12 -0
  273. package/dist/foundation-shared/demo-admin-env.js +21 -0
  274. package/dist/foundation-shared/index.d.ts +5 -3
  275. package/dist/foundation-shared/index.js +2 -0
  276. package/dist/host-routing/constants.d.ts +8 -0
  277. package/dist/host-routing/constants.js +19 -0
  278. package/dist/host-routing/dispatch.d.ts +24 -0
  279. package/dist/host-routing/dispatch.js +102 -0
  280. package/dist/host-routing/feature.d.ts +3 -0
  281. package/dist/host-routing/feature.js +102 -0
  282. package/dist/host-routing/host.d.ts +14 -0
  283. package/dist/host-routing/host.js +37 -0
  284. package/dist/host-routing/index.d.ts +5 -0
  285. package/dist/host-routing/index.js +4 -0
  286. package/dist/host-routing/options.d.ts +27 -0
  287. package/dist/host-routing/options.js +1 -0
  288. package/dist/host-routing/validate-options.d.ts +2 -0
  289. package/dist/host-routing/validate-options.js +29 -0
  290. package/dist/inbound-mail-foundation/connect-routes.d.ts +2 -2
  291. package/dist/inbound-mail-foundation/feature.d.ts +0 -4
  292. package/dist/inbound-mail-foundation/feature.js +0 -2
  293. package/dist/inbound-mail-foundation/handlers/account-state.d.ts +1 -1
  294. package/dist/inbound-mail-foundation/index.d.ts +12 -12
  295. package/dist/inbound-mail-foundation/index.js +1 -1
  296. package/dist/inbound-mail-foundation/oauth-access-token.d.ts +1 -1
  297. package/dist/inbound-mail-foundation/provider-factory.d.ts +1 -1
  298. package/dist/inbound-mail-foundation/types.d.ts +1 -1
  299. package/dist/inbound-mail-foundation/watch-supervisor.d.ts +2 -2
  300. package/dist/inbound-provider-imap/feature.d.ts +1 -5
  301. package/dist/inbound-provider-imap/feature.js +0 -2
  302. package/dist/inbound-provider-imap/imap-client.d.ts +1 -1
  303. package/dist/inbound-provider-imap/index.d.ts +3 -3
  304. package/dist/inbound-provider-imap/index.js +1 -1
  305. package/dist/inbound-provider-inmemory/feature.d.ts +0 -4
  306. package/dist/inbound-provider-inmemory/feature.js +0 -2
  307. package/dist/inbound-provider-inmemory/index.d.ts +1 -1
  308. package/dist/inbound-provider-inmemory/index.js +1 -1
  309. package/dist/jobs/handlers/tenant-runs.query.d.ts +1 -1
  310. package/dist/jobs/index.d.ts +9 -9
  311. package/dist/jobs/web/index.d.ts +1 -1
  312. package/dist/ledger/feature.d.ts +0 -4
  313. package/dist/ledger/feature.js +0 -2
  314. package/dist/ledger/index.d.ts +10 -10
  315. package/dist/ledger/index.js +1 -1
  316. package/dist/ledger/recurring.d.ts +2 -2
  317. package/dist/ledger/reports.d.ts +2 -2
  318. package/dist/ledger/web/index.d.ts +3 -3
  319. package/dist/legal-pages/constants.d.ts +12 -0
  320. package/dist/legal-pages/constants.js +16 -0
  321. package/dist/legal-pages/feature.d.ts +6 -3
  322. package/dist/legal-pages/feature.js +5 -2
  323. package/dist/legal-pages/index.d.ts +5 -3
  324. package/dist/legal-pages/index.js +3 -1
  325. package/dist/legal-pages/layout.d.ts +10 -0
  326. package/dist/legal-pages/layout.js +32 -0
  327. package/dist/legal-pages/lib/boot-check.d.ts +1 -1
  328. package/dist/legal-pages/lib/validate-routes.d.ts +1 -1
  329. package/dist/legal-pages/markdown.d.ts +2 -2
  330. package/dist/legal-pages/seed.d.ts +12 -0
  331. package/dist/legal-pages/seed.js +38 -0
  332. package/dist/legal-pages/web/index.d.ts +1 -1
  333. package/dist/mail-foundation/feature.d.ts +4 -7
  334. package/dist/mail-foundation/feature.js +16 -14
  335. package/dist/mail-foundation/i18n.d.ts +14 -0
  336. package/dist/mail-foundation/i18n.js +8 -0
  337. package/dist/mail-foundation/index.d.ts +1 -1
  338. package/dist/mail-foundation/index.js +1 -1
  339. package/dist/mail-transport-inmemory/feature.d.ts +0 -4
  340. package/dist/mail-transport-inmemory/feature.js +6 -2
  341. package/dist/mail-transport-inmemory/index.d.ts +1 -1
  342. package/dist/mail-transport-inmemory/index.js +1 -1
  343. package/dist/mail-transport-smtp/config-keys.d.ts +7 -0
  344. package/dist/mail-transport-smtp/config-keys.js +65 -0
  345. package/dist/mail-transport-smtp/feature.d.ts +0 -16
  346. package/dist/mail-transport-smtp/feature.js +5 -35
  347. package/dist/mail-transport-smtp/i18n.d.ts +41 -0
  348. package/dist/mail-transport-smtp/i18n.js +28 -0
  349. package/dist/mail-transport-smtp/index.d.ts +1 -1
  350. package/dist/mail-transport-smtp/index.js +1 -1
  351. package/dist/managed-pages/branding.d.ts +1 -1
  352. package/dist/managed-pages/feature.d.ts +1 -1
  353. package/dist/managed-pages/handlers/branding.query.d.ts +1 -1
  354. package/dist/managed-pages/index.d.ts +5 -5
  355. package/dist/managed-pages/web/index.d.ts +2 -2
  356. package/dist/metrics/compute.d.ts +2 -2
  357. package/dist/metrics/default-metrics.d.ts +9 -9
  358. package/dist/metrics/feature.d.ts +1 -1
  359. package/dist/metrics/filters.d.ts +1 -1
  360. package/dist/metrics/index.d.ts +5 -5
  361. package/dist/metrics/types.d.ts +1 -1
  362. package/dist/metrics/validate.d.ts +1 -1
  363. package/dist/metrics/window.d.ts +2 -2
  364. package/dist/notes-history/feature.d.ts +0 -4
  365. package/dist/notes-history/feature.js +0 -2
  366. package/dist/notes-history/handlers/add-note.write.d.ts +1 -1
  367. package/dist/notes-history/index.d.ts +6 -6
  368. package/dist/notes-history/index.js +1 -1
  369. package/dist/notes-history/web/index.d.ts +3 -3
  370. package/dist/notes-history-user-data/index.d.ts +1 -5
  371. package/dist/notes-history-user-data/index.js +0 -2
  372. package/dist/page-render/index.d.ts +7 -7
  373. package/dist/page-render/layout.d.ts +1 -1
  374. package/dist/page-render/web.d.ts +5 -5
  375. package/dist/personal-access-tokens/feature.d.ts +3 -3
  376. package/dist/personal-access-tokens/handlers/available-scopes.query.d.ts +1 -1
  377. package/dist/personal-access-tokens/i18n.d.ts +1 -1
  378. package/dist/personal-access-tokens/index.d.ts +13 -13
  379. package/dist/personal-access-tokens/resolver.d.ts +1 -1
  380. package/dist/personal-access-tokens/screens.d.ts +1 -1
  381. package/dist/presets/dsgvo-self-service.d.ts +3 -1
  382. package/dist/presets/dsgvo-self-service.js +2 -0
  383. package/dist/presets/index.d.ts +2 -2
  384. package/dist/presets/security-baseline.d.ts +2 -0
  385. package/dist/presets/security-baseline.js +2 -0
  386. package/dist/rate-limiting/index.d.ts +2 -2
  387. package/dist/readiness/feature.d.ts +0 -8
  388. package/dist/readiness/feature.js +0 -2
  389. package/dist/readiness/index.d.ts +3 -3
  390. package/dist/readiness/index.js +1 -1
  391. package/dist/renderer-foundation/api.d.ts +2 -2
  392. package/dist/renderer-foundation/constants.d.ts +2 -2
  393. package/dist/renderer-foundation/feature.d.ts +1 -1
  394. package/dist/renderer-foundation/index.d.ts +5 -5
  395. package/dist/renderer-foundation/types.d.ts +24 -2
  396. package/dist/renderer-pdf/feature.d.ts +1 -1
  397. package/dist/renderer-pdf/index.d.ts +2 -2
  398. package/dist/renderer-pdf/render-table-pdf.d.ts +1 -1
  399. package/dist/secrets/constants.d.ts +7 -0
  400. package/dist/secrets/constants.js +7 -0
  401. package/dist/secrets/db/queries/read.d.ts +1 -1
  402. package/dist/secrets/feature.d.ts +5 -3
  403. package/dist/secrets/feature.js +19 -5
  404. package/dist/secrets/handlers/delete.write.js +4 -3
  405. package/dist/secrets/handlers/rotate.job.d.ts +1 -1
  406. package/dist/secrets/handlers/set.write.js +4 -3
  407. package/dist/secrets/index.d.ts +7 -7
  408. package/dist/secrets/index.js +1 -1
  409. package/dist/secrets/secrets-context.d.ts +1 -1
  410. package/dist/seo/feature.d.ts +3 -3
  411. package/dist/seo/index.d.ts +6 -6
  412. package/dist/sessions/feature.d.ts +1 -1
  413. package/dist/sessions/index.d.ts +8 -8
  414. package/dist/sessions/session-callbacks.d.ts +1 -1
  415. package/dist/sessions/testing.d.ts +1 -1
  416. package/dist/shared/index.d.ts +31 -31
  417. package/dist/step-dispatcher/dispatch-payload.d.ts +2 -2
  418. package/dist/step-dispatcher/index.d.ts +3 -3
  419. package/dist/subscription-mollie/feature.d.ts +2 -2
  420. package/dist/subscription-mollie/index.d.ts +3 -3
  421. package/dist/subscription-mollie/verify-webhook.d.ts +1 -1
  422. package/dist/subscription-stripe/feature.d.ts +17 -1
  423. package/dist/subscription-stripe/feature.js +19 -1
  424. package/dist/subscription-stripe/index.d.ts +2 -2
  425. package/dist/subscription-stripe/index.js +1 -1
  426. package/dist/subscription-stripe/plugin-methods.d.ts +1 -1
  427. package/dist/subscription-stripe/verify-webhook.d.ts +1 -1
  428. package/dist/tags/feature.d.ts +0 -4
  429. package/dist/tags/feature.js +0 -2
  430. package/dist/tags/handlers/assign-tag.write.d.ts +1 -1
  431. package/dist/tags/handlers/remove-tag.write.d.ts +1 -1
  432. package/dist/tags/index.d.ts +11 -11
  433. package/dist/tags/index.js +1 -1
  434. package/dist/tags/web/index.d.ts +9 -9
  435. package/dist/template-resolver/api.d.ts +4 -4
  436. package/dist/template-resolver/constants.d.ts +1 -2
  437. package/dist/template-resolver/constants.js +0 -1
  438. package/dist/template-resolver/document-sanitizer.d.ts +1 -1
  439. package/dist/template-resolver/handlers/bundle-import.d.ts +3 -3
  440. package/dist/template-resolver/handlers/collection-shared.d.ts +2 -2
  441. package/dist/template-resolver/handlers/copy-locale.write.d.ts +1 -1
  442. package/dist/template-resolver/handlers/diff-to-system.query.d.ts +1 -1
  443. package/dist/template-resolver/handlers/find-by-id.query.d.ts +1 -1
  444. package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -1
  445. package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -1
  446. package/dist/template-resolver/handlers/layout-source.query.d.ts +3 -3
  447. package/dist/template-resolver/handlers/override-diff.d.ts +2 -2
  448. package/dist/template-resolver/handlers/overview.query.d.ts +3 -3
  449. package/dist/template-resolver/handlers/preview.query.d.ts +1 -1
  450. package/dist/template-resolver/handlers/resource-link-pdf.write.d.ts +1 -1
  451. package/dist/template-resolver/handlers/resource-upload.write.d.ts +1 -1
  452. package/dist/template-resolver/handlers/send-test.write.d.ts +1 -1
  453. package/dist/template-resolver/handlers/send-test.write.js +4 -2
  454. package/dist/template-resolver/handlers/shared.d.ts +1 -1
  455. package/dist/template-resolver/handlers/template-gates.d.ts +4 -4
  456. package/dist/template-resolver/handlers/template-write.d.ts +4 -4
  457. package/dist/template-resolver/handlers/tenant-overrides.query.d.ts +1 -1
  458. package/dist/template-resolver/handlers/toggle-status.write.d.ts +1 -1
  459. package/dist/template-resolver/handlers/upsert-system.write.d.ts +1 -1
  460. package/dist/template-resolver/handlers/upsert-tenant.write.d.ts +1 -1
  461. package/dist/template-resolver/handlers/usage.query.d.ts +1 -1
  462. package/dist/template-resolver/handlers/validate.query.d.ts +3 -3
  463. package/dist/template-resolver/index.d.ts +25 -25
  464. package/dist/template-resolver/layout-appearance.d.ts +1 -1
  465. package/dist/template-resolver/layout-regions.d.ts +2 -2
  466. package/dist/template-resolver/linked-resources.d.ts +1 -1
  467. package/dist/template-resolver/preview-display-html.d.ts +1 -1
  468. package/dist/template-resolver/resource-image.d.ts +1 -1
  469. package/dist/template-resolver/seeding.d.ts +2 -2
  470. package/dist/template-resolver/store-template-resource.d.ts +1 -1
  471. package/dist/template-resolver/template-draft.d.ts +2 -2
  472. package/dist/template-resolver/template-meta.d.ts +2 -2
  473. package/dist/template-resolver/template-preview.d.ts +7 -6
  474. package/dist/template-resolver/template-preview.js +19 -12
  475. package/dist/template-resolver/template-resources.d.ts +1 -1
  476. package/dist/template-resolver/template-usage.d.ts +3 -1
  477. package/dist/template-resolver/template-usage.js +1 -0
  478. package/dist/template-resolver/template-validation.d.ts +1 -1
  479. package/dist/template-resolver/testing.d.ts +1 -1
  480. package/dist/template-resolver/user-content-table.d.ts +1 -1
  481. package/dist/template-resolver/web/document-editor-extensions.d.ts +1 -1
  482. package/dist/template-resolver/web/document-editor-extensions.js +6 -2
  483. package/dist/template-resolver/web/document-editor.d.ts +1 -1
  484. package/dist/template-resolver/web/document-tiptap-editor.d.ts +1 -1
  485. package/dist/template-resolver/web/document-tiptap-editor.js +13 -10
  486. package/dist/template-resolver/web/editor-handle.d.ts +1 -1
  487. package/dist/template-resolver/web/index.d.ts +7 -7
  488. package/dist/template-resolver/web/placeholder-line-editor-lazy.d.ts +2 -2
  489. package/dist/template-resolver/web/placeholder-line-editor.d.ts +1 -1
  490. package/dist/template-resolver-user-data/index.d.ts +0 -4
  491. package/dist/template-resolver-user-data/index.js +0 -2
  492. package/dist/tenant/feature.d.ts +1 -1
  493. package/dist/tenant/index.d.ts +10 -10
  494. package/dist/tenant/is-tenant-serving-public-content.d.ts +1 -1
  495. package/dist/tenant/testing.d.ts +1 -1
  496. package/dist/tenant/web/index.d.ts +3 -3
  497. package/dist/tenant-handover/feature.d.ts +1 -1
  498. package/dist/tenant-handover/index.d.ts +3 -3
  499. package/dist/tenant-handover/signup-handover-provider.d.ts +1 -1
  500. package/dist/tenant-lifecycle/feature.d.ts +2 -2
  501. package/dist/tenant-lifecycle/index.d.ts +3 -3
  502. package/dist/tenant-lifecycle/run-tenant-destroy.d.ts +1 -1
  503. package/dist/tenant-lifecycle/stages.d.ts +1 -1
  504. package/dist/tenant-lifecycle/testing.d.ts +1 -1
  505. package/dist/tenant-settings/feature.d.ts +1 -3
  506. package/dist/tenant-settings/feature.js +0 -2
  507. package/dist/tenant-settings/index.d.ts +4 -4
  508. package/dist/tenant-settings/index.js +1 -1
  509. package/dist/tier-engine/entity.d.ts +1 -1
  510. package/dist/tier-engine/feature.d.ts +2 -4
  511. package/dist/tier-engine/feature.js +0 -2
  512. package/dist/tier-engine/handlers/get-tenant-tier.query.d.ts +1 -1
  513. package/dist/tier-engine/i18n.d.ts +0 -2
  514. package/dist/tier-engine/i18n.js +4 -4
  515. package/dist/tier-engine/index.d.ts +8 -8
  516. package/dist/tier-engine/index.js +1 -1
  517. package/dist/tier-engine/tier-option-gate.d.ts +1 -1
  518. package/dist/tier-engine/tier-resolver.d.ts +1 -1
  519. package/dist/tier-engine/web/client-plugin.js +3 -2
  520. package/dist/tier-engine/web/index.d.ts +1 -1
  521. package/dist/user/index.d.ts +8 -8
  522. package/dist/user/invited-global-roles.d.ts +1 -1
  523. package/dist/user/principal-status.d.ts +1 -1
  524. package/dist/user/seeding.d.ts +1 -1
  525. package/dist/user/testing.d.ts +1 -1
  526. package/dist/user-data-rights/deletion-token.d.ts +1 -1
  527. package/dist/user-data-rights/feature.d.ts +5 -5
  528. package/dist/user-data-rights/feature.js +7 -4
  529. package/dist/user-data-rights/handlers/request-deletion.write.d.ts +1 -1
  530. package/dist/user-data-rights/handlers/run-forget-cleanup.write.d.ts +3 -3
  531. package/dist/user-data-rights/index.d.ts +13 -13
  532. package/dist/user-data-rights/lib/default-mailers.d.ts +7 -4
  533. package/dist/user-data-rights/lib/default-mailers.js +25 -3
  534. package/dist/user-data-rights/web/client-plugin.d.ts +1 -1
  535. package/dist/user-data-rights/web/index.d.ts +8 -8
  536. package/dist/user-data-rights-defaults/index.d.ts +11 -11
  537. package/dist/user-profile/index.d.ts +2 -2
  538. package/dist/user-profile/web/index.d.ts +2 -2
  539. package/dist/waitlist/constants.d.ts +9 -0
  540. package/dist/waitlist/constants.js +11 -0
  541. package/dist/waitlist/entity.d.ts +38 -6
  542. package/dist/waitlist/entity.js +4 -2
  543. package/dist/waitlist/entries-admin.d.ts +4 -0
  544. package/dist/waitlist/entries-admin.js +42 -0
  545. package/dist/waitlist/feature.d.ts +1 -1
  546. package/dist/waitlist/feature.js +16 -1
  547. package/dist/waitlist/handlers/export-purge.write.d.ts +12 -0
  548. package/dist/waitlist/handlers/export-purge.write.js +61 -0
  549. package/dist/waitlist/handlers/invite.write.d.ts +1 -1
  550. package/dist/waitlist/handlers/submit.write.d.ts +1 -1
  551. package/dist/waitlist/i18n.js +4 -0
  552. package/dist/waitlist/import.d.ts +24 -0
  553. package/dist/waitlist/import.js +51 -0
  554. package/dist/waitlist/index.d.ts +7 -5
  555. package/dist/waitlist/index.js +2 -0
  556. package/dist/waitlist/legacy-migrate.d.ts +27 -0
  557. package/dist/waitlist/legacy-migrate.js +173 -0
  558. package/dist/waitlist/lib.d.ts +2 -2
  559. package/dist/waitlist/link-on-signup.d.ts +3 -0
  560. package/dist/waitlist/link-on-signup.js +83 -0
  561. package/dist/waitlist/options.d.ts +11 -3
  562. package/dist/waitlist/payloads.d.ts +3 -0
  563. package/dist/waitlist/payloads.js +1 -0
  564. package/dist/workflow-runner/feature.d.ts +0 -4
  565. package/dist/workflow-runner/feature.js +0 -2
  566. package/dist/workflow-runner/index.d.ts +4 -4
  567. package/dist/workflow-runner/index.js +1 -1
  568. package/package.json +43 -27
  569. package/src/account-security/changes.json +8 -0
  570. package/src/auth-email-password/changes.json +6 -0
  571. package/src/auth-foundation/changes.json +8 -0
  572. package/src/auth-mfa/changes.json +6 -0
  573. package/src/auth-mfa-user-data/changes.json +10 -1
  574. package/src/billing-foundation/changes.json +8 -0
  575. package/src/cap-counter/changes.json +8 -0
  576. package/src/channel-email/changes.json +13 -0
  577. package/src/compliance-profiles-ops/changes.json +10 -0
  578. package/src/crypto-shredding/changes.json +6 -0
  579. package/src/custom-fields/changes.json +8 -0
  580. package/src/delivery/changes.json +12 -0
  581. package/src/derivatives-sharp/changes.json +8 -0
  582. package/src/document-ingest-foundation/changes.json +8 -0
  583. package/src/file-derivatives/changes.json +8 -0
  584. package/src/file-foundation/changes.json +8 -0
  585. package/src/file-provider-inmemory/changes.json +10 -1
  586. package/src/file-provider-s3/changes.json +22 -0
  587. package/src/folders/changes.json +8 -0
  588. package/src/folders-user-data/changes.json +10 -1
  589. package/src/form-draft/changes.json +8 -0
  590. package/src/form-draft-user-data/changes.json +10 -1
  591. package/src/foundation-shared/changes.json +8 -1
  592. package/src/host-routing/changes.json +8 -0
  593. package/src/inbound-mail-foundation/changes.json +8 -0
  594. package/src/inbound-provider-imap/changes.json +8 -0
  595. package/src/inbound-provider-inmemory/changes.json +10 -1
  596. package/src/ledger/changes.json +8 -0
  597. package/src/legal-pages/changes.json +6 -0
  598. package/src/mail-foundation/changes.json +10 -1
  599. package/src/mail-transport-inmemory/changes.json +10 -1
  600. package/src/mail-transport-smtp/changes.json +15 -0
  601. package/src/notes-history/changes.json +8 -0
  602. package/src/notes-history-user-data/changes.json +8 -0
  603. package/src/presets/changes.json +6 -0
  604. package/src/readiness/changes.json +10 -1
  605. package/src/secrets/changes.json +18 -0
  606. package/src/subscription-stripe/changes.json +6 -0
  607. package/src/tags/changes.json +8 -0
  608. package/src/template-resolver/changes.json +6 -0
  609. package/src/template-resolver-user-data/changes.json +10 -0
  610. package/src/tenant-settings/changes.json +10 -1
  611. package/src/tier-engine/changes.json +8 -0
  612. package/src/user-data-rights/changes.json +6 -0
  613. package/src/waitlist/changes.json +7 -0
  614. package/src/workflow-runner/changes.json +8 -0
  615. package/dist/file-provider-s3-env/index.d.ts +0 -8
  616. package/dist/file-provider-s3-env/index.js +0 -7
  617. package/dist/files-provider-s3/index.d.ts +0 -5
  618. package/dist/files-provider-s3/index.js +0 -5
  619. package/src/file-provider-s3-env/changes.json +0 -1
  620. package/src/files-provider-s3/changes.json +0 -1
@@ -1,6 +1,7 @@
1
1
  import { selectMany } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { NotFoundError, UnprocessableError, ValidationError, } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import { fileRefsTable } from "@cosmicdrift/kumiko-framework/files";
4
+ import { createI18n } from "@cosmicdrift/kumiko-framework/i18n";
4
5
  import { escapeHtml } from "@cosmicdrift/kumiko-headless";
5
6
  import { createEmailAttachmentReader, createTemplateMailRenderer } from "../delivery/index.js";
6
7
  import { fileContextForTenant } from "../file-foundation/index.js";
@@ -19,14 +20,15 @@ import { isMailTemplateMeta, parseTemplateMeta, readPdfTemplateMeta, } from "./t
19
20
  const SAMPLE_LINK = "https://example.com";
20
21
  const SAMPLE_DATE = "2026-01-15";
21
22
  const SAMPLE_LIST_ROWS = 3;
22
- function sampleScalar(name, def) {
23
+ function sampleScalar(name, def, labelText) {
23
24
  if (def.example !== undefined)
24
25
  return def.example;
26
+ const label = def.label === undefined ? name : labelText(def.label);
25
27
  switch (def.type) {
26
28
  case "text":
27
- return `[${def.label ?? name}]`;
29
+ return `[${label}]`;
28
30
  case "richText":
29
- return `<p>[${escapeHtml(def.label ?? name)}]</p>`;
31
+ return `<p>[${escapeHtml(label)}]</p>`;
30
32
  case "link":
31
33
  return SAMPLE_LINK;
32
34
  case "money":
@@ -37,28 +39,33 @@ function sampleScalar(name, def) {
37
39
  return 0;
38
40
  }
39
41
  }
40
- function sampleRow(item, given = {}) {
42
+ function sampleRow(item, labelText, given = {}) {
41
43
  const row = {};
42
44
  for (const [name, def] of Object.entries(item))
43
- row[name] = sampleScalar(name, def);
45
+ row[name] = sampleScalar(name, def, labelText);
44
46
  return { ...row, ...given };
45
47
  }
46
- function sampleList(def) {
48
+ function sampleList(def, labelText) {
47
49
  const rows = (def.example ?? [])
48
50
  .slice(0, SAMPLE_LIST_ROWS)
49
- .map((given) => sampleRow(def.item, given));
51
+ .map((given) => sampleRow(def.item, labelText, given));
50
52
  while (rows.length < SAMPLE_LIST_ROWS)
51
- rows.push(sampleRow(def.item));
53
+ rows.push(sampleRow(def.item, labelText));
52
54
  return rows;
53
55
  }
54
56
  // Declared examples win; the fallbacks are deterministic so a preview never differs between calls.
55
- export function sampleValuesFor(variables) {
57
+ export function sampleValuesFor(variables, labelText = (label) => label) {
56
58
  const values = {};
57
59
  for (const [name, def] of Object.entries(variables)) {
58
- values[name] = def.type === "list" ? sampleList(def) : sampleScalar(name, def);
60
+ values[name] =
61
+ def.type === "list" ? sampleList(def, labelText) : sampleScalar(name, def, labelText);
59
62
  }
60
63
  return values;
61
64
  }
65
+ function labelTextFor(ctx, locale) {
66
+ const i18n = createI18n(ctx.registry, { defaultLocale: "en" });
67
+ return (label) => i18n.t(label, locale);
68
+ }
62
69
  const utf8Bytes = (value) => new TextEncoder().encode(value).length;
63
70
  const failed = (error) => ({ ok: false, error });
64
71
  async function loadStoredDraft(ctx, user, input) {
@@ -286,7 +293,7 @@ export async function evaluateDocumentDraft(ctx, user, scope, draft) {
286
293
  content: evaluation.content ?? "",
287
294
  meta: meta.ok ? readPdfTemplateMeta(meta.meta) : null,
288
295
  variableSchema: draft.variableSchema,
289
- sampleValues: sampleValuesFor(response.variables),
296
+ sampleValues: sampleValuesFor(response.variables, labelTextFor(ctx, draft.locale)),
290
297
  };
291
298
  }
292
299
  // The posted draft when it carries content, else the stored template; null when none is stored.
@@ -397,7 +404,7 @@ export async function renderTemplatePreview(ctx, user, input) {
397
404
  return failed(new ValidationError({ fields: [...evaluation.issues] }));
398
405
  const content = evaluation.content ?? "";
399
406
  const meta = parseTemplateMeta(input.kind, parseStoredJson(evaluation.metaJson));
400
- const sampleValues = sampleValuesFor(validation.variables);
407
+ const sampleValues = sampleValuesFor(validation.variables, labelTextFor(ctx, input.locale));
401
408
  if (input.kind === "document-pdf") {
402
409
  return renderDocumentPreview(ctx, user, {
403
410
  input,
@@ -1,5 +1,5 @@
1
1
  import type { HandlerContext, SessionUser, TenantId, WriteResult } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { LinkedResourceEntry } from "./linked-resources.js";
2
+ import type { LinkedResourceEntry } from "./linked-resources.ts";
3
3
  export type TemplateResourceFile = {
4
4
  readonly fileName: string;
5
5
  readonly contentType: string;
@@ -1,5 +1,5 @@
1
1
  import { type Registry } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type TemplateKind } from "./constants.js";
2
+ import { type TemplateKind } from "./constants.ts";
3
3
  type UsageRole = "template" | "layout";
4
4
  export type TemplateUsageEntry = {
5
5
  readonly qualifiedName: string;
@@ -7,6 +7,8 @@ export type TemplateUsageEntry = {
7
7
  readonly notification: string;
8
8
  readonly trigger: string | null;
9
9
  readonly role: UsageRole;
10
+ /** The mail goes through the tenant's own transport when it has a provider. */
11
+ readonly tenantTransport: boolean;
10
12
  };
11
13
  /** Layout slug of the effective stored mail template, by notification qualified
12
14
  * name and locale. The renderer reads the layout from the stored row's meta,
@@ -27,6 +27,7 @@ export function collectTemplateUsage(registry, slug, kind, effectiveLayouts = ne
27
27
  notification: parsed.name,
28
28
  trigger: notification.trigger?.on ?? null,
29
29
  role,
30
+ tenantTransport: notification.tenantTransport === true,
30
31
  });
31
32
  }
32
33
  }
@@ -1,5 +1,5 @@
1
1
  import type { Registry, TemplateVariables } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { TemplateMeta } from "./template-meta.js";
2
+ import type { TemplateMeta } from "./template-meta.ts";
3
3
  export declare const SYSTEM_PLACEHOLDERS: ReadonlySet<string>;
4
4
  export declare function systemPlaceholdersFor(kind: string): ReadonlySet<string>;
5
5
  export type TemplateValidation = {
@@ -1,5 +1,5 @@
1
1
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
2
- import type { ResolveRequest, TemplateResource } from "./api.js";
2
+ import type { ResolveRequest, TemplateResource } from "./api.ts";
3
3
  export type TemplateConsumer = {
4
4
  readonly resolve: (args: ResolveRequest) => Promise<TemplateResource>;
5
5
  readonly resolveResources?: (template: TemplateResource) => Promise<Record<string, string>>;
@@ -1,4 +1,4 @@
1
- import type { EntityAuditColumns } from "./table.js";
1
+ import type { EntityAuditColumns } from "./table.ts";
2
2
  export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
3
3
  ownerId: {
4
4
  readonly type: "text";
@@ -1,5 +1,5 @@
1
1
  import type { Extensions, NodeViewRenderer } from "@tiptap/core";
2
- import type { DocumentResourcePreview } from "./document-toolbar-blocks.js";
2
+ import type { DocumentResourcePreview } from "./document-toolbar-blocks.ts";
3
3
  export declare const DOCUMENT_BLOCK_ATTRIBUTE = "data-document-block";
4
4
  export type DocumentEditorLabels = {
5
5
  readonly placeholder: string;
@@ -36,8 +36,12 @@ export function createVariableView(variableLabels, systemVariables, labelOnly =
36
36
  const label = Object.hasOwn(variableLabels, labelKey) ? variableLabels[labelKey] : undefined;
37
37
  const dom = createElementWithClass("span", systemVariables.includes(name) ? SYSTEM_CHIP_CLASS : USER_CHIP_CLASS);
38
38
  dom.contentEditable = "false";
39
- dom.append(document.createTextNode(label !== undefined && label !== "" ? label : name));
40
- if (!labelOnly && label !== undefined && label !== "" && label !== name) {
39
+ dom.setAttribute("data-variable-chip", "");
40
+ const hasOwnLabel = label !== undefined && label !== "" && label !== name;
41
+ dom.append(document.createTextNode(hasOwnLabel ? label : name));
42
+ if (hasOwnLabel)
43
+ dom.title = name;
44
+ if (!labelOnly && hasOwnLabel) {
41
45
  dom.append(createElementWithClass("small", "font-mono text-[10px] opacity-75", name));
42
46
  }
43
47
  return { dom };
@@ -1,4 +1,4 @@
1
1
  import { type ReactNode } from "react";
2
- import type { DocumentEditorProps, DocumentToolbarBlock } from "./document-toolbar-blocks.js";
2
+ import type { DocumentEditorProps, DocumentToolbarBlock } from "./document-toolbar-blocks.ts";
3
3
  export declare const DocumentBlocksContext: import("react").Context<readonly DocumentToolbarBlock[] | undefined>;
4
4
  export declare function DocumentContentEditor(props: DocumentEditorProps): ReactNode;
@@ -1,3 +1,3 @@
1
1
  import { type ReactNode } from "react";
2
- import { type DocumentEditorProps } from "./document-toolbar-blocks.js";
2
+ import { type DocumentEditorProps } from "./document-toolbar-blocks.ts";
3
3
  export default function DocumentTiptapEditor({ id, value, onChange, variables, readOnly, blocks, variableLabels, systemVariables, resourcePreviews, chrome, toolbar, renderPaper, toolbarHost, onEditorReady, }: DocumentEditorProps): ReactNode;
@@ -94,11 +94,12 @@ function toggleRepeatHeader(editor) {
94
94
  const PARAGRAPH_STYLES = ["paragraph", "1", "2", "3"];
95
95
  const HEADING_LEVELS = { "1": 1, "2": 2, "3": 3 };
96
96
  const PLACEHOLDER_HREF = /^\{\{([^{}]+)\}\}$/;
97
+ function variableLabelOf(name, labels) {
98
+ return Object.hasOwn(labels, name) ? (labels[name] ?? name) : name;
99
+ }
97
100
  function buttonTargetLabel(href, labels) {
98
101
  const name = PLACEHOLDER_HREF.exec(href)?.[1];
99
- if (name === undefined)
100
- return href;
101
- return Object.hasOwn(labels, name) ? (labels[name] ?? name) : name;
102
+ return name === undefined ? href : variableLabelOf(name, labels);
102
103
  }
103
104
  // The bubble menu registers its plugin once per mount, so a rebuilt editor needs a fresh mount.
104
105
  const editorMountKeys = new WeakMap();
@@ -173,11 +174,11 @@ function PanelActions({ onInsert, onRemoveLink, onCancel, }) {
173
174
  const t = useTranslation();
174
175
  return (_jsxs("div", { className: "flex gap-2", children: [onInsert && (_jsx(Button, { type: "button", size: "sm", onClick: onInsert, children: t("template-resolver.documentEditor.insert") })), onRemoveLink && (_jsx(Button, { type: "button", size: "sm", variant: "danger-ghost", onClick: onRemoveLink, children: t("template-resolver.documentEditor.removeLink") })), _jsx(Button, { type: "button", size: "sm", variant: "secondary", onClick: onCancel, children: t("template-resolver.documentEditor.cancel") })] }));
175
176
  }
176
- function NameSelect({ id, label, names, value, onChange }) {
177
+ function NameSelect({ id, label, names, labels, value, onChange }) {
177
178
  const { Field, Input } = usePrimitives();
178
- return (_jsx(Field, { id: id, label: label, children: _jsx(Input, { kind: "select", id: id, name: id, value: value, onChange: onChange, display: "dropdown", options: names.map((name) => ({ value: name, label: name })) }) }));
179
+ return (_jsx(Field, { id: id, label: label, children: _jsx(Input, { kind: "select", id: id, name: id, value: value, onChange: onChange, display: "dropdown", options: names.map((name) => ({ value: name, label: variableLabelOf(name, labels) })) }) }));
179
180
  }
180
- function InsertPanel({ editor, editorId, kind, variables, onClose }) {
181
+ function InsertPanel({ editor, editorId, kind, variables, variableLabels, onClose, }) {
181
182
  const { Button, Field, Input } = usePrimitives();
182
183
  const t = useTranslation();
183
184
  const [href, setHref] = useState(() => {
@@ -245,7 +246,7 @@ function InsertPanel({ editor, editorId, kind, variables, onClose }) {
245
246
  const needsVariables = kind === "button" || kind === "repeat" || kind === "placeholder" || kind === "steps";
246
247
  const noVariables = needsVariables && selectable.length === 0;
247
248
  const idPrefix = `${editorId}-panel`;
248
- return (_jsxs("div", { className: "flex flex-col gap-2 border-b border-input bg-muted/40 p-2", children: [noVariables && (_jsx("p", { className: "text-sm text-muted-foreground", children: t("template-resolver.documentEditor.noVariables") })), kind === "link" && (_jsx(Field, { id: `${idPrefix}-href`, label: t("template-resolver.documentEditor.linkHref"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-href`, name: "href", value: href, onChange: setHref, placeholder: t("template-resolver.documentEditor.linkHrefPlaceholder") }) })), kind === "placeholder" && !noVariables && (_jsx("div", { className: "flex flex-wrap gap-1", children: _jsx(VariableChips, { variables: selectable, onInsert: (name) => insertAndClose({ type: "variable", attrs: { name } }) }) })), kind === "align" && (_jsx("div", { className: "flex flex-wrap gap-1", children: DOCUMENT_TEXT_ALIGNMENTS.map((alignment) => (_jsxs(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => {
249
+ return (_jsxs("div", { className: "flex flex-col gap-2 border-b border-input bg-muted/40 p-2", children: [noVariables && (_jsx("p", { className: "text-sm text-muted-foreground", children: t("template-resolver.documentEditor.noVariables") })), kind === "link" && (_jsx(Field, { id: `${idPrefix}-href`, label: t("template-resolver.documentEditor.linkHref"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-href`, name: "href", value: href, onChange: setHref, placeholder: t("template-resolver.documentEditor.linkHrefPlaceholder") }) })), kind === "placeholder" && !noVariables && (_jsx("div", { className: "flex flex-wrap gap-1", children: _jsx(VariableChips, { variables: selectable, labels: variableLabels, onInsert: (name) => insertAndClose({ type: "variable", attrs: { name } }) }) })), kind === "align" && (_jsx("div", { className: "flex flex-wrap gap-1", children: DOCUMENT_TEXT_ALIGNMENTS.map((alignment) => (_jsxs(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => {
249
250
  editor
250
251
  .chain()
251
252
  .focus()
@@ -253,7 +254,7 @@ function InsertPanel({ editor, editorId, kind, variables, onClose }) {
253
254
  .updateAttributes("heading", { textAlign: alignment })
254
255
  .run();
255
256
  onClose();
256
- }, children: [ALIGNMENT_ICONS[alignment], t(ALIGNMENT_LABEL_KEYS[alignment])] }, alignment))) })), kind === "image" && (_jsxs(_Fragment, { children: [_jsx(Field, { id: `${idPrefix}-resource`, label: t("template-resolver.documentEditor.resourceKey"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-resource`, name: "resource", value: resource, onChange: setResource }) }), _jsx(Field, { id: `${idPrefix}-alt`, label: t("template-resolver.documentEditor.imageAlt"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-alt`, name: "alt", value: alt, onChange: setAlt }) })] })), kind === "button" && !noVariables && (_jsxs(_Fragment, { children: [_jsx(NameSelect, { id: `${idPrefix}-target`, label: t("template-resolver.documentEditor.buttonTarget"), names: selectable, value: selectedName, onChange: setChosenName }), _jsx(Field, { id: `${idPrefix}-text`, label: t("template-resolver.documentEditor.buttonText"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-text`, name: "text", value: buttonText, onChange: setButtonText }) })] })), kind === "repeat" && !noVariables && (_jsx(NameSelect, { id: `${idPrefix}-list`, label: t("template-resolver.documentEditor.repeatList"), names: selectable, value: selectedName, onChange: setChosenName })), kind === "steps" && !noVariables && (_jsxs(_Fragment, { children: [_jsx(NameSelect, { id: `${idPrefix}-steps-variable`, label: t("template-resolver.documentEditor.stepsVariable"), names: selectable, value: selectedName, onChange: setChosenName }), _jsx(Field, { id: `${idPrefix}-steps-list`, label: t("template-resolver.documentEditor.stepsList"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-steps-list`, name: "steps", value: stepsText, onChange: setStepsText }) })] })), error !== null && (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: error })), _jsx("div", { className: "flex flex-wrap gap-2", children: _jsx(PanelActions, { onCancel: onClose, ...(kind === "link" && { onInsert: submitLink }), ...(kind === "link" &&
257
+ }, children: [ALIGNMENT_ICONS[alignment], t(ALIGNMENT_LABEL_KEYS[alignment])] }, alignment))) })), kind === "image" && (_jsxs(_Fragment, { children: [_jsx(Field, { id: `${idPrefix}-resource`, label: t("template-resolver.documentEditor.resourceKey"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-resource`, name: "resource", value: resource, onChange: setResource }) }), _jsx(Field, { id: `${idPrefix}-alt`, label: t("template-resolver.documentEditor.imageAlt"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-alt`, name: "alt", value: alt, onChange: setAlt }) })] })), kind === "button" && !noVariables && (_jsxs(_Fragment, { children: [_jsx(NameSelect, { id: `${idPrefix}-target`, label: t("template-resolver.documentEditor.buttonTarget"), names: selectable, labels: variableLabels, value: selectedName, onChange: setChosenName }), _jsx(Field, { id: `${idPrefix}-text`, label: t("template-resolver.documentEditor.buttonText"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-text`, name: "text", value: buttonText, onChange: setButtonText }) })] })), kind === "repeat" && !noVariables && (_jsx(NameSelect, { id: `${idPrefix}-list`, label: t("template-resolver.documentEditor.repeatList"), names: selectable, labels: variableLabels, value: selectedName, onChange: setChosenName })), kind === "steps" && !noVariables && (_jsxs(_Fragment, { children: [_jsx(NameSelect, { id: `${idPrefix}-steps-variable`, label: t("template-resolver.documentEditor.stepsVariable"), names: selectable, labels: variableLabels, value: selectedName, onChange: setChosenName }), _jsx(Field, { id: `${idPrefix}-steps-list`, label: t("template-resolver.documentEditor.stepsList"), children: _jsx(Input, { kind: "text", id: `${idPrefix}-steps-list`, name: "steps", value: stepsText, onChange: setStepsText }) })] })), error !== null && (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: error })), _jsx("div", { className: "flex flex-wrap gap-2", children: _jsx(PanelActions, { onCancel: onClose, ...(kind === "link" && { onInsert: submitLink }), ...(kind === "link" &&
257
258
  editor.isActive("link") && {
258
259
  onRemoveLink: () => {
259
260
  editor.chain().focus().extendMarkRange("link").unsetLink().run();
@@ -448,7 +449,9 @@ export default function DocumentTiptapEditor({ id, value, onChange, variables, r
448
449
  ? "[&_.ProseMirror]:outline-none"
449
450
  : "[&_.ProseMirror]:min-h-40 [&_.ProseMirror]:outline-none", "[&_ul]:list-disc [&_ol]:list-decimal [&_ul]:pl-6 [&_ol]:pl-6", "[&_h1]:text-xl [&_h1]:font-bold [&_h2]:text-lg [&_h2]:font-bold [&_h3]:text-base [&_h3]:font-bold", "[&_a]:underline [&_a]:text-primary", "[&_strong]:font-bold [&_em]:italic [&_u]:underline", canvas
450
451
  ? "[&_table]:mb-2 [&_table]:mt-6 [&_.ProseMirror>:first-child_table]:mt-0 [&_.ProseMirror>table:first-child]:mt-0 [&_td:last-child>p[data-size=small][data-align=right]]:whitespace-nowrap"
451
- : "[&_table]:my-2", "[&_table]:w-full [&_table]:border-collapse", "[&_td]:border-b [&_td]:border-border [&_td]:px-2 [&_td]:py-1.5 [&_td>p]:m-0 [&_th>p]:m-0", "[&_th]:border-b [&_th]:border-border [&_th]:px-2 [&_th]:py-1.5 [&_th]:text-left [&_th]:text-xs [&_th]:font-medium [&_th]:text-muted-foreground", "[&_tr[data-each]>td]:bg-muted/50", "[&_[data-align=left]]:text-left [&_[data-align=center]]:text-center [&_[data-align=right]]:text-right [&_[data-align=justify]]:text-justify", "[&_p[data-size=small]]:text-xs [&_p[data-size=small]]:text-muted-foreground", "[&_a[data-button]]:inline-block [&_a[data-button]]:rounded-full [&_a[data-button]]:bg-primary [&_a[data-button]]:px-4 [&_a[data-button]]:py-1.5 [&_a[data-button]]:text-primary-foreground [&_a[data-button]]:no-underline", "[&_hr]:my-3 [&_hr]:border-input", "[&_.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)]") }));
452
+ : "[&_table]:my-2", "[&_table]:w-full [&_table]:border-collapse", "[&_td]:border-b [&_td]:border-border [&_td]:px-2 [&_td]:py-1.5 [&_td>p]:m-0 [&_th>p]:m-0", "[&_th]:border-b [&_th]:border-border [&_th]:px-2 [&_th]:py-1.5 [&_th]:text-left [&_th]:text-xs [&_th]:font-medium [&_th]:text-muted-foreground", "[&_tr[data-each]>td]:bg-muted/50", "[&_[data-align=left]]:text-left [&_[data-align=center]]:text-center [&_[data-align=right]]:text-right [&_[data-align=justify]]:text-justify", "[&_p[data-size=small]]:text-xs [&_p[data-size=small]]:text-muted-foreground", "[&_a[data-button]]:inline-block [&_a[data-button]]:rounded-full [&_a[data-button]]:bg-primary [&_a[data-button]]:px-4 [&_a[data-button]]:py-1.5 [&_a[data-button]]:text-primary-foreground [&_a[data-button]]:no-underline",
453
+ // A chip in the button would be primary on primary; it inverts to stay readable.
454
+ "[&_a[data-button]_[data-variable-chip]]:border-primary-foreground/40 [&_a[data-button]_[data-variable-chip]]:bg-primary-foreground/15 [&_a[data-button]_[data-variable-chip]]:text-primary-foreground", "[&_hr]:my-3 [&_hr]:border-input", "[&_.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)]") }));
452
455
  // The canvas toolbar never scrolls sideways: the rarer blocks and the HTML view sit in the menu.
453
456
  const menuBlocks = canvas && ActionOverflowMenu !== undefined
454
457
  ? blocks.filter((block) => !CANVAS_INLINE_BLOCKS.includes(block))
@@ -504,7 +507,7 @@ export default function DocumentTiptapEditor({ id, value, onChange, variables, r
504
507
  : t("template-resolver.documentEditor.buttonTarget"), ": ", selectedBlock.type === "button" ? (_jsx("strong", { children: buttonTargetLabel(selectedBlock.detail, variableLabels) })) : (_jsx("code", { children: selectedBlock.detail }))] }), _jsx(Button, { type: "button", size: "sm", variant: "danger-ghost", onClick: () => {
505
508
  editor.chain().focus().deleteNode(selectedBlock.type).run();
506
509
  }, children: t("template-resolver.documentEditor.removeBlock") })] })) : (repeatTable !== null && (_jsxs("div", { "data-testid": "document-repeat-bar", className: BUBBLE_BAR_CLASS, children: [_jsx("span", { className: "px-1.5 text-[10px] uppercase tracking-wide text-muted-foreground", children: repeatBarLabel }), _jsx(Button, { type: "button", variant: "secondary", size: "sm", pressed: repeatTable.headerRepeats, onClick: () => toggleRepeatHeader(editor), children: t("template-resolver.documentEditor.repeatHeader") })] }))) }, mountKeyOf(editor)));
507
- const insertPanel = openPanel !== null && !readOnly && (_jsx(InsertPanel, { editor: editor, editorId: id, kind: openPanel, variables: variables, onClose: () => setOpenPanel(null) }, openPanel));
510
+ const insertPanel = openPanel !== null && !readOnly && (_jsx(InsertPanel, { editor: editor, editorId: id, kind: openPanel, variables: variables, variableLabels: stableLabels, onClose: () => setOpenPanel(null) }, openPanel));
508
511
  if (hosted) {
509
512
  return (_jsxs(_Fragment, { children: [toolbarHost !== null &&
510
513
  createPortal(_jsxs(_Fragment, { children: [toolbarBar, insertPanel] }), toolbarHost), !readOnly && bubbleMenu, editorContent] }));
@@ -1,3 +1,3 @@
1
1
  import type { Editor } from "@tiptap/core";
2
- import type { DocumentEditorHandle } from "./document-toolbar-blocks.js";
2
+ import type { DocumentEditorHandle } from "./document-toolbar-blocks.ts";
3
3
  export declare function createEditorHandle(editor: Editor): DocumentEditorHandle;
@@ -1,7 +1,7 @@
1
- export { MAIL_TONES, type MailTone } from "../mail-constants.js";
2
- export { PDF_DEFAULT_MARGIN_MM, PDF_FOOTER_MARGIN_MM, PDF_HEADER_MARGIN_MM, PDF_ORIENTATIONS, PDF_PAGE_FORMATS, } from "../pdf-constants.js";
3
- export { TemplateResolverErrors, TemplateResolverHandlers, TemplateResolverQueries, } from "../qualified-names.js";
4
- export { textBlocksClient } from "./client-plugin.js";
5
- export { DocumentContentEditor } from "./document-editor.js";
6
- export { type DocumentEditorChrome, type DocumentEditorHandle, type DocumentEditorProps, type DocumentResourcePreview, type DocumentToolbarBlock, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-toolbar-blocks.js";
7
- export { PlaceholderLineEditor, type PlaceholderLineEditorProps, } from "./placeholder-line-editor-lazy.js";
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
+ export { textBlocksClient } from "./client-plugin.tsx";
5
+ export { DocumentContentEditor } from "./document-editor.tsx";
6
+ export { type DocumentEditorChrome, type DocumentEditorHandle, type DocumentEditorProps, type DocumentResourcePreview, type DocumentToolbarBlock, MAIL_DOCUMENT_BLOCKS, PDF_DOCUMENT_BLOCKS, } from "./document-toolbar-blocks.ts";
7
+ export { PlaceholderLineEditor, type PlaceholderLineEditorProps, } from "./placeholder-line-editor-lazy.tsx";
@@ -1,4 +1,4 @@
1
1
  import { type ReactNode } from "react";
2
- import type { PlaceholderLineEditorProps } from "./placeholder-line-editor.js";
3
- export type { PlaceholderLineEditorProps } from "./placeholder-line-editor.js";
2
+ import type { PlaceholderLineEditorProps } from "./placeholder-line-editor.tsx";
3
+ export type { PlaceholderLineEditorProps } from "./placeholder-line-editor.tsx";
4
4
  export declare function PlaceholderLineEditor(props: PlaceholderLineEditorProps): ReactNode;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { DocumentEditorHandle } from "./document-toolbar-blocks.js";
2
+ import type { DocumentEditorHandle } from "./document-toolbar-blocks.ts";
3
3
  export type PlaceholderLineEditorProps = {
4
4
  readonly id: string;
5
5
  /** Plain text with `{{name}}` placeholders. */
@@ -1,7 +1,3 @@
1
1
  export declare function createTemplateResolverUserDataFeature(): import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
2
2
  readonly exports: void;
3
3
  };
4
- /** @deprecated Use createTemplateResolverUserDataFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
5
- export declare const templateResolverUserDataFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
6
- readonly exports: void;
7
- };
@@ -21,5 +21,3 @@ export function createTemplateResolverUserDataFeature() {
21
21
  });
22
22
  }, { dedupeOptions: {} });
23
23
  }
24
- /** @deprecated Use createTemplateResolverUserDataFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
25
- export const templateResolverUserDataFeature = createTemplateResolverUserDataFeature();
@@ -1,5 +1,5 @@
1
1
  import { type AssignableAppRoles, type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- export { tenantEntity, tenantTable } from "./schema/tenant.js";
2
+ export { tenantEntity, tenantTable } from "./schema/tenant.ts";
3
3
  export type TenantFeatureOptions = {
4
4
  /** Adds the /members "invite" drawer button + its `invite-create`
5
5
  * actionForm, bound to auth-email-password's `invite-create` write-
@@ -1,10 +1,10 @@
1
- export { cancelPendingInvitation } from "./cancel-pending-invitation.js";
2
- export { TenantCommandSchemas } from "./command-schemas.js";
3
- export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./constants.js";
4
- export { decryptTenantNames } from "./decrypt-tenant-names.js";
5
- export { collectAssignableAppRoles, createTenantFeature } from "./feature.js";
6
- export type { InvitationStatus } from "./invitation-table.js";
7
- export { INVITATION_STATUS, INVITATION_STATUSES, tenantInvitationEntity, tenantInvitationsTable, } from "./invitation-table.js";
8
- export { isTenantServingPublicContent } from "./is-tenant-serving-public-content.js";
9
- export { tenantMembershipEntity, tenantMembershipsTable } from "./membership-table.js";
10
- export { TENANT_LIFECYCLE_STATUSES, type TenantLifecycleStatus, tenantEntity, tenantTable, } from "./schema/tenant.js";
1
+ export { cancelPendingInvitation } from "./cancel-pending-invitation.ts";
2
+ export { TenantCommandSchemas } from "./command-schemas.ts";
3
+ export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./constants.ts";
4
+ export { decryptTenantNames } from "./decrypt-tenant-names.ts";
5
+ export { collectAssignableAppRoles, createTenantFeature } from "./feature.ts";
6
+ export type { InvitationStatus } from "./invitation-table.ts";
7
+ export { INVITATION_STATUS, INVITATION_STATUSES, tenantInvitationEntity, tenantInvitationsTable, } from "./invitation-table.ts";
8
+ export { isTenantServingPublicContent } from "./is-tenant-serving-public-content.ts";
9
+ export { tenantMembershipEntity, tenantMembershipsTable } from "./membership-table.ts";
10
+ export { TENANT_LIFECYCLE_STATUSES, type TenantLifecycleStatus, tenantEntity, tenantTable, } from "./schema/tenant.ts";
@@ -1,4 +1,4 @@
1
- import type { TenantLifecycleStatus } from "./schema/tenant.js";
1
+ import type { TenantLifecycleStatus } from "./schema/tenant.ts";
2
2
  /** Whether a tenant still serves content to anonymous/public callers.
3
3
  * `destroyRequested` is deliberately blocked too, not just `destroying`
4
4
  * onward — secure by default: the tenant already asked to be removed, so
@@ -1 +1 @@
1
- export * from "./seeding.js";
1
+ export * from "./seeding.ts";
@@ -1,3 +1,3 @@
1
- export { type TenantClientOptions, tenantClient } from "./client-plugin.js";
2
- export { MemberRolesCell } from "./member-roles-cell.js";
3
- export { MemberStatusCell } from "./member-status-cell.js";
1
+ export { type TenantClientOptions, tenantClient } from "./client-plugin.tsx";
2
+ export { MemberRolesCell } from "./member-roles-cell.tsx";
3
+ export { MemberStatusCell } from "./member-status-cell.tsx";
@@ -1,4 +1,4 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type ClaimTenantHandoverOptions } from "./handlers/claim.write.js";
2
+ import { type ClaimTenantHandoverOptions } from "./handlers/claim.write.ts";
3
3
  export type TenantHandoverFeatureOptions = ClaimTenantHandoverOptions;
4
4
  export declare function createTenantHandoverFeature(opts?: TenantHandoverFeatureOptions): FeatureDefinition;
@@ -1,3 +1,3 @@
1
- export { createTenantHandoverFeature, type TenantHandoverFeatureOptions, } from "./feature.js";
2
- export { signTenantHandoverGrant, tenantHandoverPurpose } from "./grant.js";
3
- export { type ClaimTenantHandoverOptions, createClaimTenantHandoverHandler, } from "./handlers/claim.write.js";
1
+ export { createTenantHandoverFeature, type TenantHandoverFeatureOptions, } from "./feature.ts";
2
+ export { signTenantHandoverGrant, tenantHandoverPurpose } from "./grant.ts";
3
+ export { type ClaimTenantHandoverOptions, createClaimTenantHandoverHandler, } from "./handlers/claim.write.ts";
@@ -1,4 +1,4 @@
1
- import type { SignupHandoverProvider } from "../shared/index.js";
1
+ import type { SignupHandoverProvider } from "../shared/index.ts";
2
2
  export declare function createSignupHandoverProvider(opts: {
3
3
  readonly grantSecret?: string;
4
4
  }): SignupHandoverProvider;
@@ -1,4 +1,4 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
2
  export declare function createTenantLifecycleFeature(): FeatureDefinition;
3
- export { TENANT_LIFECYCLE_FEATURE, TenantLifecycleHandlers, } from "./constants.js";
4
- export { resolveTenantLifecycleGate, runTenantDestructionSweep } from "./run-tenant-destroy.js";
3
+ export { TENANT_LIFECYCLE_FEATURE, TenantLifecycleHandlers, } from "./constants.ts";
4
+ export { resolveTenantLifecycleGate, runTenantDestructionSweep } from "./run-tenant-destroy.ts";
@@ -1,3 +1,3 @@
1
- export { TENANT_DESTRUCTION_STAGES, TENANT_LIFECYCLE_FEATURE, TenantLifecycleHandlers, } from "./constants.js";
2
- export { createTenantLifecycleFeature } from "./feature.js";
3
- export { resolveTenantLifecycleGate } from "./run-tenant-destroy.js";
1
+ export { TENANT_DESTRUCTION_STAGES, TENANT_LIFECYCLE_FEATURE, TenantLifecycleHandlers, } from "./constants.ts";
2
+ export { createTenantLifecycleFeature } from "./feature.ts";
3
+ export { resolveTenantLifecycleGate } from "./run-tenant-destroy.ts";
@@ -38,4 +38,4 @@ export declare function runTenantDestructionSweep(args: {
38
38
  readonly triggered: number;
39
39
  readonly advanced: number;
40
40
  }>;
41
- export { invalidateTenantLifecycleGate, resolveTenantLifecycleGate } from "./lifecycle-gate.js";
41
+ export { invalidateTenantLifecycleGate, resolveTenantLifecycleGate } from "./lifecycle-gate.ts";
@@ -3,7 +3,7 @@ import { type EscapeHatchAuditSink, type Registry, type TenantId } from "@cosmic
3
3
  import type { FileProviderResolver } from "@cosmicdrift/kumiko-framework/files";
4
4
  import { type Logger } from "@cosmicdrift/kumiko-framework/logging";
5
5
  import { type SearchAdapter } from "@cosmicdrift/kumiko-framework/search";
6
- import type { TenantDestructionStageName } from "./constants.js";
6
+ import type { TenantDestructionStageName } from "./constants.ts";
7
7
  export type DestructionStageCtx = {
8
8
  readonly db: DbRunner;
9
9
  readonly registry: Registry;
@@ -2,7 +2,7 @@ import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import type { SearchAdapter } from "@cosmicdrift/kumiko-framework/search";
4
4
  import type { TestStack } from "@cosmicdrift/kumiko-testing/stack";
5
- import { runTenantDestructionSweep } from "./run-tenant-destroy.js";
5
+ import { runTenantDestructionSweep } from "./run-tenant-destroy.ts";
6
6
  export declare function seedDestroyingTenant(db: DbConnection, tenantId: TenantId): Promise<void>;
7
7
  export declare function driveDestructionToCompletion(stack: TestStack, db: DbConnection, tenantId: TenantId, searchAdapter?: SearchAdapter): Promise<string>;
8
8
  export { runTenantDestructionSweep };
@@ -1,6 +1,4 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type TenantSettingsKeyOptions } from "./config.js";
2
+ import { type TenantSettingsKeyOptions } from "./config.ts";
3
3
  export type TenantSettingsFeatureOptions = TenantSettingsKeyOptions;
4
4
  export declare function createTenantSettingsFeature(opts?: TenantSettingsFeatureOptions): FeatureDefinition;
5
- /** @deprecated Use createTenantSettingsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
6
- export declare const tenantSettingsFeature: FeatureDefinition;
@@ -43,5 +43,3 @@ export function createTenantSettingsFeature(opts = {}) {
43
43
  });
44
44
  }, Object.keys(opts).length === 0 ? { dedupeOptions: {} } : undefined);
45
45
  }
46
- /** @deprecated Use createTenantSettingsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
47
- export const tenantSettingsFeature = createTenantSettingsFeature();
@@ -1,4 +1,4 @@
1
- export { buildTenantSettingsKeys, type TenantSettingsKeyOptions } from "./config.js";
2
- export { TENANT_SETTINGS_FEATURE_NAME, TenantSettingsConfig } from "./constants.js";
3
- export { createTenantSettingsFeature, type TenantSettingsFeatureOptions, tenantSettingsFeature, } from "./feature.js";
4
- export { defineCreateWithTenantDefaults } from "./tenant-defaults.js";
1
+ export { buildTenantSettingsKeys, type TenantSettingsKeyOptions } from "./config.ts";
2
+ export { TENANT_SETTINGS_FEATURE_NAME, TenantSettingsConfig } from "./constants.ts";
3
+ export { createTenantSettingsFeature, type TenantSettingsFeatureOptions, } from "./feature.ts";
4
+ export { defineCreateWithTenantDefaults } from "./tenant-defaults.ts";
@@ -1,4 +1,4 @@
1
1
  export { buildTenantSettingsKeys } from "./config.js";
2
2
  export { TENANT_SETTINGS_FEATURE_NAME, TenantSettingsConfig } from "./constants.js";
3
- export { createTenantSettingsFeature, tenantSettingsFeature, } from "./feature.js";
3
+ export { createTenantSettingsFeature, } from "./feature.js";
4
4
  export { defineCreateWithTenantDefaults } from "./tenant-defaults.js";
@@ -1,4 +1,4 @@
1
- import { type TierAssignmentSource } from "./constants.js";
1
+ import { type TierAssignmentSource } from "./constants.ts";
2
2
  export declare const tierAssignmentEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
3
3
  tier: {
4
4
  readonly type: "text";
@@ -1,6 +1,6 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { TierMap } from "./compose-app.js";
3
- import { type TrialPolicy } from "./trial.js";
2
+ import type { TierMap } from "./compose-app.ts";
3
+ import { type TrialPolicy } from "./trial.ts";
4
4
  /**
5
5
  * Options for createTierEngineFeature. Both fields optional — wenn beide
6
6
  * leer, ist die feature nur Storage (back-compat zu legacy `tierEngineFeature`).
@@ -38,5 +38,3 @@ export type CreateTierEngineOptions<TCaps extends Readonly<Record<string, unknow
38
38
  * mountable in run-config.
39
39
  */
40
40
  export declare function createTierEngineFeature<TCaps extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>>(opts?: CreateTierEngineOptions<TCaps>): FeatureDefinition;
41
- /** @deprecated Use createTierEngineFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
42
- export declare const tierEngineFeature: FeatureDefinition;
@@ -511,5 +511,3 @@ export function createTierEngineFeature(opts = {}) {
511
511
  r.useExtension(TENANT_TIER_RESOLVER_EXT, TIER_ENGINE_FEATURE, plugin);
512
512
  }, Object.keys(opts).length === 0 ? { dedupeOptions: {} } : undefined);
513
513
  }
514
- /** @deprecated Use createTierEngineFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
515
- export const tierEngineFeature = createTierEngineFeature();
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import { type TierAssignmentRow } from "../entity.js";
2
+ import { type TierAssignmentRow } from "../entity.ts";
3
3
  export declare const getTenantTierQuery: import("@cosmicdrift/kumiko-types/define-handler").QueryHandlerDefinition<"get-tenant-tier", z.ZodObject<{
4
4
  tenantId: z.ZodString;
5
5
  }, z.core.$strip>, TierAssignmentRow | null, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap>;
@@ -1,7 +1,5 @@
1
- import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
1
  type LocalizedString = {
3
2
  readonly en: string;
4
3
  };
5
4
  export declare const TIER_ENGINE_I18N: Readonly<Record<string, LocalizedString>>;
6
- export declare const defaultTranslations: TranslationsByLocale;
7
5
  export {};
@@ -1,9 +1,10 @@
1
1
  // @runtime client
2
2
  // Server + client i18n for the tier-admin actionForm. Single source of
3
3
  // truth: r.translations({ keys: TIER_ENGINE_I18N }) registers these
4
- // server-side, defaultTranslations derives the client-side locale bundle
5
- // from the same map so the two can't drift.
6
- import { translationsByLocaleFromKeys, } from "@cosmicdrift/kumiko-renderer";
4
+ // server-side, web/client-plugin derives the client-side locale bundle
5
+ // from the same map so the two can't drift. No renderer import here: the
6
+ // server feature loads this file, and the renderer is .tsx that non-JSX
7
+ // server projects (runProdApp consumers) cannot typecheck.
7
8
  export const TIER_ENGINE_I18N = {
8
9
  "screen:tier-admin.title": { en: "Assign tier manually" },
9
10
  "tier-admin.screen.subtitle": {
@@ -20,4 +21,3 @@ export const TIER_ENGINE_I18N = {
20
21
  "tier-admin.submit": { en: "Assign tier" },
21
22
  "tier-admin.success": { en: "Tier assigned: {tenantId} → {tier}" },
22
23
  };
23
- export const defaultTranslations = translationsByLocaleFromKeys(TIER_ENGINE_I18N);
@@ -1,8 +1,8 @@
1
- export { tierAssignmentAggregateId } from "./aggregate-id.js";
2
- export { type AddOnDefinition, type AddOnMap, type ComposeAppInput, type ComposedApp, composeApp, type TierDefinition, type TierMap, } from "./compose-app.js";
3
- export { isTierAssignmentSource, TIER_ENGINE_FEATURE, type TierAssignmentSource, TierAssignmentSources, TierEngineHandlers, TierEngineQueries, } from "./constants.js";
4
- export { tierAssignmentEntity } from "./entity.js";
5
- export { type CreateTierEngineOptions, createTierEngineFeature, tierEngineFeature, } from "./feature.js";
6
- export { createTierOptionGate, type TierOptionAvailability, type TierOptionGate, type TierOptionGateDeps, type TierOptionSpec, } from "./tier-option-gate.js";
7
- export { createTierResolver, type TierResolver, type TierResolverDeps, } from "./tier-resolver.js";
8
- export { isTrialActive, type TrialPolicy } from "./trial.js";
1
+ export { tierAssignmentAggregateId } from "./aggregate-id.ts";
2
+ export { type AddOnDefinition, type AddOnMap, type ComposeAppInput, type ComposedApp, composeApp, type TierDefinition, type TierMap, } from "./compose-app.ts";
3
+ export { isTierAssignmentSource, TIER_ENGINE_FEATURE, type TierAssignmentSource, TierAssignmentSources, TierEngineHandlers, TierEngineQueries, } from "./constants.ts";
4
+ export { tierAssignmentEntity } from "./entity.ts";
5
+ export { type CreateTierEngineOptions, createTierEngineFeature, } from "./feature.ts";
6
+ export { createTierOptionGate, type TierOptionAvailability, type TierOptionGate, type TierOptionGateDeps, type TierOptionSpec, } from "./tier-option-gate.ts";
7
+ export { createTierResolver, type TierResolver, type TierResolverDeps, } from "./tier-resolver.ts";
8
+ export { isTrialActive, type TrialPolicy } from "./trial.ts";
@@ -10,7 +10,7 @@ export { tierAssignmentAggregateId } from "./aggregate-id.js";
10
10
  export { composeApp, } from "./compose-app.js";
11
11
  export { isTierAssignmentSource, TIER_ENGINE_FEATURE, TierAssignmentSources, TierEngineHandlers, TierEngineQueries, } from "./constants.js";
12
12
  export { tierAssignmentEntity } from "./entity.js";
13
- export { createTierEngineFeature, tierEngineFeature, } from "./feature.js";
13
+ export { createTierEngineFeature, } from "./feature.js";
14
14
  export { createTierOptionGate, } from "./tier-option-gate.js";
15
15
  export { createTierResolver, } from "./tier-resolver.js";
16
16
  export { isTrialActive } from "./trial.js";
@@ -1,7 +1,7 @@
1
1
  import type { EntityTableMeta, SchemaTable, TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { WriteHandlerDef } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { type WriteFailure } from "@cosmicdrift/kumiko-framework/errors";
4
- import { type CapGuardContext, type CapLimitContext } from "../cap-counter/index.js";
4
+ import { type CapGuardContext, type CapLimitContext } from "../cap-counter/index.ts";
5
5
  export type TierOptionSpec<TCaps> = {
6
6
  readonly field: string;
7
7
  readonly options: readonly string[];
@@ -1,5 +1,5 @@
1
1
  import { type TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
- import type { CapLimitContext } from "../cap-counter/index.js";
2
+ import type { CapLimitContext } from "../cap-counter/index.ts";
3
3
  export type TierResolverDeps<TTier extends string, TCaps> = {
4
4
  readonly capsForTier: (tier: TTier, context: CapLimitContext) => TCaps | Promise<TCaps>;
5
5
  readonly isTierName: (value: string) => value is TTier;