@growth-labs/cms 0.1.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 (1093) hide show
  1. package/README.md +165 -0
  2. package/dist/engine/activity-log.d.ts +17 -0
  3. package/dist/engine/activity-log.d.ts.map +1 -0
  4. package/dist/engine/activity-log.js +17 -0
  5. package/dist/engine/activity-log.js.map +1 -0
  6. package/dist/engine/ai-prompts.d.ts +57 -0
  7. package/dist/engine/ai-prompts.d.ts.map +1 -0
  8. package/dist/engine/ai-prompts.js +90 -0
  9. package/dist/engine/ai-prompts.js.map +1 -0
  10. package/dist/engine/ai-writeback.d.ts +36 -0
  11. package/dist/engine/ai-writeback.d.ts.map +1 -0
  12. package/dist/engine/ai-writeback.js +45 -0
  13. package/dist/engine/ai-writeback.js.map +1 -0
  14. package/dist/engine/api-keys.d.ts +76 -0
  15. package/dist/engine/api-keys.d.ts.map +1 -0
  16. package/dist/engine/api-keys.js +165 -0
  17. package/dist/engine/api-keys.js.map +1 -0
  18. package/dist/engine/content-insights.d.ts +36 -0
  19. package/dist/engine/content-insights.d.ts.map +1 -0
  20. package/dist/engine/content-insights.js +114 -0
  21. package/dist/engine/content-insights.js.map +1 -0
  22. package/dist/engine/contributors.d.ts +25 -0
  23. package/dist/engine/contributors.d.ts.map +1 -0
  24. package/dist/engine/contributors.js +59 -0
  25. package/dist/engine/contributors.js.map +1 -0
  26. package/dist/engine/cron.d.ts +15 -0
  27. package/dist/engine/cron.d.ts.map +1 -0
  28. package/dist/engine/cron.js +33 -0
  29. package/dist/engine/cron.js.map +1 -0
  30. package/dist/engine/d1.d.ts +16 -0
  31. package/dist/engine/d1.d.ts.map +1 -0
  32. package/dist/engine/d1.js +13 -0
  33. package/dist/engine/d1.js.map +1 -0
  34. package/dist/engine/foundry-dispatch.d.ts +52 -0
  35. package/dist/engine/foundry-dispatch.d.ts.map +1 -0
  36. package/dist/engine/foundry-dispatch.js +290 -0
  37. package/dist/engine/foundry-dispatch.js.map +1 -0
  38. package/dist/engine/import-parsers.d.ts +11 -0
  39. package/dist/engine/import-parsers.d.ts.map +1 -0
  40. package/dist/engine/import-parsers.js +373 -0
  41. package/dist/engine/import-parsers.js.map +1 -0
  42. package/dist/engine/index.d.ts +28 -0
  43. package/dist/engine/index.d.ts.map +1 -0
  44. package/dist/engine/index.js +57 -0
  45. package/dist/engine/index.js.map +1 -0
  46. package/dist/engine/invites.d.ts +78 -0
  47. package/dist/engine/invites.d.ts.map +1 -0
  48. package/dist/engine/invites.js +158 -0
  49. package/dist/engine/invites.js.map +1 -0
  50. package/dist/engine/members.d.ts +59 -0
  51. package/dist/engine/members.d.ts.map +1 -0
  52. package/dist/engine/members.js +124 -0
  53. package/dist/engine/members.js.map +1 -0
  54. package/dist/engine/membership-rules.d.ts +25 -0
  55. package/dist/engine/membership-rules.d.ts.map +1 -0
  56. package/dist/engine/membership-rules.js +44 -0
  57. package/dist/engine/membership-rules.js.map +1 -0
  58. package/dist/engine/og-render.d.ts +40 -0
  59. package/dist/engine/og-render.d.ts.map +1 -0
  60. package/dist/engine/og-render.js +26 -0
  61. package/dist/engine/og-render.js.map +1 -0
  62. package/dist/engine/publish-guard.d.ts +58 -0
  63. package/dist/engine/publish-guard.d.ts.map +1 -0
  64. package/dist/engine/publish-guard.js +80 -0
  65. package/dist/engine/publish-guard.js.map +1 -0
  66. package/dist/engine/publisher.d.ts +171 -0
  67. package/dist/engine/publisher.d.ts.map +1 -0
  68. package/dist/engine/publisher.js +597 -0
  69. package/dist/engine/publisher.js.map +1 -0
  70. package/dist/engine/revisions.d.ts +39 -0
  71. package/dist/engine/revisions.d.ts.map +1 -0
  72. package/dist/engine/revisions.js +203 -0
  73. package/dist/engine/revisions.js.map +1 -0
  74. package/dist/engine/sanitize.d.ts +52 -0
  75. package/dist/engine/sanitize.d.ts.map +1 -0
  76. package/dist/engine/sanitize.js +155 -0
  77. package/dist/engine/sanitize.js.map +1 -0
  78. package/dist/engine/seed-membership.d.ts +29 -0
  79. package/dist/engine/seed-membership.d.ts.map +1 -0
  80. package/dist/engine/seed-membership.js +65 -0
  81. package/dist/engine/seed-membership.js.map +1 -0
  82. package/dist/engine/seo.d.ts +20 -0
  83. package/dist/engine/seo.d.ts.map +1 -0
  84. package/dist/engine/seo.js +50 -0
  85. package/dist/engine/seo.js.map +1 -0
  86. package/dist/engine/slug-redirects.d.ts +8 -0
  87. package/dist/engine/slug-redirects.d.ts.map +1 -0
  88. package/dist/engine/slug-redirects.js +26 -0
  89. package/dist/engine/slug-redirects.js.map +1 -0
  90. package/dist/engine/slug.d.ts +6 -0
  91. package/dist/engine/slug.d.ts.map +1 -0
  92. package/dist/engine/slug.js +28 -0
  93. package/dist/engine/slug.js.map +1 -0
  94. package/dist/engine/soft-delete.d.ts +8 -0
  95. package/dist/engine/soft-delete.d.ts.map +1 -0
  96. package/dist/engine/soft-delete.js +28 -0
  97. package/dist/engine/soft-delete.js.map +1 -0
  98. package/dist/engine/tags.d.ts +14 -0
  99. package/dist/engine/tags.d.ts.map +1 -0
  100. package/dist/engine/tags.js +79 -0
  101. package/dist/engine/tags.js.map +1 -0
  102. package/dist/engine/topics.d.ts +10 -0
  103. package/dist/engine/topics.d.ts.map +1 -0
  104. package/dist/engine/topics.js +140 -0
  105. package/dist/engine/topics.js.map +1 -0
  106. package/dist/engine/url-guard.d.ts +12 -0
  107. package/dist/engine/url-guard.d.ts.map +1 -0
  108. package/dist/engine/url-guard.js +129 -0
  109. package/dist/engine/url-guard.js.map +1 -0
  110. package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts +20 -0
  111. package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts.map +1 -0
  112. package/dist/engine/validator/checks/bare-url-not-autolinked.js +54 -0
  113. package/dist/engine/validator/checks/bare-url-not-autolinked.js.map +1 -0
  114. package/dist/engine/validator/checks/broken-footnote-label.d.ts +16 -0
  115. package/dist/engine/validator/checks/broken-footnote-label.d.ts.map +1 -0
  116. package/dist/engine/validator/checks/broken-footnote-label.js +17 -0
  117. package/dist/engine/validator/checks/broken-footnote-label.js.map +1 -0
  118. package/dist/engine/validator/checks/double-encoded-entities.d.ts +18 -0
  119. package/dist/engine/validator/checks/double-encoded-entities.d.ts.map +1 -0
  120. package/dist/engine/validator/checks/double-encoded-entities.js +23 -0
  121. package/dist/engine/validator/checks/double-encoded-entities.js.map +1 -0
  122. package/dist/engine/validator/checks/empty-alt-text.d.ts +14 -0
  123. package/dist/engine/validator/checks/empty-alt-text.d.ts.map +1 -0
  124. package/dist/engine/validator/checks/empty-alt-text.js +23 -0
  125. package/dist/engine/validator/checks/empty-alt-text.js.map +1 -0
  126. package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts +11 -0
  127. package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts.map +1 -0
  128. package/dist/engine/validator/checks/heading-hierarchy-skip.js +20 -0
  129. package/dist/engine/validator/checks/heading-hierarchy-skip.js.map +1 -0
  130. package/dist/engine/validator/checks/html-comment-leak.d.ts +20 -0
  131. package/dist/engine/validator/checks/html-comment-leak.d.ts.map +1 -0
  132. package/dist/engine/validator/checks/html-comment-leak.js +30 -0
  133. package/dist/engine/validator/checks/html-comment-leak.js.map +1 -0
  134. package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts +12 -0
  135. package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts.map +1 -0
  136. package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js +17 -0
  137. package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js.map +1 -0
  138. package/dist/engine/validator/checks/invisible-control-chars.d.ts +24 -0
  139. package/dist/engine/validator/checks/invisible-control-chars.d.ts.map +1 -0
  140. package/dist/engine/validator/checks/invisible-control-chars.js +30 -0
  141. package/dist/engine/validator/checks/invisible-control-chars.js.map +1 -0
  142. package/dist/engine/validator/checks/paywall-marker-leak.d.ts +17 -0
  143. package/dist/engine/validator/checks/paywall-marker-leak.d.ts.map +1 -0
  144. package/dist/engine/validator/checks/paywall-marker-leak.js +22 -0
  145. package/dist/engine/validator/checks/paywall-marker-leak.js.map +1 -0
  146. package/dist/engine/validator/checks/raw-block-html.d.ts +28 -0
  147. package/dist/engine/validator/checks/raw-block-html.d.ts.map +1 -0
  148. package/dist/engine/validator/checks/raw-block-html.js +38 -0
  149. package/dist/engine/validator/checks/raw-block-html.js.map +1 -0
  150. package/dist/engine/validator/checks/stale-body-html.d.ts +28 -0
  151. package/dist/engine/validator/checks/stale-body-html.d.ts.map +1 -0
  152. package/dist/engine/validator/checks/stale-body-html.js +15 -0
  153. package/dist/engine/validator/checks/stale-body-html.js.map +1 -0
  154. package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts +11 -0
  155. package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts.map +1 -0
  156. package/dist/engine/validator/checks/unresolved-footnote-anchor.js +48 -0
  157. package/dist/engine/validator/checks/unresolved-footnote-anchor.js.map +1 -0
  158. package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts +23 -0
  159. package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts.map +1 -0
  160. package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js +47 -0
  161. package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js.map +1 -0
  162. package/dist/engine/validator/index.d.ts +75 -0
  163. package/dist/engine/validator/index.d.ts.map +1 -0
  164. package/dist/engine/validator/index.js +313 -0
  165. package/dist/engine/validator/index.js.map +1 -0
  166. package/dist/engine/validator/scan.d.ts +28 -0
  167. package/dist/engine/validator/scan.d.ts.map +1 -0
  168. package/dist/engine/validator/scan.js +97 -0
  169. package/dist/engine/validator/scan.js.map +1 -0
  170. package/dist/engine/validator/types.d.ts +50 -0
  171. package/dist/engine/validator/types.d.ts.map +1 -0
  172. package/dist/engine/validator/types.js +51 -0
  173. package/dist/engine/validator/types.js.map +1 -0
  174. package/dist/engine/webhook-signer.d.ts +39 -0
  175. package/dist/engine/webhook-signer.d.ts.map +1 -0
  176. package/dist/engine/webhook-signer.js +117 -0
  177. package/dist/engine/webhook-signer.js.map +1 -0
  178. package/dist/engine/webhooks.d.ts +75 -0
  179. package/dist/engine/webhooks.d.ts.map +1 -0
  180. package/dist/engine/webhooks.js +139 -0
  181. package/dist/engine/webhooks.js.map +1 -0
  182. package/dist/index.d.ts +5 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +40 -0
  185. package/dist/index.js.map +1 -0
  186. package/dist/integration/index.d.ts +6 -0
  187. package/dist/integration/index.d.ts.map +1 -0
  188. package/dist/integration/index.js +294 -0
  189. package/dist/integration/index.js.map +1 -0
  190. package/dist/integration/options.d.ts +105 -0
  191. package/dist/integration/options.d.ts.map +1 -0
  192. package/dist/integration/options.js +25 -0
  193. package/dist/integration/options.js.map +1 -0
  194. package/dist/integration/vite-plugin.d.ts +4 -0
  195. package/dist/integration/vite-plugin.d.ts.map +1 -0
  196. package/dist/integration/vite-plugin.js +37 -0
  197. package/dist/integration/vite-plugin.js.map +1 -0
  198. package/dist/providers/index.d.ts +3 -0
  199. package/dist/providers/index.d.ts.map +1 -0
  200. package/dist/providers/index.js +3 -0
  201. package/dist/providers/index.js.map +1 -0
  202. package/dist/providers/null.d.ts +9 -0
  203. package/dist/providers/null.d.ts.map +1 -0
  204. package/dist/providers/null.js +144 -0
  205. package/dist/providers/null.js.map +1 -0
  206. package/dist/providers/types.d.ts +277 -0
  207. package/dist/providers/types.d.ts.map +1 -0
  208. package/dist/providers/types.js +2 -0
  209. package/dist/providers/types.js.map +1 -0
  210. package/dist/routes/ai.d.ts +25 -0
  211. package/dist/routes/ai.d.ts.map +1 -0
  212. package/dist/routes/ai.js +381 -0
  213. package/dist/routes/ai.js.map +1 -0
  214. package/dist/routes/analytics.d.ts +15 -0
  215. package/dist/routes/analytics.d.ts.map +1 -0
  216. package/dist/routes/analytics.js +61 -0
  217. package/dist/routes/analytics.js.map +1 -0
  218. package/dist/routes/api-keys.d.ts +13 -0
  219. package/dist/routes/api-keys.d.ts.map +1 -0
  220. package/dist/routes/api-keys.js +109 -0
  221. package/dist/routes/api-keys.js.map +1 -0
  222. package/dist/routes/authors.d.ts +19 -0
  223. package/dist/routes/authors.d.ts.map +1 -0
  224. package/dist/routes/authors.js +202 -0
  225. package/dist/routes/authors.js.map +1 -0
  226. package/dist/routes/authz-matrix.d.ts +78 -0
  227. package/dist/routes/authz-matrix.d.ts.map +1 -0
  228. package/dist/routes/authz-matrix.js +170 -0
  229. package/dist/routes/authz-matrix.js.map +1 -0
  230. package/dist/routes/calendar.d.ts +19 -0
  231. package/dist/routes/calendar.d.ts.map +1 -0
  232. package/dist/routes/calendar.js +89 -0
  233. package/dist/routes/calendar.js.map +1 -0
  234. package/dist/routes/config.d.ts +70 -0
  235. package/dist/routes/config.d.ts.map +1 -0
  236. package/dist/routes/config.js +23 -0
  237. package/dist/routes/config.js.map +1 -0
  238. package/dist/routes/content-insights.d.ts +18 -0
  239. package/dist/routes/content-insights.d.ts.map +1 -0
  240. package/dist/routes/content-insights.js +137 -0
  241. package/dist/routes/content-insights.js.map +1 -0
  242. package/dist/routes/content.d.ts +145 -0
  243. package/dist/routes/content.d.ts.map +1 -0
  244. package/dist/routes/content.js +1374 -0
  245. package/dist/routes/content.js.map +1 -0
  246. package/dist/routes/context.d.ts +104 -0
  247. package/dist/routes/context.d.ts.map +1 -0
  248. package/dist/routes/context.js +26 -0
  249. package/dist/routes/context.js.map +1 -0
  250. package/dist/routes/cron.d.ts +8 -0
  251. package/dist/routes/cron.d.ts.map +1 -0
  252. package/dist/routes/cron.js +20 -0
  253. package/dist/routes/cron.js.map +1 -0
  254. package/dist/routes/dashboard.d.ts +12 -0
  255. package/dist/routes/dashboard.d.ts.map +1 -0
  256. package/dist/routes/dashboard.js +113 -0
  257. package/dist/routes/dashboard.js.map +1 -0
  258. package/dist/routes/imports.d.ts +10 -0
  259. package/dist/routes/imports.d.ts.map +1 -0
  260. package/dist/routes/imports.js +149 -0
  261. package/dist/routes/imports.js.map +1 -0
  262. package/dist/routes/index.d.ts +75 -0
  263. package/dist/routes/index.d.ts.map +1 -0
  264. package/dist/routes/index.js +141 -0
  265. package/dist/routes/index.js.map +1 -0
  266. package/dist/routes/media-lib.d.ts +75 -0
  267. package/dist/routes/media-lib.d.ts.map +1 -0
  268. package/dist/routes/media-lib.js +305 -0
  269. package/dist/routes/media-lib.js.map +1 -0
  270. package/dist/routes/media.d.ts +32 -0
  271. package/dist/routes/media.d.ts.map +1 -0
  272. package/dist/routes/media.js +756 -0
  273. package/dist/routes/media.js.map +1 -0
  274. package/dist/routes/preview.d.ts +19 -0
  275. package/dist/routes/preview.d.ts.map +1 -0
  276. package/dist/routes/preview.js +150 -0
  277. package/dist/routes/preview.js.map +1 -0
  278. package/dist/routes/rbac-invites.d.ts +31 -0
  279. package/dist/routes/rbac-invites.d.ts.map +1 -0
  280. package/dist/routes/rbac-invites.js +174 -0
  281. package/dist/routes/rbac-invites.js.map +1 -0
  282. package/dist/routes/rbac.d.ts +12 -0
  283. package/dist/routes/rbac.d.ts.map +1 -0
  284. package/dist/routes/rbac.js +126 -0
  285. package/dist/routes/rbac.js.map +1 -0
  286. package/dist/routes/shell.d.ts +22 -0
  287. package/dist/routes/shell.d.ts.map +1 -0
  288. package/dist/routes/shell.js +123 -0
  289. package/dist/routes/shell.js.map +1 -0
  290. package/dist/routes/subscriptions.d.ts +21 -0
  291. package/dist/routes/subscriptions.d.ts.map +1 -0
  292. package/dist/routes/subscriptions.js +127 -0
  293. package/dist/routes/subscriptions.js.map +1 -0
  294. package/dist/routes/tags.d.ts +23 -0
  295. package/dist/routes/tags.d.ts.map +1 -0
  296. package/dist/routes/tags.js +68 -0
  297. package/dist/routes/tags.js.map +1 -0
  298. package/dist/routes/topics.d.ts +12 -0
  299. package/dist/routes/topics.d.ts.map +1 -0
  300. package/dist/routes/topics.js +49 -0
  301. package/dist/routes/topics.js.map +1 -0
  302. package/dist/routes/webhooks.d.ts +31 -0
  303. package/dist/routes/webhooks.d.ts.map +1 -0
  304. package/dist/routes/webhooks.js +173 -0
  305. package/dist/routes/webhooks.js.map +1 -0
  306. package/dist/schema/index.d.ts +4 -0
  307. package/dist/schema/index.d.ts.map +1 -0
  308. package/dist/schema/index.js +6 -0
  309. package/dist/schema/index.js.map +1 -0
  310. package/dist/schema/insights-ingest.d.ts +959 -0
  311. package/dist/schema/insights-ingest.d.ts.map +1 -0
  312. package/dist/schema/insights-ingest.js +112 -0
  313. package/dist/schema/insights-ingest.js.map +1 -0
  314. package/dist/schema/migrations.d.ts +63 -0
  315. package/dist/schema/migrations.d.ts.map +1 -0
  316. package/dist/schema/migrations.js +589 -0
  317. package/dist/schema/migrations.js.map +1 -0
  318. package/dist/schema/tables.d.ts +11 -0
  319. package/dist/schema/tables.d.ts.map +1 -0
  320. package/dist/schema/tables.js +56 -0
  321. package/dist/schema/tables.js.map +1 -0
  322. package/dist/schema/types.d.ts +476 -0
  323. package/dist/schema/types.d.ts.map +1 -0
  324. package/dist/schema/types.js +37 -0
  325. package/dist/schema/types.js.map +1 -0
  326. package/dist/ui/api/_authz.d.ts +6 -0
  327. package/dist/ui/api/_authz.d.ts.map +1 -0
  328. package/dist/ui/api/_authz.js +74 -0
  329. package/dist/ui/api/_authz.js.map +1 -0
  330. package/dist/ui/api/_content-config.d.ts +22 -0
  331. package/dist/ui/api/_content-config.d.ts.map +1 -0
  332. package/dist/ui/api/_content-config.js +50 -0
  333. package/dist/ui/api/_content-config.js.map +1 -0
  334. package/dist/ui/api/activity.d.ts +3 -0
  335. package/dist/ui/api/activity.d.ts.map +1 -0
  336. package/dist/ui/api/activity.js +28 -0
  337. package/dist/ui/api/activity.js.map +1 -0
  338. package/dist/ui/api/analytics.d.ts +3 -0
  339. package/dist/ui/api/analytics.d.ts.map +1 -0
  340. package/dist/ui/api/analytics.js +36 -0
  341. package/dist/ui/api/analytics.js.map +1 -0
  342. package/dist/ui/api/authors/[id].d.ts +4 -0
  343. package/dist/ui/api/authors/[id].d.ts.map +1 -0
  344. package/dist/ui/api/authors/[id].js +17 -0
  345. package/dist/ui/api/authors/[id].js.map +1 -0
  346. package/dist/ui/api/authors.d.ts +4 -0
  347. package/dist/ui/api/authors.d.ts.map +1 -0
  348. package/dist/ui/api/authors.js +12 -0
  349. package/dist/ui/api/authors.js.map +1 -0
  350. package/dist/ui/api/calendar.d.ts +3 -0
  351. package/dist/ui/api/calendar.d.ts.map +1 -0
  352. package/dist/ui/api/calendar.js +16 -0
  353. package/dist/ui/api/calendar.js.map +1 -0
  354. package/dist/ui/api/content/[id]/ai/headlines.d.ts +3 -0
  355. package/dist/ui/api/content/[id]/ai/headlines.d.ts.map +1 -0
  356. package/dist/ui/api/content/[id]/ai/headlines.js +7 -0
  357. package/dist/ui/api/content/[id]/ai/headlines.js.map +1 -0
  358. package/dist/ui/api/content/[id]/ai/meta-description.d.ts +3 -0
  359. package/dist/ui/api/content/[id]/ai/meta-description.d.ts.map +1 -0
  360. package/dist/ui/api/content/[id]/ai/meta-description.js +6 -0
  361. package/dist/ui/api/content/[id]/ai/meta-description.js.map +1 -0
  362. package/dist/ui/api/content/[id]/ai/og-image.d.ts +3 -0
  363. package/dist/ui/api/content/[id]/ai/og-image.d.ts.map +1 -0
  364. package/dist/ui/api/content/[id]/ai/og-image.js +7 -0
  365. package/dist/ui/api/content/[id]/ai/og-image.js.map +1 -0
  366. package/dist/ui/api/content/[id]/ai/proofread.d.ts +3 -0
  367. package/dist/ui/api/content/[id]/ai/proofread.d.ts.map +1 -0
  368. package/dist/ui/api/content/[id]/ai/proofread.js +7 -0
  369. package/dist/ui/api/content/[id]/ai/proofread.js.map +1 -0
  370. package/dist/ui/api/content/[id]/ai/takeaways.d.ts +3 -0
  371. package/dist/ui/api/content/[id]/ai/takeaways.d.ts.map +1 -0
  372. package/dist/ui/api/content/[id]/ai/takeaways.js +6 -0
  373. package/dist/ui/api/content/[id]/ai/takeaways.js.map +1 -0
  374. package/dist/ui/api/content/[id]/contributors.d.ts +4 -0
  375. package/dist/ui/api/content/[id]/contributors.d.ts.map +1 -0
  376. package/dist/ui/api/content/[id]/contributors.js +8 -0
  377. package/dist/ui/api/content/[id]/contributors.js.map +1 -0
  378. package/dist/ui/api/content/[id]/preview-token.d.ts +3 -0
  379. package/dist/ui/api/content/[id]/preview-token.d.ts.map +1 -0
  380. package/dist/ui/api/content/[id]/preview-token.js +16 -0
  381. package/dist/ui/api/content/[id]/preview-token.js.map +1 -0
  382. package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts +3 -0
  383. package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts.map +1 -0
  384. package/dist/ui/api/content/[id]/revisions/[rev]/restore.js +7 -0
  385. package/dist/ui/api/content/[id]/revisions/[rev]/restore.js.map +1 -0
  386. package/dist/ui/api/content/[id]/revisions/[rev].d.ts +3 -0
  387. package/dist/ui/api/content/[id]/revisions/[rev].d.ts.map +1 -0
  388. package/dist/ui/api/content/[id]/revisions/[rev].js +6 -0
  389. package/dist/ui/api/content/[id]/revisions/[rev].js.map +1 -0
  390. package/dist/ui/api/content/[id]/revisions.d.ts +3 -0
  391. package/dist/ui/api/content/[id]/revisions.d.ts.map +1 -0
  392. package/dist/ui/api/content/[id]/revisions.js +6 -0
  393. package/dist/ui/api/content/[id]/revisions.js.map +1 -0
  394. package/dist/ui/api/content/[id]/seo-score.d.ts +3 -0
  395. package/dist/ui/api/content/[id]/seo-score.d.ts.map +1 -0
  396. package/dist/ui/api/content/[id]/seo-score.js +7 -0
  397. package/dist/ui/api/content/[id]/seo-score.js.map +1 -0
  398. package/dist/ui/api/content/[id].d.ts +5 -0
  399. package/dist/ui/api/content/[id].d.ts.map +1 -0
  400. package/dist/ui/api/content/[id].js +17 -0
  401. package/dist/ui/api/content/[id].js.map +1 -0
  402. package/dist/ui/api/content/bulk.d.ts +3 -0
  403. package/dist/ui/api/content/bulk.d.ts.map +1 -0
  404. package/dist/ui/api/content/bulk.js +7 -0
  405. package/dist/ui/api/content/bulk.js.map +1 -0
  406. package/dist/ui/api/content/counts.d.ts +3 -0
  407. package/dist/ui/api/content/counts.d.ts.map +1 -0
  408. package/dist/ui/api/content/counts.js +8 -0
  409. package/dist/ui/api/content/counts.js.map +1 -0
  410. package/dist/ui/api/content/foundry-callback.d.ts +3 -0
  411. package/dist/ui/api/content/foundry-callback.d.ts.map +1 -0
  412. package/dist/ui/api/content/foundry-callback.js +8 -0
  413. package/dist/ui/api/content/foundry-callback.js.map +1 -0
  414. package/dist/ui/api/content/import/confirm.d.ts +3 -0
  415. package/dist/ui/api/content/import/confirm.d.ts.map +1 -0
  416. package/dist/ui/api/content/import/confirm.js +11 -0
  417. package/dist/ui/api/content/import/confirm.js.map +1 -0
  418. package/dist/ui/api/content/import/parse.d.ts +3 -0
  419. package/dist/ui/api/content/import/parse.d.ts.map +1 -0
  420. package/dist/ui/api/content/import/parse.js +11 -0
  421. package/dist/ui/api/content/import/parse.js.map +1 -0
  422. package/dist/ui/api/content/insights-ingest.d.ts +3 -0
  423. package/dist/ui/api/content/insights-ingest.d.ts.map +1 -0
  424. package/dist/ui/api/content/insights-ingest.js +15 -0
  425. package/dist/ui/api/content/insights-ingest.js.map +1 -0
  426. package/dist/ui/api/content-insights/dismiss.d.ts +3 -0
  427. package/dist/ui/api/content-insights/dismiss.d.ts.map +1 -0
  428. package/dist/ui/api/content-insights/dismiss.js +16 -0
  429. package/dist/ui/api/content-insights/dismiss.js.map +1 -0
  430. package/dist/ui/api/content-insights/index.d.ts +3 -0
  431. package/dist/ui/api/content-insights/index.d.ts.map +1 -0
  432. package/dist/ui/api/content-insights/index.js +12 -0
  433. package/dist/ui/api/content-insights/index.js.map +1 -0
  434. package/dist/ui/api/content-insights/undismiss.d.ts +3 -0
  435. package/dist/ui/api/content-insights/undismiss.d.ts.map +1 -0
  436. package/dist/ui/api/content-insights/undismiss.js +16 -0
  437. package/dist/ui/api/content-insights/undismiss.js.map +1 -0
  438. package/dist/ui/api/content.d.ts +4 -0
  439. package/dist/ui/api/content.d.ts.map +1 -0
  440. package/dist/ui/api/content.js +16 -0
  441. package/dist/ui/api/content.js.map +1 -0
  442. package/dist/ui/api/dashboard.d.ts +3 -0
  443. package/dist/ui/api/dashboard.d.ts.map +1 -0
  444. package/dist/ui/api/dashboard.js +22 -0
  445. package/dist/ui/api/dashboard.js.map +1 -0
  446. package/dist/ui/api/me.d.ts +3 -0
  447. package/dist/ui/api/me.d.ts.map +1 -0
  448. package/dist/ui/api/me.js +18 -0
  449. package/dist/ui/api/me.js.map +1 -0
  450. package/dist/ui/api/media/[id].d.ts +3 -0
  451. package/dist/ui/api/media/[id].d.ts.map +1 -0
  452. package/dist/ui/api/media/[id].js +17 -0
  453. package/dist/ui/api/media/[id].js.map +1 -0
  454. package/dist/ui/api/media/images.d.ts +3 -0
  455. package/dist/ui/api/media/images.d.ts.map +1 -0
  456. package/dist/ui/api/media/images.js +6 -0
  457. package/dist/ui/api/media/images.js.map +1 -0
  458. package/dist/ui/api/media/library/[id].d.ts +3 -0
  459. package/dist/ui/api/media/library/[id].d.ts.map +1 -0
  460. package/dist/ui/api/media/library/[id].js +6 -0
  461. package/dist/ui/api/media/library/[id].js.map +1 -0
  462. package/dist/ui/api/media/library.d.ts +3 -0
  463. package/dist/ui/api/media/library.d.ts.map +1 -0
  464. package/dist/ui/api/media/library.js +17 -0
  465. package/dist/ui/api/media/library.js.map +1 -0
  466. package/dist/ui/api/media/podcast/abort.d.ts +3 -0
  467. package/dist/ui/api/media/podcast/abort.d.ts.map +1 -0
  468. package/dist/ui/api/media/podcast/abort.js +4 -0
  469. package/dist/ui/api/media/podcast/abort.js.map +1 -0
  470. package/dist/ui/api/media/podcast/complete.d.ts +3 -0
  471. package/dist/ui/api/media/podcast/complete.d.ts.map +1 -0
  472. package/dist/ui/api/media/podcast/complete.js +4 -0
  473. package/dist/ui/api/media/podcast/complete.js.map +1 -0
  474. package/dist/ui/api/media/podcast/init.d.ts +3 -0
  475. package/dist/ui/api/media/podcast/init.d.ts.map +1 -0
  476. package/dist/ui/api/media/podcast/init.js +4 -0
  477. package/dist/ui/api/media/podcast/init.js.map +1 -0
  478. package/dist/ui/api/media/podcast/part.d.ts +3 -0
  479. package/dist/ui/api/media/podcast/part.d.ts.map +1 -0
  480. package/dist/ui/api/media/podcast/part.js +4 -0
  481. package/dist/ui/api/media/podcast/part.js.map +1 -0
  482. package/dist/ui/api/media/podcast.d.ts +3 -0
  483. package/dist/ui/api/media/podcast.d.ts.map +1 -0
  484. package/dist/ui/api/media/podcast.js +6 -0
  485. package/dist/ui/api/media/podcast.js.map +1 -0
  486. package/dist/ui/api/media/videos/abort.d.ts +3 -0
  487. package/dist/ui/api/media/videos/abort.d.ts.map +1 -0
  488. package/dist/ui/api/media/videos/abort.js +6 -0
  489. package/dist/ui/api/media/videos/abort.js.map +1 -0
  490. package/dist/ui/api/media/videos/complete.d.ts +3 -0
  491. package/dist/ui/api/media/videos/complete.d.ts.map +1 -0
  492. package/dist/ui/api/media/videos/complete.js +6 -0
  493. package/dist/ui/api/media/videos/complete.js.map +1 -0
  494. package/dist/ui/api/media/videos/init.d.ts +3 -0
  495. package/dist/ui/api/media/videos/init.d.ts.map +1 -0
  496. package/dist/ui/api/media/videos/init.js +6 -0
  497. package/dist/ui/api/media/videos/init.js.map +1 -0
  498. package/dist/ui/api/media/videos/part.d.ts +3 -0
  499. package/dist/ui/api/media/videos/part.d.ts.map +1 -0
  500. package/dist/ui/api/media/videos/part.js +6 -0
  501. package/dist/ui/api/media/videos/part.js.map +1 -0
  502. package/dist/ui/api/notifications.d.ts +4 -0
  503. package/dist/ui/api/notifications.d.ts.map +1 -0
  504. package/dist/ui/api/notifications.js +20 -0
  505. package/dist/ui/api/notifications.js.map +1 -0
  506. package/dist/ui/api/search.d.ts +3 -0
  507. package/dist/ui/api/search.d.ts.map +1 -0
  508. package/dist/ui/api/search.js +18 -0
  509. package/dist/ui/api/search.js.map +1 -0
  510. package/dist/ui/api/settings/api-keys/[id].d.ts +3 -0
  511. package/dist/ui/api/settings/api-keys/[id].d.ts.map +1 -0
  512. package/dist/ui/api/settings/api-keys/[id].js +22 -0
  513. package/dist/ui/api/settings/api-keys/[id].js.map +1 -0
  514. package/dist/ui/api/settings/api-keys.d.ts +4 -0
  515. package/dist/ui/api/settings/api-keys.d.ts.map +1 -0
  516. package/dist/ui/api/settings/api-keys.js +19 -0
  517. package/dist/ui/api/settings/api-keys.js.map +1 -0
  518. package/dist/ui/api/settings/domains.d.ts +3 -0
  519. package/dist/ui/api/settings/domains.d.ts.map +1 -0
  520. package/dist/ui/api/settings/domains.js +32 -0
  521. package/dist/ui/api/settings/domains.js.map +1 -0
  522. package/dist/ui/api/settings/integrations.d.ts +3 -0
  523. package/dist/ui/api/settings/integrations.d.ts.map +1 -0
  524. package/dist/ui/api/settings/integrations.js +32 -0
  525. package/dist/ui/api/settings/integrations.js.map +1 -0
  526. package/dist/ui/api/settings/members/[userId].d.ts +4 -0
  527. package/dist/ui/api/settings/members/[userId].d.ts.map +1 -0
  528. package/dist/ui/api/settings/members/[userId].js +26 -0
  529. package/dist/ui/api/settings/members/[userId].js.map +1 -0
  530. package/dist/ui/api/settings/members/invite.d.ts +3 -0
  531. package/dist/ui/api/settings/members/invite.d.ts.map +1 -0
  532. package/dist/ui/api/settings/members/invite.js +21 -0
  533. package/dist/ui/api/settings/members/invite.js.map +1 -0
  534. package/dist/ui/api/settings/members.d.ts +3 -0
  535. package/dist/ui/api/settings/members.d.ts.map +1 -0
  536. package/dist/ui/api/settings/members.js +17 -0
  537. package/dist/ui/api/settings/members.js.map +1 -0
  538. package/dist/ui/api/settings/webhooks/[id]/test.d.ts +3 -0
  539. package/dist/ui/api/settings/webhooks/[id]/test.d.ts.map +1 -0
  540. package/dist/ui/api/settings/webhooks/[id]/test.js +24 -0
  541. package/dist/ui/api/settings/webhooks/[id]/test.js.map +1 -0
  542. package/dist/ui/api/settings/webhooks/[id].d.ts +3 -0
  543. package/dist/ui/api/settings/webhooks/[id].d.ts.map +1 -0
  544. package/dist/ui/api/settings/webhooks/[id].js +23 -0
  545. package/dist/ui/api/settings/webhooks/[id].js.map +1 -0
  546. package/dist/ui/api/settings/webhooks.d.ts +4 -0
  547. package/dist/ui/api/settings/webhooks.d.ts.map +1 -0
  548. package/dist/ui/api/settings/webhooks.js +21 -0
  549. package/dist/ui/api/settings/webhooks.js.map +1 -0
  550. package/dist/ui/api/subscriptions.d.ts +4 -0
  551. package/dist/ui/api/subscriptions.d.ts.map +1 -0
  552. package/dist/ui/api/subscriptions.js +47 -0
  553. package/dist/ui/api/subscriptions.js.map +1 -0
  554. package/dist/ui/api/tags/[id].d.ts +4 -0
  555. package/dist/ui/api/tags/[id].d.ts.map +1 -0
  556. package/dist/ui/api/tags/[id].js +18 -0
  557. package/dist/ui/api/tags/[id].js.map +1 -0
  558. package/dist/ui/api/tags/index.d.ts +4 -0
  559. package/dist/ui/api/tags/index.d.ts.map +1 -0
  560. package/dist/ui/api/tags/index.js +13 -0
  561. package/dist/ui/api/tags/index.js.map +1 -0
  562. package/dist/ui/api/topics/[id].d.ts +3 -0
  563. package/dist/ui/api/topics/[id].d.ts.map +1 -0
  564. package/dist/ui/api/topics/[id].js +15 -0
  565. package/dist/ui/api/topics/[id].js.map +1 -0
  566. package/dist/ui/api/topics/index.d.ts +4 -0
  567. package/dist/ui/api/topics/index.d.ts.map +1 -0
  568. package/dist/ui/api/topics/index.js +12 -0
  569. package/dist/ui/api/topics/index.js.map +1 -0
  570. package/dist/ui/api/workspace-settings.d.ts +4 -0
  571. package/dist/ui/api/workspace-settings.d.ts.map +1 -0
  572. package/dist/ui/api/workspace-settings.js +20 -0
  573. package/dist/ui/api/workspace-settings.js.map +1 -0
  574. package/dist/ui/client/boot-state.d.ts +15 -0
  575. package/dist/ui/client/boot-state.d.ts.map +1 -0
  576. package/dist/ui/client/boot-state.js +36 -0
  577. package/dist/ui/client/boot-state.js.map +1 -0
  578. package/dist/ui/client/mount.d.ts +3 -0
  579. package/dist/ui/client/mount.d.ts.map +1 -0
  580. package/dist/ui/client/mount.js +37 -0
  581. package/dist/ui/client/mount.js.map +1 -0
  582. package/dist/ui/commands.d.ts +23 -0
  583. package/dist/ui/commands.d.ts.map +1 -0
  584. package/dist/ui/commands.js +48 -0
  585. package/dist/ui/commands.js.map +1 -0
  586. package/dist/ui/components/CmsApp.d.ts +16 -0
  587. package/dist/ui/components/CmsApp.d.ts.map +1 -0
  588. package/dist/ui/components/CmsApp.js +74 -0
  589. package/dist/ui/components/CmsApp.js.map +1 -0
  590. package/dist/ui/components/CommandPalette.d.ts +7 -0
  591. package/dist/ui/components/CommandPalette.d.ts.map +1 -0
  592. package/dist/ui/components/CommandPalette.js +61 -0
  593. package/dist/ui/components/CommandPalette.js.map +1 -0
  594. package/dist/ui/components/NoAccessScreen.d.ts +2 -0
  595. package/dist/ui/components/NoAccessScreen.d.ts.map +1 -0
  596. package/dist/ui/components/NoAccessScreen.js +42 -0
  597. package/dist/ui/components/NoAccessScreen.js.map +1 -0
  598. package/dist/ui/components/ShareModal.d.ts +27 -0
  599. package/dist/ui/components/ShareModal.d.ts.map +1 -0
  600. package/dist/ui/components/ShareModal.js +208 -0
  601. package/dist/ui/components/ShareModal.js.map +1 -0
  602. package/dist/ui/components/SharePickers.d.ts +39 -0
  603. package/dist/ui/components/SharePickers.d.ts.map +1 -0
  604. package/dist/ui/components/SharePickers.js +352 -0
  605. package/dist/ui/components/SharePickers.js.map +1 -0
  606. package/dist/ui/components/ShareStatsPanel.d.ts +22 -0
  607. package/dist/ui/components/ShareStatsPanel.d.ts.map +1 -0
  608. package/dist/ui/components/ShareStatsPanel.js +317 -0
  609. package/dist/ui/components/ShareStatsPanel.js.map +1 -0
  610. package/dist/ui/components/Sidebar.d.ts +7 -0
  611. package/dist/ui/components/Sidebar.d.ts.map +1 -0
  612. package/dist/ui/components/Sidebar.js +20 -0
  613. package/dist/ui/components/Sidebar.js.map +1 -0
  614. package/dist/ui/components/SiteSwitcher.d.ts +4 -0
  615. package/dist/ui/components/SiteSwitcher.d.ts.map +1 -0
  616. package/dist/ui/components/SiteSwitcher.js +35 -0
  617. package/dist/ui/components/SiteSwitcher.js.map +1 -0
  618. package/dist/ui/components/Topbar.d.ts +9 -0
  619. package/dist/ui/components/Topbar.d.ts.map +1 -0
  620. package/dist/ui/components/Topbar.js +20 -0
  621. package/dist/ui/components/Topbar.js.map +1 -0
  622. package/dist/ui/editor/AiAssistPanel.d.ts +8 -0
  623. package/dist/ui/editor/AiAssistPanel.d.ts.map +1 -0
  624. package/dist/ui/editor/AiAssistPanel.js +221 -0
  625. package/dist/ui/editor/AiAssistPanel.js.map +1 -0
  626. package/dist/ui/editor/ContentForm.d.ts +46 -0
  627. package/dist/ui/editor/ContentForm.d.ts.map +1 -0
  628. package/dist/ui/editor/ContentForm.js +821 -0
  629. package/dist/ui/editor/ContentForm.js.map +1 -0
  630. package/dist/ui/editor/Rte.d.ts +16 -0
  631. package/dist/ui/editor/Rte.d.ts.map +1 -0
  632. package/dist/ui/editor/Rte.js +272 -0
  633. package/dist/ui/editor/Rte.js.map +1 -0
  634. package/dist/ui/editor/ai-assist.d.ts +43 -0
  635. package/dist/ui/editor/ai-assist.d.ts.map +1 -0
  636. package/dist/ui/editor/ai-assist.js +114 -0
  637. package/dist/ui/editor/ai-assist.js.map +1 -0
  638. package/dist/ui/editor/autosave.d.ts +18 -0
  639. package/dist/ui/editor/autosave.d.ts.map +1 -0
  640. package/dist/ui/editor/autosave.js +23 -0
  641. package/dist/ui/editor/autosave.js.map +1 -0
  642. package/dist/ui/editor/content-payload.d.ts +19 -0
  643. package/dist/ui/editor/content-payload.d.ts.map +1 -0
  644. package/dist/ui/editor/content-payload.js +97 -0
  645. package/dist/ui/editor/content-payload.js.map +1 -0
  646. package/dist/ui/editor/editor-media-upload.d.ts +6 -0
  647. package/dist/ui/editor/editor-media-upload.d.ts.map +1 -0
  648. package/dist/ui/editor/editor-media-upload.js +20 -0
  649. package/dist/ui/editor/editor-media-upload.js.map +1 -0
  650. package/dist/ui/editor/serialize.d.ts +6 -0
  651. package/dist/ui/editor/serialize.d.ts.map +1 -0
  652. package/dist/ui/editor/serialize.js +479 -0
  653. package/dist/ui/editor/serialize.js.map +1 -0
  654. package/dist/ui/editor/tweet-embed.d.ts +4 -0
  655. package/dist/ui/editor/tweet-embed.d.ts.map +1 -0
  656. package/dist/ui/editor/tweet-embed.js +49 -0
  657. package/dist/ui/editor/tweet-embed.js.map +1 -0
  658. package/dist/ui/hash-router.d.ts +5 -0
  659. package/dist/ui/hash-router.d.ts.map +1 -0
  660. package/dist/ui/hash-router.js +25 -0
  661. package/dist/ui/hash-router.js.map +1 -0
  662. package/dist/ui/icons.d.ts +32 -0
  663. package/dist/ui/icons.d.ts.map +1 -0
  664. package/dist/ui/icons.js +86 -0
  665. package/dist/ui/icons.js.map +1 -0
  666. package/dist/ui/inspector/Field.d.ts +12 -0
  667. package/dist/ui/inspector/Field.d.ts.map +1 -0
  668. package/dist/ui/inspector/Field.js +8 -0
  669. package/dist/ui/inspector/Field.js.map +1 -0
  670. package/dist/ui/inspector/FoundryTab.d.ts +9 -0
  671. package/dist/ui/inspector/FoundryTab.d.ts.map +1 -0
  672. package/dist/ui/inspector/FoundryTab.js +362 -0
  673. package/dist/ui/inspector/FoundryTab.js.map +1 -0
  674. package/dist/ui/inspector/HistoryTab.d.ts +7 -0
  675. package/dist/ui/inspector/HistoryTab.d.ts.map +1 -0
  676. package/dist/ui/inspector/HistoryTab.js +289 -0
  677. package/dist/ui/inspector/HistoryTab.js.map +1 -0
  678. package/dist/ui/inspector/Inspector.d.ts +13 -0
  679. package/dist/ui/inspector/Inspector.d.ts.map +1 -0
  680. package/dist/ui/inspector/Inspector.js +163 -0
  681. package/dist/ui/inspector/Inspector.js.map +1 -0
  682. package/dist/ui/inspector/OrganizeTab.d.ts +15 -0
  683. package/dist/ui/inspector/OrganizeTab.d.ts.map +1 -0
  684. package/dist/ui/inspector/OrganizeTab.js +319 -0
  685. package/dist/ui/inspector/OrganizeTab.js.map +1 -0
  686. package/dist/ui/inspector/PublishTab.d.ts +18 -0
  687. package/dist/ui/inspector/PublishTab.d.ts.map +1 -0
  688. package/dist/ui/inspector/PublishTab.js +339 -0
  689. package/dist/ui/inspector/PublishTab.js.map +1 -0
  690. package/dist/ui/inspector/Section.d.ts +10 -0
  691. package/dist/ui/inspector/Section.d.ts.map +1 -0
  692. package/dist/ui/inspector/Section.js +40 -0
  693. package/dist/ui/inspector/Section.js.map +1 -0
  694. package/dist/ui/inspector/SeoTab.d.ts +19 -0
  695. package/dist/ui/inspector/SeoTab.d.ts.map +1 -0
  696. package/dist/ui/inspector/SeoTab.js +328 -0
  697. package/dist/ui/inspector/SeoTab.js.map +1 -0
  698. package/dist/ui/inspector/foundry-stages.d.ts +36 -0
  699. package/dist/ui/inspector/foundry-stages.d.ts.map +1 -0
  700. package/dist/ui/inspector/foundry-stages.js +101 -0
  701. package/dist/ui/inspector/foundry-stages.js.map +1 -0
  702. package/dist/ui/inspector/inspector-data.d.ts +80 -0
  703. package/dist/ui/inspector/inspector-data.d.ts.map +1 -0
  704. package/dist/ui/inspector/inspector-data.js +172 -0
  705. package/dist/ui/inspector/inspector-data.js.map +1 -0
  706. package/dist/ui/inspector/organize-data.d.ts +23 -0
  707. package/dist/ui/inspector/organize-data.d.ts.map +1 -0
  708. package/dist/ui/inspector/organize-data.js +28 -0
  709. package/dist/ui/inspector/organize-data.js.map +1 -0
  710. package/dist/ui/inspector/revision-diff.d.ts +49 -0
  711. package/dist/ui/inspector/revision-diff.d.ts.map +1 -0
  712. package/dist/ui/inspector/revision-diff.js +166 -0
  713. package/dist/ui/inspector/revision-diff.js.map +1 -0
  714. package/dist/ui/inspector/seo-helpers.d.ts +37 -0
  715. package/dist/ui/inspector/seo-helpers.d.ts.map +1 -0
  716. package/dist/ui/inspector/seo-helpers.js +37 -0
  717. package/dist/ui/inspector/seo-helpers.js.map +1 -0
  718. package/dist/ui/inspector/tab-visibility.d.ts +14 -0
  719. package/dist/ui/inspector/tab-visibility.d.ts.map +1 -0
  720. package/dist/ui/inspector/tab-visibility.js +28 -0
  721. package/dist/ui/inspector/tab-visibility.js.map +1 -0
  722. package/dist/ui/nav.d.ts +16 -0
  723. package/dist/ui/nav.d.ts.map +1 -0
  724. package/dist/ui/nav.js +33 -0
  725. package/dist/ui/nav.js.map +1 -0
  726. package/dist/ui/pages/admin.astro +32 -0
  727. package/dist/ui/preview/draft-page.d.ts +37 -0
  728. package/dist/ui/preview/draft-page.d.ts.map +1 -0
  729. package/dist/ui/preview/draft-page.js +212 -0
  730. package/dist/ui/preview/draft-page.js.map +1 -0
  731. package/dist/ui/preview/preview-layout.d.ts +23 -0
  732. package/dist/ui/preview/preview-layout.d.ts.map +1 -0
  733. package/dist/ui/preview/preview-layout.js +30 -0
  734. package/dist/ui/preview/preview-layout.js.map +1 -0
  735. package/dist/ui/screens/AnalyticsScreen.d.ts +2 -0
  736. package/dist/ui/screens/AnalyticsScreen.d.ts.map +1 -0
  737. package/dist/ui/screens/AnalyticsScreen.js +408 -0
  738. package/dist/ui/screens/AnalyticsScreen.js.map +1 -0
  739. package/dist/ui/screens/AuthorsScreen.d.ts +2 -0
  740. package/dist/ui/screens/AuthorsScreen.d.ts.map +1 -0
  741. package/dist/ui/screens/AuthorsScreen.js +225 -0
  742. package/dist/ui/screens/AuthorsScreen.js.map +1 -0
  743. package/dist/ui/screens/CalendarScreen.d.ts +6 -0
  744. package/dist/ui/screens/CalendarScreen.d.ts.map +1 -0
  745. package/dist/ui/screens/CalendarScreen.js +327 -0
  746. package/dist/ui/screens/CalendarScreen.js.map +1 -0
  747. package/dist/ui/screens/ContentInsightsScreen.d.ts +2 -0
  748. package/dist/ui/screens/ContentInsightsScreen.d.ts.map +1 -0
  749. package/dist/ui/screens/ContentInsightsScreen.js +129 -0
  750. package/dist/ui/screens/ContentInsightsScreen.js.map +1 -0
  751. package/dist/ui/screens/ContentRoute.d.ts +2 -0
  752. package/dist/ui/screens/ContentRoute.d.ts.map +1 -0
  753. package/dist/ui/screens/ContentRoute.js +32 -0
  754. package/dist/ui/screens/ContentRoute.js.map +1 -0
  755. package/dist/ui/screens/DashboardScreen.d.ts +6 -0
  756. package/dist/ui/screens/DashboardScreen.d.ts.map +1 -0
  757. package/dist/ui/screens/DashboardScreen.js +273 -0
  758. package/dist/ui/screens/DashboardScreen.js.map +1 -0
  759. package/dist/ui/screens/EditorScreen.d.ts +7 -0
  760. package/dist/ui/screens/EditorScreen.d.ts.map +1 -0
  761. package/dist/ui/screens/EditorScreen.js +426 -0
  762. package/dist/ui/screens/EditorScreen.js.map +1 -0
  763. package/dist/ui/screens/LibraryScreen.d.ts +6 -0
  764. package/dist/ui/screens/LibraryScreen.d.ts.map +1 -0
  765. package/dist/ui/screens/LibraryScreen.js +580 -0
  766. package/dist/ui/screens/LibraryScreen.js.map +1 -0
  767. package/dist/ui/screens/MediaScreen.d.ts +2 -0
  768. package/dist/ui/screens/MediaScreen.d.ts.map +1 -0
  769. package/dist/ui/screens/MediaScreen.js +173 -0
  770. package/dist/ui/screens/MediaScreen.js.map +1 -0
  771. package/dist/ui/screens/SettingsScreen.d.ts +4 -0
  772. package/dist/ui/screens/SettingsScreen.d.ts.map +1 -0
  773. package/dist/ui/screens/SettingsScreen.js +751 -0
  774. package/dist/ui/screens/SettingsScreen.js.map +1 -0
  775. package/dist/ui/screens/SocialShareScreen.d.ts +2 -0
  776. package/dist/ui/screens/SocialShareScreen.d.ts.map +1 -0
  777. package/dist/ui/screens/SocialShareScreen.js +224 -0
  778. package/dist/ui/screens/SocialShareScreen.js.map +1 -0
  779. package/dist/ui/screens/SubscriptionsScreen.d.ts +2 -0
  780. package/dist/ui/screens/SubscriptionsScreen.d.ts.map +1 -0
  781. package/dist/ui/screens/SubscriptionsScreen.js +441 -0
  782. package/dist/ui/screens/SubscriptionsScreen.js.map +1 -0
  783. package/dist/ui/screens/TopicsScreen.d.ts +2 -0
  784. package/dist/ui/screens/TopicsScreen.d.ts.map +1 -0
  785. package/dist/ui/screens/TopicsScreen.js +360 -0
  786. package/dist/ui/screens/TopicsScreen.js.map +1 -0
  787. package/dist/ui/screens/analytics-data.d.ts +19 -0
  788. package/dist/ui/screens/analytics-data.d.ts.map +1 -0
  789. package/dist/ui/screens/analytics-data.js +42 -0
  790. package/dist/ui/screens/analytics-data.js.map +1 -0
  791. package/dist/ui/screens/calendar-data.d.ts +45 -0
  792. package/dist/ui/screens/calendar-data.d.ts.map +1 -0
  793. package/dist/ui/screens/calendar-data.js +70 -0
  794. package/dist/ui/screens/calendar-data.js.map +1 -0
  795. package/dist/ui/screens/content-insights-data.d.ts +54 -0
  796. package/dist/ui/screens/content-insights-data.d.ts.map +1 -0
  797. package/dist/ui/screens/content-insights-data.js +82 -0
  798. package/dist/ui/screens/content-insights-data.js.map +1 -0
  799. package/dist/ui/screens/content-view.d.ts +21 -0
  800. package/dist/ui/screens/content-view.d.ts.map +1 -0
  801. package/dist/ui/screens/content-view.js +17 -0
  802. package/dist/ui/screens/content-view.js.map +1 -0
  803. package/dist/ui/screens/library-data.d.ts +76 -0
  804. package/dist/ui/screens/library-data.d.ts.map +1 -0
  805. package/dist/ui/screens/library-data.js +116 -0
  806. package/dist/ui/screens/library-data.js.map +1 -0
  807. package/dist/ui/screens/media-upload.d.ts +19 -0
  808. package/dist/ui/screens/media-upload.d.ts.map +1 -0
  809. package/dist/ui/screens/media-upload.js +187 -0
  810. package/dist/ui/screens/media-upload.js.map +1 -0
  811. package/dist/ui/screens/public-url.d.ts +24 -0
  812. package/dist/ui/screens/public-url.d.ts.map +1 -0
  813. package/dist/ui/screens/public-url.js +74 -0
  814. package/dist/ui/screens/public-url.js.map +1 -0
  815. package/dist/ui/screens/registry.d.ts +3 -0
  816. package/dist/ui/screens/registry.d.ts.map +1 -0
  817. package/dist/ui/screens/registry.js +38 -0
  818. package/dist/ui/screens/registry.js.map +1 -0
  819. package/dist/ui/screens/render-state.d.ts +105 -0
  820. package/dist/ui/screens/render-state.d.ts.map +1 -0
  821. package/dist/ui/screens/render-state.js +127 -0
  822. package/dist/ui/screens/render-state.js.map +1 -0
  823. package/dist/ui/screens/settings-data.d.ts +55 -0
  824. package/dist/ui/screens/settings-data.d.ts.map +1 -0
  825. package/dist/ui/screens/settings-data.js +89 -0
  826. package/dist/ui/screens/settings-data.js.map +1 -0
  827. package/dist/ui/screens/settings-panels-data.d.ts +58 -0
  828. package/dist/ui/screens/settings-panels-data.d.ts.map +1 -0
  829. package/dist/ui/screens/settings-panels-data.js +88 -0
  830. package/dist/ui/screens/settings-panels-data.js.map +1 -0
  831. package/dist/ui/screens/social-share-data.d.ts +307 -0
  832. package/dist/ui/screens/social-share-data.d.ts.map +1 -0
  833. package/dist/ui/screens/social-share-data.js +447 -0
  834. package/dist/ui/screens/social-share-data.js.map +1 -0
  835. package/dist/ui/screens/topics-data.d.ts +38 -0
  836. package/dist/ui/screens/topics-data.d.ts.map +1 -0
  837. package/dist/ui/screens/topics-data.js +50 -0
  838. package/dist/ui/screens/topics-data.js.map +1 -0
  839. package/dist/ui/styles/broadsheet.css +394 -0
  840. package/dist/ui/theme.d.ts +23 -0
  841. package/dist/ui/theme.d.ts.map +1 -0
  842. package/dist/ui/theme.js +87 -0
  843. package/dist/ui/theme.js.map +1 -0
  844. package/dist/ui/tweaks.d.ts +7 -0
  845. package/dist/ui/tweaks.d.ts.map +1 -0
  846. package/dist/ui/tweaks.js +31 -0
  847. package/dist/ui/tweaks.js.map +1 -0
  848. package/dist/ui/use-hash-router.d.ts +6 -0
  849. package/dist/ui/use-hash-router.d.ts.map +1 -0
  850. package/dist/ui/use-hash-router.js +15 -0
  851. package/dist/ui/use-hash-router.js.map +1 -0
  852. package/dist/ui/use-tweaks.d.ts +6 -0
  853. package/dist/ui/use-tweaks.d.ts.map +1 -0
  854. package/dist/ui/use-tweaks.js +24 -0
  855. package/dist/ui/use-tweaks.js.map +1 -0
  856. package/dist/ui/workspace-context.d.ts +34 -0
  857. package/dist/ui/workspace-context.d.ts.map +1 -0
  858. package/dist/ui/workspace-context.js +32 -0
  859. package/dist/ui/workspace-context.js.map +1 -0
  860. package/migrations/0001_create_cms_tables.sql +200 -0
  861. package/migrations/0002_review_softdelete_board.sql +112 -0
  862. package/migrations/0003_content_contributors.sql +16 -0
  863. package/migrations/0004_seo_faq_columns.sql +6 -0
  864. package/migrations/0005_revision_delta_columns.sql +5 -0
  865. package/migrations/0006_processing_trigger_token.sql +4 -0
  866. package/migrations/0007_content_slug_redirects.sql +9 -0
  867. package/migrations/0008_workspace_settings.sql +17 -0
  868. package/migrations/0009_workspace_memberships.sql +36 -0
  869. package/migrations/0010_api_keys_webhooks.sql +21 -0
  870. package/migrations/0011_notifications_activity.sql +22 -0
  871. package/migrations/0012_content_imports.sql +10 -0
  872. package/migrations/0013_media_normalization.sql +4 -0
  873. package/migrations/0014_api_key_prefix.sql +3 -0
  874. package/migrations/0015_cms_topics.sql +7 -0
  875. package/migrations/0016_content_insights.sql +53 -0
  876. package/package.json +82 -0
  877. package/src/engine/activity-log.ts +39 -0
  878. package/src/engine/ai-prompts.ts +124 -0
  879. package/src/engine/ai-writeback.ts +62 -0
  880. package/src/engine/api-keys.ts +239 -0
  881. package/src/engine/content-insights.ts +198 -0
  882. package/src/engine/contributors.ts +95 -0
  883. package/src/engine/cron.ts +62 -0
  884. package/src/engine/d1.ts +29 -0
  885. package/src/engine/foundry-dispatch.ts +417 -0
  886. package/src/engine/import-parsers.ts +478 -0
  887. package/src/engine/index.ts +230 -0
  888. package/src/engine/invites.ts +271 -0
  889. package/src/engine/members.ts +216 -0
  890. package/src/engine/membership-rules.ts +63 -0
  891. package/src/engine/og-render.ts +59 -0
  892. package/src/engine/publish-guard.ts +123 -0
  893. package/src/engine/publisher.ts +1032 -0
  894. package/src/engine/revisions.ts +292 -0
  895. package/src/engine/sanitize.ts +183 -0
  896. package/src/engine/seed-membership.ts +92 -0
  897. package/src/engine/seo.ts +72 -0
  898. package/src/engine/slug-redirects.ts +34 -0
  899. package/src/engine/slug.ts +33 -0
  900. package/src/engine/soft-delete.ts +42 -0
  901. package/src/engine/tags.ts +95 -0
  902. package/src/engine/topics.ts +158 -0
  903. package/src/engine/url-guard.ts +136 -0
  904. package/src/engine/validator/checks/bare-url-not-autolinked.ts +78 -0
  905. package/src/engine/validator/checks/broken-footnote-label.ts +33 -0
  906. package/src/engine/validator/checks/double-encoded-entities.ts +46 -0
  907. package/src/engine/validator/checks/empty-alt-text.ts +35 -0
  908. package/src/engine/validator/checks/heading-hierarchy-skip.ts +33 -0
  909. package/src/engine/validator/checks/html-comment-leak.ts +58 -0
  910. package/src/engine/validator/checks/iframe-missing-dims-and-wrapper.ts +34 -0
  911. package/src/engine/validator/checks/invisible-control-chars.ts +58 -0
  912. package/src/engine/validator/checks/paywall-marker-leak.ts +43 -0
  913. package/src/engine/validator/checks/raw-block-html.ts +65 -0
  914. package/src/engine/validator/checks/stale-body-html.ts +39 -0
  915. package/src/engine/validator/checks/unresolved-footnote-anchor.ts +61 -0
  916. package/src/engine/validator/checks/word-gdocs-paste-artifacts.ts +72 -0
  917. package/src/engine/validator/index.ts +385 -0
  918. package/src/engine/validator/scan.ts +103 -0
  919. package/src/engine/validator/types.ts +114 -0
  920. package/src/engine/webhook-signer.ts +139 -0
  921. package/src/engine/webhooks.ts +224 -0
  922. package/src/index.ts +79 -0
  923. package/src/integration/index.ts +298 -0
  924. package/src/integration/options.ts +30 -0
  925. package/src/integration/vite-plugin.ts +37 -0
  926. package/src/providers/index.ts +2 -0
  927. package/src/providers/null.ts +160 -0
  928. package/src/providers/types.ts +284 -0
  929. package/src/routes/ai.ts +461 -0
  930. package/src/routes/analytics.ts +78 -0
  931. package/src/routes/api-keys.ts +133 -0
  932. package/src/routes/authors.ts +282 -0
  933. package/src/routes/authz-matrix.ts +239 -0
  934. package/src/routes/calendar.ts +127 -0
  935. package/src/routes/config.ts +99 -0
  936. package/src/routes/content-insights.ts +159 -0
  937. package/src/routes/content.ts +1753 -0
  938. package/src/routes/context.ts +146 -0
  939. package/src/routes/cron.ts +27 -0
  940. package/src/routes/dashboard.ts +174 -0
  941. package/src/routes/imports.ts +190 -0
  942. package/src/routes/index.ts +295 -0
  943. package/src/routes/media-lib.ts +405 -0
  944. package/src/routes/media.ts +944 -0
  945. package/src/routes/preview.ts +182 -0
  946. package/src/routes/rbac-invites.ts +220 -0
  947. package/src/routes/rbac.ts +155 -0
  948. package/src/routes/shell.ts +163 -0
  949. package/src/routes/subscriptions.ts +167 -0
  950. package/src/routes/tags.ts +93 -0
  951. package/src/routes/topics.ts +58 -0
  952. package/src/routes/webhooks.ts +233 -0
  953. package/src/schema/index.ts +45 -0
  954. package/src/schema/insights-ingest.ts +126 -0
  955. package/src/schema/migrations.ts +599 -0
  956. package/src/schema/tables.ts +59 -0
  957. package/src/schema/types.ts +576 -0
  958. package/src/ui/api/_authz.ts +100 -0
  959. package/src/ui/api/_content-config.ts +75 -0
  960. package/src/ui/api/activity.ts +33 -0
  961. package/src/ui/api/analytics.ts +42 -0
  962. package/src/ui/api/authors/[id].ts +23 -0
  963. package/src/ui/api/authors.ts +19 -0
  964. package/src/ui/api/calendar.ts +21 -0
  965. package/src/ui/api/content/[id]/ai/headlines.ts +10 -0
  966. package/src/ui/api/content/[id]/ai/meta-description.ts +11 -0
  967. package/src/ui/api/content/[id]/ai/og-image.ts +10 -0
  968. package/src/ui/api/content/[id]/ai/proofread.ts +10 -0
  969. package/src/ui/api/content/[id]/ai/takeaways.ts +11 -0
  970. package/src/ui/api/content/[id]/contributors.ts +13 -0
  971. package/src/ui/api/content/[id]/preview-token.ts +21 -0
  972. package/src/ui/api/content/[id]/revisions/[rev]/restore.ts +12 -0
  973. package/src/ui/api/content/[id]/revisions/[rev].ts +11 -0
  974. package/src/ui/api/content/[id]/revisions.ts +9 -0
  975. package/src/ui/api/content/[id]/seo-score.ts +10 -0
  976. package/src/ui/api/content/[id].ts +23 -0
  977. package/src/ui/api/content/bulk.ts +10 -0
  978. package/src/ui/api/content/counts.ts +11 -0
  979. package/src/ui/api/content/foundry-callback.ts +11 -0
  980. package/src/ui/api/content/import/confirm.ts +16 -0
  981. package/src/ui/api/content/import/parse.ts +16 -0
  982. package/src/ui/api/content/insights-ingest.ts +24 -0
  983. package/src/ui/api/content-insights/dismiss.ts +23 -0
  984. package/src/ui/api/content-insights/index.ts +21 -0
  985. package/src/ui/api/content-insights/undismiss.ts +23 -0
  986. package/src/ui/api/content.ts +21 -0
  987. package/src/ui/api/dashboard.ts +28 -0
  988. package/src/ui/api/me.ts +23 -0
  989. package/src/ui/api/media/[id].ts +22 -0
  990. package/src/ui/api/media/images.ts +9 -0
  991. package/src/ui/api/media/library/[id].ts +9 -0
  992. package/src/ui/api/media/library.ts +22 -0
  993. package/src/ui/api/media/podcast/abort.ts +6 -0
  994. package/src/ui/api/media/podcast/complete.ts +6 -0
  995. package/src/ui/api/media/podcast/init.ts +6 -0
  996. package/src/ui/api/media/podcast/part.ts +6 -0
  997. package/src/ui/api/media/podcast.ts +9 -0
  998. package/src/ui/api/media/videos/abort.ts +9 -0
  999. package/src/ui/api/media/videos/complete.ts +9 -0
  1000. package/src/ui/api/media/videos/init.ts +9 -0
  1001. package/src/ui/api/media/videos/part.ts +9 -0
  1002. package/src/ui/api/notifications.ts +26 -0
  1003. package/src/ui/api/search.ts +23 -0
  1004. package/src/ui/api/settings/api-keys/[id].ts +28 -0
  1005. package/src/ui/api/settings/api-keys.ts +25 -0
  1006. package/src/ui/api/settings/domains.ts +37 -0
  1007. package/src/ui/api/settings/integrations.ts +40 -0
  1008. package/src/ui/api/settings/members/[userId].ts +33 -0
  1009. package/src/ui/api/settings/members/invite.ts +27 -0
  1010. package/src/ui/api/settings/members.ts +23 -0
  1011. package/src/ui/api/settings/webhooks/[id]/test.ts +30 -0
  1012. package/src/ui/api/settings/webhooks/[id].ts +29 -0
  1013. package/src/ui/api/settings/webhooks.ts +27 -0
  1014. package/src/ui/api/subscriptions.ts +56 -0
  1015. package/src/ui/api/tags/[id].ts +24 -0
  1016. package/src/ui/api/tags/index.ts +18 -0
  1017. package/src/ui/api/topics/[id].ts +20 -0
  1018. package/src/ui/api/topics/index.ts +17 -0
  1019. package/src/ui/api/workspace-settings.ts +26 -0
  1020. package/src/ui/client/boot-state.ts +42 -0
  1021. package/src/ui/client/mount.tsx +41 -0
  1022. package/src/ui/commands.ts +62 -0
  1023. package/src/ui/components/CmsApp.tsx +149 -0
  1024. package/src/ui/components/CommandPalette.tsx +118 -0
  1025. package/src/ui/components/NoAccessScreen.tsx +79 -0
  1026. package/src/ui/components/ShareModal.tsx +650 -0
  1027. package/src/ui/components/SharePickers.tsx +790 -0
  1028. package/src/ui/components/ShareStatsPanel.tsx +721 -0
  1029. package/src/ui/components/Sidebar.tsx +86 -0
  1030. package/src/ui/components/SiteSwitcher.tsx +100 -0
  1031. package/src/ui/components/Topbar.tsx +93 -0
  1032. package/src/ui/editor/AiAssistPanel.tsx +407 -0
  1033. package/src/ui/editor/ContentForm.tsx +1462 -0
  1034. package/src/ui/editor/Rte.tsx +382 -0
  1035. package/src/ui/editor/ai-assist.ts +139 -0
  1036. package/src/ui/editor/autosave.ts +36 -0
  1037. package/src/ui/editor/content-payload.ts +125 -0
  1038. package/src/ui/editor/editor-media-upload.ts +26 -0
  1039. package/src/ui/editor/serialize.ts +522 -0
  1040. package/src/ui/editor/tweet-embed.ts +60 -0
  1041. package/src/ui/hash-router.ts +30 -0
  1042. package/src/ui/icons.tsx +208 -0
  1043. package/src/ui/inspector/Field.tsx +30 -0
  1044. package/src/ui/inspector/FoundryTab.tsx +613 -0
  1045. package/src/ui/inspector/HistoryTab.tsx +482 -0
  1046. package/src/ui/inspector/Inspector.tsx +328 -0
  1047. package/src/ui/inspector/OrganizeTab.tsx +534 -0
  1048. package/src/ui/inspector/PublishTab.tsx +626 -0
  1049. package/src/ui/inspector/Section.tsx +81 -0
  1050. package/src/ui/inspector/SeoTab.tsx +573 -0
  1051. package/src/ui/inspector/foundry-stages.ts +140 -0
  1052. package/src/ui/inspector/inspector-data.ts +232 -0
  1053. package/src/ui/inspector/organize-data.ts +51 -0
  1054. package/src/ui/inspector/revision-diff.ts +213 -0
  1055. package/src/ui/inspector/seo-helpers.ts +71 -0
  1056. package/src/ui/inspector/tab-visibility.ts +37 -0
  1057. package/src/ui/nav.ts +48 -0
  1058. package/src/ui/pages/admin.astro +32 -0
  1059. package/src/ui/preview/draft-page.tsx +395 -0
  1060. package/src/ui/preview/preview-layout.ts +49 -0
  1061. package/src/ui/screens/AnalyticsScreen.tsx +938 -0
  1062. package/src/ui/screens/AuthorsScreen.tsx +524 -0
  1063. package/src/ui/screens/CalendarScreen.tsx +694 -0
  1064. package/src/ui/screens/ContentInsightsScreen.tsx +417 -0
  1065. package/src/ui/screens/ContentRoute.tsx +35 -0
  1066. package/src/ui/screens/DashboardScreen.tsx +654 -0
  1067. package/src/ui/screens/EditorScreen.tsx +673 -0
  1068. package/src/ui/screens/LibraryScreen.tsx +1350 -0
  1069. package/src/ui/screens/MediaScreen.tsx +357 -0
  1070. package/src/ui/screens/SettingsScreen.tsx +1841 -0
  1071. package/src/ui/screens/SocialShareScreen.tsx +670 -0
  1072. package/src/ui/screens/SubscriptionsScreen.tsx +1240 -0
  1073. package/src/ui/screens/TopicsScreen.tsx +912 -0
  1074. package/src/ui/screens/analytics-data.ts +68 -0
  1075. package/src/ui/screens/calendar-data.ts +126 -0
  1076. package/src/ui/screens/content-insights-data.ts +127 -0
  1077. package/src/ui/screens/content-view.ts +30 -0
  1078. package/src/ui/screens/library-data.ts +177 -0
  1079. package/src/ui/screens/media-upload.ts +283 -0
  1080. package/src/ui/screens/public-url.ts +81 -0
  1081. package/src/ui/screens/registry.tsx +53 -0
  1082. package/src/ui/screens/render-state.ts +228 -0
  1083. package/src/ui/screens/settings-data.ts +140 -0
  1084. package/src/ui/screens/settings-panels-data.ts +142 -0
  1085. package/src/ui/screens/social-share-data.ts +753 -0
  1086. package/src/ui/screens/topics-data.ts +75 -0
  1087. package/src/ui/styles/broadsheet.css +394 -0
  1088. package/src/ui/theme.ts +104 -0
  1089. package/src/ui/tweaks.ts +37 -0
  1090. package/src/ui/use-hash-router.ts +17 -0
  1091. package/src/ui/use-tweaks.ts +31 -0
  1092. package/src/ui/workspace-context.tsx +62 -0
  1093. package/src/virtual.d.ts +4 -0
