@elytracms/studio 0.0.1

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 (558) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/convex/assets.ts +107 -0
  4. package/convex/auth.config.ts +15 -0
  5. package/convex/auth.ts +50 -0
  6. package/convex/cliTokens.ts +63 -0
  7. package/convex/cms.ts +174 -0
  8. package/convex/content.ts +316 -0
  9. package/convex/delivery.ts +266 -0
  10. package/convex/functions.ts +35 -0
  11. package/convex/graphs.ts +51 -0
  12. package/convex/guard.ts +67 -0
  13. package/convex/http.ts +30 -0
  14. package/convex/members.ts +83 -0
  15. package/convex/publishing.ts +102 -0
  16. package/convex/references.ts +168 -0
  17. package/convex/schema.ts +173 -0
  18. package/convex/sync.ts +322 -0
  19. package/convex/tsconfig.json +12 -0
  20. package/convex/users.ts +23 -0
  21. package/convex/webhooks.ts +85 -0
  22. package/dist/components/assets/asset-library.d.ts +14 -0
  23. package/dist/components/assets/asset-library.js +191 -0
  24. package/dist/components/assets/asset-library.js.map +1 -0
  25. package/dist/components/assets/asset-metadata.d.ts +34 -0
  26. package/dist/components/assets/asset-metadata.js +40 -0
  27. package/dist/components/assets/asset-metadata.js.map +1 -0
  28. package/dist/components/assets/asset-search.d.ts +7 -0
  29. package/dist/components/assets/asset-search.js +12 -0
  30. package/dist/components/assets/asset-search.js.map +1 -0
  31. package/dist/components/assets/asset-selection.d.ts +17 -0
  32. package/dist/components/assets/asset-selection.js +33 -0
  33. package/dist/components/assets/asset-selection.js.map +1 -0
  34. package/dist/components/assets/assets-store.d.ts +51 -0
  35. package/dist/components/assets/assets-store.js +153 -0
  36. package/dist/components/assets/assets-store.js.map +1 -0
  37. package/dist/components/auth-context.d.ts +38 -0
  38. package/dist/components/auth-context.js +88 -0
  39. package/dist/components/auth-context.js.map +1 -0
  40. package/dist/components/backend-gate.d.ts +19 -0
  41. package/dist/components/backend-gate.js +63 -0
  42. package/dist/components/backend-gate.js.map +1 -0
  43. package/dist/components/breadcrumb-context.d.ts +39 -0
  44. package/dist/components/breadcrumb-context.js +38 -0
  45. package/dist/components/breadcrumb-context.js.map +1 -0
  46. package/dist/components/builder/blocks-model.d.ts +80 -0
  47. package/dist/components/builder/blocks-model.js +181 -0
  48. package/dist/components/builder/blocks-model.js.map +1 -0
  49. package/dist/components/builder/blocks-panel.d.ts +44 -0
  50. package/dist/components/builder/blocks-panel.js +147 -0
  51. package/dist/components/builder/blocks-panel.js.map +1 -0
  52. package/dist/components/builder/builder-store.d.ts +69 -0
  53. package/dist/components/builder/builder-store.js +294 -0
  54. package/dist/components/builder/builder-store.js.map +1 -0
  55. package/dist/components/builder/canvas-stylesheet.d.ts +4 -0
  56. package/dist/components/builder/canvas-stylesheet.js +24 -0
  57. package/dist/components/builder/canvas-stylesheet.js.map +1 -0
  58. package/dist/components/builder/canvas.d.ts +8 -0
  59. package/dist/components/builder/canvas.js +723 -0
  60. package/dist/components/builder/canvas.js.map +1 -0
  61. package/dist/components/builder/clipboard-actions.d.ts +93 -0
  62. package/dist/components/builder/clipboard-actions.js +246 -0
  63. package/dist/components/builder/clipboard-actions.js.map +1 -0
  64. package/dist/components/builder/composition-field-editor.d.ts +11 -0
  65. package/dist/components/builder/composition-field-editor.js +150 -0
  66. package/dist/components/builder/composition-field-editor.js.map +1 -0
  67. package/dist/components/builder/composition-scope.d.ts +16 -0
  68. package/dist/components/builder/composition-scope.js +7 -0
  69. package/dist/components/builder/composition-scope.js.map +1 -0
  70. package/dist/components/builder/drag-session.d.ts +41 -0
  71. package/dist/components/builder/drag-session.js +51 -0
  72. package/dist/components/builder/drag-session.js.map +1 -0
  73. package/dist/components/builder/fixture-thumbnail.d.ts +18 -0
  74. package/dist/components/builder/fixture-thumbnail.js +97 -0
  75. package/dist/components/builder/fixture-thumbnail.js.map +1 -0
  76. package/dist/components/builder/inline-edit.d.ts +142 -0
  77. package/dist/components/builder/inline-edit.js +136 -0
  78. package/dist/components/builder/inline-edit.js.map +1 -0
  79. package/dist/components/builder/insert-context.d.ts +14 -0
  80. package/dist/components/builder/insert-context.js +65 -0
  81. package/dist/components/builder/insert-context.js.map +1 -0
  82. package/dist/components/builder/insert-menu.d.ts +9 -0
  83. package/dist/components/builder/insert-menu.js +9 -0
  84. package/dist/components/builder/insert-menu.js.map +1 -0
  85. package/dist/components/builder/layout-inspector.d.ts +14 -0
  86. package/dist/components/builder/layout-inspector.js +84 -0
  87. package/dist/components/builder/layout-inspector.js.map +1 -0
  88. package/dist/components/builder/node-factory.d.ts +17 -0
  89. package/dist/components/builder/node-factory.js +90 -0
  90. package/dist/components/builder/node-factory.js.map +1 -0
  91. package/dist/components/builder/page-tree.d.ts +3 -0
  92. package/dist/components/builder/page-tree.js +207 -0
  93. package/dist/components/builder/page-tree.js.map +1 -0
  94. package/dist/components/builder/property-inspector.d.ts +1 -0
  95. package/dist/components/builder/property-inspector.js +233 -0
  96. package/dist/components/builder/property-inspector.js.map +1 -0
  97. package/dist/components/builder/rich-text-toolbar.d.ts +4 -0
  98. package/dist/components/builder/rich-text-toolbar.js +104 -0
  99. package/dist/components/builder/rich-text-toolbar.js.map +1 -0
  100. package/dist/components/builder/spacing-handles.d.ts +22 -0
  101. package/dist/components/builder/spacing-handles.js +213 -0
  102. package/dist/components/builder/spacing-handles.js.map +1 -0
  103. package/dist/components/cms/asset-picker.d.ts +12 -0
  104. package/dist/components/cms/asset-picker.js +60 -0
  105. package/dist/components/cms/asset-picker.js.map +1 -0
  106. package/dist/components/cms/bulk-actions.d.ts +60 -0
  107. package/dist/components/cms/bulk-actions.js +95 -0
  108. package/dist/components/cms/bulk-actions.js.map +1 -0
  109. package/dist/components/cms/bulk-bar.d.ts +23 -0
  110. package/dist/components/cms/bulk-bar.js +26 -0
  111. package/dist/components/cms/bulk-bar.js.map +1 -0
  112. package/dist/components/cms/cell-edit.d.ts +91 -0
  113. package/dist/components/cms/cell-edit.js +144 -0
  114. package/dist/components/cms/cell-edit.js.map +1 -0
  115. package/dist/components/cms/cell.d.ts +29 -0
  116. package/dist/components/cms/cell.js +127 -0
  117. package/dist/components/cms/cell.js.map +1 -0
  118. package/dist/components/cms/cms-index.d.ts +8 -0
  119. package/dist/components/cms/cms-index.js +23 -0
  120. package/dist/components/cms/cms-index.js.map +1 -0
  121. package/dist/components/cms/cms-store.d.ts +188 -0
  122. package/dist/components/cms/cms-store.js +702 -0
  123. package/dist/components/cms/cms-store.js.map +1 -0
  124. package/dist/components/cms/collection-table.d.ts +6 -0
  125. package/dist/components/cms/collection-table.js +250 -0
  126. package/dist/components/cms/collection-table.js.map +1 -0
  127. package/dist/components/cms/collections-sidebar.d.ts +9 -0
  128. package/dist/components/cms/collections-sidebar.js +25 -0
  129. package/dist/components/cms/collections-sidebar.js.map +1 -0
  130. package/dist/components/cms/detail-editor.d.ts +7 -0
  131. package/dist/components/cms/detail-editor.js +386 -0
  132. package/dist/components/cms/detail-editor.js.map +1 -0
  133. package/dist/components/cms/doc-state.d.ts +13 -0
  134. package/dist/components/cms/doc-state.js +18 -0
  135. package/dist/components/cms/doc-state.js.map +1 -0
  136. package/dist/components/cms/document-editor-context.d.ts +48 -0
  137. package/dist/components/cms/document-editor-context.js +23 -0
  138. package/dist/components/cms/document-editor-context.js.map +1 -0
  139. package/dist/components/cms/editable-cell.d.ts +22 -0
  140. package/dist/components/cms/editable-cell.js +176 -0
  141. package/dist/components/cms/editable-cell.js.map +1 -0
  142. package/dist/components/cms/field-control.d.ts +8 -0
  143. package/dist/components/cms/field-control.js +149 -0
  144. package/dist/components/cms/field-control.js.map +1 -0
  145. package/dist/components/cms/filter-builder.d.ts +12 -0
  146. package/dist/components/cms/filter-builder.js +84 -0
  147. package/dist/components/cms/filter-builder.js.map +1 -0
  148. package/dist/components/cms/import-export.d.ts +6 -0
  149. package/dist/components/cms/import-export.js +33 -0
  150. package/dist/components/cms/import-export.js.map +1 -0
  151. package/dist/components/cms/new-page-dialog.d.ts +22 -0
  152. package/dist/components/cms/new-page-dialog.js +42 -0
  153. package/dist/components/cms/new-page-dialog.js.map +1 -0
  154. package/dist/components/cms/reference-confirm.d.ts +25 -0
  155. package/dist/components/cms/reference-confirm.js +124 -0
  156. package/dist/components/cms/reference-confirm.js.map +1 -0
  157. package/dist/components/cms/relation-picker.d.ts +16 -0
  158. package/dist/components/cms/relation-picker.js +47 -0
  159. package/dist/components/cms/relation-picker.js.map +1 -0
  160. package/dist/components/cms/use-cell-edit.d.ts +33 -0
  161. package/dist/components/cms/use-cell-edit.js +125 -0
  162. package/dist/components/cms/use-cell-edit.js.map +1 -0
  163. package/dist/components/cms/versions-model.d.ts +15 -0
  164. package/dist/components/cms/versions-model.js +23 -0
  165. package/dist/components/cms/versions-model.js.map +1 -0
  166. package/dist/components/cms/versions-pane.d.ts +14 -0
  167. package/dist/components/cms/versions-pane.js +86 -0
  168. package/dist/components/cms/versions-pane.js.map +1 -0
  169. package/dist/components/cms/view-bar.d.ts +11 -0
  170. package/dist/components/cms/view-bar.js +80 -0
  171. package/dist/components/cms/view-bar.js.map +1 -0
  172. package/dist/components/collab/collab-context.d.ts +34 -0
  173. package/dist/components/collab/collab-context.js +52 -0
  174. package/dist/components/collab/collab-context.js.map +1 -0
  175. package/dist/components/collab/collab-seed.d.ts +27 -0
  176. package/dist/components/collab/collab-seed.js +42 -0
  177. package/dist/components/collab/collab-seed.js.map +1 -0
  178. package/dist/components/components/component-detail.d.ts +9 -0
  179. package/dist/components/components/component-detail.js +30 -0
  180. package/dist/components/components/component-detail.js.map +1 -0
  181. package/dist/components/components/component-status.d.ts +10 -0
  182. package/dist/components/components/component-status.js +30 -0
  183. package/dist/components/components/component-status.js.map +1 -0
  184. package/dist/components/components/components-index.d.ts +8 -0
  185. package/dist/components/components/components-index.js +42 -0
  186. package/dist/components/components/components-index.js.map +1 -0
  187. package/dist/components/components/field-inspector.d.ts +9 -0
  188. package/dist/components/components/field-inspector.js +38 -0
  189. package/dist/components/components/field-inspector.js.map +1 -0
  190. package/dist/components/components/fixture-runner.d.ts +10 -0
  191. package/dist/components/components/fixture-runner.js +24 -0
  192. package/dist/components/components/fixture-runner.js.map +1 -0
  193. package/dist/components/components/registry-browser.d.ts +4 -0
  194. package/dist/components/components/registry-browser.js +64 -0
  195. package/dist/components/components/registry-browser.js.map +1 -0
  196. package/dist/components/current-user-menu.d.ts +13 -0
  197. package/dist/components/current-user-menu.js +31 -0
  198. package/dist/components/current-user-menu.js.map +1 -0
  199. package/dist/components/dev-login-badge.d.ts +9 -0
  200. package/dist/components/dev-login-badge.js +18 -0
  201. package/dist/components/dev-login-badge.js.map +1 -0
  202. package/dist/components/extensions/extensions-view.d.ts +7 -0
  203. package/dist/components/extensions/extensions-view.js +126 -0
  204. package/dist/components/extensions/extensions-view.js.map +1 -0
  205. package/dist/components/guards.d.ts +27 -0
  206. package/dist/components/guards.js +46 -0
  207. package/dist/components/guards.js.map +1 -0
  208. package/dist/components/inspector/inspector-sidebar.d.ts +26 -0
  209. package/dist/components/inspector/inspector-sidebar.js +17 -0
  210. package/dist/components/inspector/inspector-sidebar.js.map +1 -0
  211. package/dist/components/operation-error.d.ts +17 -0
  212. package/dist/components/operation-error.js +54 -0
  213. package/dist/components/operation-error.js.map +1 -0
  214. package/dist/components/playground-badge.d.ts +10 -0
  215. package/dist/components/playground-badge.js +19 -0
  216. package/dist/components/playground-badge.js.map +1 -0
  217. package/dist/components/project-list.d.ts +15 -0
  218. package/dist/components/project-list.js +52 -0
  219. package/dist/components/project-list.js.map +1 -0
  220. package/dist/components/project-session.d.ts +46 -0
  221. package/dist/components/project-session.js +107 -0
  222. package/dist/components/project-session.js.map +1 -0
  223. package/dist/components/project-switcher.d.ts +11 -0
  224. package/dist/components/project-switcher.js +44 -0
  225. package/dist/components/project-switcher.js.map +1 -0
  226. package/dist/components/references/builder-deep-link.d.ts +12 -0
  227. package/dist/components/references/builder-deep-link.js +53 -0
  228. package/dist/components/references/builder-deep-link.js.map +1 -0
  229. package/dist/components/references/references-panel.d.ts +17 -0
  230. package/dist/components/references/references-panel.js +66 -0
  231. package/dist/components/references/references-panel.js.map +1 -0
  232. package/dist/components/routes/redirect-chain.d.ts +9 -0
  233. package/dist/components/routes/redirect-chain.js +16 -0
  234. package/dist/components/routes/redirect-chain.js.map +1 -0
  235. package/dist/components/routes/redirect-manager.d.ts +13 -0
  236. package/dist/components/routes/redirect-manager.js +24 -0
  237. package/dist/components/routes/redirect-manager.js.map +1 -0
  238. package/dist/components/routes/route-list.d.ts +35 -0
  239. package/dist/components/routes/route-list.js +69 -0
  240. package/dist/components/routes/route-list.js.map +1 -0
  241. package/dist/components/routes/routes-shell.d.ts +14 -0
  242. package/dist/components/routes/routes-shell.js +68 -0
  243. package/dist/components/routes/routes-shell.js.map +1 -0
  244. package/dist/components/section-nav.d.ts +17 -0
  245. package/dist/components/section-nav.js +33 -0
  246. package/dist/components/section-nav.js.map +1 -0
  247. package/dist/components/section-state.d.ts +24 -0
  248. package/dist/components/section-state.js +78 -0
  249. package/dist/components/section-state.js.map +1 -0
  250. package/dist/components/section-surface.d.ts +31 -0
  251. package/dist/components/section-surface.js +46 -0
  252. package/dist/components/section-surface.js.map +1 -0
  253. package/dist/components/sections.d.ts +38 -0
  254. package/dist/components/sections.js +72 -0
  255. package/dist/components/sections.js.map +1 -0
  256. package/dist/components/settings-form.d.ts +10 -0
  257. package/dist/components/settings-form.js +17 -0
  258. package/dist/components/settings-form.js.map +1 -0
  259. package/dist/components/studio-context.d.ts +22 -0
  260. package/dist/components/studio-context.js +48 -0
  261. package/dist/components/studio-context.js.map +1 -0
  262. package/dist/components/studio-project-screen.d.ts +19 -0
  263. package/dist/components/studio-project-screen.js +195 -0
  264. package/dist/components/studio-project-screen.js.map +1 -0
  265. package/dist/components/studio-shell.d.ts +18 -0
  266. package/dist/components/studio-shell.js +64 -0
  267. package/dist/components/studio-shell.js.map +1 -0
  268. package/dist/components/theme-context.d.ts +17 -0
  269. package/dist/components/theme-context.js +26 -0
  270. package/dist/components/theme-context.js.map +1 -0
  271. package/dist/components/workspace-gate.d.ts +12 -0
  272. package/dist/components/workspace-gate.js +27 -0
  273. package/dist/components/workspace-gate.js.map +1 -0
  274. package/dist/components/workspace-projects.d.ts +13 -0
  275. package/dist/components/workspace-projects.js +18 -0
  276. package/dist/components/workspace-projects.js.map +1 -0
  277. package/dist/lib/assets/delete-asset.d.ts +34 -0
  278. package/dist/lib/assets/delete-asset.js +34 -0
  279. package/dist/lib/assets/delete-asset.js.map +1 -0
  280. package/dist/lib/assets/image-dimensions.d.ts +18 -0
  281. package/dist/lib/assets/image-dimensions.js +26 -0
  282. package/dist/lib/assets/image-dimensions.js.map +1 -0
  283. package/dist/lib/assets/index.d.ts +9 -0
  284. package/dist/lib/assets/index.js +10 -0
  285. package/dist/lib/assets/index.js.map +1 -0
  286. package/dist/lib/assets/upload-state.d.ts +53 -0
  287. package/dist/lib/assets/upload-state.js +59 -0
  288. package/dist/lib/assets/upload-state.js.map +1 -0
  289. package/dist/lib/assets/upload.d.ts +56 -0
  290. package/dist/lib/assets/upload.js +125 -0
  291. package/dist/lib/assets/upload.js.map +1 -0
  292. package/dist/lib/auth/auth-adapter.d.ts +57 -0
  293. package/dist/lib/auth/auth-adapter.js +13 -0
  294. package/dist/lib/auth/auth-adapter.js.map +1 -0
  295. package/dist/lib/auth/convex-auth-adapter.d.ts +39 -0
  296. package/dist/lib/auth/convex-auth-adapter.js +171 -0
  297. package/dist/lib/auth/convex-auth-adapter.js.map +1 -0
  298. package/dist/lib/auth/dev-auto-login-adapter.d.ts +25 -0
  299. package/dist/lib/auth/dev-auto-login-adapter.js +40 -0
  300. package/dist/lib/auth/dev-auto-login-adapter.js.map +1 -0
  301. package/dist/lib/auth/index.d.ts +28 -0
  302. package/dist/lib/auth/index.js +61 -0
  303. package/dist/lib/auth/index.js.map +1 -0
  304. package/dist/lib/auth/local-auth-adapter.d.ts +57 -0
  305. package/dist/lib/auth/local-auth-adapter.js +78 -0
  306. package/dist/lib/auth/local-auth-adapter.js.map +1 -0
  307. package/dist/lib/auth/route-guard.d.ts +33 -0
  308. package/dist/lib/auth/route-guard.js +51 -0
  309. package/dist/lib/auth/route-guard.js.map +1 -0
  310. package/dist/lib/auth-errors.d.ts +42 -0
  311. package/dist/lib/auth-errors.js +74 -0
  312. package/dist/lib/auth-errors.js.map +1 -0
  313. package/dist/lib/bindings/section-bindings.d.ts +24 -0
  314. package/dist/lib/bindings/section-bindings.js +9 -0
  315. package/dist/lib/bindings/section-bindings.js.map +1 -0
  316. package/dist/lib/clipboard/index.d.ts +7 -0
  317. package/dist/lib/clipboard/index.js +8 -0
  318. package/dist/lib/clipboard/index.js.map +1 -0
  319. package/dist/lib/clipboard/os-clipboard.d.ts +46 -0
  320. package/dist/lib/clipboard/os-clipboard.js +105 -0
  321. package/dist/lib/clipboard/os-clipboard.js.map +1 -0
  322. package/dist/lib/clipboard/paste-issues.d.ts +34 -0
  323. package/dist/lib/clipboard/paste-issues.js +67 -0
  324. package/dist/lib/clipboard/paste-issues.js.map +1 -0
  325. package/dist/lib/clipboard/paste-target.d.ts +20 -0
  326. package/dist/lib/clipboard/paste-target.js +28 -0
  327. package/dist/lib/clipboard/paste-target.js.map +1 -0
  328. package/dist/lib/cms/published-documents.d.ts +30 -0
  329. package/dist/lib/cms/published-documents.js +75 -0
  330. package/dist/lib/cms/published-documents.js.map +1 -0
  331. package/dist/lib/cms-views/index.d.ts +9 -0
  332. package/dist/lib/cms-views/index.js +10 -0
  333. package/dist/lib/cms-views/index.js.map +1 -0
  334. package/dist/lib/cms-views/selection.d.ts +29 -0
  335. package/dist/lib/cms-views/selection.js +46 -0
  336. package/dist/lib/cms-views/selection.js.map +1 -0
  337. package/dist/lib/cms-views/view-model.d.ts +192 -0
  338. package/dist/lib/cms-views/view-model.js +353 -0
  339. package/dist/lib/cms-views/view-model.js.map +1 -0
  340. package/dist/lib/cms-views/views-store.d.ts +70 -0
  341. package/dist/lib/cms-views/views-store.js +129 -0
  342. package/dist/lib/cms-views/views-store.js.map +1 -0
  343. package/dist/lib/data/collection-content.d.ts +105 -0
  344. package/dist/lib/data/collection-content.js +196 -0
  345. package/dist/lib/data/collection-content.js.map +1 -0
  346. package/dist/lib/data/data-store.d.ts +97 -0
  347. package/dist/lib/data/data-store.js +205 -0
  348. package/dist/lib/data/data-store.js.map +1 -0
  349. package/dist/lib/data/index.d.ts +4 -0
  350. package/dist/lib/data/index.js +8 -0
  351. package/dist/lib/data/index.js.map +1 -0
  352. package/dist/lib/data/providers.d.ts +143 -0
  353. package/dist/lib/data/providers.js +255 -0
  354. package/dist/lib/data/providers.js.map +1 -0
  355. package/dist/lib/data/sample-capture.d.ts +30 -0
  356. package/dist/lib/data/sample-capture.js +70 -0
  357. package/dist/lib/data/sample-capture.js.map +1 -0
  358. package/dist/lib/data/sources-store.d.ts +42 -0
  359. package/dist/lib/data/sources-store.js +120 -0
  360. package/dist/lib/data/sources-store.js.map +1 -0
  361. package/dist/lib/dnd/drop-rules.d.ts +219 -0
  362. package/dist/lib/dnd/drop-rules.js +257 -0
  363. package/dist/lib/dnd/drop-rules.js.map +1 -0
  364. package/dist/lib/dnd/gap-drag.d.ts +66 -0
  365. package/dist/lib/dnd/gap-drag.js +95 -0
  366. package/dist/lib/dnd/gap-drag.js.map +1 -0
  367. package/dist/lib/locale/binding-fallback.d.ts +28 -0
  368. package/dist/lib/locale/binding-fallback.js +66 -0
  369. package/dist/lib/locale/binding-fallback.js.map +1 -0
  370. package/dist/lib/locale/fallback.d.ts +43 -0
  371. package/dist/lib/locale/fallback.js +52 -0
  372. package/dist/lib/locale/fallback.js.map +1 -0
  373. package/dist/lib/locale/index.d.ts +6 -0
  374. package/dist/lib/locale/index.js +7 -0
  375. package/dist/lib/locale/index.js.map +1 -0
  376. package/dist/lib/locale/locale-store.d.ts +40 -0
  377. package/dist/lib/locale/locale-store.js +61 -0
  378. package/dist/lib/locale/locale-store.js.map +1 -0
  379. package/dist/lib/locale/locale-switcher.d.ts +10 -0
  380. package/dist/lib/locale/locale-switcher.js +24 -0
  381. package/dist/lib/locale/locale-switcher.js.map +1 -0
  382. package/dist/lib/locale/route-variant.d.ts +14 -0
  383. package/dist/lib/locale/route-variant.js +11 -0
  384. package/dist/lib/locale/route-variant.js.map +1 -0
  385. package/dist/lib/locale/use-studio-locale.d.ts +10 -0
  386. package/dist/lib/locale/use-studio-locale.js +8 -0
  387. package/dist/lib/locale/use-studio-locale.js.map +1 -0
  388. package/dist/lib/operations/asset-repository.d.ts +15 -0
  389. package/dist/lib/operations/asset-repository.js +56 -0
  390. package/dist/lib/operations/asset-repository.js.map +1 -0
  391. package/dist/lib/operations/cms-persistence.d.ts +35 -0
  392. package/dist/lib/operations/cms-persistence.js +75 -0
  393. package/dist/lib/operations/cms-persistence.js.map +1 -0
  394. package/dist/lib/operations/graph-commands.d.ts +140 -0
  395. package/dist/lib/operations/graph-commands.js +86 -0
  396. package/dist/lib/operations/graph-commands.js.map +1 -0
  397. package/dist/lib/operations/graph-persistence.d.ts +27 -0
  398. package/dist/lib/operations/graph-persistence.js +35 -0
  399. package/dist/lib/operations/graph-persistence.js.map +1 -0
  400. package/dist/lib/operations/index.d.ts +13 -0
  401. package/dist/lib/operations/index.js +14 -0
  402. package/dist/lib/operations/index.js.map +1 -0
  403. package/dist/lib/operations/operations-package.d.ts +6 -0
  404. package/dist/lib/operations/operations-package.js +7 -0
  405. package/dist/lib/operations/operations-package.js.map +1 -0
  406. package/dist/lib/operations/persist-queue.d.ts +16 -0
  407. package/dist/lib/operations/persist-queue.js +18 -0
  408. package/dist/lib/operations/persist-queue.js.map +1 -0
  409. package/dist/lib/operations/session-hydration.d.ts +84 -0
  410. package/dist/lib/operations/session-hydration.js +112 -0
  411. package/dist/lib/operations/session-hydration.js.map +1 -0
  412. package/dist/lib/operations/studio-operations.d.ts +59 -0
  413. package/dist/lib/operations/studio-operations.js +92 -0
  414. package/dist/lib/operations/studio-operations.js.map +1 -0
  415. package/dist/lib/persistence/backend-mode.d.ts +69 -0
  416. package/dist/lib/persistence/backend-mode.js +120 -0
  417. package/dist/lib/persistence/backend-mode.js.map +1 -0
  418. package/dist/lib/persistence/convex-adapter.d.ts +34 -0
  419. package/dist/lib/persistence/convex-adapter.js +681 -0
  420. package/dist/lib/persistence/convex-adapter.js.map +1 -0
  421. package/dist/lib/persistence/convex-blob-storage.d.ts +57 -0
  422. package/dist/lib/persistence/convex-blob-storage.js +97 -0
  423. package/dist/lib/persistence/convex-blob-storage.js.map +1 -0
  424. package/dist/lib/persistence/convex-client.d.ts +19 -0
  425. package/dist/lib/persistence/convex-client.js +40 -0
  426. package/dist/lib/persistence/convex-client.js.map +1 -0
  427. package/dist/lib/persistence/index.d.ts +30 -0
  428. package/dist/lib/persistence/index.js +60 -0
  429. package/dist/lib/persistence/index.js.map +1 -0
  430. package/dist/lib/persona/labels.d.ts +23 -0
  431. package/dist/lib/persona/labels.js +122 -0
  432. package/dist/lib/persona/labels.js.map +1 -0
  433. package/dist/lib/rail.d.ts +11 -0
  434. package/dist/lib/rail.js +26 -0
  435. package/dist/lib/rail.js.map +1 -0
  436. package/dist/lib/references/impact.d.ts +64 -0
  437. package/dist/lib/references/impact.js +62 -0
  438. package/dist/lib/references/impact.js.map +1 -0
  439. package/dist/lib/references/index.d.ts +7 -0
  440. package/dist/lib/references/index.js +8 -0
  441. package/dist/lib/references/index.js.map +1 -0
  442. package/dist/lib/references/reference-model.d.ts +125 -0
  443. package/dist/lib/references/reference-model.js +242 -0
  444. package/dist/lib/references/reference-model.js.map +1 -0
  445. package/dist/lib/references/references-store.d.ts +65 -0
  446. package/dist/lib/references/references-store.js +221 -0
  447. package/dist/lib/references/references-store.js.map +1 -0
  448. package/dist/lib/registry/index.d.ts +65 -0
  449. package/dist/lib/registry/index.js +114 -0
  450. package/dist/lib/registry/index.js.map +1 -0
  451. package/dist/lib/registry/preview.d.ts +15 -0
  452. package/dist/lib/registry/preview.js +110 -0
  453. package/dist/lib/registry/preview.js.map +1 -0
  454. package/dist/lib/registry/project-components.d.ts +16 -0
  455. package/dist/lib/registry/project-components.js +152 -0
  456. package/dist/lib/registry/project-components.js.map +1 -0
  457. package/dist/lib/routing/index.d.ts +10 -0
  458. package/dist/lib/routing/index.js +11 -0
  459. package/dist/lib/routing/index.js.map +1 -0
  460. package/dist/lib/routing/routing-analysis.d.ts +26 -0
  461. package/dist/lib/routing/routing-analysis.js +37 -0
  462. package/dist/lib/routing/routing-analysis.js.map +1 -0
  463. package/dist/lib/routing/routing-store.d.ts +50 -0
  464. package/dist/lib/routing/routing-store.js +72 -0
  465. package/dist/lib/routing/routing-store.js.map +1 -0
  466. package/dist/lib/starters/kit-session.d.ts +5 -0
  467. package/dist/lib/starters/kit-session.js +17 -0
  468. package/dist/lib/starters/kit-session.js.map +1 -0
  469. package/dist/lib/theme.d.ts +21 -0
  470. package/dist/lib/theme.js +32 -0
  471. package/dist/lib/theme.js.map +1 -0
  472. package/dist/lib/utils.d.ts +11 -0
  473. package/dist/lib/utils.js +28 -0
  474. package/dist/lib/utils.js.map +1 -0
  475. package/dist/lib/webhooks/config.d.ts +15 -0
  476. package/dist/lib/webhooks/config.js +64 -0
  477. package/dist/lib/webhooks/config.js.map +1 -0
  478. package/dist/lib/webhooks/dispatcher.d.ts +67 -0
  479. package/dist/lib/webhooks/dispatcher.js +61 -0
  480. package/dist/lib/webhooks/dispatcher.js.map +1 -0
  481. package/dist/lib/webhooks/index.d.ts +11 -0
  482. package/dist/lib/webhooks/index.js +10 -0
  483. package/dist/lib/webhooks/index.js.map +1 -0
  484. package/dist/lib/webhooks/signing.d.ts +15 -0
  485. package/dist/lib/webhooks/signing.js +24 -0
  486. package/dist/lib/webhooks/signing.js.map +1 -0
  487. package/dist/lib/webhooks/tags.d.ts +25 -0
  488. package/dist/lib/webhooks/tags.js +173 -0
  489. package/dist/lib/webhooks/tags.js.map +1 -0
  490. package/dist/lib/working-graph.d.ts +82 -0
  491. package/dist/lib/working-graph.js +113 -0
  492. package/dist/lib/working-graph.js.map +1 -0
  493. package/dist/lib/workspace/index.d.ts +109 -0
  494. package/dist/lib/workspace/index.js +206 -0
  495. package/dist/lib/workspace/index.js.map +1 -0
  496. package/dist/lib/workspace/switcher-source.d.ts +39 -0
  497. package/dist/lib/workspace/switcher-source.js +23 -0
  498. package/dist/lib/workspace/switcher-source.js.map +1 -0
  499. package/dist/lib/workspace/workspace-source.d.ts +47 -0
  500. package/dist/lib/workspace/workspace-source.js +67 -0
  501. package/dist/lib/workspace/workspace-source.js.map +1 -0
  502. package/dist/router/index.d.ts +32 -0
  503. package/dist/router/index.js +32 -0
  504. package/dist/router/index.js.map +1 -0
  505. package/dist/router/match.d.ts +75 -0
  506. package/dist/router/match.js +87 -0
  507. package/dist/router/match.js.map +1 -0
  508. package/dist/router/search.d.ts +22 -0
  509. package/dist/router/search.js +16 -0
  510. package/dist/router/search.js.map +1 -0
  511. package/dist/ui/avatar.d.ts +17 -0
  512. package/dist/ui/avatar.js +38 -0
  513. package/dist/ui/avatar.js.map +1 -0
  514. package/dist/ui/badge.d.ts +9 -0
  515. package/dist/ui/badge.js +23 -0
  516. package/dist/ui/badge.js.map +1 -0
  517. package/dist/ui/button.d.ts +11 -0
  518. package/dist/ui/button.js +30 -0
  519. package/dist/ui/button.js.map +1 -0
  520. package/dist/ui/card.d.ts +11 -0
  521. package/dist/ui/card.js +23 -0
  522. package/dist/ui/card.js.map +1 -0
  523. package/dist/ui/dialog.d.ts +12 -0
  524. package/dist/ui/dialog.js +27 -0
  525. package/dist/ui/dialog.js.map +1 -0
  526. package/dist/ui/dropdown-menu.d.ts +15 -0
  527. package/dist/ui/dropdown-menu.js +24 -0
  528. package/dist/ui/dropdown-menu.js.map +1 -0
  529. package/dist/ui/field.d.ts +15 -0
  530. package/dist/ui/field.js +14 -0
  531. package/dist/ui/field.js.map +1 -0
  532. package/dist/ui/index.d.ts +14 -0
  533. package/dist/ui/index.js +15 -0
  534. package/dist/ui/index.js.map +1 -0
  535. package/dist/ui/input.d.ts +3 -0
  536. package/dist/ui/input.js +7 -0
  537. package/dist/ui/input.js.map +1 -0
  538. package/dist/ui/inspector.d.ts +18 -0
  539. package/dist/ui/inspector.js +14 -0
  540. package/dist/ui/inspector.js.map +1 -0
  541. package/dist/ui/layout.d.ts +45 -0
  542. package/dist/ui/layout.js +48 -0
  543. package/dist/ui/layout.js.map +1 -0
  544. package/dist/ui/panel.d.ts +12 -0
  545. package/dist/ui/panel.js +20 -0
  546. package/dist/ui/panel.js.map +1 -0
  547. package/dist/ui/separator.d.ts +6 -0
  548. package/dist/ui/separator.js +7 -0
  549. package/dist/ui/separator.js.map +1 -0
  550. package/dist/ui/toolbar.d.ts +9 -0
  551. package/dist/ui/toolbar.js +16 -0
  552. package/dist/ui/toolbar.js.map +1 -0
  553. package/dist/ui/typography.d.ts +50 -0
  554. package/dist/ui/typography.js +43 -0
  555. package/dist/ui/typography.js.map +1 -0
  556. package/package.json +149 -0
  557. package/src/styles/studio.css +101 -0
  558. package/src/styles/tokens.css +63 -0
