@elytracms/studio 0.0.51 → 0.0.53

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 (311) hide show
  1. package/convex/auth.ts +135 -62
  2. package/convex/invites.ts +77 -0
  3. package/dist/components/account/account-settings.js +4 -4
  4. package/dist/components/account/credential-panel.js +1 -1
  5. package/dist/components/account/self-account-view-source.js +3 -3
  6. package/dist/components/ai/ai-chat-panel-lazy.js +1 -1
  7. package/dist/components/ai/ai-chat-panel.js +4 -4
  8. package/dist/components/ai/ai-cms-panel.js +1 -1
  9. package/dist/components/ai/proposal-card.js +4 -4
  10. package/dist/components/ai/translate-document-action.js +1 -1
  11. package/dist/components/ai/translate-document-dialog.d.ts +1 -1
  12. package/dist/components/app-views/default-modules.d.ts +3 -3
  13. package/dist/components/app-views/default-modules.js +20 -20
  14. package/dist/components/app-views/sidebar.d.ts +1 -1
  15. package/dist/components/app-views/sidebar.js +2 -2
  16. package/dist/components/app-views/studio-config.d.ts +1 -1
  17. package/dist/components/assets/asset-detail.js +9 -9
  18. package/dist/components/assets/asset-grid.js +7 -7
  19. package/dist/components/assets/asset-thumb.d.ts +1 -1
  20. package/dist/components/assets/asset-thumb.js +2 -2
  21. package/dist/components/assets/assets-collection-view-source.js +3 -3
  22. package/dist/components/assets/assets-module.js +8 -8
  23. package/dist/components/assets/assets-store.d.ts +1 -1
  24. package/dist/components/assets/assets-store.js +1 -1
  25. package/dist/components/builder/blocks-model.js +1 -1
  26. package/dist/components/builder/blocks-panel.d.ts +1 -1
  27. package/dist/components/builder/blocks-panel.js +6 -6
  28. package/dist/components/builder/canvas.js +11 -11
  29. package/dist/components/builder/clipboard-actions.js +2 -2
  30. package/dist/components/builder/composition-field-editor-lazy.d.ts +1 -1
  31. package/dist/components/builder/composition-field-editor-lazy.js +1 -1
  32. package/dist/components/builder/composition-field-editor.d.ts +1 -1
  33. package/dist/components/builder/composition-field-editor.js +9 -9
  34. package/dist/components/builder/insert-context.d.ts +2 -2
  35. package/dist/components/builder/insert-context.js +2 -2
  36. package/dist/components/builder/insert-menu.d.ts +2 -2
  37. package/dist/components/builder/insert-menu.js +1 -1
  38. package/dist/components/builder/layout-inspector.js +1 -1
  39. package/dist/components/builder/page-tree.js +5 -5
  40. package/dist/components/builder/property-inspector.js +3 -3
  41. package/dist/components/builder/reuse-context.d.ts +1 -1
  42. package/dist/components/builder/reuse-context.js +3 -3
  43. package/dist/components/builder/spacing-handles.js +2 -2
  44. package/dist/components/cms/asset-picker.js +4 -4
  45. package/dist/components/cms/bulk-actions.js +1 -1
  46. package/dist/components/cms/bulk-bar.d.ts +1 -1
  47. package/dist/components/cms/bulk-bar.js +3 -3
  48. package/dist/components/cms/cell-edit.js +1 -1
  49. package/dist/components/cms/cell.js +2 -2
  50. package/dist/components/cms/cms-index.js +1 -1
  51. package/dist/components/cms/cms-store.d.ts +2 -2
  52. package/dist/components/cms/cms-store.js +6 -6
  53. package/dist/components/cms/collection-table.js +17 -17
  54. package/dist/components/cms/detail-editor.js +31 -31
  55. package/dist/components/cms/document-diff-view.js +4 -4
  56. package/dist/components/cms/editable-cell.d.ts +1 -1
  57. package/dist/components/cms/editable-cell.js +6 -6
  58. package/dist/components/cms/field-control.js +15 -15
  59. package/dist/components/cms/field-renderer.d.ts +2 -2
  60. package/dist/components/cms/filter-builder.js +3 -3
  61. package/dist/components/cms/import-export.js +1 -1
  62. package/dist/components/cms/issues-pane.js +1 -1
  63. package/dist/components/cms/prop-fields.js +3 -3
  64. package/dist/components/cms/reference-confirm.js +1 -1
  65. package/dist/components/cms/relation-picker.js +1 -1
  66. package/dist/components/cms/rich-text/block-commands.d.ts +1 -1
  67. package/dist/components/cms/rich-text/component-embed.js +2 -2
  68. package/dist/components/cms/rich-text/editor.js +8 -8
  69. package/dist/components/cms/rich-text/embed-inspector.d.ts +1 -1
  70. package/dist/components/cms/rich-text/embed-inspector.js +2 -2
  71. package/dist/components/cms/rich-text/embed-picker.js +1 -1
  72. package/dist/components/cms/rich-text/embed-props.js +1 -1
  73. package/dist/components/cms/rich-text/extensions.d.ts +1 -1
  74. package/dist/components/cms/rich-text/extensions.js +4 -4
  75. package/dist/components/cms/rich-text/index.d.ts +1 -1
  76. package/dist/components/cms/rich-text/index.js +1 -1
  77. package/dist/components/cms/rich-text/insert.d.ts +1 -1
  78. package/dist/components/cms/rich-text/lazy.d.ts +1 -1
  79. package/dist/components/cms/rich-text/lazy.js +1 -1
  80. package/dist/components/cms/rich-text/slash-command.js +1 -1
  81. package/dist/components/cms/rich-text/toolbar.d.ts +1 -1
  82. package/dist/components/cms/rich-text/toolbar.js +4 -4
  83. package/dist/components/cms/use-cell-edit.d.ts +1 -1
  84. package/dist/components/cms/use-cell-edit.js +2 -2
  85. package/dist/components/cms/use-compare-selection.d.ts +1 -1
  86. package/dist/components/cms/use-discard-controller.d.ts +1 -1
  87. package/dist/components/cms/use-discard-controller.js +2 -2
  88. package/dist/components/cms/use-document-versions.d.ts +1 -1
  89. package/dist/components/cms/use-document-versions.js +1 -1
  90. package/dist/components/cms/use-embed-inspector-host.d.ts +1 -1
  91. package/dist/components/cms/use-published-perspective.d.ts +2 -2
  92. package/dist/components/cms/use-published-perspective.js +2 -2
  93. package/dist/components/cms/use-restore-version.js +1 -1
  94. package/dist/components/cms/version-compare-lazy.js +1 -1
  95. package/dist/components/cms/version-compare.js +6 -6
  96. package/dist/components/cms/versions-model.d.ts +1 -1
  97. package/dist/components/cms/versions-pane.js +5 -5
  98. package/dist/components/cms/view-bar.js +2 -2
  99. package/dist/components/collab/collab-context.js +1 -1
  100. package/dist/components/collection-view/cms-collection-view-source.js +2 -2
  101. package/dist/components/components/component-preview.js +3 -3
  102. package/dist/components/components/components-index.js +2 -2
  103. package/dist/components/components/registry-browser.js +2 -2
  104. package/dist/components/components/transfer-dialog.js +5 -5
  105. package/dist/components/components/transfer.js +4 -4
  106. package/dist/components/current-user-menu.js +2 -2
  107. package/dist/components/delivery-health-banner.js +2 -2
  108. package/dist/components/operation-error.js +1 -1
  109. package/dist/components/project-list.js +5 -5
  110. package/dist/components/project-session.js +1 -1
  111. package/dist/components/project-switcher.js +3 -3
  112. package/dist/components/rail-store-status.js +1 -1
  113. package/dist/components/redirects/redirects-collection-view-source.js +3 -3
  114. package/dist/components/redirects/redirects-module.js +6 -6
  115. package/dist/components/section-nav.js +3 -3
  116. package/dist/components/section-surface.js +1 -1
  117. package/dist/components/studio-project-screen.js +7 -7
  118. package/dist/components/studio-shell.js +9 -9
  119. package/dist/components/use-hydration-phase.js +1 -1
  120. package/dist/components/users/users-collection-view-source.js +4 -4
  121. package/dist/components/users/users-module.js +9 -9
  122. package/dist/components/workspace-projects.js +1 -1
  123. package/dist/customization.d.ts +9 -9
  124. package/dist/customization.js +5 -5
  125. package/dist/lib/ai/anthropic-provider.d.ts +1 -1
  126. package/dist/lib/ai/apply-content.d.ts +1 -1
  127. package/dist/lib/ai/apply-content.js +3 -3
  128. package/dist/lib/ai/chat-state.d.ts +2 -2
  129. package/dist/lib/ai/config.d.ts +1 -1
  130. package/dist/lib/ai/create-flow.d.ts +2 -2
  131. package/dist/lib/ai/create-flow.js +3 -3
  132. package/dist/lib/ai/fake-provider.d.ts +1 -1
  133. package/dist/lib/ai/index.d.ts +15 -15
  134. package/dist/lib/ai/index.js +15 -15
  135. package/dist/lib/ai/knowledge.d.ts +1 -1
  136. package/dist/lib/ai/provenance.d.ts +1 -1
  137. package/dist/lib/ai/route-provider.d.ts +1 -1
  138. package/dist/lib/ai/route.d.ts +1 -1
  139. package/dist/lib/ai/shape.d.ts +1 -1
  140. package/dist/lib/ai/translate-document.d.ts +1 -1
  141. package/dist/lib/ai/translate-document.js +3 -3
  142. package/dist/lib/ai-panel.js +1 -1
  143. package/dist/lib/assets/index.d.ts +4 -4
  144. package/dist/lib/assets/index.js +4 -4
  145. package/dist/lib/assets/upload.d.ts +2 -2
  146. package/dist/lib/assets/upload.js +2 -2
  147. package/dist/lib/auth/convex-auth-adapter.d.ts +53 -2
  148. package/dist/lib/auth/convex-auth-adapter.js +149 -68
  149. package/dist/lib/auth/convex-auth-adapter.js.map +1 -1
  150. package/dist/lib/auth/dev-auto-login-adapter.d.ts +1 -1
  151. package/dist/lib/auth/index.d.ts +9 -9
  152. package/dist/lib/auth/index.js +10 -10
  153. package/dist/lib/auth/local-auth-adapter.d.ts +1 -1
  154. package/dist/lib/auth/route-guard.d.ts +1 -1
  155. package/dist/lib/auth-errors.d.ts +1 -1
  156. package/dist/lib/clipboard/index.d.ts +3 -3
  157. package/dist/lib/clipboard/index.js +3 -3
  158. package/dist/lib/cms/published-documents.d.ts +1 -1
  159. package/dist/lib/cms-views/index.d.ts +2 -2
  160. package/dist/lib/cms-views/index.js +2 -2
  161. package/dist/lib/collection-view/collection-view-source.d.ts +4 -4
  162. package/dist/lib/data/collection-content.js +1 -1
  163. package/dist/lib/data/data-store.js +6 -6
  164. package/dist/lib/data/index.d.ts +4 -4
  165. package/dist/lib/data/index.js +4 -4
  166. package/dist/lib/data/sample-capture.js +4 -4
  167. package/dist/lib/data/sources-store.d.ts +1 -1
  168. package/dist/lib/diff-view-preference.js +1 -1
  169. package/dist/lib/dnd/gap-drag.d.ts +1 -1
  170. package/dist/lib/i18n/i18n.d.ts +1 -1
  171. package/dist/lib/i18n/i18n.js +1 -1
  172. package/dist/lib/i18n/index.d.ts +4 -4
  173. package/dist/lib/i18n/index.js +3 -3
  174. package/dist/lib/i18n/messages.en.d.ts +1 -1
  175. package/dist/lib/i18n/messages.en.js +1 -1
  176. package/dist/lib/locale/binding-fallback.d.ts +1 -1
  177. package/dist/lib/locale/binding-fallback.js +2 -2
  178. package/dist/lib/locale/index.d.ts +6 -6
  179. package/dist/lib/locale/index.js +6 -6
  180. package/dist/lib/locale/locale-switcher.js +3 -3
  181. package/dist/lib/locale/use-studio-locale.js +1 -1
  182. package/dist/lib/operations/asset-repository.d.ts +1 -1
  183. package/dist/lib/operations/cms-persistence.d.ts +1 -1
  184. package/dist/lib/operations/cms-persistence.js +1 -1
  185. package/dist/lib/operations/index.d.ts +6 -6
  186. package/dist/lib/operations/index.js +6 -6
  187. package/dist/lib/operations/session-hydration.d.ts +1 -1
  188. package/dist/lib/operations/session-hydration.js +1 -1
  189. package/dist/lib/operations/studio-operations.d.ts +1 -1
  190. package/dist/lib/operations/studio-operations.js +3 -3
  191. package/dist/lib/persistence/convex-adapter.js +2 -2
  192. package/dist/lib/persistence/convex-blob-storage.d.ts +1 -1
  193. package/dist/lib/persistence/convex-blob-storage.js +1 -1
  194. package/dist/lib/persistence/deployment-readiness.d.ts +2 -2
  195. package/dist/lib/persistence/index.d.ts +6 -6
  196. package/dist/lib/persistence/index.js +7 -7
  197. package/dist/lib/persona/labels.js +1 -1
  198. package/dist/lib/query/index.d.ts +2 -2
  199. package/dist/lib/query/index.js +1 -1
  200. package/dist/lib/rail.js +1 -1
  201. package/dist/lib/references/impact.d.ts +1 -1
  202. package/dist/lib/references/impact.js +1 -1
  203. package/dist/lib/references/index.d.ts +3 -3
  204. package/dist/lib/references/index.js +3 -3
  205. package/dist/lib/references/references-store.d.ts +2 -2
  206. package/dist/lib/references/references-store.js +3 -3
  207. package/dist/lib/registry/index.js +2 -2
  208. package/dist/lib/theme.js +1 -1
  209. package/dist/lib/webhooks/config.d.ts +1 -1
  210. package/dist/lib/webhooks/config.js +2 -2
  211. package/dist/lib/webhooks/dispatcher.js +2 -2
  212. package/dist/lib/webhooks/index.d.ts +6 -6
  213. package/dist/lib/webhooks/index.js +4 -4
  214. package/dist/lib/workspace/index.d.ts +7 -7
  215. package/dist/lib/workspace/index.js +3 -3
  216. package/dist/lib/workspace/switcher-source.d.ts +1 -1
  217. package/dist/router/index.d.ts +1 -1
  218. package/dist/router/index.js +1 -1
  219. package/dist/ui/avatar.js +1 -1
  220. package/dist/ui/badge.js +1 -1
  221. package/dist/ui/button.js +1 -1
  222. package/dist/ui/card.js +1 -1
  223. package/dist/ui/collapsible-section.js +2 -2
  224. package/dist/ui/dialog.js +1 -1
  225. package/dist/ui/dropdown-menu.js +1 -1
  226. package/dist/ui/field.js +1 -1
  227. package/dist/ui/index.d.ts +19 -19
  228. package/dist/ui/index.js +19 -19
  229. package/dist/ui/input.js +1 -1
  230. package/dist/ui/inspector.js +1 -1
  231. package/dist/ui/layout.js +1 -1
  232. package/dist/ui/panel.js +2 -2
  233. package/dist/ui/popover.js +1 -1
  234. package/dist/ui/row-item.js +2 -2
  235. package/dist/ui/segmented-control.js +1 -1
  236. package/dist/ui/separator.js +1 -1
  237. package/dist/ui/toolbar.js +2 -2
  238. package/dist/ui/typography.js +1 -1
  239. package/package.json +3 -3
  240. package/dist/components/assets/asset-library.d.ts +0 -14
  241. package/dist/components/assets/asset-library.js +0 -202
  242. package/dist/components/assets/asset-library.js.map +0 -1
  243. package/dist/components/backend-gate.d.ts +0 -19
  244. package/dist/components/backend-gate.js +0 -64
  245. package/dist/components/backend-gate.js.map +0 -1
  246. package/dist/components/builder/composition-scope.d.ts +0 -16
  247. package/dist/components/builder/composition-scope.js +0 -7
  248. package/dist/components/builder/composition-scope.js.map +0 -1
  249. package/dist/components/cms/alias-selector.d.ts +0 -20
  250. package/dist/components/cms/alias-selector.js +0 -34
  251. package/dist/components/cms/alias-selector.js.map +0 -1
  252. package/dist/components/cms/collections-sidebar.d.ts +0 -18
  253. package/dist/components/cms/collections-sidebar.js +0 -36
  254. package/dist/components/cms/collections-sidebar.js.map +0 -1
  255. package/dist/components/cms/new-page-dialog.d.ts +0 -22
  256. package/dist/components/cms/new-page-dialog.js +0 -42
  257. package/dist/components/cms/new-page-dialog.js.map +0 -1
  258. package/dist/components/cms/rich-text/embed-control.d.ts +0 -17
  259. package/dist/components/cms/rich-text/embed-control.js +0 -62
  260. package/dist/components/cms/rich-text/embed-control.js.map +0 -1
  261. package/dist/components/cms/rich-text/image-control.d.ts +0 -16
  262. package/dist/components/cms/rich-text/image-control.js +0 -36
  263. package/dist/components/cms/rich-text/image-control.js.map +0 -1
  264. package/dist/components/components/fixture-runner.d.ts +0 -10
  265. package/dist/components/components/fixture-runner.js +0 -27
  266. package/dist/components/components/fixture-runner.js.map +0 -1
  267. package/dist/components/references/builder-deep-link.d.ts +0 -12
  268. package/dist/components/references/builder-deep-link.js +0 -53
  269. package/dist/components/references/builder-deep-link.js.map +0 -1
  270. package/dist/components/routes/redirect-chain.d.ts +0 -9
  271. package/dist/components/routes/redirect-chain.js +0 -16
  272. package/dist/components/routes/redirect-chain.js.map +0 -1
  273. package/dist/components/routes/redirect-manager.d.ts +0 -13
  274. package/dist/components/routes/redirect-manager.js +0 -24
  275. package/dist/components/routes/redirect-manager.js.map +0 -1
  276. package/dist/components/routes/route-list.d.ts +0 -35
  277. package/dist/components/routes/route-list.js +0 -69
  278. package/dist/components/routes/route-list.js.map +0 -1
  279. package/dist/components/routes/routes-shell.d.ts +0 -14
  280. package/dist/components/routes/routes-shell.js +0 -68
  281. package/dist/components/routes/routes-shell.js.map +0 -1
  282. package/dist/components/sections.d.ts +0 -37
  283. package/dist/components/sections.js +0 -62
  284. package/dist/components/sections.js.map +0 -1
  285. package/dist/components/users/user-search.d.ts +0 -8
  286. package/dist/components/users/user-search.js +0 -13
  287. package/dist/components/users/user-search.js.map +0 -1
  288. package/dist/components/workspace-gate.d.ts +0 -12
  289. package/dist/components/workspace-gate.js +0 -28
  290. package/dist/components/workspace-gate.js.map +0 -1
  291. package/dist/lib/cms-views/views-store.d.ts +0 -70
  292. package/dist/lib/cms-views/views-store.js +0 -129
  293. package/dist/lib/cms-views/views-store.js.map +0 -1
  294. package/dist/lib/operations/graph-commands.d.ts +0 -136
  295. package/dist/lib/operations/graph-commands.js +0 -85
  296. package/dist/lib/operations/graph-commands.js.map +0 -1
  297. package/dist/lib/operations/graph-persistence.d.ts +0 -27
  298. package/dist/lib/operations/graph-persistence.js +0 -35
  299. package/dist/lib/operations/graph-persistence.js.map +0 -1
  300. package/dist/lib/routing/index.d.ts +0 -10
  301. package/dist/lib/routing/index.js +0 -11
  302. package/dist/lib/routing/index.js.map +0 -1
  303. package/dist/lib/routing/routing-analysis.d.ts +0 -26
  304. package/dist/lib/routing/routing-analysis.js +0 -37
  305. package/dist/lib/routing/routing-analysis.js.map +0 -1
  306. package/dist/lib/routing/routing-store.d.ts +0 -50
  307. package/dist/lib/routing/routing-store.js +0 -72
  308. package/dist/lib/routing/routing-store.js.map +0 -1
  309. package/dist/lib/working-graph.d.ts +0 -82
  310. package/dist/lib/working-graph.js +0 -113
  311. package/dist/lib/working-graph.js.map +0 -1