@@ -0,0 +1,2 @@
1
+ export declare function ContentInsightsScreen(): import("react").JSX.Element;
2
+ //# sourceMappingURL=ContentInsightsScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentInsightsScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/ContentInsightsScreen.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,qBAAqB,gCAoMpC"}
@@ -0,0 +1,129 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // src/ui/screens/ContentInsightsScreen.tsx — Content Insights demand-intelligence board (bead-09).
3
+ // Near-clone of TopicsScreen: desk groups (geographic theater) + a pinned Best Immediate Bets
4
+ // ranking + a Trackers section; each card expands into the full editorial mini-brief; dismiss
5
+ // persists and filters subsequent loads. Native reads from SITE_DB via /admin/api/content-insights.
6
+ // beat is rendered as a secondary chip next to signal_type (Adaptation 3 — spec §desk-taxonomy).
7
+ // Broadsheet idiom only; honest loading/empty/error/schema-not-ready/last-good-board states.
8
+ import { useCallback, useEffect, useReducer, useState } from 'react';
9
+ import { Icon } from '../icons.js';
10
+ import { audienceQuestionGroups, bestBets, competitorWatchGroups, demandDeskGroups, discoveryKindOf, formatDemandEvidence, initInsightsState, insightsReducer, trackers, } from './content-insights-data.js';
11
+ export function ContentInsightsScreen() {
12
+ const [s, dispatch] = useReducer(insightsReducer, undefined, initInsightsState);
13
+ const [expanded, setExpanded] = useState(null);
14
+ const [dismissing, setDismissing] = useState(null);
15
+ const fetchBoard = useCallback(async () => {
16
+ dispatch({ type: 'fetch-start' });
17
+ try {
18
+ const res = await fetch('/admin/api/content-insights');
19
+ if (res.status === 409) {
20
+ dispatch({ type: 'schema-not-ready' });
21
+ return;
22
+ }
23
+ if (!res.ok) {
24
+ dispatch({ type: 'fetch-error', error: `${res.status} ${res.statusText}` });
25
+ return;
26
+ }
27
+ const body = (await res.json());
28
+ dispatch({ type: 'fetch-ok', insights: body.insights ?? [], runDate: body.runDate ?? '' });
29
+ }
30
+ catch (err) {
31
+ dispatch({ type: 'fetch-error', error: String(err) });
32
+ }
33
+ }, []);
34
+ useEffect(() => {
35
+ void fetchBoard();
36
+ }, [fetchBoard]);
37
+ const dismiss = async (card) => {
38
+ setDismissing(card.intent_key);
39
+ try {
40
+ const res = await fetch('/admin/api/content-insights/dismiss', {
41
+ method: 'POST',
42
+ headers: { 'content-type': 'application/json' },
43
+ body: JSON.stringify({ intentKey: card.intent_key }),
44
+ });
45
+ if (res.ok)
46
+ dispatch({ type: 'dismiss-ok', intentKey: card.intent_key });
47
+ }
48
+ finally {
49
+ setDismissing(null);
50
+ }
51
+ };
52
+ // DEMAND board groups (GSC) — the two opportunity sub-kinds render in their own
53
+ // labelled sections (Competitor Watch + What Readers Are Asking) below.
54
+ const groups = demandDeskGroups(s.insights);
55
+ const competitorGroups = competitorWatchGroups(s.insights);
56
+ const audienceGroups = audienceQuestionGroups(s.insights);
57
+ const bets = bestBets(s.insights);
58
+ const trackerCards = trackers(s.insights);
59
+ return (_jsxs("div", { className: "page page-wide content-insights-screen fade-in", style: { maxWidth: 1340 }, children: [_jsxs("div", { className: "page-head", children: [_jsxs("div", { children: [_jsx("h1", { className: "page-title", children: "Content Insights" }), _jsx("div", { className: "page-sub", children: "Editor-ready demand intelligence \u2014 what to write next, grounded in real search demand and validated opportunity." })] }), _jsxs("button", { type: "button", className: "btn", onClick: () => void fetchBoard(), children: [_jsx(Icon, { name: "refresh", size: 16 }), " Refresh"] })] }), s.loading && !s.loaded && (_jsx("div", { className: "kicker", style: { padding: 18 }, children: "Loading the board\u2026" })), s.error && (_jsxs("div", { className: "panel panel-pad", style: { color: 'var(--red)' }, children: ["Couldn't load Content Insights \u2014 ", s.error, ' ', _jsxs("button", { type: "button", className: "btn sm", onClick: () => void fetchBoard(), children: [_jsx(Icon, { name: "refresh", size: 14 }), " Retry"] })] })), s.schemaNotReady && (_jsx(EmptyPanel, { icon: "layers", message: "Content Insights isn't provisioned on this site yet (migration 0016 not applied)." })), s.loaded && !s.error && !s.schemaNotReady && s.insights.length === 0 && (_jsx(EmptyPanel, { icon: "sparkle", message: "No insights yet \u2014 the daily research run hasn't landed a board." })), bets.length > 0 && (_jsxs("div", { className: "panel", style: { overflow: 'hidden', marginBottom: 'var(--gap)' }, children: [_jsx("div", { style: { padding: '15px 18px 12px' }, children: _jsx("div", { className: "card-title", children: "Best immediate bets" }) }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10, padding: 18 }, children: bets.map((c) => (_jsx(InsightCardRow, { card: c, expanded: expanded === c.intent_key, onToggle: () => setExpanded(expanded === c.intent_key ? null : c.intent_key), onDismiss: () => void dismiss(c), dismissing: dismissing === c.intent_key }, c.intent_key))) })] })), groups.map((g) => (_jsxs("div", { className: "panel", style: { overflow: 'hidden', marginBottom: 'var(--gap)' }, children: [_jsxs("div", { style: {
60
+ padding: '15px 18px 12px',
61
+ display: 'flex',
62
+ alignItems: 'baseline',
63
+ gap: 10,
64
+ }, children: [_jsx("div", { className: "card-title", style: { textTransform: 'capitalize' }, children: g.desk }), _jsxs("span", { className: "kicker", children: [g.cards.length, " ideas"] })] }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10, padding: 18 }, children: g.cards.map((c) => (_jsx(InsightCardRow, { card: c, expanded: expanded === c.intent_key, onToggle: () => setExpanded(expanded === c.intent_key ? null : c.intent_key), onDismiss: () => void dismiss(c), dismissing: dismissing === c.intent_key }, c.intent_key))) })] }, g.desk))), competitorGroups.length > 0 && (_jsx(OpportunitySection, { title: "Competitor Watch", subtitle: "What rivals are publishing that we're missing", groups: competitorGroups, expanded: expanded, setExpanded: setExpanded, dismiss: dismiss, dismissing: dismissing })), audienceGroups.length > 0 && (_jsx(OpportunitySection, { title: "What Readers Are Asking", subtitle: "Real reader questions (Google People-Also-Ask) we don't yet answer", groups: audienceGroups, expanded: expanded, setExpanded: setExpanded, dismiss: dismiss, dismissing: dismissing })), trackerCards.length > 0 && (_jsxs("div", { className: "panel", style: { overflow: 'hidden' }, children: [_jsx("div", { style: { padding: '15px 18px 12px' }, children: _jsx("div", { className: "card-title", children: "Trackers" }) }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10, padding: 18 }, children: trackerCards.map((c) => (_jsx(InsightCardRow, { card: c, expanded: expanded === c.intent_key, onToggle: () => setExpanded(expanded === c.intent_key ? null : c.intent_key), onDismiss: () => void dismiss(c), dismissing: dismissing === c.intent_key }, c.intent_key))) })] }))] }));
65
+ }
66
+ /** One labelled opportunity SECTION (Competitor Watch / What Readers Are Asking),
67
+ * grouped by desk inside. Reuses the desk-panel + InsightCardRow rendering so the
68
+ * two new sub-kinds match the rest of the board. */
69
+ function OpportunitySection({ title, subtitle, groups, expanded, setExpanded, dismiss, dismissing, }) {
70
+ return (_jsxs("div", { className: "panel", style: { overflow: 'hidden', marginBottom: 'var(--gap)' }, children: [_jsxs("div", { style: { padding: '15px 18px 6px' }, children: [_jsx("div", { className: "card-title", children: title }), _jsx("div", { className: "kicker", style: { marginTop: 2 }, children: subtitle })] }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), groups.map((g) => (_jsxs("div", { children: [_jsxs("div", { style: {
71
+ padding: '12px 18px 6px',
72
+ display: 'flex',
73
+ alignItems: 'baseline',
74
+ gap: 10,
75
+ }, children: [_jsx("div", { className: "card-title", style: { textTransform: 'capitalize', fontSize: '0.95em' }, children: g.desk }), _jsxs("span", { className: "kicker", children: [g.cards.length, " ideas"] })] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10, padding: '0 18px 14px' }, children: g.cards.map((c) => (_jsx(InsightCardRow, { card: c, expanded: expanded === c.intent_key, onToggle: () => setExpanded(expanded === c.intent_key ? null : c.intent_key), onDismiss: () => void dismiss(c), dismissing: dismissing === c.intent_key }, c.intent_key))) })] }, g.desk)))] }));
76
+ }
77
+ function evidenceChip(card) {
78
+ if ('query' in card.evidence)
79
+ return formatDemandEvidence(card.evidence);
80
+ // Kind-aware opportunity chip: audience rows are grounded in reader questions,
81
+ // competitor rows in rival article sources.
82
+ if (card.signal_type === 'opportunity' && discoveryKindOf(card) === 'audience_question') {
83
+ const n = card.evidence.source_count;
84
+ return `${card.evidence.basis} · ${n} ${n === 1 ? 'question' : 'questions'}`;
85
+ }
86
+ return `${card.evidence.basis} · ${card.evidence.source_count} sources`;
87
+ }
88
+ function InsightCardRow({ card, expanded, onToggle, onDismiss, dismissing, }) {
89
+ return (_jsxs("div", { style: {
90
+ border: '1px solid var(--border)',
91
+ borderRadius: 'var(--radius)',
92
+ background: 'var(--panel-2)',
93
+ padding: '11px 12px',
94
+ }, children: [_jsxs("div", { style: {
95
+ display: 'grid',
96
+ gridTemplateColumns: 'minmax(0,1fr) auto',
97
+ alignItems: 'center',
98
+ gap: 12,
99
+ }, children: [_jsxs("button", { type: "button", onClick: onToggle, style: {
100
+ textAlign: 'left',
101
+ background: 'none',
102
+ border: 'none',
103
+ cursor: 'pointer',
104
+ minWidth: 0,
105
+ }, children: [_jsx("div", { style: { fontSize: 14, fontWeight: 600, color: 'var(--ink)' }, children: card.headline }), _jsx("div", { className: "kicker", style: { marginTop: 4 }, children: card.brief.why_now }), _jsx("div", { className: "mono", style: { marginTop: 4, fontSize: 12, color: 'var(--ink-faint)' }, children: evidenceChip(card) })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx("span", { className: "pill pdot", children: card.signal_type }), card.beat != null && _jsx("span", { className: "pill pdot", children: card.beat }), _jsxs("button", { type: "button", className: "btn danger sm", onClick: onDismiss, disabled: dismissing, children: [_jsx(Icon, { name: "x", size: 13 }), " ", dismissing ? 'Dismissing…' : 'Dismiss'] })] })] }), expanded && (_jsxs("div", { style: {
106
+ marginTop: 12,
107
+ borderTop: '1px solid var(--border)',
108
+ paddingTop: 12,
109
+ fontSize: 13.5,
110
+ color: 'var(--ink-soft)',
111
+ lineHeight: 1.6,
112
+ }, children: [_jsxs("div", { children: [_jsx("strong", { children: "Angle:" }), " ", card.brief.angle] }), _jsxs("div", { style: { marginTop: 8 }, children: [_jsx("strong", { children: "Cluster:" }), " ", card.brief.cluster.canonical, card.brief.cluster.spokes.length > 0 && ` — ${card.brief.cluster.spokes.join(', ')}`] }), card.brief.sources.length > 0 && (_jsxs("div", { style: { marginTop: 8 }, children: [_jsx("strong", { children: "Sources:" }), _jsx("ul", { style: { margin: '4px 0 0', paddingLeft: 18 }, children: card.brief.sources.map((src) => (_jsx("li", { children: _jsx("a", { href: src.url, target: "_blank", rel: "noreferrer", children: src.title }) }, src.url))) })] }))] }))] }));
113
+ }
114
+ function EmptyPanel({ icon, message, }) {
115
+ return (_jsxs("div", { style: {
116
+ border: '1px solid var(--border)',
117
+ borderRadius: 'var(--radius)',
118
+ padding: '28px 20px',
119
+ textAlign: 'center',
120
+ fontSize: 13,
121
+ color: 'var(--ink-muted)',
122
+ background: 'var(--panel-2)',
123
+ display: 'flex',
124
+ flexDirection: 'column',
125
+ alignItems: 'center',
126
+ gap: 8,
127
+ }, children: [_jsx(Icon, { name: icon, size: 22, style: { color: 'var(--border)', opacity: 0.7 } }), _jsx("span", { style: { maxWidth: 360 }, children: message })] }));
128
+ }
129
+ //# sourceMappingURL=ContentInsightsScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentInsightsScreen.js","sourceRoot":"","sources":["../../../src/ui/screens/ContentInsightsScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ContentRoute(): import("react").JSX.Element;
2
+ //# sourceMappingURL=ContentRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentRoute.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/ContentRoute.tsx"],"names":[],"mappings":"AAcA,wBAAgB,YAAY,gCAoB3B"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // src/ui/screens/ContentRoute.tsx — hosts the library↔editor toggle.
3
+ //
4
+ // ContentRoute owns the open-doc state (useReducer over contentViewReducer).
5
+ // When open === null, the Library screen is shown.
6
+ // When open !== null, the Editor screen takes over.
7
+ //
8
+ // LibraryScreen and EditorScreen are implemented in Tasks 11 and 13.
9
+ // This file creates thin stubs so the registry can compile now (Task 10).
10
+ import { useReducer } from 'react';
11
+ import { contentViewReducer, initialContentView } from './content-view.js';
12
+ import { EditorScreen } from './EditorScreen.js';
13
+ import { LibraryScreen } from './LibraryScreen.js';
14
+ export function ContentRoute() {
15
+ const [view, dispatch] = useReducer(contentViewReducer, initialContentView);
16
+ function openDoc(id, contentType) {
17
+ if (id === null) {
18
+ dispatch({ type: 'new', contentType: contentType ?? 'article' });
19
+ }
20
+ else {
21
+ dispatch({ type: 'open', id, contentType });
22
+ }
23
+ }
24
+ function handleClose() {
25
+ dispatch({ type: 'close' });
26
+ }
27
+ if (view.open === null) {
28
+ return _jsx(LibraryScreen, { openDoc: openDoc });
29
+ }
30
+ return _jsx(EditorScreen, { docRef: view.open, onClose: handleClose });
31
+ }
32
+ //# sourceMappingURL=ContentRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentRoute.js","sourceRoot":"","sources":["../../../src/ui/screens/ContentRoute.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,EAAE;AACF,6EAA6E;AAC7E,mDAAmD;AACnD,oDAAoD;AACpD,EAAE;AACF,qEAAqE;AACrE,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAoB,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,UAAU,YAAY;IAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IAE3E,SAAS,OAAO,CAAC,EAAiB,EAAE,WAAyB;QAC5D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACjB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,IAAI,SAAS,EAAE,CAAC,CAAA;QACjE,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;QAC5C,CAAC;IACF,CAAC;IAED,SAAS,WAAW;QACnB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAI,CAAA;IAC3C,CAAC;IAED,OAAO,KAAC,YAAY,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,GAAI,CAAA;AACjE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface DashboardScreenProps {
2
+ /** Open a content item in the editor (same seam as LibraryScreen). */
3
+ openDoc: (id: string | null) => void;
4
+ }
5
+ export declare function DashboardScreen({ openDoc }: DashboardScreenProps): import("react").JSX.Element;
6
+ //# sourceMappingURL=DashboardScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/DashboardScreen.tsx"],"names":[],"mappings":"AAgCA,MAAM,WAAW,oBAAoB;IACpC,sEAAsE;IACtE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CACpC;AA6DD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,oBAAoB,+BA+EhE"}
@@ -0,0 +1,273 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // src/ui/screens/DashboardScreen.tsx — Dashboard screen (P5 Task 9).
3
+ //
4
+ // Renders the four stat cards (Published, Subscribers, Reads, Avg read time),
5
+ // the needs-attention queue, the activity feed, and the top-content table.
6
+ //
7
+ // All data comes from GET /admin/api/dashboard. Provider-backed cards
8
+ // (reads, avg-time, subscribers) honour the ProviderResult live/partial/empty
9
+ // convention via selectKpiState/formatKpi. First-party cards (published count,
10
+ // needs-attention queue, activity feed) are live when the workspace has data.
11
+ //
12
+ // NO BData, NO mock numbers — honest live/partial/empty rendering only.
13
+ // Broadsheet re-skin: serif stat values, .kicker eyebrows, .masthead-rule under
14
+ // card titles, .pill status chips, and a .tbl "Top performing" table.
15
+ import { useCallback, useEffect, useReducer } from 'react';
16
+ import { Icon } from '../icons.js';
17
+ import { useWorkspace } from '../workspace-context.js';
18
+ import { formatKpi, mergeTopContent, selectKpiState, splitNeedsAttention, } from './render-state.js';
19
+ function init() {
20
+ return { loading: true, error: null, data: null };
21
+ }
22
+ function reducer(state, action) {
23
+ switch (action.type) {
24
+ case 'fetch-start':
25
+ return { ...state, loading: true, error: null };
26
+ case 'fetch-ok':
27
+ return { loading: false, error: null, data: action.data };
28
+ case 'fetch-error':
29
+ return { loading: false, error: action.error, data: null };
30
+ default:
31
+ return state;
32
+ }
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // DashboardScreen
36
+ // ---------------------------------------------------------------------------
37
+ export function DashboardScreen({ openDoc }) {
38
+ const { active } = useWorkspace();
39
+ const [s, dispatch] = useReducer(reducer, undefined, init);
40
+ const fetchData = useCallback(async () => {
41
+ dispatch({ type: 'fetch-start' });
42
+ try {
43
+ const res = await fetch('/admin/api/dashboard');
44
+ if (!res.ok) {
45
+ dispatch({ type: 'fetch-error', error: `${res.status} ${res.statusText}` });
46
+ return;
47
+ }
48
+ const data = (await res.json());
49
+ dispatch({ type: 'fetch-ok', data });
50
+ }
51
+ catch (err) {
52
+ dispatch({ type: 'fetch-error', error: String(err) });
53
+ }
54
+ }, []);
55
+ useEffect(() => {
56
+ void fetchData();
57
+ }, [fetchData]);
58
+ // ---- Greeting / masthead eyebrow -----
59
+ const today = new Date();
60
+ const greeting = greetingFor(today.getHours());
61
+ const dateLabel = today.toLocaleDateString(undefined, {
62
+ weekday: 'long',
63
+ month: 'long',
64
+ day: 'numeric',
65
+ year: 'numeric',
66
+ });
67
+ const siteName = active?.name ?? null;
68
+ return (_jsxs("div", { className: "page dashboard-screen fade-in", children: [_jsxs("div", { className: "page-head", style: { flexWrap: 'wrap' }, children: [_jsxs("div", { style: { minWidth: 0 }, children: [_jsxs("div", { className: "kicker", style: { marginBottom: 8 }, children: [dateLabel, siteName ? ` · ${siteName}` : ''] }), _jsxs("h1", { className: "page-title", children: [greeting, siteName ? `, ${siteName}` : ''] })] }), _jsx("div", { style: { display: 'flex', gap: 8 }, children: _jsxs("button", { type: "button", className: "btn primary", onClick: () => openDoc(null), children: [_jsx(Icon, { name: "plus", size: 16 }), " New article"] }) })] }), s.loading && (_jsx("div", { className: "kicker", style: { color: 'var(--ink-muted)' }, children: "Loading dashboard\u2026" })), !s.loading && s.error && (_jsxs("div", { className: "panel panel-pad", style: { color: 'var(--red)', fontSize: 14 }, children: [s.error, _jsxs("button", { type: "button", className: "btn sm", onClick: () => void fetchData(), style: { marginLeft: 12 }, children: [_jsx(Icon, { name: "refresh", size: 14 }), " Retry"] })] })), !s.loading && !s.error && s.data && _jsx(DashboardContent, { data: s.data, openDoc: openDoc })] }));
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // DashboardContent — main body once loaded
72
+ // ---------------------------------------------------------------------------
73
+ function DashboardContent({ data, openDoc, }) {
74
+ const attnItems = splitNeedsAttention(data.needsAttention);
75
+ // Top content: merge provider reads with D1 titles (provider already has titles from route)
76
+ const providerTopItems = data.topContent.data ?? [];
77
+ const topItems = mergeTopContent(providerTopItems, {}); // route already hydrated titles
78
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid-stats", style: { marginBottom: 'var(--gap)' }, children: [_jsx(StatCard, { label: "Published \u00B7 7 days", status: "live", value: String(data.publishedCount), note: null }), _jsx(ProviderStatCard, { label: "Subscribers", result: data.subscribers, valueKey: "active", fmt: "num", emptyNote: "Connect LemonSqueezy" }), _jsx(ProviderStatCard, { label: "Reads", result: data.reads, valueKey: "reads", fmt: "num", emptyNote: "No analytics data" }), _jsx(AvgReadCard, { result: data.reads })] }), _jsxs("div", { className: "grid-split", children: [_jsxs("div", { className: "panel", style: { overflow: 'hidden' }, children: [_jsx("div", { style: {
79
+ display: 'flex',
80
+ alignItems: 'center',
81
+ justifyContent: 'space-between',
82
+ padding: '16px 18px 12px',
83
+ }, children: _jsx("div", { className: "card-title", children: "Needs your attention" }) }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), attnItems.length === 0 ? (_jsx(EmptyBox, { message: "Nothing needs attention right now." })) : (_jsx("div", { style: { padding: '6px 8px 8px' }, children: attnItems.map((item) => (_jsx(AttentionRow, { item: item, onClick: () => openDoc(item.id) }, item.id))) }))] }), _jsxs("div", { className: "panel", style: { overflow: 'hidden' }, children: [_jsx("div", { className: "card-title", style: { padding: '16px 18px 12px' }, children: "Recent activity" }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), _jsx(ActivityFeed, { result: data.activity })] })] }), _jsxs("div", { className: "panel", style: { marginTop: 'var(--gap)', overflow: 'hidden' }, children: [_jsx("div", { style: {
84
+ display: 'flex',
85
+ alignItems: 'center',
86
+ justifyContent: 'space-between',
87
+ padding: '16px 18px 12px',
88
+ }, children: _jsx("div", { className: "card-title", children: "Top performing this week" }) }), _jsx("hr", { className: "masthead-rule", style: { margin: '0 18px' } }), data.topContent.status === 'empty' || topItems.length === 0 ? (_jsx(EmptyBox, { message: "Top content will appear once the analytics provider is configured." })) : (_jsxs(_Fragment, { children: [data.topContent.status === 'partial' && (_jsx(PartialBanner, { message: "Reads data is partial \u2014 full analytics rollup pending." })), _jsxs("table", { className: "tbl", style: { marginTop: 4 }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { style: { paddingLeft: 18 }, children: "#" }), _jsx("th", { children: "Title" }), _jsx("th", { children: "Reads" })] }) }), _jsx("tbody", { children: topItems.map((item, i) => (_jsxs("tr", { onClick: () => openDoc(item.id), children: [_jsx("td", { className: "mono tnum", style: { paddingLeft: 18, color: 'var(--ink-faint)', fontSize: 13 }, children: String(i + 1).padStart(2, '0') }), _jsx("td", { style: { maxWidth: 420 }, children: _jsx("div", { style: {
89
+ fontWeight: 600,
90
+ color: 'var(--ink)',
91
+ whiteSpace: 'nowrap',
92
+ overflow: 'hidden',
93
+ textOverflow: 'ellipsis',
94
+ }, children: item.title ?? '(untitled)' }) }), _jsx("td", { className: "tnum", style: { fontWeight: 600 }, children: item.reads !== null ? item.reads.toLocaleString('en-US') : '—' })] }, item.id))) })] })] }))] })] }));
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // StatCard — broadsheet stat card: kicker label + serif value + sub note.
98
+ //
99
+ // Sparklines/trend arrows are the prototype's signature device, but the live
100
+ // dashboard payload carries no historical series or trend %, and this codebase
101
+ // forbids mock numbers — so the card faithfully renders the kicker+serif device
102
+ // with the honest live value and any partial/pending sub-note, no fabricated
103
+ // trend. (A series, if the route ever supplies one, drops straight into the
104
+ // flex slot beside the value.)
105
+ // ---------------------------------------------------------------------------
106
+ function StatCard({ label, status, value, note, }) {
107
+ const isEmpty = status === 'empty' || value === null;
108
+ return (_jsxs("div", { className: "panel panel-pad", style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("div", { className: "kicker", children: label }), _jsx("div", { style: {
109
+ display: 'flex',
110
+ alignItems: 'flex-end',
111
+ justifyContent: 'space-between',
112
+ gap: 10,
113
+ }, children: _jsx("div", { className: "serif tnum", style: {
114
+ fontSize: 34,
115
+ fontWeight: 600,
116
+ lineHeight: 1,
117
+ color: isEmpty ? 'var(--ink-muted)' : 'var(--ink)',
118
+ whiteSpace: 'nowrap',
119
+ }, children: isEmpty ? '—' : value }) }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, marginTop: 2, minHeight: 16 }, children: [status === 'partial' && (_jsxs("span", { style: {
120
+ display: 'inline-flex',
121
+ alignItems: 'center',
122
+ gap: 3,
123
+ fontSize: 12,
124
+ fontWeight: 700,
125
+ color: 'var(--amber)',
126
+ }, children: [_jsx(Icon, { name: "bolt", size: 12 }), " partial"] })), note && _jsx("span", { style: { fontSize: 12, color: 'var(--ink-muted)' }, children: note })] })] }));
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // ProviderStatCard — card backed by a ProviderResult<Record<string, number | null>>
130
+ // ---------------------------------------------------------------------------
131
+ function ProviderStatCard({ label, result, valueKey, fmt, emptyNote, }) {
132
+ const kpiStatus = selectKpiState(result);
133
+ if (kpiStatus === 'empty') {
134
+ return _jsx(StatCard, { label: label, status: "empty", value: null, note: emptyNote });
135
+ }
136
+ const raw = result.data?.[valueKey] ?? null;
137
+ const formatted = formatKpi(raw, fmt);
138
+ const isPending = formatted !== null && typeof formatted === 'object' && formatted.pending;
139
+ return (_jsx(StatCard, { label: label, status: kpiStatus, value: isPending ? null : formatted, note: isPending ? '— pending backfill' : null }));
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // AvgReadCard — special card for avg read time (seconds → "Xm Ys")
143
+ // ---------------------------------------------------------------------------
144
+ function AvgReadCard({ result }) {
145
+ const kpiStatus = selectKpiState(result);
146
+ if (kpiStatus === 'empty') {
147
+ return _jsx(StatCard, { label: "Avg read time", status: "empty", value: null, note: "No analytics data" });
148
+ }
149
+ const secs = result.data?.avgReadSeconds ?? null;
150
+ const display = secs === null ? null : formatAvgTime(secs);
151
+ return _jsx(StatCard, { label: "Avg read time", status: kpiStatus, value: display, note: null });
152
+ }
153
+ function formatAvgTime(secs) {
154
+ const m = Math.floor(secs / 60);
155
+ const s = Math.floor(secs % 60);
156
+ if (m === 0)
157
+ return `${s}s`;
158
+ if (s === 0)
159
+ return `${m}m`;
160
+ return `${m}m ${s}s`;
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // AttentionRow — broadsheet queue row: title + meta + status pill
164
+ // ---------------------------------------------------------------------------
165
+ const ATTN_META = {
166
+ review: { label: 'In review', icon: 'eye' },
167
+ processing: { label: 'Processing', icon: 'refresh' },
168
+ scheduled: { label: 'Scheduled', icon: 'clock' },
169
+ draft: { label: 'Draft', icon: 'edit' },
170
+ };
171
+ function AttentionRow({ item, onClick, }) {
172
+ const meta = ATTN_META[item.pill];
173
+ return (_jsxs("button", { type: "button", onClick: onClick, style: {
174
+ display: 'flex',
175
+ alignItems: 'center',
176
+ gap: 13,
177
+ padding: '11px 10px',
178
+ borderRadius: 9,
179
+ cursor: 'pointer',
180
+ width: '100%',
181
+ textAlign: 'left',
182
+ border: 0,
183
+ background: 'transparent',
184
+ font: 'inherit',
185
+ color: 'inherit',
186
+ }, onMouseEnter: (e) => {
187
+ e.currentTarget.style.background = 'var(--hover)';
188
+ }, onMouseLeave: (e) => {
189
+ e.currentTarget.style.background = 'transparent';
190
+ }, children: [_jsx("div", { style: {
191
+ width: 42,
192
+ height: 42,
193
+ borderRadius: 8,
194
+ flex: 'none',
195
+ background: 'var(--field)',
196
+ border: '1px solid var(--border)',
197
+ display: 'grid',
198
+ placeItems: 'center',
199
+ color: 'var(--ink-muted)',
200
+ }, children: _jsx(Icon, { name: item.type === 'video' ? 'video' : 'doc', size: 16 }) }), _jsx("div", { style: { flex: 1, minWidth: 0 }, children: _jsx("div", { style: {
201
+ fontSize: 14,
202
+ fontWeight: 600,
203
+ color: 'var(--ink)',
204
+ whiteSpace: 'nowrap',
205
+ overflow: 'hidden',
206
+ textOverflow: 'ellipsis',
207
+ }, children: item.title || '(Untitled)' }) }), _jsxs("span", { className: `pill ${item.pill}`, children: [_jsx("span", { className: "pdot" }), meta.label] })] }));
208
+ }
209
+ // ---------------------------------------------------------------------------
210
+ // ActivityFeed
211
+ // ---------------------------------------------------------------------------
212
+ function ActivityFeed({ result }) {
213
+ if (result.status === 'empty' || result.data.length === 0) {
214
+ return _jsx(EmptyBox, { message: "No activity yet. Activity appears after content is published." });
215
+ }
216
+ const rows = result.data;
217
+ return (_jsx("div", { style: { padding: '10px 18px 16px' }, children: rows.map((row, i) => (_jsx(ActivityEntry, { row: row, last: i === rows.length - 1 }, row.id))) }));
218
+ }
219
+ function ActivityEntry({ row, last }) {
220
+ const when = row.created_at ? formatRelTime(row.created_at) : '';
221
+ return (_jsxs("div", { style: {
222
+ display: 'flex',
223
+ gap: 11,
224
+ padding: '9px 0',
225
+ borderBottom: last ? 'none' : '1px solid var(--border-soft)',
226
+ }, children: [_jsx(Icon, { name: "checkCircle", size: 16, style: { color: 'var(--green)', flexShrink: 0, marginTop: 2 } }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsxs("div", { style: { fontSize: 13, color: 'var(--ink-soft)', lineHeight: 1.45 }, children: [row.action, row.target_title ? (_jsxs(_Fragment, { children: [' ', _jsxs("span", { style: { color: 'var(--ink)' }, children: ["\u201C", row.target_title, "\u201D"] })] })) : null] }), _jsx("div", { style: { fontSize: 11, color: 'var(--ink-faint)', marginTop: 2 }, children: when })] })] }));
227
+ }
228
+ // ---------------------------------------------------------------------------
229
+ // Helpers / micro-components
230
+ // ---------------------------------------------------------------------------
231
+ function EmptyBox({ message }) {
232
+ return (_jsx("div", { style: {
233
+ padding: '24px 18px',
234
+ textAlign: 'center',
235
+ fontSize: 13,
236
+ color: 'var(--ink-muted)',
237
+ }, children: message }));
238
+ }
239
+ function PartialBanner({ message }) {
240
+ return (_jsxs("div", { style: {
241
+ margin: '8px 18px 0',
242
+ padding: '6px 12px',
243
+ background: 'color-mix(in srgb, var(--amber) 8%, transparent)',
244
+ border: '1px solid color-mix(in srgb, var(--amber) 20%, transparent)',
245
+ borderRadius: 7,
246
+ fontSize: 12,
247
+ color: 'var(--amber)',
248
+ display: 'flex',
249
+ alignItems: 'center',
250
+ gap: 7,
251
+ }, children: [_jsx(Icon, { name: "bolt", size: 13 }), message] }));
252
+ }
253
+ function greetingFor(hour) {
254
+ if (hour < 12)
255
+ return 'Good morning';
256
+ if (hour < 17)
257
+ return 'Good afternoon';
258
+ return 'Good evening';
259
+ }
260
+ function formatRelTime(epochSecs) {
261
+ const diff = Date.now() / 1000 - epochSecs;
262
+ if (diff < 60)
263
+ return 'just now';
264
+ if (diff < 3600)
265
+ return `${Math.floor(diff / 60)}m ago`;
266
+ if (diff < 86400)
267
+ return `${Math.floor(diff / 3600)}h ago`;
268
+ return new Date(epochSecs * 1000).toLocaleDateString(undefined, {
269
+ month: 'short',
270
+ day: 'numeric',
271
+ });
272
+ }
273
+ //# sourceMappingURL=DashboardScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardScreen.js","sourceRoot":"","sources":["../../../src/ui/screens/DashboardScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ContentView } from './content-view.js';
2
+ export interface EditorScreenProps {
3
+ docRef: NonNullable<ContentView['open']>;
4
+ onClose: () => void;
5
+ }
6
+ export declare function EditorScreen({ docRef, onClose }: EditorScreenProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=EditorScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/EditorScreen.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAMpD,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,IAAI,CAAA;CACnB;AA2BD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,iBAAiB,+BA4UlE"}