@@ -0,0 +1,205 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useState } from 'react';
3
+ import { SourceRegistry, captureSample, inferSchema, resolveBinding, resolveCondition, tokensForSchema, } from '@elytracms/data-binding';
4
+ import { getStudioOperations } from '../operations';
5
+ import { STUDIO_SYSTEM_COLLECTION_IDS } from '../operations/session-hydration';
6
+ import { resolveDeploymentCollections } from '../workspace';
7
+ import { hasContentSession } from './collection-content';
8
+ import { captureSourceSample, cmsSourceForCollection } from './sample-capture';
9
+ import { deleteDataSource, loadDataSources, saveDataSource } from './sources-store';
10
+ function upsert(sources, source) {
11
+ const exists = sources.some((s) => s.id === source.id);
12
+ return exists ? sources.map((s) => (s.id === source.id ? source : s)) : [...sources, source];
13
+ }
14
+ /**
15
+ * A persisted record hydrates as-is when it carries its captured sample;
16
+ * otherwise recapture. Exception (EC-177 gap 1): with a hydrated content
17
+ * session configured (Convex mode), CMS sources ALWAYS recapture by replaying
18
+ * their stored query over the live documents — a sample captured by an earlier
19
+ * session may carry stale (or fixture-derived) entries.
20
+ */
21
+ function withSample(source) {
22
+ if (source.kind === 'cms' && hasContentSession()) {
23
+ const sample = captureSourceSample(source);
24
+ return sample !== undefined ? captureSample(source, sample) : source;
25
+ }
26
+ if (source.sample !== undefined)
27
+ return source;
28
+ // No persisted sample: try an honest capture (a provider runs; anything the
29
+ // studio can't fetch returns undefined) — never fabricate.
30
+ const sample = captureSourceSample(source);
31
+ return sample !== undefined ? captureSample(source, sample) : source;
32
+ }
33
+ /**
34
+ * The store's reducer, exported because hydration/session-precedence semantics
35
+ * live here and the app's test harness has no DOM to drive effects through.
36
+ */
37
+ export function dataStateReducer(state, action) {
38
+ switch (action.type) {
39
+ case 'remove':
40
+ return {
41
+ ...state,
42
+ sources: state.sources.filter((s) => s.id !== action.id),
43
+ sessionIds: new Set([...state.sessionIds, action.id]),
44
+ };
45
+ case 'provision': {
46
+ // Upsert by id; attach a sample only if one can be captured honestly (a
47
+ // provider run, or live CMS content) — otherwise the source carries none.
48
+ const sample = captureSourceSample(action.source);
49
+ const provisioned = sample !== undefined ? captureSample(action.source, sample) : action.source;
50
+ return {
51
+ ...state,
52
+ sources: upsert(state.sources, provisioned),
53
+ sessionIds: new Set([...state.sessionIds, provisioned.id]),
54
+ };
55
+ }
56
+ case 'hydrate': {
57
+ let sources = state.sources;
58
+ for (const source of action.sources) {
59
+ if (state.sessionIds.has(source.id))
60
+ continue; // this session already decided
61
+ sources = upsert(sources, withSample(source));
62
+ }
63
+ return sources === state.sources ? state : { ...state, sources };
64
+ }
65
+ default:
66
+ return state;
67
+ }
68
+ }
69
+ const DataContext = createContext(null);
70
+ /**
71
+ * The session's starting state: EMPTY. The studio seeds no sample sources (Oli,
72
+ * 2026-06-19) — real sources arrive from the project's config collections (the
73
+ * hydrate effect, Convex mode) or are added by the author. Nothing is faked.
74
+ */
75
+ export function initialDataState() {
76
+ return { sources: [], sessionIds: new Set() };
77
+ }
78
+ export function DataProvider({ children, projectId }) {
79
+ const [state, dispatch] = useReducer(dataStateReducer, undefined, initialDataState);
80
+ const [persistError, setPersistError] = useState(null);
81
+ // EC-192: surface every config-driven content collection as a pickable CMS
82
+ // source, so the binding/condition pickers list what actually exists — the
83
+ // same collection set the CMS uses (`resolveDeploymentCollections`) — rather
84
+ // than only the demo fixture sources. Merged additively (the `hydrate` upsert
85
+ // skips session-decided ids and recaptures live samples in Convex mode); studio
86
+ // SYSTEM collections (routes/redirects/saved views/data sources) are excluded.
87
+ useEffect(() => {
88
+ if (projectId === undefined)
89
+ return;
90
+ const collections = resolveDeploymentCollections().filter((collection) => !STUDIO_SYSTEM_COLLECTION_IDS.has(collection.id));
91
+ if (collections.length === 0)
92
+ return;
93
+ dispatch({ type: 'hydrate', sources: collections.map(cmsSourceForCollection) });
94
+ }, [projectId]);
95
+ // Hydrate the project's persisted sources once (operations query). Sources
96
+ // provisioned by other sessions on the same project show up here; the
97
+ // playground seeds stay for everything not persisted.
98
+ useEffect(() => {
99
+ if (projectId === undefined)
100
+ return;
101
+ let cancelled = false;
102
+ void getStudioOperations()
103
+ .then(({ operations }) => loadDataSources(operations, projectId))
104
+ .then((result) => {
105
+ if (cancelled)
106
+ return;
107
+ if (!result.ok) {
108
+ setPersistError(result.error.message);
109
+ return;
110
+ }
111
+ dispatch({ type: 'hydrate', sources: result.value });
112
+ });
113
+ return () => {
114
+ cancelled = true;
115
+ };
116
+ }, [projectId]);
117
+ // Best-effort persistence on top of the live session: the canvas keeps
118
+ // working on session state; a failed write surfaces via `persistError`.
119
+ const persist = useCallback((write) => {
120
+ if (projectId === undefined)
121
+ return;
122
+ void getStudioOperations()
123
+ .then(({ operations }) => write(operations, projectId))
124
+ .then((result) => {
125
+ if (!result.ok)
126
+ setPersistError(result.error.message);
127
+ })
128
+ .catch((error) => {
129
+ setPersistError(error instanceof Error ? error.message : 'Saving the data source failed.');
130
+ });
131
+ }, [projectId]);
132
+ const store = useMemo(() => {
133
+ const registry = SourceRegistry.from(state.sources);
134
+ const payloads = {};
135
+ for (const source of state.sources) {
136
+ if (source.sample !== undefined)
137
+ payloads[source.id] = source.sample;
138
+ }
139
+ const knownSourceIds = registry.knownSourceIds();
140
+ const ctx = { payloads, registry };
141
+ const getSource = (id) => registry.get(id);
142
+ const resolve = (ref, item) => resolveBinding(ref, ctx, item);
143
+ return {
144
+ sources: state.sources,
145
+ registry,
146
+ payloads,
147
+ knownSourceIds,
148
+ getSource,
149
+ removeSource: (id) => {
150
+ dispatch({ type: 'remove', id });
151
+ persist((operations, pid) => deleteDataSource(operations, pid, id));
152
+ },
153
+ provisionSource: (source) => {
154
+ dispatch({ type: 'provision', source });
155
+ // Persist exactly what the session resolves: the source plus any sample
156
+ // that can be captured honestly (a provider run / live CMS content) —
157
+ // never a fabricated one. Matches the `provision` reducer.
158
+ const sample = captureSourceSample(source);
159
+ const provisioned = sample !== undefined ? captureSample(source, sample) : source;
160
+ persist((operations, pid) => saveDataSource(operations, pid, provisioned));
161
+ },
162
+ persistError,
163
+ tokensOf: (id) => {
164
+ const schema = getSource(id)?.schema;
165
+ return schema ? tokensForSchema(schema) : [];
166
+ },
167
+ schemaOf: (id) => {
168
+ const source = getSource(id);
169
+ if (source?.schema)
170
+ return source.schema;
171
+ if (source?.sample !== undefined)
172
+ return inferSchema(source.sample);
173
+ return undefined;
174
+ },
175
+ sampleOf: (id) => getSource(id)?.sample,
176
+ resolve,
177
+ resolveValue: (ref, item) => {
178
+ const r = resolve(ref, item);
179
+ switch (r.kind) {
180
+ case 'value':
181
+ return r.value;
182
+ case 'props':
183
+ return r.props;
184
+ case 'condition':
185
+ return r.pass;
186
+ case 'issue':
187
+ return undefined;
188
+ default: {
189
+ const never = r;
190
+ return never;
191
+ }
192
+ }
193
+ },
194
+ resolveCondition: (condition, item) => resolveCondition(condition, ctx, item),
195
+ };
196
+ }, [state, persist, persistError]);
197
+ return _jsx(DataContext.Provider, { value: store, children: children });
198
+ }
199
+ export function useData() {
200
+ const store = useContext(DataContext);
201
+ if (!store)
202
+ throw new Error('useData must be used within a <DataProvider>.');
203
+ return store;
204
+ }
205
+ //# sourceMappingURL=data-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store.js","sourceRoot":"","sources":["../../../src/lib/data/data-store.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './data-store';
2
+ export * from './sample-capture';
3
+ export * from './sources-store';
4
+ export * from './collection-content';
@@ -0,0 +1,8 @@
1
+ export * from './data-store';
2
+ export * from './sample-capture';
3
+ export * from './sources-store';
4
+ export * from './collection-content';
5
+ // Data providers (EC-167) are imported from './providers' directly: the module
6
+ // exports a `DataProvider` domain type that would collide with the store's
7
+ // `<DataProvider>` React provider in a wildcard barrel.
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,+EAA+E;AAC/E,2EAA2E;AAC3E,wDAAwD"}
@@ -0,0 +1,143 @@
1
+ import { z } from 'zod';
2
+ import type { ConvexSource, DataSource } from '@elytracms/data-binding';
3
+ import type { JsonValue } from '@elytracms/project-graph';
4
+ /**
5
+ * Typed data providers (EC-167, vision AD-9). External data is a developer
6
+ * concern expressed exactly like a component: a provider is a plain function
7
+ * plus a manifest (id, title, description, output schema, optional params)
8
+ * registered in code. Editors never see providers as anything technical — the
9
+ * Content tab offers them next to CMS collections, labeled by their
10
+ * plain-language titles, and provider results resolve through the unchanged
11
+ * `@elytracms/data-binding` engine.
12
+ *
13
+ * Registration mirrors how component manifests register: project code defines
14
+ * providers and registers them in-process here. In a host repository the same
15
+ * definitions would be extracted into synced manifests (the EC-147 component
16
+ * manifest sync path) with the function itself executed behind the
17
+ * project-owned adapter — an honest gap today: this playground registry IS the
18
+ * project code, so "sync" is a direct import.
19
+ *
20
+ * Bridging into the engine: a provider is addressed as a `convex`-kind data
21
+ * source whose `functionRef` is `provider:<id>` — a provider is exactly a
22
+ * typed server function, and the engine's source vocabulary already models
23
+ * that. Resolution, sampling, inference, tokens, and broken-binding issues all
24
+ * apply unchanged. (See NOTES: the engine could gain a first-class `provider`
25
+ * source kind as a purely additive change.)
26
+ */
27
+ /** A scalar an editor can put into a provider param control. */
28
+ export type ProviderParamValue = string | number | boolean;
29
+ /** One choice of a `choice`-kind param. */
30
+ export interface ProviderParamChoice {
31
+ value: string;
32
+ label: string;
33
+ }
34
+ /**
35
+ * A provider param, surfaced to editors as one plain control (no syntax, no
36
+ * JSON): `choice` renders a select over {@link choices}; the scalar kinds
37
+ * render a matching input.
38
+ */
39
+ export interface ProviderParamSpec {
40
+ name: string;
41
+ /** Plain-language control label, e.g. "Department". */
42
+ label: string;
43
+ kind: 'text' | 'number' | 'boolean' | 'choice';
44
+ /** For `choice` params: the closed set of offered values. */
45
+ choices?: ProviderParamChoice[];
46
+ defaultValue: ProviderParamValue;
47
+ }
48
+ /** Arguments a provider runs with (param name → value). */
49
+ export type ProviderArgs = Record<string, JsonValue>;
50
+ /** The manifest half of a provider — everything the builder surfaces. */
51
+ export interface DataProviderManifest {
52
+ /** Stable provider id, e.g. `pricing-plans`. */
53
+ id: string;
54
+ /** Plain-language title editors pick, e.g. "Pricing plans". */
55
+ title: string;
56
+ description: string;
57
+ /** Zod schema of the payload; every run is validated against it. */
58
+ output: z.ZodType<JsonValue>;
59
+ params?: ProviderParamSpec[];
60
+ }
61
+ /** A data provider: a typed function plus its manifest. */
62
+ export interface DataProvider {
63
+ manifest: DataProviderManifest;
64
+ /** Produce the payload. Deterministic here; a host repo may make this async behind its adapter. */
65
+ fetch: (args: ProviderArgs) => JsonValue;
66
+ }
67
+ /**
68
+ * Define a provider with the output type checked against the schema — the
69
+ * provider-side mirror of `defineDataSourceAdapter` (EC-132) and component
70
+ * `ComponentManifest` definitions.
71
+ */
72
+ export declare function defineDataProvider<T extends JsonValue>(provider: {
73
+ manifest: Omit<DataProviderManifest, 'output'> & {
74
+ output: z.ZodType<T>;
75
+ };
76
+ fetch: (args: ProviderArgs) => T;
77
+ }): DataProvider;
78
+ /** A structured registration issue — duplicates are reported, never thrown. */
79
+ export interface ProviderRegistrationIssue {
80
+ code: 'duplicate' | 'invalid-id';
81
+ message: string;
82
+ ref: string;
83
+ }
84
+ /**
85
+ * Registry of data providers keyed by id. First registration wins; duplicates
86
+ * and malformed ids are recorded as structured issues (component-registry
87
+ * semantics).
88
+ */
89
+ export declare class DataProviderRegistry {
90
+ private readonly byId;
91
+ readonly issues: ProviderRegistrationIssue[];
92
+ constructor(providers?: Iterable<DataProvider>);
93
+ register(provider: DataProvider): void;
94
+ get(id: string): DataProvider | undefined;
95
+ list(): DataProvider[];
96
+ get size(): number;
97
+ }
98
+ /** The outcome of one provider run: a validated payload or a plain-language issue. */
99
+ export type ProviderRun = {
100
+ ok: true;
101
+ value: JsonValue;
102
+ } | {
103
+ ok: false;
104
+ message: string;
105
+ };
106
+ /** Default args of a provider (its params' declared defaults). */
107
+ export declare function defaultProviderArgs(manifest: DataProviderManifest): ProviderArgs;
108
+ /**
109
+ * Run a provider and validate the result against its output schema. A thrown
110
+ * error or a schema mismatch comes back as a plain-language issue — the
111
+ * binding layer renders a visible fallback, never a crash.
112
+ */
113
+ export declare function runProvider(provider: DataProvider, args?: ProviderArgs): ProviderRun;
114
+ /** Shared project-wide provider sources: `provider.<providerId>`. */
115
+ export declare const PROVIDER_SOURCE_PREFIX = "provider.";
116
+ export declare function providerSourceIdFor(providerId: string): string;
117
+ /** The provider a source is backed by, or undefined for non-provider sources. */
118
+ export declare function providerIdOfSource(source: DataSource | undefined): string | undefined;
119
+ /**
120
+ * The engine-shaped source addressing a provider. `args` carry the editor's
121
+ * param choices; `id` defaults to the shared project-wide source.
122
+ */
123
+ export declare function providerSourceFor(provider: DataProvider, args?: ProviderArgs, id?: string, label?: string): ConvexSource;
124
+ /** Example provider: a static, code-owned pricing table (think Stripe prices). */
125
+ export declare const pricingPlansProvider: DataProvider;
126
+ /** Example provider with a param: job listings filterable by department. */
127
+ export declare const jobListingsProvider: DataProvider;
128
+ /**
129
+ * The project's provider registry. In a deployed studio this hydrates from
130
+ * synced provider manifests (the component-manifest sync path); in the
131
+ * playground the project code registers directly.
132
+ */
133
+ export declare const projectDataProviders: DataProviderRegistry;
134
+ export declare function listDataProviders(): DataProvider[];
135
+ export declare function getDataProvider(id: string): DataProvider | undefined;
136
+ /**
137
+ * The payload a provider-backed source serves, or `null` when the provider is
138
+ * unregistered or failing — a `null` sample makes every binding against it a
139
+ * visible plain-language issue instead of a crash.
140
+ */
141
+ export declare function providerPayload(providerId: string, args?: ProviderArgs): JsonValue;
142
+ /** A provider's canonical sample (its default-args run), or undefined when failing. */
143
+ export declare function providerSample(provider: DataProvider): JsonValue | undefined;
@@ -0,0 +1,255 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Define a provider with the output type checked against the schema — the
4
+ * provider-side mirror of `defineDataSourceAdapter` (EC-132) and component
5
+ * `ComponentManifest` definitions.
6
+ */
7
+ export function defineDataProvider(provider) {
8
+ return provider;
9
+ }
10
+ const PROVIDER_ID_PATTERN = /^[a-z][a-z0-9-]*$/;
11
+ /**
12
+ * Registry of data providers keyed by id. First registration wins; duplicates
13
+ * and malformed ids are recorded as structured issues (component-registry
14
+ * semantics).
15
+ */
16
+ export class DataProviderRegistry {
17
+ byId = new Map();
18
+ issues = [];
19
+ constructor(providers = []) {
20
+ for (const provider of providers)
21
+ this.register(provider);
22
+ }
23
+ register(provider) {
24
+ const id = provider.manifest.id;
25
+ if (!PROVIDER_ID_PATTERN.test(id)) {
26
+ this.issues.push({
27
+ code: 'invalid-id',
28
+ ref: id,
29
+ message: `Provider id "${id}" must be lower-case and dash-separated (e.g. "pricing-plans").`,
30
+ });
31
+ return;
32
+ }
33
+ if (this.byId.has(id)) {
34
+ this.issues.push({
35
+ code: 'duplicate',
36
+ ref: id,
37
+ message: `Duplicate provider id "${id}" — keeping the first registration.`,
38
+ });
39
+ return;
40
+ }
41
+ this.byId.set(id, provider);
42
+ }
43
+ get(id) {
44
+ return this.byId.get(id);
45
+ }
46
+ list() {
47
+ return [...this.byId.values()];
48
+ }
49
+ get size() {
50
+ return this.byId.size;
51
+ }
52
+ }
53
+ /** Default args of a provider (its params' declared defaults). */
54
+ export function defaultProviderArgs(manifest) {
55
+ return Object.fromEntries((manifest.params ?? []).map((p) => [p.name, p.defaultValue]));
56
+ }
57
+ /**
58
+ * Run a provider and validate the result against its output schema. A thrown
59
+ * error or a schema mismatch comes back as a plain-language issue — the
60
+ * binding layer renders a visible fallback, never a crash.
61
+ */
62
+ export function runProvider(provider, args) {
63
+ const title = provider.manifest.title;
64
+ let raw;
65
+ try {
66
+ raw = provider.fetch(args ?? defaultProviderArgs(provider.manifest));
67
+ }
68
+ catch {
69
+ return {
70
+ ok: false,
71
+ message: `“${title}” couldn't load right now — the project code reported a problem. Anything showing it stays empty until it's fixed.`,
72
+ };
73
+ }
74
+ const parsed = provider.manifest.output.safeParse(raw);
75
+ if (!parsed.success) {
76
+ return {
77
+ ok: false,
78
+ message: `“${title}” returned data in an unexpected shape, so it can't be shown. The project code and its declared output no longer agree.`,
79
+ };
80
+ }
81
+ return { ok: true, value: parsed.data };
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Bridging providers into the binding engine's source vocabulary
85
+ // ---------------------------------------------------------------------------
86
+ /** Shared project-wide provider sources: `provider.<providerId>`. */
87
+ export const PROVIDER_SOURCE_PREFIX = 'provider.';
88
+ /** The functionRef namespace marking a source as provider-backed. */
89
+ const PROVIDER_FUNCTION_PREFIX = 'provider:';
90
+ export function providerSourceIdFor(providerId) {
91
+ return `${PROVIDER_SOURCE_PREFIX}${providerId}`;
92
+ }
93
+ /** The provider a source is backed by, or undefined for non-provider sources. */
94
+ export function providerIdOfSource(source) {
95
+ if (source === undefined || source.kind !== 'convex')
96
+ return undefined;
97
+ const ref = source.config.functionRef;
98
+ return ref.startsWith(PROVIDER_FUNCTION_PREFIX)
99
+ ? ref.slice(PROVIDER_FUNCTION_PREFIX.length)
100
+ : undefined;
101
+ }
102
+ /**
103
+ * The engine-shaped source addressing a provider. `args` carry the editor's
104
+ * param choices; `id` defaults to the shared project-wide source.
105
+ */
106
+ export function providerSourceFor(provider, args, id, label) {
107
+ return {
108
+ kind: 'convex',
109
+ id: id ?? providerSourceIdFor(provider.manifest.id),
110
+ label: label ?? provider.manifest.title,
111
+ config: {
112
+ operation: 'query',
113
+ functionRef: `${PROVIDER_FUNCTION_PREFIX}${provider.manifest.id}`,
114
+ args: args ?? defaultProviderArgs(provider.manifest),
115
+ },
116
+ };
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // The project's registered providers (project-owned, code-first)
120
+ // ---------------------------------------------------------------------------
121
+ const pricingPlanSchema = z.object({
122
+ id: z.string(),
123
+ name: z.string(),
124
+ monthlyPrice: z.number(),
125
+ summary: z.string(),
126
+ featured: z.boolean(),
127
+ });
128
+ /** Example provider: a static, code-owned pricing table (think Stripe prices). */
129
+ export const pricingPlansProvider = defineDataProvider({
130
+ manifest: {
131
+ id: 'pricing-plans',
132
+ title: 'Pricing plans',
133
+ description: 'The pricing tiers exactly as the billing code defines them.',
134
+ output: z.array(pricingPlanSchema),
135
+ },
136
+ fetch: () => [
137
+ {
138
+ id: 'starter',
139
+ name: 'Starter',
140
+ monthlyPrice: 19,
141
+ summary: 'For solo builders shipping their first site.',
142
+ featured: false,
143
+ },
144
+ {
145
+ id: 'studio',
146
+ name: 'Studio',
147
+ monthlyPrice: 49,
148
+ summary: 'For teams that publish every week.',
149
+ featured: true,
150
+ },
151
+ {
152
+ id: 'enterprise',
153
+ name: 'Enterprise',
154
+ monthlyPrice: 199,
155
+ summary: 'For organizations with compliance needs.',
156
+ featured: false,
157
+ },
158
+ ],
159
+ });
160
+ const jobListingSchema = z.object({
161
+ id: z.string(),
162
+ title: z.string(),
163
+ department: z.string(),
164
+ location: z.string(),
165
+ remote: z.boolean(),
166
+ });
167
+ const JOB_LISTINGS = [
168
+ {
169
+ id: 'job-fe',
170
+ title: 'Frontend Engineer',
171
+ department: 'Engineering',
172
+ location: 'Berlin',
173
+ remote: true,
174
+ },
175
+ {
176
+ id: 'job-be',
177
+ title: 'Backend Engineer',
178
+ department: 'Engineering',
179
+ location: 'Amsterdam',
180
+ remote: true,
181
+ },
182
+ {
183
+ id: 'job-pd',
184
+ title: 'Product Designer',
185
+ department: 'Design',
186
+ location: 'Berlin',
187
+ remote: false,
188
+ },
189
+ {
190
+ id: 'job-cm',
191
+ title: 'Content Marketer',
192
+ department: 'Marketing',
193
+ location: 'Remote',
194
+ remote: true,
195
+ },
196
+ ];
197
+ /** Example provider with a param: job listings filterable by department. */
198
+ export const jobListingsProvider = defineDataProvider({
199
+ manifest: {
200
+ id: 'job-listings',
201
+ title: 'Job listings',
202
+ description: 'Open roles from the hiring system, optionally narrowed to one department.',
203
+ output: z.array(jobListingSchema),
204
+ params: [
205
+ {
206
+ name: 'department',
207
+ label: 'Department',
208
+ kind: 'choice',
209
+ choices: [
210
+ { value: 'all', label: 'All departments' },
211
+ { value: 'Engineering', label: 'Engineering' },
212
+ { value: 'Design', label: 'Design' },
213
+ { value: 'Marketing', label: 'Marketing' },
214
+ ],
215
+ defaultValue: 'all',
216
+ },
217
+ ],
218
+ },
219
+ fetch: ({ department }) => typeof department === 'string' && department !== 'all'
220
+ ? JOB_LISTINGS.filter((job) => job.department === department)
221
+ : [...JOB_LISTINGS],
222
+ });
223
+ /**
224
+ * The project's provider registry. In a deployed studio this hydrates from
225
+ * synced provider manifests (the component-manifest sync path); in the
226
+ * playground the project code registers directly.
227
+ */
228
+ export const projectDataProviders = new DataProviderRegistry([
229
+ pricingPlansProvider,
230
+ jobListingsProvider,
231
+ ]);
232
+ export function listDataProviders() {
233
+ return projectDataProviders.list();
234
+ }
235
+ export function getDataProvider(id) {
236
+ return projectDataProviders.get(id);
237
+ }
238
+ /**
239
+ * The payload a provider-backed source serves, or `null` when the provider is
240
+ * unregistered or failing — a `null` sample makes every binding against it a
241
+ * visible plain-language issue instead of a crash.
242
+ */
243
+ export function providerPayload(providerId, args) {
244
+ const provider = getDataProvider(providerId);
245
+ if (provider === undefined)
246
+ return null;
247
+ const run = runProvider(provider, args);
248
+ return run.ok ? run.value : null;
249
+ }
250
+ /** A provider's canonical sample (its default-args run), or undefined when failing. */
251
+ export function providerSample(provider) {
252
+ const run = runProvider(provider);
253
+ return run.ok ? run.value : undefined;
254
+ }
255
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/lib/data/providers.ts"],"names":[],"mappings":"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"}