@@ -4,8 +4,8 @@ import { roleGrantsCapability } from '@elytracms/core/persistence';
4
4
  import { Avatar, Badge, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Row, Stack, Text, } from '@elytracms/studio/ui';
5
5
  import { STUDIO_PROJECT_ROUTE, studioPath, useNavigate } from '@elytracms/studio/router';
6
6
  import { useT } from '@elytracms/studio/lib/i18n';
7
- import { useAuth, useProjectRole } from './auth-context';
8
- import { useTheme } from './theme-context';
7
+ import { useAuth, useProjectRole } from './auth-context.js';
8
+ import { useTheme } from './theme-context.js';
9
9
  /**
10
10
  * Current-user affordance in the shell header (EC-150): who is signed in,
11
11
  * their role on the active project (badge), theme switch, and sign-out. Role
@@ -3,8 +3,8 @@ import { useState } from 'react';
3
3
  import { Rocket, X } from 'lucide-react';
4
4
  import { Button, Row, Spacer, Text } from '@elytracms/studio/ui';
5
5
  import { translate } from '@elytracms/studio/lib/i18n';
6
- import { resolveBackendConfig } from '../lib/persistence/backend-mode';
7
- import { missingInstantPublishVars } from '../lib/delivery/instant-publish';
6
+ import { resolveBackendConfig } from '../lib/persistence/backend-mode.js';
7
+ import { missingInstantPublishVars } from '../lib/delivery/instant-publish.js';
8
8
  import { useOperationQuery } from '@elytracms/studio/lib/query';
9
9
  /**
10
10
  * EC-268: a boot-up health check for instant publish (EC-146). When the studio is
@@ -4,7 +4,7 @@ import { SESSION_EXPIRED_MESSAGE, SIGN_IN_AGAIN_LABEL, isSessionExpiredError, si
4
4
  import { Badge, Button, Row, Stack, Text } from '@elytracms/studio/ui';
5
5
  import { operationErrorLabel } from '@elytracms/studio/lib/persona/labels';
6
6
  import { translate } from '@elytracms/studio/lib/i18n';
7
- import { useOptionalAuth } from './auth-context';
7
+ import { useOptionalAuth } from './auth-context.js';
8
8
  /**
9
9
  * Shared error surface for failed/denied operations (EC-141). Every studio
10
10
  * surface renders rejected commands through this banner so a structured
@@ -4,11 +4,11 @@ import { Globe, LogIn, TerminalSquare } from 'lucide-react';
4
4
  import { Badge, Button, Card, Code, Heading, Row, Spacer, Stack, Text } from '@elytracms/studio/ui';
5
5
  import { hasProjectSession } from '@elytracms/studio/lib/auth';
6
6
  import { translate } from '@elytracms/studio/lib/i18n';
7
- import { PlaygroundBadge } from './playground-badge';
8
- import { SignInNeededBadge } from './sign-in-needed-badge';
9
- import { SectionStateView } from './section-state';
10
- import { useStudio } from './studio-context';
11
- import { useRecentProjects, useSwitcherEntries } from './workspace-projects';
7
+ import { PlaygroundBadge } from './playground-badge.js';
8
+ import { SignInNeededBadge } from './sign-in-needed-badge.js';
9
+ import { SectionStateView } from './section-state.js';
10
+ import { useStudio } from './studio-context.js';
11
+ import { useRecentProjects, useSwitcherEntries } from './workspace-projects.js';
12
12
  /**
13
13
  * Studio launcher / project list (brief §4.3, §8.1; reframed by EC-154). The
14
14
  * Studio's front door: lists the workspace's projects and routes into a
@@ -5,7 +5,7 @@ import { isPlaygroundMode } from '@elytracms/studio/lib/persistence';
5
5
  import { configureContentSession } from '@elytracms/studio/lib/data';
6
6
  import { resolveDeploymentRoutes } from '@elytracms/studio/lib/workspace';
7
7
  import { createRequiredContext } from '@elytracms/studio/lib/required-context';
8
- import { HydrationBoundary, useHydrationPhase } from './use-hydration-phase';
8
+ import { HydrationBoundary, useHydrationPhase } from './use-hydration-phase.js';
9
9
  const { Context: ProjectSessionContext, useRequired: useProjectSession } = createRequiredContext('ProjectSession');
10
10
  export function ProjectSessionProvider({ projectId, children, }) {
11
11
  const playground = isPlaygroundMode();
@@ -4,9 +4,9 @@ import { Check, ChevronsUpDown, FolderOpen } from 'lucide-react';
4
4
  import { hasProjectSession } from '@elytracms/studio/lib/auth';
5
5
  import { translate } from '@elytracms/studio/lib/i18n';
6
6
  import { Badge, Button, Code, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Row, Spacer, Stack, Text, } from '@elytracms/studio/ui';
7
- import { useStudio } from './studio-context';
8
- import { useRecentProjects, useSwitcherEntries } from './workspace-projects';
9
- import { SignInNeededBadge } from './sign-in-needed-badge';
7
+ import { useStudio } from './studio-context.js';
8
+ import { useRecentProjects, useSwitcherEntries } from './workspace-projects.js';
9
+ import { SignInNeededBadge } from './sign-in-needed-badge.js';
10
10
  /**
11
11
  * The project switcher (EC-033, reframed by EC-154): with a workspace config
12
12
  * the list is config-driven — configured projects ∩ the user's grants, plus
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { RotateCcw } from 'lucide-react';
3
3
  import { Button } from '@elytracms/studio/ui';
4
4
  import { translate } from '@elytracms/studio/lib/i18n';
5
- import { SectionStateView } from './section-state';
5
+ import { SectionStateView } from './section-state.js';
6
6
  /**
7
7
  * The shared error/loading status gate for a rail module (EC-319/EC-323,
8
8
  * repointed onto `SectionStateView` in EC-327). The assets, users, and
@@ -1,9 +1,9 @@
1
1
  import { useCallback, useMemo } from 'react';
2
2
  import { createCollectionRegistry, validateDocument } from '@elytracms/core/cms-core';
3
3
  import { studioPath } from '@elytracms/studio/router';
4
- import { useRedirects } from './redirects-store';
5
- import { redirectsCollectionDef } from './redirects-schema';
6
- import { metaBagProjection, normalizeOkResult, useRailViewSource } from '../rail-view-source';
4
+ import { useRedirects } from './redirects-store.js';
5
+ import { redirectsCollectionDef } from './redirects-schema.js';
6
+ import { metaBagProjection, normalizeOkResult, useRailViewSource } from '../rail-view-source.js';
7
7
  /** The redirects rail is not localized — one implicit locale keeps the lens honest. */
