@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,4 @@
1
+ import { Node } from '@tiptap/core';
2
+ /** Custom Tiptap node for an embedded tweet / X post. */
3
+ export declare const TweetEmbed: Node<any, any>;
4
+ //# sourceMappingURL=tweet-embed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tweet-embed.d.ts","sourceRoot":"","sources":["../../../src/ui/editor/tweet-embed.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAA;AAEpD,yDAAyD;AACzD,eAAO,MAAM,UAAU,gBAgDrB,CAAA"}
@@ -0,0 +1,49 @@
1
+ // src/ui/editor/tweet-embed.ts
2
+ // Pure Tiptap Node spec for the TweetEmbed custom node.
3
+ // Defines the schema (group, atom, attrs) + parseHTML/renderHTML.
4
+ // NEVER instantiates Editor or EditorView (browser-only).
5
+ // The node is serialized to/from a fenced directive (:::tweet) by
6
+ // src/ui/editor/serialize.ts; the HTML encoding is for Tiptap's own
7
+ // HTML clipboard pipeline when the editor IS running in the browser.
8
+ import { mergeAttributes, Node } from '@tiptap/core';
9
+ /** Custom Tiptap node for an embedded tweet / X post. */
10
+ export const TweetEmbed = Node.create({
11
+ name: 'tweetEmbed',
12
+ group: 'block',
13
+ atom: true,
14
+ addAttributes() {
15
+ return {
16
+ url: {
17
+ default: null,
18
+ parseHTML: (element) => element.getAttribute('data-tweet-url'),
19
+ renderHTML: (attributes) => ({
20
+ 'data-tweet-url': attributes.url,
21
+ }),
22
+ },
23
+ };
24
+ },
25
+ parseHTML() {
26
+ return [
27
+ {
28
+ tag: 'div[data-tweet]',
29
+ getAttrs: (element) => {
30
+ if (typeof element === 'string')
31
+ return {};
32
+ return {
33
+ url: element.getAttribute('data-tweet-url') || element.getAttribute('data-tweet'),
34
+ };
35
+ },
36
+ },
37
+ ];
38
+ },
39
+ renderHTML({ node, HTMLAttributes, }) {
40
+ return [
41
+ 'div',
42
+ mergeAttributes(HTMLAttributes, {
43
+ 'data-tweet': '',
44
+ 'data-tweet-url': node.attrs.url,
45
+ }),
46
+ ];
47
+ },
48
+ });
49
+ //# sourceMappingURL=tweet-embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tweet-embed.js","sourceRoot":"","sources":["../../../src/ui/editor/tweet-embed.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,wDAAwD;AACxD,kEAAkE;AAClE,0DAA0D;AAC1D,kEAAkE;AAClE,oEAAoE;AACpE,qEAAqE;AAErE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEpD,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,YAAY;IAElB,KAAK,EAAE,OAAO;IAEd,IAAI,EAAE,IAAI;IAEV,aAAa;QACZ,OAAO;YACN,GAAG,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC;gBAC3E,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE,CAAC,CAAC;oBACrD,gBAAgB,EAAE,UAAU,CAAC,GAAG;iBAChC,CAAC;aACF;SACD,CAAA;IACF,CAAC;IAED,SAAS;QACR,OAAO;YACN;gBACC,GAAG,EAAE,iBAAiB;gBACtB,QAAQ,EAAE,CAAC,OAA6B,EAAE,EAAE;oBAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ;wBAAE,OAAO,EAAE,CAAA;oBAC1C,OAAO;wBACN,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;qBACjF,CAAA;gBACF,CAAC;aACD;SACD,CAAA;IACF,CAAC;IAED,UAAU,CAAC,EACV,IAAI,EACJ,cAAc,GAId;QACA,OAAO;YACN,KAAK;YACL,eAAe,CAAC,cAAc,EAAE;gBAC/B,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;aAChC,CAAC;SACF,CAAA;IACF,CAAC;CACD,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const ROUTES: readonly ["dashboard", "content", "calendar", "media", "analytics", "authors", "topics", "content-insights", "subscriptions", "social-share", "settings"];
2
+ export type Route = (typeof ROUTES)[number];
3
+ export declare function parseHash(hash: string): Route;
4
+ export declare function hashFor(route: Route): string;
5
+ //# sourceMappingURL=hash-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-router.d.ts","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,2JAYT,CAAA;AAEV,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAI3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAI7C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C"}
@@ -0,0 +1,25 @@
1
+ // src/ui/hash-router.ts — pure hash-route helpers for the Masthead SPA. Astro
2
+ // owns the /admin path; the SPA owns the #/<route> hash (no History conflict).
3
+ export const ROUTES = [
4
+ 'dashboard',
5
+ 'content',
6
+ 'calendar',
7
+ 'media',
8
+ 'analytics',
9
+ 'authors',
10
+ 'topics',
11
+ 'content-insights',
12
+ 'subscriptions',
13
+ 'social-share',
14
+ 'settings',
15
+ ];
16
+ const DEFAULT = 'dashboard';
17
+ export function parseHash(hash) {
18
+ const raw = hash.replace(/^#\/?/, '').split('?')[0];
19
+ const root = raw.split('/')[0] || DEFAULT;
20
+ return ROUTES.includes(root) ? root : DEFAULT;
21
+ }
22
+ export function hashFor(route) {
23
+ return `#/${route}`;
24
+ }
25
+ //# sourceMappingURL=hash-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-router.js","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,UAAU;CACD,CAAA;AAIV,MAAM,OAAO,GAAU,WAAW,CAAA;AAElC,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IACzC,OAAQ,MAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,OAAO,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAY;IACnC,OAAO,KAAK,KAAK,EAAE,CAAA;AACpB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Masthead icon set — 1.6px line icons, 18px default.
3
+ * SVG path data ported from the Broadsheet design (icons.jsx).
4
+ * All icons use currentColor stroke so theme/accent CSS applies.
5
+ */
6
+ /** Every icon name used across the shell (nav + topbar + site-switcher + palette). */
7
+ export type IconName = 'dashboard' | 'library' | 'calendar' | 'media' | 'chart' | 'users' | 'tag' | 'inbox' | 'share' | 'settings' | 'sidebar' | 'search' | 'sun' | 'moon' | 'bell' | 'plus' | 'chevDown' | 'chevRight' | 'chevLeft' | 'doc' | 'video' | 'mic' | 'mail' | 'image' | 'folder' | 'folderOpen' | 'layers' | 'globe' | 'flag' | 'bolt' | 'seo' | 'star' | 'bookmark' | 'edit' | 'copy' | 'trash' | 'link' | 'filter' | 'grid' | 'rows' | 'columns' | 'dots' | 'arrowUp' | 'arrowRight' | 'play' | 'pause' | 'waveform' | 'x' | 'check' | 'checkCircle' | 'clock' | 'sparkle' | 'wand' | 'eye' | 'desktop' | 'tablet' | 'mobile' | 'history' | 'upload' | 'download' | 'refresh' | 'target' | 'pin' | 'command';
8
+ /** SVG path data keyed by icon name. */
9
+ export declare const ICON_PATHS: Record<IconName, string>;
10
+ export interface IconProps {
11
+ name: IconName;
12
+ size?: number;
13
+ stroke?: number;
14
+ className?: string;
15
+ style?: React.CSSProperties;
16
+ }
17
+ /**
18
+ * Renders an inline SVG line icon from the Broadsheet design set.
19
+ * Uses currentColor stroke so it inherits text/accent colour from CSS.
20
+ * Defaults: 18px, 1.6px stroke, round caps/joins, aria-hidden.
21
+ */
22
+ export declare function Icon({ name, size, stroke, className, style }: IconProps): import("react").JSX.Element;
23
+ /**
24
+ * Broadsheet logo mark — folded masthead glyph from the design.
25
+ * Uses explicit colour (defaults to currentColor) so it works on
26
+ * any background without inheriting the wrong fill.
27
+ */
28
+ export declare function BrandMark({ size, color, }: {
29
+ size?: number;
30
+ color?: string;
31
+ }): import("react").JSX.Element;
32
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/ui/icons.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sFAAsF;AACtF,MAAM,MAAM,QAAQ,GAEjB,WAAW,GACX,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,OAAO,GACP,KAAK,GACL,OAAO,GACP,OAAO,GACP,UAAU,GAEV,SAAS,GACT,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GAEN,UAAU,GACV,WAAW,GACX,UAAU,GAEV,KAAK,GACL,OAAO,GAEP,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,SAAS,GACT,YAAY,GACZ,MAAM,GACN,OAAO,GACP,UAAU,GACV,GAAG,GACH,OAAO,GACP,aAAa,GACb,OAAO,GACP,SAAS,GACT,MAAM,GACN,KAAK,GACL,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,UAAU,GACV,SAAS,GACT,QAAQ,GACR,KAAK,GACL,SAAS,CAAA;AAEZ,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAuE/C,CAAA;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,MAAY,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,+BAmBlF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACzB,IAAS,EACT,KAAsB,GACtB,EAAE;IACF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,+BAUA"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** SVG path data keyed by icon name. */
3
+ export const ICON_PATHS = {
4
+ dashboard: 'M3 3h7v7H3zM14 3h7v4h-7zM14 10h7v11h-7zM3 13h7v8H3z',
5
+ library: 'M4 4h16v4H4zM4 11h16M4 16h16M4 8v12M20 8v12',
6
+ doc: 'M6 2h8l4 4v16H6zM14 2v4h4',
7
+ video: 'M3 5h13v14H3zM16 9l5-3v12l-5-3z',
8
+ mic: 'M12 3a3 3 0 0 1 3 3v5a3 3 0 0 1-6 0V6a3 3 0 0 1 3-3zM6 11a6 6 0 0 0 12 0M12 17v4M9 21h6',
9
+ mail: 'M3 5h18v14H3zM3 6l9 7 9-7',
10
+ calendar: 'M4 5h16v16H4zM4 9h16M8 3v4M16 3v4M8 13h2M14 13h2M8 17h2',
11
+ media: 'M3 4h18v16H3zM3 15l5-5 4 4 3-3 6 6M9 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z',
12
+ chart: 'M4 20V10M10 20V4M16 20v-6M22 20H2',
13
+ users: 'M9 11a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7zM2 21a7 7 0 0 1 14 0M17 11a3 3 0 0 0 0-6M18 21a6 6 0 0 0-3-5.2',
14
+ tag: 'M3 3h8l10 10-8 8L3 11zM7.5 7.5h.01',
15
+ folder: 'M3 6h6l2 2h10v12H3zM3 6v14',
16
+ settings: 'M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM19.4 13a7.5 7.5 0 0 0 0-2l2-1.5-2-3.4-2.3 1a7.5 7.5 0 0 0-1.7-1l-.3-2.6h-4l-.3 2.6a7.5 7.5 0 0 0-1.7 1l-2.3-1-2 3.4L4.6 11a7.5 7.5 0 0 0 0 2l-2 1.5 2 3.4 2.3-1a7.5 7.5 0 0 0 1.7 1l.3 2.6h4l.3-2.6a7.5 7.5 0 0 0 1.7-1l2.3 1 2-3.4z',
17
+ plus: 'M12 5v14M5 12h14',
18
+ search: 'M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM20 20l-4-4',
19
+ bell: 'M18 9a6 6 0 0 0-12 0c0 7-3 8-3 8h18s-3-1-3-8M13.7 21a2 2 0 0 1-3.4 0',
20
+ chevDown: 'M6 9l6 6 6-6',
21
+ chevRight: 'M9 6l6 6-6 6',
22
+ chevLeft: 'M15 6l-6 6 6 6',
23
+ sidebar: 'M3 4h18v16H3zM9 4v16',
24
+ eye: 'M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12zM12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',
25
+ desktop: 'M3 4h18v12H3zM8 20h8M12 16v4',
26
+ tablet: 'M6 3h12v18H6zM11 18h2',
27
+ mobile: 'M8 3h8v18H8zM11 18h2',
28
+ sun: 'M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10zM12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4',
29
+ moon: 'M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z',
30
+ check: 'M5 12l5 5L20 6',
31
+ checkCircle: 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM8 12l3 3 5-5',
32
+ clock: 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM12 7v5l3 2',
33
+ sparkle: 'M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8zM5 4l.7 2 .8-2-.8.6zM19 17l.7 2 .8-2-.8.6z',
34
+ wand: 'M5 19l9-9M14 6l1.5-1.5M17 9l2-2M8.5 4.5L9 3M3 11l1.5.5M15 4l2 7 5 2-5 2-2 5-2-5-5-2 5-2z',
35
+ image: 'M3 4h18v16H3zM3 16l5-5 4 4 3-3 6 6M8.5 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z',
36
+ link: 'M9 15l6-6M10 6l1-1a4 4 0 0 1 6 6l-1 1M14 18l-1 1a4 4 0 0 1-6-6l1-1',
37
+ trash: 'M4 6h16M9 6V4h6v2M6 6l1 14h10l1-14M10 10v6M14 10v6',
38
+ history: 'M3 12a9 9 0 1 0 3-6.7L3 8M3 4v4h4M12 8v4l3 2',
39
+ upload: 'M12 16V4M7 9l5-5 5 5M4 16v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3',
40
+ download: 'M12 4v12M7 11l5 5 5-5M4 20h16',
41
+ filter: 'M3 5h18l-7 8v5l-4 2v-7z',
42
+ grid: 'M3 3h8v8H3zM13 3h8v8h-8zM3 13h8v8H3zM13 13h8v8h-8z',
43
+ rows: 'M3 5h18M3 12h18M3 19h18',
44
+ columns: 'M4 4h16v16H4zM10 4v16M16 4v16',
45
+ globe: 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM2 12h20M12 2a15 15 0 0 1 0 20M12 2a15 15 0 0 0 0 20',
46
+ flag: 'M5 21V4M5 4h11l-1.5 4L16 12H5',
47
+ bolt: 'M13 2L4 14h7l-1 8 9-12h-7z',
48
+ seo: 'M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM20 20l-4-4M8 11h6M11 8v6',
49
+ layers: 'M12 3l9 5-9 5-9-5zM3 13l9 5 9-5M3 17l9 5 9-5',
50
+ share: 'M16 6a3 3 0 1 0 0-.1zM8 12a3 3 0 1 0 0 .1zM16 18a3 3 0 1 0 0 .1zM10.5 10.5l5-3M10.5 13.5l5 3',
51
+ dots: 'M12 6a1 1 0 1 0 0-.1zM12 12a1 1 0 1 0 0-.1zM12 18a1 1 0 1 0 0-.1z',
52
+ arrowUp: 'M12 19V5M6 11l6-6 6 6',
53
+ arrowRight: 'M5 12h14M13 6l6 6-6 6',
54
+ play: 'M7 4l13 8-13 8z',
55
+ pause: 'M8 4h3v16H8zM13 4h3v16h-3z',
56
+ waveform: 'M3 12h2M7 8v8M11 4v16M15 7v10M19 10v4M22 12h-1',
57
+ x: 'M6 6l12 12M18 6L6 18',
58
+ bookmark: 'M6 3h12v18l-6-4-6 4z',
59
+ edit: 'M4 20h4L19 9l-4-4L4 16zM14 6l4 4',
60
+ copy: 'M9 9h11v11H9zM5 15H4V4h11v1',
61
+ star: 'M12 3l2.9 6 6.6.9-4.8 4.6 1.2 6.5L12 18l-5.9 3 1.2-6.5L2.5 9.9 9 9z',
62
+ folderOpen: 'M3 7h6l2 2h10M3 7v13h18l-2-9H7z',
63
+ command: 'M9 6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3z',
64
+ inbox: 'M3 13h5l2 3h4l2-3h5M3 13l3-9h12l3 9v7H3z',
65
+ target: 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10zM12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z',
66
+ pin: 'M12 21s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12zM12 11a2 2 0 1 0 0-4 2 2 0 0 0 0 4z',
67
+ refresh: 'M3 12a9 9 0 0 1 15-6.7L21 8M21 3v5h-5M21 12a9 9 0 0 1-15 6.7L3 16M3 21v-5h5',
68
+ };
69
+ /**
70
+ * Renders an inline SVG line icon from the Broadsheet design set.
71
+ * Uses currentColor stroke so it inherits text/accent colour from CSS.
72
+ * Defaults: 18px, 1.6px stroke, round caps/joins, aria-hidden.
73
+ */
74
+ export function Icon({ name, size = 18, stroke = 1.6, className, style }) {
75
+ const d = ICON_PATHS[name] ?? ICON_PATHS.doc;
76
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: stroke, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", className: className, style: style, children: _jsx("path", { d: d }) }));
77
+ }
78
+ /**
79
+ * Broadsheet logo mark — folded masthead glyph from the design.
80
+ * Uses explicit colour (defaults to currentColor) so it works on
81
+ * any background without inheriting the wrong fill.
82
+ */
83
+ export function BrandMark({ size = 18, color = 'currentColor', }) {
84
+ return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M5 4h14v3H5z", fill: color }), _jsx("path", { d: "M5 9.5h9", stroke: color, strokeWidth: 1.7, strokeLinecap: "round" }), _jsx("path", { d: "M5 13h9", stroke: color, strokeWidth: 1.7, strokeLinecap: "round" }), _jsx("path", { d: "M5 16.5h6", stroke: color, strokeWidth: 1.7, strokeLinecap: "round" }), _jsx("path", { d: "M16.5 9.5H19V20l-1.25-1L16.5 20z", fill: color, opacity: 0.9 })] }));
85
+ }
86
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/ui/icons.tsx"],"names":[],"mappings":";AA8EA,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAA6B;IACnD,SAAS,EAAE,qDAAqD;IAChE,OAAO,EAAE,6CAA6C;IACtD,GAAG,EAAE,2BAA2B;IAChC,KAAK,EAAE,iCAAiC;IACxC,GAAG,EAAE,yFAAyF;IAC9F,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,yDAAyD;IACnE,KAAK,EAAE,6EAA6E;IACpF,KAAK,EAAE,mCAAmC;IAC1C,KAAK,EACJ,0GAA0G;IAC3G,GAAG,EAAE,oCAAoC;IACzC,MAAM,EAAE,4BAA4B;IACpC,QAAQ,EACP,yQAAyQ;IAC1Q,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,iDAAiD;IACzD,IAAI,EAAE,sEAAsE;IAC5E,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,gBAAgB;IAC1B,OAAO,EAAE,sBAAsB;IAC/B,GAAG,EAAE,gFAAgF;IACrF,OAAO,EAAE,8BAA8B;IACvC,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,sBAAsB;IAC9B,GAAG,EAAE,wIAAwI;IAC7I,IAAI,EAAE,8CAA8C;IACpD,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,wDAAwD;IACrE,KAAK,EAAE,sDAAsD;IAC7D,OAAO,EACN,qGAAqG;IACtG,IAAI,EAAE,0FAA0F;IAChG,KAAK,EAAE,+EAA+E;IACtF,IAAI,EAAE,oEAAoE;IAC1E,KAAK,EAAE,oDAAoD;IAC3D,OAAO,EAAE,8CAA8C;IACvD,MAAM,EAAE,+DAA+D;IACvE,QAAQ,EAAE,+BAA+B;IACzC,MAAM,EAAE,yBAAyB;IACjC,IAAI,EAAE,oDAAoD;IAC1D,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,+BAA+B;IACxC,KAAK,EACJ,+FAA+F;IAChG,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,4BAA4B;IAClC,GAAG,EAAE,+DAA+D;IACpE,MAAM,EAAE,8CAA8C;IACtD,KAAK,EACJ,8FAA8F;IAC/F,IAAI,EAAE,mEAAmE;IACzE,OAAO,EAAE,uBAAuB;IAChC,UAAU,EAAE,uBAAuB;IACnC,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,gDAAgD;IAC1D,CAAC,EAAE,sBAAsB;IACzB,QAAQ,EAAE,sBAAsB;IAChC,IAAI,EAAE,kCAAkC;IACxC,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE,qEAAqE;IAC3E,UAAU,EAAE,iCAAiC;IAC7C,OAAO,EAAE,uEAAuE;IAChF,KAAK,EAAE,0CAA0C;IACjD,MAAM,EACL,mHAAmH;IACpH,GAAG,EAAE,sFAAsF;IAC3F,OAAO,EAAE,6EAA6E;CACtF,CAAA;AAUD;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,EAAE,KAAK,EAAa;IAClF,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAA;IAC5C,OAAO,CACN,cACC,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,YAEZ,eAAM,CAAC,EAAE,CAAC,GAAI,GACT,CACN,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EACzB,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,GAItB;IACA,OAAO,CACN,eAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,aACjF,eAAM,CAAC,EAAC,cAAc,EAAC,IAAI,EAAE,KAAK,GAAI,EACtC,eAAM,CAAC,EAAC,UAAU,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAC,OAAO,GAAG,EAC5E,eAAM,CAAC,EAAC,SAAS,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAC,OAAO,GAAG,EAC3E,eAAM,CAAC,EAAC,WAAW,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAC,OAAO,GAAG,EAC7E,eAAM,CAAC,EAAC,kCAAkC,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAI,IACnE,CACN,CAAA;AACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface FieldProps {
2
+ label: string;
3
+ /** htmlFor ties the label to a specific input by id. Supply when the child
4
+ * is a single <input>/<select>/<textarea> — required by a11y rules. When
5
+ * the field wraps a custom control or a composite widget where no single
6
+ * id is appropriate, omit it and add an aria-label on the control itself. */
7
+ htmlFor?: string;
8
+ help?: string;
9
+ children: React.ReactNode;
10
+ }
11
+ export declare function Field({ label, htmlFor, help, children }: FieldProps): React.ReactElement;
12
+ //# sourceMappingURL=Field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../../src/ui/inspector/Field.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb;;;iFAG6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,CAUxF"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function Field({ label, htmlFor, help, children }) {
3
+ return (_jsxs("div", { style: fieldWrap, children: [_jsx("label", { htmlFor: htmlFor, className: "field-label", children: label }), children, help && _jsx("div", { className: "help", children: help })] }));
4
+ }
5
+ const fieldWrap = {
6
+ marginBottom: 14,
7
+ };
8
+ //# sourceMappingURL=Field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/ui/inspector/Field.tsx"],"names":[],"mappings":";AAeA,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAc;IACnE,OAAO,CACN,eAAK,KAAK,EAAE,SAAS,aACpB,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,YAC9C,KAAK,GACC,EACP,QAAQ,EACR,IAAI,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,IAAI,GAAO,IACtC,CACN,CAAA;AACF,CAAC;AAED,MAAM,SAAS,GAAwB;IACtC,YAAY,EAAE,EAAE;CAChB,CAAA"}
@@ -0,0 +1,9 @@
1
+ export interface FoundryTabProps {
2
+ docId: string;
3
+ /** Content type — must be 'video' or 'podcast' (enforced by visibleTabs). */
4
+ contentType: 'video' | 'podcast' | string;
5
+ /** Called after a transcript edit or dispatch so the parent can refresh. */
6
+ onChanged?: () => void;
7
+ }
8
+ export declare function FoundryTab({ docId, contentType, onChanged }: FoundryTabProps): React.ReactElement;
9
+ //# sourceMappingURL=FoundryTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoundryTab.d.ts","sourceRoot":"","sources":["../../../src/ui/inspector/FoundryTab.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACzC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAiBD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAySjG"}
@@ -0,0 +1,362 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // src/ui/inspector/FoundryTab.tsx — Foundry inspector tab (bead-08).
3
+ //
4
+ // Only rendered for video/podcast content types (gated by visibleTabs).
5
+ // Sections:
6
+ // - Pipeline status: ordered stage list from processingStages() with
7
+ // done/active/pending indicators + a "Dispatch to Foundry" / "Re-run" button.
8
+ // - Thumbnail / cover: preview block; "Pick best frame" is P4-disabled.
9
+ // - Transcript: read-only view of the auto-generated transcript (from the
10
+ // content payload) with an inline "Edit transcript" textarea that PATCHes
11
+ // the transcript field. Transcript *generation* is driven by the callback
12
+ // pipeline, NOT an AI button.
13
+ //
14
+ // Polling: while processing_state is mid-flight (working pill state), a
15
+ // lightweight poll on GET /admin/api/content/:id re-fetches the processing
16
+ // columns every POLL_INTERVAL_MS.
17
+ //
18
+ // Compile-gated (tsc, jsx: react-jsx). No vitest — pure helpers (processingStages,
19
+ // foundryPillState) are tested in foundry-stages.test.ts.
20
+ //
21
+ // SCOPE GUARD (bead-08): the dispatch call goes to the injected FoundryDispatch
22
+ // provider via POST /content/:id?action=dispatch-to-foundry. NO real Foundry
23
+ // capability slug or media-compute infra in P3; that is the-foundry #558.
24
+ import { useCallback, useEffect, useRef, useState } from 'react';
25
+ import { Icon } from '../icons.js';
26
+ import { foundryPillState, processingStages } from './foundry-stages.js';
27
+ import { patchContent, runAction } from './inspector-data.js';
28
+ import { Section } from './Section.js';
29
+ // ---------------------------------------------------------------------------
30
+ // Constants
31
+ // ---------------------------------------------------------------------------
32
+ /** Polling interval while the pipeline is in a mid-flight state. */
33
+ const POLL_INTERVAL_MS = 5_000;
34
+ // ---------------------------------------------------------------------------
35
+ // FoundryTab
36
+ // ---------------------------------------------------------------------------
37
+ export function FoundryTab({ docId, contentType, onChanged }) {
38
+ const [processing, setProcessing] = useState({
39
+ processingState: 'pending',
40
+ processingError: null,
41
+ transcriptUrl: null,
42
+ hlsPosterUrl: null,
43
+ });
44
+ const [transcript, setTranscript] = useState(null);
45
+ const [editingTranscript, setEditingTranscript] = useState(false);
46
+ const [transcriptDraft, setTranscriptDraft] = useState('');
47
+ const [savingTranscript, setSavingTranscript] = useState(false);
48
+ const [dispatching, setDispatching] = useState(false);
49
+ const [dispatchError, setDispatchError] = useState(null);
50
+ const [loading, setLoading] = useState(true);
51
+ const pollRef = useRef(null);
52
+ // Fetch the current content item to read processing fields.
53
+ const fetchStatus = useCallback(async () => {
54
+ try {
55
+ const res = await fetch(`/admin/api/content/${docId}`);
56
+ if (!res.ok)
57
+ return;
58
+ const data = (await res.json());
59
+ const content = data.content ?? {};
60
+ setProcessing({
61
+ processingState: (content.processing_state ?? 'pending'),
62
+ processingError: content.processing_error ?? null,
63
+ transcriptUrl: content.transcript_url ?? null,
64
+ hlsPosterUrl: content.hls_poster_url ?? null,
65
+ });
66
+ // Transcript lives in the content sub-table.
67
+ const tx = content?.transcript ?? content?.script ?? null;
68
+ setTranscript(tx);
69
+ if (!editingTranscript) {
70
+ setTranscriptDraft(tx ?? '');
71
+ }
72
+ }
73
+ catch {
74
+ // non-fatal
75
+ }
76
+ finally {
77
+ setLoading(false);
78
+ }
79
+ }, [docId, editingTranscript]);
80
+ // Initial fetch.
81
+ useEffect(() => {
82
+ void fetchStatus();
83
+ }, [fetchStatus]);
84
+ // Polling while mid-flight.
85
+ useEffect(() => {
86
+ const pill = foundryPillState(processing.processingState);
87
+ if (pill === 'working' && processing.processingState !== 'pending') {
88
+ pollRef.current = setTimeout(() => void fetchStatus(), POLL_INTERVAL_MS);
89
+ }
90
+ return () => {
91
+ if (pollRef.current !== null) {
92
+ clearTimeout(pollRef.current);
93
+ pollRef.current = null;
94
+ }
95
+ };
96
+ }, [processing.processingState, fetchStatus]);
97
+ // Dispatch to Foundry.
98
+ const handleDispatch = useCallback(async () => {
99
+ setDispatching(true);
100
+ setDispatchError(null);
101
+ try {
102
+ await runAction(docId, 'dispatch-to-foundry');
103
+ await fetchStatus();
104
+ onChanged?.();
105
+ }
106
+ catch (e) {
107
+ setDispatchError(e instanceof Error ? e.message : 'Dispatch failed');
108
+ }
109
+ finally {
110
+ setDispatching(false);
111
+ }
112
+ }, [docId, fetchStatus, onChanged]);
113
+ // Save edited transcript.
114
+ const handleSaveTranscript = useCallback(async () => {
115
+ setSavingTranscript(true);
116
+ try {
117
+ // PATCH the transcript field via the content update route.
118
+ // For video: the column is video_content.transcript (via PATCH { content: { transcript } }).
119
+ // For podcast: same via podcast_content.script or transcript field.
120
+ await patchContent(docId, { content: { transcript: transcriptDraft } });
121
+ setTranscript(transcriptDraft);
122
+ setEditingTranscript(false);
123
+ onChanged?.();
124
+ }
125
+ catch {
126
+ // non-fatal
127
+ }
128
+ finally {
129
+ setSavingTranscript(false);
130
+ }
131
+ }, [docId, transcriptDraft, onChanged]);
132
+ // -------------------------------------------------------------------------
133
+ // Derived state
134
+ // -------------------------------------------------------------------------
135
+ const pillState = foundryPillState(processing.processingState);
136
+ const stages = processingStages(processing.processingState, contentType);
137
+ const isWorking = pillState === 'working' && processing.processingState !== 'pending';
138
+ const canDispatch = !dispatching && !isWorking;
139
+ const dispatchLabel = processing.processingState === 'pending' || processing.processingState === 'failed'
140
+ ? processing.processingState === 'failed'
141
+ ? 'Re-run pipeline'
142
+ : 'Dispatch to Foundry'
143
+ : pillState === 'ready'
144
+ ? 'Re-run pipeline'
145
+ : 'Processing…';
146
+ // -------------------------------------------------------------------------
147
+ // Render
148
+ // -------------------------------------------------------------------------
149
+ if (loading) {
150
+ return (_jsx("div", { style: placeholderWrap, children: _jsx("span", { style: mutedText, children: "Loading pipeline status\u2026" }) }));
151
+ }
152
+ return (_jsxs("div", { children: [_jsxs(Section, { title: "Pipeline", icon: "bolt", children: [_jsxs("div", { style: headerRow, children: [_jsx(StatusPill, { pill: pillState, state: processing.processingState }), _jsx("button", { type: "button", className: "btn primary sm", disabled: !canDispatch, style: { opacity: canDispatch ? 1 : 0.6 }, onClick: () => void handleDispatch(), children: dispatching ? (_jsx("span", { children: "Dispatching\u2026" })) : (_jsxs(_Fragment, { children: [_jsx(Icon, { name: "upload", size: 14 }), dispatchLabel] })) })] }), dispatchError && _jsx("p", { style: errorText, children: dispatchError }), _jsx("ul", { style: stageList, children: stages.map((stage, idx) => (
153
+ // biome-ignore lint/suspicious/noArrayIndexKey: stable ordered pipeline stages
154
+ _jsxs("li", { style: stageItem, children: [_jsx(StageIcon, { done: stage.done, active: stage.active, error: stage.error }), _jsx("span", { style: {
155
+ ...stageLabel,
156
+ fontWeight: stage.active ? 700 : 400,
157
+ color: stage.active
158
+ ? 'var(--ink)'
159
+ : stage.done
160
+ ? 'var(--ink-muted)'
161
+ : 'var(--ink-faint)',
162
+ }, children: stage.label }), _jsx("span", { style: stageEstimate, children: stage.estimate }), stage.active && isWorking && _jsx(SpinnerDot, {})] }, idx))) }), isWorking && (_jsx("div", { style: progressTrack, children: _jsx("div", { className: "skeleton-shimmer", style: progressFill }) })), processing.processingError && (_jsxs("p", { style: errorText, children: [_jsx(Icon, { name: "x", size: 12, style: { verticalAlign: 'middle', marginRight: 4 } }), processing.processingError] }))] }), _jsxs(Section, { title: "Thumbnail / cover", icon: "image", defaultOpen: false, children: [processing.hlsPosterUrl ? (_jsx("img", { src: processing.hlsPosterUrl, alt: "Video poster", style: thumbnailImg })) : (_jsxs("div", { style: thumbnailEmpty, children: [_jsx(Icon, { name: "image", size: 20, style: { color: 'var(--ink-faint)' } }), _jsx("span", { style: mutedText, children: "No thumbnail yet" })] })), _jsxs("button", { type: "button", disabled: true, title: "AI frame pick arrives in P4", className: "btn sm", style: { width: '100%', opacity: 0.55, cursor: 'not-allowed' }, children: [_jsx(Icon, { name: "sparkle", size: 14 }), "Pick best frame", _jsx("span", { style: p4Badge, children: "P4" })] })] }), _jsxs(Section, { title: "Transcript", icon: "history", defaultOpen: processing.processingState === 'ready', children: [processing.processingState === 'pending' && (_jsx("p", { style: mutedText, children: "Dispatch the pipeline to generate a transcript." })), processing.processingState !== 'pending' && !transcript && !editingTranscript && (_jsx("p", { style: mutedText, children: isWorking
163
+ ? 'Transcript will appear here once the pipeline completes.'
164
+ : 'No transcript available.' })), transcript && !editingTranscript && (_jsxs(_Fragment, { children: [_jsx("div", { style: transcriptDisplay, children: transcript }), _jsxs("button", { type: "button", className: "btn sm", style: { width: '100%' }, onClick: () => {
165
+ setTranscriptDraft(transcript);
166
+ setEditingTranscript(true);
167
+ }, children: [_jsx(Icon, { name: "edit", size: 14 }), "Edit transcript"] })] })), editingTranscript && (_jsxs("div", { style: editBlock, children: [_jsx("textarea", { className: "textarea", style: { fontSize: 12, lineHeight: 1.6 }, value: transcriptDraft, onChange: (e) => setTranscriptDraft(e.currentTarget.value), rows: 10, "aria-label": "Transcript editor" }), _jsxs("div", { style: editActions, children: [_jsx("button", { type: "button", className: "btn primary sm", disabled: savingTranscript, onClick: () => void handleSaveTranscript(), children: savingTranscript ? 'Saving…' : 'Save transcript' }), _jsx("button", { type: "button", className: "btn ghost sm", onClick: () => {
168
+ setEditingTranscript(false);
169
+ setTranscriptDraft(transcript ?? '');
170
+ }, children: "Cancel" })] })] }))] })] }));
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // StatusPill — pill for working / ready / failed
174
+ // ---------------------------------------------------------------------------
175
+ function StatusPill({ pill, state, }) {
176
+ const label = pill === 'ready'
177
+ ? 'Ready'
178
+ : pill === 'failed'
179
+ ? 'Failed'
180
+ : state === 'pending'
181
+ ? 'Not dispatched'
182
+ : state === 'queued'
183
+ ? 'Queued'
184
+ : state === 'fetching'
185
+ ? 'Fetching source'
186
+ : state === 'transcribing'
187
+ ? 'Transcribing'
188
+ : 'Transcoding';
189
+ // Map pipeline pill state onto the broadsheet status-pill vocabulary:
190
+ // ready→published (green), failed→review (amber/red idiom), working→processing.
191
+ const cls = pill === 'ready' ? 'pill published' : pill === 'failed' ? 'pill review' : 'pill processing';
192
+ return (_jsxs("span", { className: cls, children: [_jsx("span", { className: "pdot" }), label] }));
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // StageIcon — checkmark / spinner / error indicator
196
+ // ---------------------------------------------------------------------------
197
+ function StageIcon({ done, active, error, }) {
198
+ // Broadsheet idiom: a tinted status disc holding a check / refresh / x glyph.
199
+ if (error) {
200
+ return (_jsx("span", { style: stageDisc('var(--red-tint)', 'var(--red)'), children: _jsx(Icon, { name: "x", size: 11 }) }));
201
+ }
202
+ if (done) {
203
+ return (_jsx("span", { style: stageDisc('var(--green-tint)', 'var(--green)'), children: _jsx(Icon, { name: "check", size: 11 }) }));
204
+ }
205
+ if (active) {
206
+ return (_jsx("span", { style: stageDisc('var(--amber-tint)', 'var(--amber)'), children: _jsx(Icon, { name: "refresh", size: 11 }) }));
207
+ }
208
+ return _jsx("span", { style: pendingDot });
209
+ }
210
+ // ---------------------------------------------------------------------------
211
+ // SpinnerDot — animated inline "working" indicator
212
+ // ---------------------------------------------------------------------------
213
+ function SpinnerDot() {
214
+ return _jsx("span", { style: spinnerDot, children: "\u2026" });
215
+ }
216
+ // ---------------------------------------------------------------------------
217
+ // Styles
218
+ // ---------------------------------------------------------------------------
219
+ const placeholderWrap = {
220
+ display: 'flex',
221
+ flexDirection: 'column',
222
+ alignItems: 'center',
223
+ justifyContent: 'center',
224
+ padding: 32,
225
+ textAlign: 'center',
226
+ gap: 8,
227
+ opacity: 0.75,
228
+ };
229
+ const mutedText = {
230
+ fontSize: 12,
231
+ color: 'var(--ink-faint)',
232
+ marginBottom: 6,
233
+ };
234
+ const headerRow = {
235
+ display: 'flex',
236
+ alignItems: 'center',
237
+ justifyContent: 'space-between',
238
+ gap: 10,
239
+ marginBottom: 12,
240
+ };
241
+ function stageDisc(bg, fg) {
242
+ return {
243
+ width: 18,
244
+ height: 18,
245
+ borderRadius: '50%',
246
+ flex: 'none',
247
+ display: 'grid',
248
+ placeItems: 'center',
249
+ background: bg,
250
+ color: fg,
251
+ };
252
+ }
253
+ const progressTrack = {
254
+ height: 5,
255
+ background: 'var(--hover)',
256
+ borderRadius: 3,
257
+ overflow: 'hidden',
258
+ marginTop: 8,
259
+ };
260
+ const progressFill = {
261
+ width: '100%',
262
+ height: '100%',
263
+ background: 'var(--gold)',
264
+ };
265
+ const errorText = {
266
+ fontSize: 11.5,
267
+ color: 'var(--red, #ef4444)',
268
+ marginTop: 6,
269
+ marginBottom: 0,
270
+ };
271
+ const stageList = {
272
+ listStyle: 'none',
273
+ margin: 0,
274
+ padding: 0,
275
+ display: 'flex',
276
+ flexDirection: 'column',
277
+ gap: 6,
278
+ };
279
+ const stageItem = {
280
+ display: 'flex',
281
+ alignItems: 'center',
282
+ gap: 8,
283
+ };
284
+ const stageLabel = {
285
+ fontSize: 12.5,
286
+ transition: 'color .15s',
287
+ flex: 1,
288
+ minWidth: 0,
289
+ };
290
+ const stageEstimate = {
291
+ fontSize: 11,
292
+ color: 'var(--ink-faint)',
293
+ fontFamily: 'var(--mono)',
294
+ flex: 'none',
295
+ };
296
+ const pendingDot = {
297
+ display: 'inline-block',
298
+ width: 18,
299
+ height: 18,
300
+ borderRadius: '50%',
301
+ background: 'var(--hover)',
302
+ border: '1px solid var(--border)',
303
+ flex: 'none',
304
+ };
305
+ const spinnerDot = {
306
+ fontSize: 14,
307
+ color: 'var(--accent, #6366f1)',
308
+ letterSpacing: 2,
309
+ marginLeft: 2,
310
+ };
311
+ const thumbnailImg = {
312
+ width: '100%',
313
+ aspectRatio: '16/9',
314
+ objectFit: 'cover',
315
+ borderRadius: 6,
316
+ marginBottom: 8,
317
+ background: 'var(--field, #f5f5f5)',
318
+ };
319
+ const thumbnailEmpty = {
320
+ display: 'flex',
321
+ flexDirection: 'column',
322
+ alignItems: 'center',
323
+ justifyContent: 'center',
324
+ height: 80,
325
+ borderRadius: 6,
326
+ border: '1px dashed var(--border)',
327
+ marginBottom: 8,
328
+ gap: 6,
329
+ };
330
+ const p4Badge = {
331
+ fontFamily: 'var(--mono)',
332
+ fontSize: 9,
333
+ fontWeight: 600,
334
+ background: 'var(--amber-tint)',
335
+ color: 'var(--amber)',
336
+ padding: '1px 4px',
337
+ borderRadius: 4,
338
+ marginLeft: 2,
339
+ };
340
+ const transcriptDisplay = {
341
+ fontSize: 12,
342
+ lineHeight: 1.6,
343
+ color: 'var(--ink)',
344
+ background: 'var(--field, #f5f5f5)',
345
+ borderRadius: 6,
346
+ padding: '10px 12px',
347
+ maxHeight: 180,
348
+ overflowY: 'auto',
349
+ marginBottom: 8,
350
+ whiteSpace: 'pre-wrap',
351
+ wordBreak: 'break-word',
352
+ };
353
+ const editBlock = {
354
+ display: 'flex',
355
+ flexDirection: 'column',
356
+ gap: 8,
357
+ };
358
+ const editActions = {
359
+ display: 'flex',
360
+ gap: 6,
361
+ };
362
+ //# sourceMappingURL=FoundryTab.js.map