@mevdragon/vidfarm-devcli 0.2.12 → 0.2.14

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 (205) hide show
  1. package/.env.example +37 -1
  2. package/README.md +27 -183
  3. package/SKILL.director.md +293 -0
  4. package/SKILL.platform.md +312 -0
  5. package/auto-create-hyperframe-templates/AUTO_CREATE_HYPERFRAME_TEMPLATES.md +275 -0
  6. package/auto-create-hyperframe-templates/extractor-system-prompt.md +128 -0
  7. package/auto-create-hyperframe-templates/input-manifest.schema.json +56 -0
  8. package/auto-create-hyperframe-templates/lambda-memory-estimator.md +118 -0
  9. package/auto-create-hyperframe-templates/production-graph.schema.json +314 -0
  10. package/auto-create-hyperframe-templates/runbook.md +198 -0
  11. package/auto-create-hyperframe-templates/scripts/create-hyperframe-template.mjs +368 -0
  12. package/auto-create-hyperframe-templates/template-plan.schema.json +311 -0
  13. package/auto-create-hyperframe-templates/template-planner-prompt.md +144 -0
  14. package/auto-create-templates/AUTO_CREATE_TEMPLATES.md +116 -0
  15. package/auto-create-templates/extractor-system-prompt.md +6 -1
  16. package/auto-create-templates/template-plan.schema.json +73 -2
  17. package/auto-create-templates/template-planner-prompt.md +62 -1
  18. package/dist/src/account-pages-legacy.js +363 -89
  19. package/dist/src/account-pages-legacy.js.map +1 -0
  20. package/dist/src/account-pages.js +3 -2
  21. package/dist/src/account-pages.js.map +1 -0
  22. package/dist/src/app.js +7096 -1294
  23. package/dist/src/app.js.map +1 -0
  24. package/dist/src/cli.js +115 -29
  25. package/dist/src/cli.js.map +1 -0
  26. package/dist/src/composition-runtime.js +581 -0
  27. package/dist/src/composition-runtime.js.map +1 -0
  28. package/dist/src/config.js +69 -11
  29. package/dist/src/config.js.map +1 -0
  30. package/dist/src/context.js +280 -21
  31. package/dist/src/context.js.map +1 -0
  32. package/dist/src/dev-app-legacy.js +18 -17
  33. package/dist/src/dev-app-legacy.js.map +1 -0
  34. package/dist/src/dev-app.js +1 -0
  35. package/dist/src/dev-app.js.map +1 -0
  36. package/dist/src/dev-serve.js +169 -0
  37. package/dist/src/dev-serve.js.map +1 -0
  38. package/dist/src/domain.js +2 -1
  39. package/dist/src/domain.js.map +1 -0
  40. package/dist/src/editor-chat-history.js +10 -0
  41. package/dist/src/editor-chat-history.js.map +1 -0
  42. package/dist/src/editor-chat.js +135 -25
  43. package/dist/src/editor-chat.js.map +1 -0
  44. package/dist/src/editor-dark-theme.js +1128 -0
  45. package/dist/src/editor-dark-theme.js.map +1 -0
  46. package/dist/src/frontend/flockposter-cache-store.js +10 -2
  47. package/dist/src/frontend/flockposter-cache-store.js.map +1 -0
  48. package/dist/src/frontend/homepage-client.js +6 -3
  49. package/dist/src/frontend/homepage-client.js.map +1 -0
  50. package/dist/src/frontend/homepage-shared.js +1 -0
  51. package/dist/src/frontend/homepage-shared.js.map +1 -0
  52. package/dist/src/frontend/homepage-store.js +1 -0
  53. package/dist/src/frontend/homepage-store.js.map +1 -0
  54. package/dist/src/frontend/homepage-view.js +131 -18
  55. package/dist/src/frontend/homepage-view.js.map +1 -0
  56. package/dist/src/frontend/page-runtime-client.js +27 -3
  57. package/dist/src/frontend/page-runtime-client.js.map +1 -0
  58. package/dist/src/frontend/page-runtime-store.js +1 -0
  59. package/dist/src/frontend/page-runtime-store.js.map +1 -0
  60. package/dist/src/frontend/sentry.js +42 -0
  61. package/dist/src/frontend/sentry.js.map +1 -0
  62. package/dist/src/frontend/template-editor-chat.js +1711 -212
  63. package/dist/src/frontend/template-editor-chat.js.map +1 -0
  64. package/dist/src/help-page.js +333 -0
  65. package/dist/src/help-page.js.map +1 -0
  66. package/dist/src/homepage.js +169 -47
  67. package/dist/src/homepage.js.map +1 -0
  68. package/dist/src/hyperframes/composition.js +180 -0
  69. package/dist/src/hyperframes/composition.js.map +1 -0
  70. package/dist/src/index.js +1 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/instrument.js +30 -0
  73. package/dist/src/instrument.js.map +1 -0
  74. package/dist/src/lib/crypto.js +1 -0
  75. package/dist/src/lib/crypto.js.map +1 -0
  76. package/dist/src/lib/dev-log.js +54 -0
  77. package/dist/src/lib/dev-log.js.map +1 -0
  78. package/dist/src/lib/display-name.js +11 -0
  79. package/dist/src/lib/display-name.js.map +1 -0
  80. package/dist/src/lib/ids.js +21 -1
  81. package/dist/src/lib/ids.js.map +1 -0
  82. package/dist/src/lib/images.js +1 -0
  83. package/dist/src/lib/images.js.map +1 -0
  84. package/dist/src/lib/json.js +1 -0
  85. package/dist/src/lib/json.js.map +1 -0
  86. package/dist/src/lib/template-dna.js +1 -0
  87. package/dist/src/lib/template-dna.js.map +1 -0
  88. package/dist/src/lib/template-paths.js +1 -0
  89. package/dist/src/lib/template-paths.js.map +1 -0
  90. package/dist/src/lib/template-style-options.js +29 -3
  91. package/dist/src/lib/template-style-options.js.map +1 -0
  92. package/dist/src/lib/time.js +1 -0
  93. package/dist/src/lib/time.js.map +1 -0
  94. package/dist/src/lib/video-quality-harness.js +60 -0
  95. package/dist/src/lib/video-quality-harness.js.map +1 -0
  96. package/dist/src/page-runtime.js +1 -0
  97. package/dist/src/page-runtime.js.map +1 -0
  98. package/dist/src/page-shell.js +403 -29
  99. package/dist/src/page-shell.js.map +1 -0
  100. package/dist/src/primitive-context.js +144 -8
  101. package/dist/src/primitive-context.js.map +1 -0
  102. package/dist/src/primitive-registry.js +1919 -78
  103. package/dist/src/primitive-registry.js.map +1 -0
  104. package/dist/src/primitive-sdk.js +1 -0
  105. package/dist/src/primitive-sdk.js.map +1 -0
  106. package/dist/src/primitives/remotion/html-image.js +3 -1
  107. package/dist/src/primitives/remotion/html-image.js.map +1 -0
  108. package/dist/src/primitives/remotion/media-slideshow.js +60 -0
  109. package/dist/src/primitives/remotion/media-slideshow.js.map +1 -0
  110. package/dist/src/react-page-shell.js +1 -0
  111. package/dist/src/react-page-shell.js.map +1 -0
  112. package/dist/src/ready-post-schedule-component.js +1 -0
  113. package/dist/src/ready-post-schedule-component.js.map +1 -0
  114. package/dist/src/registry.js +237 -24
  115. package/dist/src/registry.js.map +1 -0
  116. package/dist/src/runtime.js +3 -0
  117. package/dist/src/runtime.js.map +1 -0
  118. package/dist/src/services/api-call-history.js +4 -0
  119. package/dist/src/services/api-call-history.js.map +1 -0
  120. package/dist/src/services/auth.js +40 -50
  121. package/dist/src/services/auth.js.map +1 -0
  122. package/dist/src/services/billing.js +20 -44
  123. package/dist/src/services/billing.js.map +1 -0
  124. package/dist/src/services/chat-threads.js +10 -6
  125. package/dist/src/services/chat-threads.js.map +1 -0
  126. package/dist/src/services/fork-access.js +93 -0
  127. package/dist/src/services/fork-access.js.map +1 -0
  128. package/dist/src/services/fork-manifest.js +43 -0
  129. package/dist/src/services/fork-manifest.js.map +1 -0
  130. package/dist/src/services/ghostcut.js +132 -0
  131. package/dist/src/services/ghostcut.js.map +1 -0
  132. package/dist/src/services/hyperframes.js +1014 -0
  133. package/dist/src/services/hyperframes.js.map +1 -0
  134. package/dist/src/services/job-capacity.js +14 -0
  135. package/dist/src/services/job-capacity.js.map +1 -0
  136. package/dist/src/services/job-logs.js +4 -0
  137. package/dist/src/services/job-logs.js.map +1 -0
  138. package/dist/src/services/jobs.js +99 -91
  139. package/dist/src/services/jobs.js.map +1 -0
  140. package/dist/src/services/media-processing.js +743 -0
  141. package/dist/src/services/media-processing.js.map +1 -0
  142. package/dist/src/services/primitive-media-lambda.js +280 -0
  143. package/dist/src/services/primitive-media-lambda.js.map +1 -0
  144. package/dist/src/services/providers.js +1560 -178
  145. package/dist/src/services/providers.js.map +1 -0
  146. package/dist/src/services/rate-limits.js +3 -2
  147. package/dist/src/services/rate-limits.js.map +1 -0
  148. package/dist/src/services/remotion.js +495 -92
  149. package/dist/src/services/remotion.js.map +1 -0
  150. package/dist/src/services/serverless-auth.js +374 -0
  151. package/dist/src/services/serverless-auth.js.map +1 -0
  152. package/dist/src/services/serverless-jobs.js +1074 -0
  153. package/dist/src/services/serverless-jobs.js.map +1 -0
  154. package/dist/src/services/serverless-provider-keys.js +401 -0
  155. package/dist/src/services/serverless-provider-keys.js.map +1 -0
  156. package/dist/src/services/serverless-records.js +1088 -0
  157. package/dist/src/services/serverless-records.js.map +1 -0
  158. package/dist/src/services/serverless-template-configs.js +67 -0
  159. package/dist/src/services/serverless-template-configs.js.map +1 -0
  160. package/dist/src/services/storage.js +171 -35
  161. package/dist/src/services/storage.js.map +1 -0
  162. package/dist/src/services/template-certification.js +295 -3
  163. package/dist/src/services/template-certification.js.map +1 -0
  164. package/dist/src/services/template-loader.js +45 -1
  165. package/dist/src/services/template-loader.js.map +1 -0
  166. package/dist/src/services/template-runtime-bundles.js +217 -0
  167. package/dist/src/services/template-runtime-bundles.js.map +1 -0
  168. package/dist/src/services/template-sources.js +452 -87
  169. package/dist/src/services/template-sources.js.map +1 -0
  170. package/dist/src/services/video-normalization.js +2 -0
  171. package/dist/src/services/video-normalization.js.map +1 -0
  172. package/dist/src/services/webhooks.js +7 -6
  173. package/dist/src/services/webhooks.js.map +1 -0
  174. package/dist/src/template-editor-pages.js +2051 -1869
  175. package/dist/src/template-editor-pages.js.map +1 -0
  176. package/dist/src/template-editor-shell.js +1376 -181
  177. package/dist/src/template-editor-shell.js.map +1 -0
  178. package/dist/src/template-sdk.js +1 -0
  179. package/dist/src/template-sdk.js.map +1 -0
  180. package/dist/src/worker.js +11 -226
  181. package/dist/src/worker.js.map +1 -0
  182. package/package.json +47 -12
  183. package/public/assets/homepage-client-app.js +34 -8
  184. package/public/assets/page-runtime-client-app.js +44 -18
  185. package/readme.secret.md +89 -0
  186. package/templates/vidfarm_template_0000/README.md +106 -0
  187. package/templates/vidfarm_template_0000/SKILL.md +266 -0
  188. package/templates/vidfarm_template_0000/assets/Abel-Regular.ttf +0 -0
  189. package/templates/vidfarm_template_0000/assets/DMSerifDisplay-Regular.ttf +0 -0
  190. package/templates/vidfarm_template_0000/assets/Montserrat[wght].ttf +0 -0
  191. package/templates/vidfarm_template_0000/assets/SourceCodePro[wght].ttf +0 -0
  192. package/templates/vidfarm_template_0000/assets/TikTokSans-SemiBold.ttf +0 -0
  193. package/templates/vidfarm_template_0000/assets/Yesteryear-Regular.ttf +0 -0
  194. package/templates/vidfarm_template_0000/composition.json +11 -0
  195. package/templates/vidfarm_template_0000/src/lib/images.js +221 -0
  196. package/templates/vidfarm_template_0000/src/remotion/Root.js +33 -0
  197. package/templates/vidfarm_template_0000/src/remotion/index.js +3 -0
  198. package/templates/vidfarm_template_0000/src/sdk.js +3 -0
  199. package/templates/vidfarm_template_0000/src/style-options.js +200 -0
  200. package/templates/vidfarm_template_0000/src/template-dna.js +9 -0
  201. package/templates/vidfarm_template_0000/src/template.js +1566 -0
  202. package/templates/vidfarm_template_0000/template.config.json +21 -0
  203. package/GETTING_STARTED.developers.md +0 -87
  204. package/SKILL.developer.md +0 -1186
  205. package/dist/src/db.js +0 -2007
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-runtime.js","sourceRoot":"","sources":["../../src/page-runtime.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { EDITOR_DARK_THEME_CSS } from "./editor-dark-theme.js";
1
2
  export function escapeHtml(value) {
2
3
  return value
3
4
  .replace(/&/g, "&")
@@ -22,6 +23,9 @@ export function withAccountQuery(href, accountId) {
22
23
  if (url.pathname.startsWith("/u/")) {
23
24
  return `${url.pathname}${url.search}${url.hash}`;
24
25
  }
26
+ if (url.pathname === "/discover" || url.pathname.startsWith("/discover/") || url.pathname === "/help") {
27
+ return `${url.pathname}${url.search}${url.hash}`;
28
+ }
25
29
  return `/u/${encodeURIComponent(accountId)}${url.pathname}${url.search}${url.hash}`;
26
30
  }
27
31
  export function resolveAccountDisplayName(input) {
@@ -48,20 +52,60 @@ function renderNavIcon(kind) {
48
52
  if (kind === "calendar") {
49
53
  return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="10" r="7.2"/><path d="M10 6.3v4.1l2.8 1.7"/></svg>`;
50
54
  }
51
- return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M14.8 15.2a5.4 5.4 0 1 0-9.6 0"/><circle cx="10" cy="6.8" r="3.1"/></svg>`;
55
+ if (kind === "chat") {
56
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4.2 5.2a2 2 0 0 1 2-2h7.6a2 2 0 0 1 2 2v5.6a2 2 0 0 1-2 2H9.2l-4.1 3.1v-3.1a2 2 0 0 1-.9-1.7Z"/><path d="M7.3 7.1h5.4"/><path d="M7.3 9.6h3.7"/></svg>`;
57
+ }
58
+ if (kind === "settings") {
59
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M14.8 15.2a5.4 5.4 0 1 0-9.6 0"/><circle cx="10" cy="6.8" r="3.1"/></svg>`;
60
+ }
61
+ if (kind === "help") {
62
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="10" r="7.2"/><path d="M8.1 8a2.2 2.2 0 1 1 3.7 1.6c-.8.7-1.4 1.1-1.4 2.2"/><path d="M10 14.8h.01"/></svg>`;
63
+ }
64
+ return `<svg viewBox="0 0 20 20" fill="currentColor"><circle cx="4.2" cy="10" r="1.45"/><circle cx="10" cy="10" r="1.45"/><circle cx="15.8" cy="10" r="1.45"/></svg>`;
65
+ }
66
+ function renderMenuIcon() {
67
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M3.5 5.5h13"/><path d="M3.5 10h13"/><path d="M3.5 14.5h13"/></svg>`;
52
68
  }
53
69
  export function renderPrimaryNav(input) {
54
70
  const items = input.loggedIn
55
71
  ? [
56
- { id: "discover", href: withAccountQuery("/discover", input.accountId), label: "Discover", icon: renderNavIcon("discover") },
72
+ { id: "discover", href: withAccountQuery("/discover", input.accountId), label: "Studio", icon: renderNavIcon("discover") },
57
73
  { id: "library", href: withAccountQuery("/library", input.accountId), label: "Library", icon: renderNavIcon("library") },
58
74
  { id: "calendar", href: withAccountQuery("/calendar", input.accountId), label: "Calendar", icon: renderNavIcon("calendar") },
59
75
  { id: "settings", href: withAccountQuery("/settings", input.accountId), label: "Settings", icon: renderNavIcon("settings") }
60
76
  ]
61
77
  : [
62
- { id: "discover", href: "/discover", label: "Discover", icon: renderNavIcon("discover") },
78
+ { id: "discover", href: "/discover", label: "Studio", icon: renderNavIcon("discover") },
63
79
  { id: "login", href: "/login", label: "Login", icon: renderNavIcon("settings") }
64
80
  ];
81
+ const menuItems = input.loggedIn
82
+ ? [
83
+ { id: "job-runs", href: withAccountQuery("/job-runs", input.accountId), label: "Run History" },
84
+ { id: "inpaint", href: withAccountQuery("/inpaint", input.accountId), label: "Inpaint" },
85
+ { id: "help", href: "/help", label: "Help" },
86
+ { id: "logout", action: "logout", label: "Log Out" }
87
+ ]
88
+ : [
89
+ { id: "help", href: "/help", label: "Help" },
90
+ { id: "login", href: "/login", label: "Login" }
91
+ ];
92
+ const mobileMenuPrimaryItems = items.filter((item) => !menuItems.some((menuItem) => menuItem.id === item.id));
93
+ const logoutDialog = input.loggedIn ? `
94
+ <dialog class="logout-dialog" data-logout-dialog>
95
+ <div class="logout-dialog-head">
96
+ <div class="label logout-dialog-kicker">Log out</div>
97
+ <h3>Log out of this browser?</h3>
98
+ <p>This clears the stored developer key, workspace access, and local session state for the current browser.</p>
99
+ </div>
100
+ <div class="toolbar logout-dialog-actions">
101
+ <button type="button" class="secondary" data-close-logout-dialog>Cancel</button>
102
+ <form method="post" action="/logout" data-logout-form>
103
+ <input type="hidden" name="account" value="${escapeAttribute(input.accountId ?? "")}" />
104
+ <button type="submit" class="danger">Yes, log out</button>
105
+ </form>
106
+ </div>
107
+ </dialog>
108
+ ` : "";
65
109
  return `
66
110
  <nav class="primary-nav" aria-label="Primary">
67
111
  ${items.map((item) => `
@@ -70,7 +114,40 @@ export function renderPrimaryNav(input) {
70
114
  <span>${item.label}</span>
71
115
  </a>
72
116
  `).join("")}
117
+ ${menuItems.map((item) => `
118
+ ${"href" in item ? `
119
+ <a class="nav-link nav-mobile-extra${item.id === input.current ? " is-active" : ""}" href="${escapeAttribute(item.href ?? "#")}">
120
+ <span>${escapeHtml(item.label)}</span>
121
+ </a>
122
+ ` : `
123
+ <button type="button" class="nav-link nav-mobile-extra nav-action-link" data-open-logout-dialog>
124
+ <span>${escapeHtml(item.label)}</span>
125
+ </button>
126
+ `}
127
+ `).join("")}
128
+ ${menuItems.length ? `
129
+ <details class="nav-menu">
130
+ <summary class="nav-link nav-menu-trigger" aria-label="Open navigation menu">
131
+ <span class="nav-icon nav-menu-desktop-icon" aria-hidden="true">${renderNavIcon("more")}</span>
132
+ <span class="nav-icon nav-menu-mobile-icon" aria-hidden="true">${renderMenuIcon()}</span>
133
+ <span class="nav-menu-label">Menu</span>
134
+ </summary>
135
+ <div class="nav-menu-panel" role="menu">
136
+ ${mobileMenuPrimaryItems.map((item) => `
137
+ <a class="nav-menu-item nav-menu-mobile-only${item.id === input.current ? " is-active" : ""}" role="menuitem" href="${escapeAttribute(item.href ?? "#")}">${escapeHtml(item.label)}</a>
138
+ `).join("")}
139
+ ${menuItems.map((item) => `
140
+ ${"href" in item ? `
141
+ <a class="nav-menu-item${item.id === input.current ? " is-active" : ""}" role="menuitem" href="${escapeAttribute(item.href ?? "#")}">${escapeHtml(item.label)}</a>
142
+ ` : `
143
+ <button type="button" class="nav-menu-item nav-menu-button" role="menuitem" data-open-logout-dialog>${escapeHtml(item.label)}</button>
144
+ `}
145
+ `).join("")}
146
+ </div>
147
+ </details>
148
+ ` : ""}
73
149
  </nav>
150
+ ${logoutDialog}
74
151
  `;
75
152
  }
76
153
  export function renderBrandLockup(input) {
@@ -91,6 +168,7 @@ export function renderBrandLockup(input) {
91
168
  `;
92
169
  }
93
170
  export function renderPageShell(input) {
171
+ const isEditorTheme = input.bodyClass?.split(/\s+/).includes("is-editor-theme") ?? false;
94
172
  return `<!doctype html>
95
173
  <html lang="en">
96
174
  <head>
@@ -100,7 +178,7 @@ export function renderPageShell(input) {
100
178
  <link rel="icon" href="/assets/favicon.ico" sizes="any" />
101
179
  <link rel="preconnect" href="https://fonts.googleapis.com" />
102
180
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
103
- <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
181
+ <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@500;600;700;800&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
104
182
  <style>
105
183
  :root {
106
184
  color-scheme: light;
@@ -380,6 +458,95 @@ export function renderPageShell(input) {
380
458
  box-shadow: 0 8px 20px rgba(101, 73, 18, 0.08);
381
459
  }
382
460
 
461
+ .nav-menu {
462
+ position: relative;
463
+ flex: 0 0 auto;
464
+ }
465
+
466
+ .nav-menu > summary {
467
+ list-style: none;
468
+ cursor: pointer;
469
+ }
470
+
471
+ .nav-menu > summary::-webkit-details-marker {
472
+ display: none;
473
+ }
474
+
475
+ .nav-menu-trigger {
476
+ min-width: 34px;
477
+ padding: 0 8px;
478
+ color: rgba(111, 100, 81, 0.68);
479
+ }
480
+
481
+ .nav-menu-trigger:hover,
482
+ .nav-menu[open] > .nav-menu-trigger {
483
+ color: rgba(47, 55, 72, 0.82);
484
+ }
485
+
486
+ .nav-menu-label {
487
+ display: none;
488
+ }
489
+
490
+ .nav-menu-mobile-icon,
491
+ .nav-menu-mobile-only {
492
+ display: none;
493
+ }
494
+
495
+ .nav-menu-panel {
496
+ position: absolute;
497
+ z-index: 40;
498
+ top: calc(100% + 8px);
499
+ right: 0;
500
+ display: grid;
501
+ width: max-content;
502
+ min-width: 142px;
503
+ padding: 6px;
504
+ border: 1px solid rgba(191, 164, 109, 0.3);
505
+ border-radius: 14px;
506
+ background: rgba(255, 252, 247, 0.98);
507
+ box-shadow: 0 18px 38px rgba(81, 58, 20, 0.15);
508
+ }
509
+
510
+ .nav-menu-item {
511
+ display: flex;
512
+ align-items: center;
513
+ justify-content: flex-start;
514
+ width: 100%;
515
+ min-height: 34px;
516
+ padding: 0 10px;
517
+ border: 0;
518
+ border-radius: 10px;
519
+ background: transparent;
520
+ color: #5d6a80;
521
+ font-size: 0.88rem;
522
+ font-weight: 700;
523
+ font-family: inherit;
524
+ text-align: left;
525
+ text-decoration: none;
526
+ white-space: nowrap;
527
+ cursor: pointer;
528
+ }
529
+
530
+ .nav-menu-item:hover,
531
+ .nav-menu-item.is-active {
532
+ background: rgba(244, 236, 223, 0.86);
533
+ color: var(--ink);
534
+ }
535
+
536
+ .nav-menu-item.nav-menu-mobile-only {
537
+ display: none;
538
+ }
539
+
540
+ .nav-action-link {
541
+ border: 1px solid transparent;
542
+ background: transparent;
543
+ font-family: inherit;
544
+ }
545
+
546
+ .nav-mobile-extra {
547
+ display: none;
548
+ }
549
+
383
550
  .nav-icon,
384
551
  .nav-icon svg {
385
552
  width: 16px;
@@ -506,6 +673,55 @@ export function renderPageShell(input) {
506
673
  grid-template-columns: repeat(3, minmax(0, 1fr));
507
674
  }
508
675
 
676
+ .logout-dialog {
677
+ width: min(28rem, calc(100vw - 1.5rem));
678
+ padding: 0;
679
+ border: 1px solid rgba(235, 195, 195, 0.96);
680
+ border-radius: 30px;
681
+ background: rgba(255, 250, 250, 0.98);
682
+ box-shadow: 0 28px 72px rgba(113, 30, 30, 0.16);
683
+ }
684
+
685
+ .logout-dialog::backdrop {
686
+ background: rgba(36, 24, 24, 0.24);
687
+ backdrop-filter: blur(8px);
688
+ }
689
+
690
+ .logout-dialog-head {
691
+ display: grid;
692
+ gap: 12px;
693
+ padding: 24px 24px 20px;
694
+ border-bottom: 1px solid rgba(235, 195, 195, 0.96);
695
+ background: rgba(148, 47, 47, 0.05);
696
+ }
697
+
698
+ .logout-dialog-kicker {
699
+ margin-bottom: 0;
700
+ color: #a33f3f;
701
+ }
702
+
703
+ .logout-dialog-head h3 {
704
+ margin: 0;
705
+ font-size: 2rem;
706
+ line-height: 0.95;
707
+ letter-spacing: -0.05em;
708
+ color: #571d1d;
709
+ }
710
+
711
+ .logout-dialog-head p {
712
+ margin: 0;
713
+ color: rgba(109, 36, 36, 0.8);
714
+ }
715
+
716
+ .logout-dialog-actions {
717
+ justify-content: flex-end;
718
+ padding: 20px 24px 24px;
719
+ }
720
+
721
+ .logout-dialog-actions form {
722
+ margin: 0;
723
+ }
724
+
509
725
  .stack {
510
726
  display: grid;
511
727
  gap: 16px;
@@ -582,6 +798,25 @@ export function renderPageShell(input) {
582
798
  color: var(--ink);
583
799
  }
584
800
 
801
+ .button.danger,
802
+ button.danger {
803
+ border-color: rgba(192, 90, 90, 0.42);
804
+ background: #9f3d3d;
805
+ color: #fff8f8;
806
+ }
807
+
808
+ .button.danger:hover,
809
+ button.danger:hover {
810
+ border-color: rgba(160, 58, 58, 0.62);
811
+ box-shadow: 0 12px 28px rgba(128, 38, 38, 0.18);
812
+ }
813
+
814
+ .nav-menu-button:hover,
815
+ .nav-action-link:hover {
816
+ transform: none;
817
+ box-shadow: none;
818
+ }
819
+
585
820
  .button.ghost,
586
821
  button.ghost,
587
822
  .link-button.ghost {
@@ -764,7 +999,9 @@ export function renderPageShell(input) {
764
999
 
765
1000
  ${input.style ?? ""}
766
1001
 
767
- @media (max-width: 767px) {
1002
+ ${isEditorTheme ? EDITOR_DARK_THEME_CSS : ""}
1003
+
1004
+ @media (max-width: 1024px) {
768
1005
  .hero-grid,
769
1006
  .split-grid,
770
1007
  .page-hero {
@@ -772,7 +1009,7 @@ export function renderPageShell(input) {
772
1009
  }
773
1010
  }
774
1011
 
775
- @media (max-width: 767px) {
1012
+ @media (max-width: 1024px) {
776
1013
  html,
777
1014
  body {
778
1015
  height: auto;
@@ -808,7 +1045,7 @@ export function renderPageShell(input) {
808
1045
  }
809
1046
 
810
1047
  .brand-lockup {
811
- flex: 0 0 auto;
1048
+ flex: 1 1 auto;
812
1049
  width: auto;
813
1050
  gap: 7px;
814
1051
  }
@@ -835,7 +1072,7 @@ export function renderPageShell(input) {
835
1072
  }
836
1073
 
837
1074
  .topbar-actions {
838
- flex: 1 1 auto;
1075
+ flex: 0 0 auto;
839
1076
  width: auto;
840
1077
  justify-content: flex-end;
841
1078
  overflow: visible;
@@ -855,36 +1092,104 @@ export function renderPageShell(input) {
855
1092
  .primary-nav {
856
1093
  min-width: 0;
857
1094
  width: auto;
858
- max-width: 100%;
1095
+ max-width: none;
859
1096
  flex-wrap: nowrap;
860
1097
  justify-content: flex-end;
861
- gap: 2px;
862
- padding: 2px;
863
- border-radius: 18px;
864
- overflow: hidden;
1098
+ gap: 0;
1099
+ padding: 0;
1100
+ border: 0;
1101
+ border-radius: 0;
1102
+ background: transparent;
1103
+ box-shadow: none;
1104
+ overflow: visible;
1105
+ }
1106
+
1107
+ .primary-nav > .nav-link {
1108
+ display: none;
865
1109
  }
866
1110
 
867
1111
  .nav-link {
868
- flex: 0 1 auto;
869
- min-height: 34px;
870
- gap: 4px;
871
- padding: 0 6px;
1112
+ flex: 0 0 auto;
1113
+ min-height: 44px;
1114
+ gap: 6px;
1115
+ padding: 0 12px;
872
1116
  border-radius: 14px;
873
- font-size: 0.68rem;
1117
+ font-size: 0.86rem;
1118
+ }
1119
+
1120
+ .nav-mobile-extra {
1121
+ display: none;
1122
+ }
1123
+
1124
+ .nav-menu {
1125
+ display: block;
1126
+ }
1127
+
1128
+ .nav-menu-trigger {
1129
+ min-width: 44px;
1130
+ width: 44px;
1131
+ height: 44px;
1132
+ padding: 0;
1133
+ border: 1px solid rgba(191, 164, 109, 0.32);
1134
+ border-radius: 15px;
1135
+ background: rgba(255, 252, 247, 0.96);
1136
+ color: var(--ink);
1137
+ box-shadow: 0 8px 18px rgba(138, 102, 32, 0.1);
1138
+ }
1139
+
1140
+ .nav-menu-desktop-icon {
1141
+ display: none;
1142
+ }
1143
+
1144
+ .nav-menu-mobile-icon {
1145
+ display: inline-flex;
1146
+ }
1147
+
1148
+ .nav-menu-panel {
1149
+ top: calc(100% + 10px);
1150
+ right: 0;
1151
+ width: min(82vw, 260px);
1152
+ min-width: 190px;
1153
+ max-height: calc(100svh - 92px);
1154
+ overflow: auto;
1155
+ padding: 8px;
1156
+ border-radius: 16px;
1157
+ box-shadow: 0 20px 46px rgba(81, 58, 20, 0.18);
1158
+ }
1159
+
1160
+ .nav-menu-item {
1161
+ min-height: 42px;
1162
+ padding: 0 12px;
1163
+ border-radius: 12px;
1164
+ font-size: 0.88rem;
1165
+ }
1166
+
1167
+ .nav-menu-item.nav-menu-mobile-only {
1168
+ display: flex;
874
1169
  }
875
1170
 
876
1171
  .nav-link > span:not(.nav-icon) {
877
- display: inline;
878
- min-width: 0;
879
- overflow: visible;
880
- text-overflow: clip;
881
- white-space: nowrap;
1172
+ display: none;
1173
+ }
1174
+
1175
+ .nav-link > .nav-menu-label {
1176
+ display: none;
882
1177
  }
883
1178
 
884
1179
  .nav-icon,
885
1180
  .nav-icon svg {
886
- width: 12px;
887
- height: 12px;
1181
+ width: 18px;
1182
+ height: 18px;
1183
+ }
1184
+
1185
+ @media (max-width: 560px) {
1186
+ .primary-nav > .nav-link {
1187
+ display: none;
1188
+ }
1189
+
1190
+ .primary-nav > .nav-link > span:not(.nav-icon) {
1191
+ display: none;
1192
+ }
888
1193
  }
889
1194
 
890
1195
  @media (max-width: 374px) {
@@ -906,13 +1211,13 @@ export function renderPageShell(input) {
906
1211
  }
907
1212
 
908
1213
  .primary-nav {
909
- gap: 1px;
1214
+ gap: 3px;
910
1215
  }
911
1216
 
912
1217
  .nav-link {
913
1218
  gap: 3px;
914
- padding: 0 4px;
915
- font-size: 0.62rem;
1219
+ padding: 0 6px;
1220
+ font-size: 0.72rem;
916
1221
  }
917
1222
  }
918
1223
 
@@ -926,16 +1231,85 @@ export function renderPageShell(input) {
926
1231
  }
927
1232
  }
928
1233
  </style>
1234
+ <script src="/assets/sentry-config.js"></script>
929
1235
  </head>
930
- <body>
1236
+ <body${input.bodyClass ? ` class="${escapeAttribute(input.bodyClass)}"` : ""}>
931
1237
  <main class="app-shell${input.mainClass ? ` ${escapeHtml(input.mainClass)}` : ""}">
932
1238
  <div class="page-stack${input.shellClass ? ` ${escapeHtml(input.shellClass)}` : ""}">
933
1239
  ${input.body}
934
1240
  </div>
935
1241
  </main>
1242
+ <script>
1243
+ (() => {
1244
+ const logoutDialog = document.querySelector("[data-logout-dialog]");
1245
+ const logoutForm = document.querySelector("[data-logout-form]");
1246
+ const openLogoutButtons = document.querySelectorAll("[data-open-logout-dialog]");
1247
+ const closeLogoutButtons = document.querySelectorAll("[data-close-logout-dialog]");
1248
+
1249
+ function clearLogoutAccountCache() {
1250
+ if (!(logoutForm instanceof HTMLFormElement)) {
1251
+ return;
1252
+ }
1253
+ const account = String(new FormData(logoutForm).get("account") || "").trim();
1254
+ if (!account) {
1255
+ return;
1256
+ }
1257
+ try {
1258
+ const registryIndexKey = "vidfarm:agency:accounts:index";
1259
+ const rawIds = window.localStorage.getItem(registryIndexKey);
1260
+ const ids = rawIds ? JSON.parse(rawIds) : [];
1261
+ if (Array.isArray(ids)) {
1262
+ window.localStorage.setItem(registryIndexKey, JSON.stringify(ids.filter((value) => value !== account)));
1263
+ }
1264
+ window.localStorage.removeItem("vidfarm:agency:account_" + account);
1265
+ window.localStorage.removeItem("vidfarm:flockposter-cache:v1_" + account);
1266
+ window.localStorage.removeItem("vidfarm:discover-bookmarks:v1_" + account);
1267
+ } catch {
1268
+ // Ignore storage failures.
1269
+ }
1270
+ }
1271
+
1272
+ if (logoutDialog instanceof HTMLDialogElement && openLogoutButtons.length) {
1273
+ openLogoutButtons.forEach((button) => {
1274
+ button.addEventListener("click", () => {
1275
+ if (!logoutDialog.open) {
1276
+ logoutDialog.showModal();
1277
+ }
1278
+ });
1279
+ });
1280
+ closeLogoutButtons.forEach((button) => {
1281
+ button.addEventListener("click", () => logoutDialog.close());
1282
+ });
1283
+ logoutDialog.addEventListener("click", (event) => {
1284
+ const rect = logoutDialog.getBoundingClientRect();
1285
+ const isBackdropClick =
1286
+ event.clientX < rect.left ||
1287
+ event.clientX > rect.right ||
1288
+ event.clientY < rect.top ||
1289
+ event.clientY > rect.bottom;
1290
+ if (isBackdropClick) {
1291
+ logoutDialog.close();
1292
+ }
1293
+ });
1294
+ } else if (openLogoutButtons.length && logoutForm instanceof HTMLFormElement) {
1295
+ openLogoutButtons.forEach((button) => {
1296
+ button.addEventListener("click", () => {
1297
+ if (window.confirm("Log out of this browser and clear local workspace access?")) {
1298
+ logoutForm.requestSubmit();
1299
+ }
1300
+ });
1301
+ });
1302
+ }
1303
+
1304
+ if (logoutForm instanceof HTMLFormElement) {
1305
+ logoutForm.addEventListener("submit", clearLogoutAccountCache);
1306
+ }
1307
+ })();
1308
+ </script>
936
1309
  ${input.runtimeBoot ? `<div id="page-runtime-root" hidden></div>
937
1310
  <script id="page-runtime-boot" type="application/json">${escapeJsonForHtml(input.runtimeBoot)}</script>
938
1311
  <script type="module" src="/assets/page-runtime-client-app.js"></script>` : ""}
939
1312
  </body>
940
1313
  </html>`;
941
1314
  }
1315
+ //# sourceMappingURL=page-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-shell.js","sourceRoot":"","sources":["../../src/page-shell.ts"],"names":[],"mappings":"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"}