8
8
  const REDIRECTS_LOCALE = 'en';
9
9
  const REDIRECTS_LOCALE_CONFIG = {
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { translate } from '@elytracms/studio/lib/i18n';
3
- import { RedirectsProvider, useRedirects } from './redirects-store';
4
- import { useRedirectsCollectionViewSource } from './redirects-collection-view-source';
5
- import { CollectionViewProvider } from '../collection-view/collection-view-context';
6
- import { RailStoreStatus } from '../rail-store-status';
7
- import { LoadedCollectionTable } from '../cms/collection-table';
8
- import { PortableDetailEditor } from '../cms/detail-editor';
3
+ import { RedirectsProvider, useRedirects } from './redirects-store.js';
4
+ import { useRedirectsCollectionViewSource } from './redirects-collection-view-source.js';
5
+ import { CollectionViewProvider } from '../collection-view/collection-view-context.js';
6
+ import { RailStoreStatus } from '../rail-store-status.js';
7
+ import { LoadedCollectionTable } from '../cms/collection-table.js';
8
+ import { PortableDetailEditor } from '../cms/detail-editor.js';
9
9
  /**
10
10
  * The studio Redirects module (EC-303). Editorial redirects as data — the reuse
11
11
  * proof (with the users rail) that the portable interaction surfaces serve any
@@ -6,9 +6,9 @@ import { cn } from '@elytracms/studio/lib/utils';
6
6
  import { readCollapsedViews, storeCollapsedViews } from '@elytracms/studio/lib/rail';
7
7
  import { translate } from '@elytracms/studio/lib/i18n';
8
8
  import { Text } from '@elytracms/studio/ui';
9
- import { activeViewIdFromPath, isNavViewVisible, useStudioNav } from './app-views/sidebar';
10
- import { useFieldRenderers } from './cms/field-renderer';
11
- import { useProjectRole } from './auth-context';
9
+ import { activeViewIdFromPath, isNavViewVisible, useStudioNav } from './app-views/sidebar.js';
10
+ import { useFieldRenderers } from './cms/field-renderer.js';
11
+ import { useProjectRole } from './auth-context.js';
12
12
  /**
13
13
  * Vertical section rail (brief §8.1), driven by the configurable sidebar (EC-237):
14
14
  * a consumer-extendable tree of views / groups / separators resolved over the
@@ -3,7 +3,7 @@ import { Link, STUDIO_PROJECT_ROUTE } from '@elytracms/studio/router';
3
3
  import { availabilityOf, SECTIONS, sectionStateSchema } from '@elytracms/core/studio-core';
4
4
  import { Code, Row, Stack, Text } from '@elytracms/studio/ui';
5
5
  import { cn } from '@elytracms/studio/lib/utils';
6
- import { resolveSectionState, SectionStateView } from './section-state';
6
+ import { resolveSectionState, SectionStateView } from './section-state.js';
7
7
  /** Parse a `?state=` search param into a SectionState (undefined when absent/invalid). */
8
8
  export function parseSectionState(raw) {
9
9
  const parsed = sectionStateSchema.safeParse(raw);
@@ -6,13 +6,13 @@ import { studioSearch } from '@elytracms/studio/router/search';
6
6
  import { Button, Heading, Stack, Text } from '@elytracms/studio/ui';
7
7
  import { DataProvider } from '@elytracms/studio/lib/data';
8
8
  import { translate } from '@elytracms/studio/lib/i18n';
9
- import { useStudio } from './studio-context';
10
- import { StudioShell } from './studio-shell';
11
- import { AssetsProvider } from './assets/assets-store';
12
- import { CollabProvider } from './collab/collab-context';
13
- import { ProjectSessionProvider } from './project-session';
14
- import { flatPath } from './app-views/module';
15
- import { landingViewId, useStudioNav } from './app-views/sidebar';
9
+ import { useStudio } from './studio-context.js';
10
+ import { StudioShell } from './studio-shell.js';
11
+ import { AssetsProvider } from './assets/assets-store.js';
12
+ import { CollabProvider } from './collab/collab-context.js';
13
+ import { ProjectSessionProvider } from './project-session.js';
14
+ import { flatPath } from './app-views/module.js';
15
+ import { landingViewId, useStudioNav } from './app-views/sidebar.js';
16
16
  /**
17
17
  * EC-223 Stage 6 (catch-all routing): the studio's per-project route component.
18
18
  *
@@ -5,15 +5,15 @@ import { useCallback, useEffect, useState } from 'react';
5
5
  import { Row, Spacer, Toaster } from '@elytracms/studio/ui';
6
6
  import { readRailCollapsed, storeRailCollapsed } from '@elytracms/studio/lib/rail';
7
7
  import { translate } from '@elytracms/studio/lib/i18n';
8
- import { CurrentUserMenu } from './current-user-menu';
9
- import { DeliveryHealthBanner } from './delivery-health-banner';
10
- import { PlaygroundBadge } from './playground-badge';
11
- import { DevLoginBadge } from './dev-login-badge';
12
- import { AiPanelToggle } from './ai/ai-panel-toggle';
13
- import { ProjectSwitcher } from './project-switcher';
14
- import { SectionNav } from './section-nav';
15
- import { activeViewIdFromPath, useStudioNav } from './app-views/sidebar';
16
- import { BreadcrumbProvider, useBreadcrumbTrail } from './breadcrumb-context';
8
+ import { CurrentUserMenu } from './current-user-menu.js';
9
+ import { DeliveryHealthBanner } from './delivery-health-banner.js';
10
+ import { PlaygroundBadge } from './playground-badge.js';
11
+ import { DevLoginBadge } from './dev-login-badge.js';
12
+ import { AiPanelToggle } from './ai/ai-panel-toggle.js';
13
+ import { ProjectSwitcher } from './project-switcher.js';
14
+ import { SectionNav } from './section-nav.js';
15
+ import { activeViewIdFromPath, useStudioNav } from './app-views/sidebar.js';
16
+ import { BreadcrumbProvider, useBreadcrumbTrail } from './breadcrumb-context.js';
17
17
  /**
18
18
  * The Studio shell (brief §4.3, §8.1): a persistent top bar + section rail that
19
19
  * preserve the active project while the user moves between surfaces. The top bar
@@ -2,7 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import { Button, Stack, Text } from '@elytracms/studio/ui';
4
4
  import { translate } from '@elytracms/studio/lib/i18n';
5
- import { OperationErrorBanner } from './operation-error';
5
+ import { OperationErrorBanner } from './operation-error.js';
6
6
  /**
7
7
  * `loader`'s IDENTITY is the refetch trigger — memoize it (`useCallback`) over
8
8
  * whatever inputs should re-hydrate (e.g. `projectId`), exactly like the
@@ -1,9 +1,9 @@
1
1
  import { useCallback } from 'react';
2
2
  import { studioPath } from '@elytracms/studio/router';
3
- import { useAuth } from '../auth-context';
4
- import { useUsers } from './users-store';
5
- import { usersCollectionDef } from './users-schema';
6
- import { metaBagProjection, normalizeOkResult, useRailViewSource } from '../rail-view-source';
3
+ import { useAuth } from '../auth-context.js';
4
+ import { useUsers } from './users-store.js';
5
+ import { usersCollectionDef } from './users-schema.js';
6
+ import { metaBagProjection, normalizeOkResult, useRailViewSource } from '../rail-view-source.js';
7
7
  /** The users rail is not localized — one implicit locale keeps the lens honest. */
8
8
  const USERS_LOCALE = 'en';
9
9
  const USERS_LOCALE_CONFIG = { default: USERS_LOCALE, locales: [USERS_LOCALE] };
@@ -2,15 +2,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ShieldAlert } from 'lucide-react';
3
3
  import { Heading, Stack, Text } from '@elytracms/studio/ui';
4
4
  import { translate } from '@elytracms/studio/lib/i18n';
5
- import { useAuth, useProjectRole } from '../auth-context';
6
- import { UsersProvider, useUsers } from './users-store';
7
- import { useUsersCollectionViewSource } from './users-collection-view-source';
8
- import { CollectionViewProvider } from '../collection-view/collection-view-context';
9
- import { RailStoreStatus } from '../rail-store-status';
10
- import { LoadedCollectionTable } from '../cms/collection-table';
11
- import { PortableDetailEditor } from '../cms/detail-editor';
12
- import { AccountSettings } from '../account/account-settings';
13
- import { InviteUserBar } from './invite-user-bar';
5
+ import { useAuth, useProjectRole } from '../auth-context.js';
6
+ import { UsersProvider, useUsers } from './users-store.js';
7
+ import { useUsersCollectionViewSource } from './users-collection-view-source.js';
8
+ import { CollectionViewProvider } from '../collection-view/collection-view-context.js';
9
+ import { RailStoreStatus } from '../rail-store-status.js';
10
+ import { LoadedCollectionTable } from '../cms/collection-table.js';
11
+ import { PortableDetailEditor } from '../cms/detail-editor.js';
12
+ import { AccountSettings } from '../account/account-settings.js';
13
+ import { InviteUserBar } from './invite-user-bar.js';
14
14
  /**
15
15
  * The studio Users module (EC-240). An admin-only section for managing who has
16
16
  * access to this deployment and their role. AD-19: it is the **reuse proof** for
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from 'react';
2
2
  import { getWorkspaceState, selectSwitcherProjects } from '@elytracms/studio/lib/workspace';
3
- import { useStudio } from './studio-context';
3
+ import { useStudio } from './studio-context.js';
4
4
  /**
5
5
  * Config-driven project source for the switcher + launcher (EC-154, reframed for
6
6
  * EC-179). The decision logic is the pure `selectSwitcherProjects`; this hook
@@ -38,18 +38,18 @@
38
38
  * createStudio(config, studioConfig)
39
39
  * ```
40
40
  */
41
- export { defineStudio } from './components/app-views/studio-config';
42
- export type { StudioConfig, CustomFieldRenderer, CustomFieldRendererProps, } from './components/app-views/studio-config';
43
- export { nav } from './components/app-views/default-modules';
44
- export type { CmsViewConfig, BuiltinViewConfig, CustomViewConfig, } from './components/app-views/default-modules';
45
- export type { AppViewContext, AppViewModule, SidebarNode } from './components/app-views/module';
46
- export { createStudio } from './lib/workspace';
41
+ export { defineStudio } from './components/app-views/studio-config.js';
42
+ export type { StudioConfig, CustomFieldRenderer, CustomFieldRendererProps, } from './components/app-views/studio-config.js';
43
+ export { nav } from './components/app-views/default-modules.js';
44
+ export type { CmsViewConfig, BuiltinViewConfig, CustomViewConfig, } from './components/app-views/default-modules.js';
45
+ export type { AppViewContext, AppViewModule, SidebarNode } from './components/app-views/module.js';
46
+ export { createStudio } from './lib/workspace/index.js';
47
47
  /** A ready-made example renderer; a consuming repo may use it or author its own. */
48
- export { colorFieldRenderer } from './components/cms/field-renderer';
48
+ export { colorFieldRenderer } from './components/cms/field-renderer.js';
49
49
  /**
50
50
  * Studio-UI localization (EC-241): author a translation catalog for `defineStudio({
51
51
  * i18n })`. `msg` is only needed to build an in-repo *source* catalog with translator
52
52
  * hints; a plain `MessageCatalog` (flat key → string) is all a consumer supplies.
53
53
  */
54
- export { msg } from './lib/i18n';
55
- export type { MessageCatalog, SourceMessage, StudioI18nConfig } from './lib/i18n';
54
+ export { msg } from './lib/i18n/index.js';
55
+ export type { MessageCatalog, SourceMessage, StudioI18nConfig } from './lib/i18n/index.js';
@@ -38,15 +38,15 @@
38
38
  * createStudio(config, studioConfig)
39
39
  * ```
40
40
  */
41
- export { defineStudio } from './components/app-views/studio-config';
42
- export { nav } from './components/app-views/default-modules';
43
- export { createStudio } from './lib/workspace';
41
+ export { defineStudio } from './components/app-views/studio-config.js';
42
+ export { nav } from './components/app-views/default-modules.js';
43
+ export { createStudio } from './lib/workspace/index.js';
44
44
  /** A ready-made example renderer; a consuming repo may use it or author its own. */
45
- export { colorFieldRenderer } from './components/cms/field-renderer';
45
+ export { colorFieldRenderer } from './components/cms/field-renderer.js';
46
46
  /**
47
47
  * Studio-UI localization (EC-241): author a translation catalog for `defineStudio({
48
48
  * i18n })`. `msg` is only needed to build an in-repo *source* catalog with translator
49
49
  * hints; a plain `MessageCatalog` (flat key → string) is all a consumer supplies.
50
50
  */
51
- export { msg } from './lib/i18n';
51
+ export { msg } from './lib/i18n/index.js';
52
52
  //# sourceMappingURL=customization.js.map
@@ -10,7 +10,7 @@
10
10
  * dependency, never in `packages/core`. Key custody stays with the host: the key is
11
11
  * read from host env by the mount and passed in (or falls back to `ANTHROPIC_API_KEY`).
12
12
  */
13
- import type { AiProvider } from './types';
13
+ import type { AiProvider } from './types.js';
14
14
  export interface AnthropicProviderOptions {
15
15
  /** Provider key (host-env secret). Falls back to the SDK's `ANTHROPIC_API_KEY` lookup. */
16
16
  apiKey?: string;
@@ -1,4 +1,4 @@
1
- import type { ApplyContentInput, ApplyContentResult } from './types';
1
+ import type { ApplyContentInput, ApplyContentResult } from './types.js';
2
2
  /** Default repair attempts after the first generation. */
3
3
  export declare const DEFAULT_MAX_REPAIR_ATTEMPTS = 2;
4
4
  /**
@@ -19,9 +19,9 @@
19
19
  * whole loop without a key. No data access, no service credentials here.
20
20
  */
21
21
  import { assetNode, referenceNode, resolveLabel, validateDocument } from '@elytracms/core/cms-core';
22
- import { assembleKnowledgeBlock } from './knowledge';
23
- import { aiProvenance } from './provenance';
24
- import { buildTargetShape } from './shape';
22
+ import { assembleKnowledgeBlock } from './knowledge.js';
23
+ import { aiProvenance } from './provenance.js';
24
+ import { buildTargetShape } from './shape.js';
25
25
  /** Default repair attempts after the first generation. */
26
26
  export const DEFAULT_MAX_REPAIR_ATTEMPTS = 2;
27
27
  const SYSTEM_PROMPT = [
@@ -9,8 +9,8 @@
9
9
  * every run (determinism principle).
10
10
  */
11
11
  import type { FieldValues } from '@elytracms/core/cms-core';
12
- import type { AiProvenance, ContentPatch } from './types';
13
- import type { CreateFlowResult, CreateFlowStep, ProposalOrigin } from './create-flow';
12
+ import type { AiProvenance, ContentPatch } from './types.js';
13
+ import type { CreateFlowResult, CreateFlowStep, ProposalOrigin } from './create-flow.js';
14
14
  /** A proposal the editor reviews as a diff and then applies (as a draft) or rejects. */
15
15
  export interface ProposalReview {
16
16
  id: string;
@@ -13,7 +13,7 @@
13
13
  * never pulls the AI SDK. When `enabled: false`, the gate is skipped (nothing loads).
14
14
  */
15
15
  import { z } from 'zod';
16
- import type { AiLimits, AiProvider, KnowledgeSource, StudioAiConfig } from './types';
16
+ import type { AiLimits, AiProvider, KnowledgeSource, StudioAiConfig } from './types.js';
17
17
  export declare const AI_CONFIG_ISSUE_CODES: readonly ["invalid-config-shape", "missing-provider", "provider-missing-capabilities", "provider-not-callable"];
18
18
  export type AiConfigIssueCode = (typeof AI_CONFIG_ISSUE_CODES)[number];
19
19
  /** A structured, path-located `ai`-config issue (never thrown — collected). */
@@ -21,8 +21,8 @@
21
21
  */
22
22
  import type { CmsDocument, CmsValidationIssue, CollectionDef, CollectionRegistry, FieldValues, LocaleConfig, ValidateDocumentOptions } from '@elytracms/core/cms-core';
23
23
  import type { ComponentManifest } from '@elytracms/core/component-registry';
24
- import type { AiProvenance, AiProvider, ContentPatch, ResolvedKnowledge } from './types';
25
- import type { CreateFlowTools } from './tools';
24
+ import type { AiProvenance, AiProvider, ContentPatch, ResolvedKnowledge } from './types.js';
25
+ import type { CreateFlowTools } from './tools.js';
26
26
  /** A progress event the UI renders as a tool-status affordance while the loop runs. */
27
27
  export type CreateFlowStep = {
28
28
  kind: 'search';
@@ -1,6 +1,6 @@
1
- import { applyContentWithShape } from './apply-content';
2
- import { translateDocument } from './translate-document';
3
- import { PLANNER_SCHEMA_NAME, parsePlannerAction, plannerSchema, } from './tools';
1
+ import { applyContentWithShape } from './apply-content.js';
2
+ import { translateDocument } from './translate-document.js';
3
+ import { PLANNER_SCHEMA_NAME, parsePlannerAction, plannerSchema, } from './tools.js';
4
4
  export const DEFAULT_MAX_STEPS = 6;
5
5
  export const DEFAULT_SEARCH_LIMIT = 20;
6
6
  /**
@@ -9,7 +9,7 @@
9
9
  * them in call order (the last is reused once the script is exhausted). Or pass
10
10
  * `respond` to compute the object from the request.
11
11
  */
12
- import type { AiProvider, AiProviderCapabilities, GenerateStructuredRequest, StreamChatRequest } from './types';
12
+ import type { AiProvider, AiProviderCapabilities, GenerateStructuredRequest, StreamChatRequest } from './types.js';
13
13
  export interface FakeProviderOptions {
14
14
  /** Provider id (default `fake`). */
15
15
  id?: string;
@@ -11,18 +11,18 @@
11
11
  * (which only references `StudioAiConfig` as a type) reaches none of it.
12
12
  */
13
13
  export declare const PACKAGE = "@elytracms/studio/lib/ai";
14
- export * from './types';
15
- export * from './config';
16
- export * from './provenance';
17
- export * from './knowledge';
18
- export * from './shape';
19
- export * from './apply-content';
20
- export * from './anthropic-provider';
21
- export * from './fake-provider';
22
- export * from './route';
23
- export * from './route-provider';
24
- export * from './tools';
25
- export * from './create-flow';
26
- export * from './chat-state';
27
- export * from './rich-text-translate';
28
- export * from './translate-document';
14
+ export * from './types.js';
15
+ export * from './config.js';
16
+ export * from './provenance.js';
17
+ export * from './knowledge.js';
18
+ export * from './shape.js';
19
+ export * from './apply-content.js';
20
+ export * from './anthropic-provider.js';
21
+ export * from './fake-provider.js';
22
+ export * from './route.js';
23
+ export * from './route-provider.js';
24
+ export * from './tools.js';
25
+ export * from './create-flow.js';
26
+ export * from './chat-state.js';
27
+ export * from './rich-text-translate.js';
28
+ export * from './translate-document.js';
@@ -11,19 +11,19 @@
11
11
  * (which only references `StudioAiConfig` as a type) reaches none of it.
12
12
  */
13
13
  export const PACKAGE = '@elytracms/studio/lib/ai';
14
- export * from './types';
15
- export * from './config';
16
- export * from './provenance';
17
- export * from './knowledge';
18
- export * from './shape';
19
- export * from './apply-content';
20
- export * from './anthropic-provider';
21
- export * from './fake-provider';
22
- export * from './route';
23
- export * from './route-provider';
24
- export * from './tools';
25
- export * from './create-flow';
26
- export * from './chat-state';
27
- export * from './rich-text-translate';
28
- export * from './translate-document';
14
+ export * from './types.js';
15
+ export * from './config.js';
16
+ export * from './provenance.js';
17
+ export * from './knowledge.js';
18
+ export * from './shape.js';
19
+ export * from './apply-content.js';
20
+ export * from './anthropic-provider.js';
21
+ export * from './fake-provider.js';
22
+ export * from './route.js';
23
+ export * from './route-provider.js';
24
+ export * from './tools.js';
25
+ export * from './create-flow.js';
26
+ export * from './chat-state.js';
27
+ export * from './rich-text-translate.js';
28
+ export * from './translate-document.js';
29
29
  //# sourceMappingURL=index.js.map
@@ -7,7 +7,7 @@
7
7
  * deterministic item list; `assembleKnowledgeBlock` renders the context block the
8
8
  * engine injects. Knowledge is DATA, never instructions (see the engine's stance).
9
9
  */
10
- import type { KnowledgeCollectionReader, KnowledgeCollectionSource, KnowledgeFn, KnowledgeItem, KnowledgeSource, ResolvedKnowledge } from './types';
10
+ import type { KnowledgeCollectionReader, KnowledgeCollectionSource, KnowledgeFn, KnowledgeItem, KnowledgeSource, ResolvedKnowledge } from './types.js';
11
11
  /** `fromCollection('faq')` — sugar for a studio-editable knowledge source. */
12
12
  export declare function fromCollection(collectionId: string, options?: {
13
13
  field?: string;
@@ -10,7 +10,7 @@
10
10
  * this marker to its result; wiring it into `documents.upsert` /
11
11
  * `DocumentVersionRecord` (and any UI) is deferred to EC-199. No behaviour here.
12
12
  */
13
- import type { AiProvenance, AiProvider } from './types';
13
+ import type { AiProvenance, AiProvider } from './types.js';
14
14
  /** The origin discriminator for assistant-authored writes. */
15
15
  export declare const AI_ORIGIN: "assistant";
16
16
  /**
@@ -16,7 +16,7 @@
16
16
  * SDK. The capability gate passes: the route only ever fronts a gate-checked provider
17
17
  * (validated at the server mount), so the proxy declares both required capabilities.
18
18
  */
19
- import type { AiProvider } from './types';
19
+ import type { AiProvider } from './types.js';
20
20
  /** How extra request headers are supplied — a static set or a (possibly async) thunk. */
21
21
  export type RouteHeaders = HeadersInit | (() => HeadersInit | undefined | Promise<HeadersInit | undefined>);
22
22
  export interface RouteProviderOptions {
@@ -24,7 +24,7 @@
24
24
  * execute in the client with the user's own session. A body with `messages` and no
25
25
  * `kind` is still treated as a chat request (back-compat with the phase-1 contract).
26
26
  */
27
- import type { AiRouteHandler, AiRouteHandlerOptions } from './types';
27
+ import type { AiRouteHandler, AiRouteHandlerOptions } from './types.js';
28
28
  /** The wire discriminator selecting which model operation the route proxies. */
29
29
  export type AiRouteKind = 'chat' | 'generate';
30
30
  /**
@@ -1,5 +1,5 @@
1
1
  import type { CollectionDef, JsonSchema } from '@elytracms/core/cms-core';
2
- import type { RelationCandidates } from './types';
2
+ import type { RelationCandidates } from './types.js';
3
3
  /** A relation field's resolved candidate set — how the engine maps ids → reference envelopes. */
4
4
  export interface TargetRelationField {
5
5
  fieldName: string;
@@ -1,5 +1,5 @@
1
1
  import type { CmsDocument, CollectionDef, Locale, LocaleConfig } from '@elytracms/core/cms-core';
2
- import type { AiProvenance, AiProvider, ResolvedKnowledge } from './types';
2
+ import type { AiProvenance, AiProvider, ResolvedKnowledge } from './types.js';
3
3
  /** Default translatable units per `generate` call. */
4
4
  export declare const DEFAULT_TRANSLATE_BATCH_SIZE = 12;
5
5
  /** Default number of `generate` calls in flight at once (mirrors the precedent's limiter of 6). */
@@ -29,9 +29,9 @@
29
29
  */
30
30
  import { autoDeriveSlug, documentDefaultLocale, isFieldLocalized } from '@elytracms/core/cms-core';
31
31
  import { activeLocaleValues, fieldConnection, hasLocaleVariant, setFieldValue, } from '@elytracms/studio/lib/locale';
32
- import { assembleKnowledgeBlock } from './knowledge';
33
- import { aiProvenance } from './provenance';
34
- import { extractRichTextUnits, rebuildRichText } from './rich-text-translate';
32
+ import { assembleKnowledgeBlock } from './knowledge.js';
33
+ import { aiProvenance } from './provenance.js';
34
+ import { extractRichTextUnits, rebuildRichText } from './rich-text-translate.js';
35
35
  /** Default translatable units per `generate` call. */
36
36
  export const DEFAULT_TRANSLATE_BATCH_SIZE = 12;
37
37
  /** Default number of `generate` calls in flight at once (mirrors the precedent's limiter of 6). */
@@ -1,5 +1,5 @@
1
1
  import { useSyncExternalStore } from 'react';
2
- import { createBooleanPreference } from './local-preference';
2
+ import { createBooleanPreference } from './local-preference.js';
3
3
  /**
4
4
  * The AI assistant panel's open/closed state (EC-199) — a framework-free module
5
5
  * store, like the ambient locale (`lib/locale`). Module-level on purpose: the toggle
@@ -3,7 +3,7 @@
3
3
  * the studio UI consumes these; storage is reached only through the
4
4
  * `BlobStorageAdapter` boundary.
5
5
  */
6
- export * from './upload-state';
7
- export * from './image-dimensions';
8
- export * from './upload';
9
- export * from './delete-asset';
6
+ export * from './upload-state.js';
7
+ export * from './image-dimensions.js';
8
+ export * from './upload.js';
9
+ export * from './delete-asset.js';
@@ -3,8 +3,8 @@
3
3
  * the studio UI consumes these; storage is reached only through the
4
4
  * `BlobStorageAdapter` boundary.
5
5
  */
6
- export * from './upload-state';
7
- export * from './image-dimensions';
8
- export * from './upload';
9
- export * from './delete-asset';
6
+ export * from './upload-state.js';
7
+ export * from './image-dimensions.js';
8
+ export * from './upload.js';
9
+ export * from './delete-asset.js';
10
10
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  import type { AssetRecord, AssetRepository, BlobStorageAdapter } from '@elytracms/core/persistence';
2
- import type { ImageDimensions } from './image-dimensions';
3
- import type { UploadFailure, UploadState } from './upload-state';
2
+ import type { ImageDimensions } from './image-dimensions.js';
3
+ import type { UploadFailure, UploadState } from './upload-state.js';
4
4
  /**
5
5
  * Upload orchestration (EC-151): request upload URL → transfer bytes →
6
6
  * confirm by writing the EC-044 metadata record (dimensions, mime, serve URL).
@@ -1,5 +1,5 @@
1
- import { detectImageDimensions } from './image-dimensions';
2
- import { initialUploadState, uploadReducer } from './upload-state';
1
+ import { detectImageDimensions } from './image-dimensions.js';
2
+ import { initialUploadState, uploadReducer } from './upload-state.js';
3
3
  /**
4
4
  * Default browser transport: XMLHttpRequest POST for real byte progress
5
5
  * (fetch has no upload progress without streams support everywhere).