octocms 0.3.6 → 0.3.7

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 (668) hide show
  1. package/dist/admin/AdminApp.d.ts +22 -0
  2. package/dist/admin/AdminApp.d.ts.map +1 -0
  3. package/dist/admin/AdminApp.js +35 -0
  4. package/dist/admin/AdminApp.js.map +1 -0
  5. package/dist/admin/ThemeProvider.d.ts +37 -0
  6. package/dist/admin/ThemeProvider.d.ts.map +1 -0
  7. package/dist/admin/ThemeProvider.js +42 -0
  8. package/dist/admin/ThemeProvider.js.map +1 -0
  9. package/dist/admin/actions/build.d.ts +7 -0
  10. package/dist/admin/actions/build.d.ts.map +1 -0
  11. package/dist/admin/actions/build.js +109 -0
  12. package/dist/admin/actions/build.js.map +1 -0
  13. package/dist/admin/actions/entries.d.ts +8 -0
  14. package/dist/admin/actions/entries.d.ts.map +1 -0
  15. package/dist/admin/actions/entries.js +112 -0
  16. package/dist/admin/actions/entries.js.map +1 -0
  17. package/dist/admin/actions/files.d.ts +16 -0
  18. package/dist/admin/actions/files.d.ts.map +1 -0
  19. package/{admin/actions/files.ts → dist/admin/actions/files.js} +187 -297
  20. package/dist/admin/actions/files.js.map +1 -0
  21. package/dist/admin/actions/getThemeCookie.d.ts +9 -0
  22. package/dist/admin/actions/getThemeCookie.d.ts.map +1 -0
  23. package/dist/admin/actions/getThemeCookie.js +13 -0
  24. package/dist/admin/actions/getThemeCookie.js.map +1 -0
  25. package/dist/admin/actions/git.d.ts +50 -0
  26. package/dist/admin/actions/git.d.ts.map +1 -0
  27. package/dist/admin/actions/git.js +226 -0
  28. package/dist/admin/actions/git.js.map +1 -0
  29. package/dist/admin/actions/media.d.ts +32 -0
  30. package/dist/admin/actions/media.d.ts.map +1 -0
  31. package/dist/admin/actions/media.js +256 -0
  32. package/dist/admin/actions/media.js.map +1 -0
  33. package/dist/admin/actions/search.d.ts +9 -0
  34. package/dist/admin/actions/search.d.ts.map +1 -0
  35. package/dist/admin/actions/search.js +75 -0
  36. package/dist/admin/actions/search.js.map +1 -0
  37. package/dist/admin/actions/status.d.ts +17 -0
  38. package/dist/admin/actions/status.d.ts.map +1 -0
  39. package/dist/admin/actions/status.js +53 -0
  40. package/dist/admin/actions/status.js.map +1 -0
  41. package/dist/admin/actions/utils.d.ts +61 -0
  42. package/dist/admin/actions/utils.d.ts.map +1 -0
  43. package/dist/admin/actions/utils.js +26 -0
  44. package/dist/admin/actions/utils.js.map +1 -0
  45. package/{admin/actions.ts → dist/admin/actions.d.ts} +1 -0
  46. package/dist/admin/actions.d.ts.map +1 -0
  47. package/dist/admin/actions.js +8 -0
  48. package/dist/admin/actions.js.map +1 -0
  49. package/dist/admin/auth.d.ts +3 -0
  50. package/dist/admin/auth.d.ts.map +1 -0
  51. package/dist/admin/auth.js +28 -0
  52. package/dist/admin/auth.js.map +1 -0
  53. package/dist/admin/consts.d.ts +3 -0
  54. package/dist/admin/consts.d.ts.map +1 -0
  55. package/dist/admin/consts.js +24 -0
  56. package/dist/admin/consts.js.map +1 -0
  57. package/dist/admin/github.d.ts +74 -0
  58. package/dist/admin/github.d.ts.map +1 -0
  59. package/{admin/github.ts → dist/admin/github.js} +120 -262
  60. package/dist/admin/github.js.map +1 -0
  61. package/dist/admin/pages/AdminLayout.d.ts +14 -0
  62. package/dist/admin/pages/AdminLayout.d.ts.map +1 -0
  63. package/dist/admin/pages/AdminLayout.js +29 -0
  64. package/dist/admin/pages/AdminLayout.js.map +1 -0
  65. package/dist/admin/pages/CollectionPage.d.ts +6 -0
  66. package/dist/admin/pages/CollectionPage.d.ts.map +1 -0
  67. package/dist/admin/pages/CollectionPage.js +32 -0
  68. package/dist/admin/pages/CollectionPage.js.map +1 -0
  69. package/dist/admin/pages/DashboardPage.d.ts +2 -0
  70. package/dist/admin/pages/DashboardPage.d.ts.map +1 -0
  71. package/dist/admin/pages/DashboardPage.js +28 -0
  72. package/dist/admin/pages/DashboardPage.js.map +1 -0
  73. package/dist/admin/pages/EntryPage.d.ts +7 -0
  74. package/dist/admin/pages/EntryPage.d.ts.map +1 -0
  75. package/dist/admin/pages/EntryPage.js +38 -0
  76. package/dist/admin/pages/EntryPage.js.map +1 -0
  77. package/dist/admin/pages/MediaPage.d.ts +4 -0
  78. package/dist/admin/pages/MediaPage.d.ts.map +1 -0
  79. package/dist/admin/pages/MediaPage.js +22 -0
  80. package/dist/admin/pages/MediaPage.js.map +1 -0
  81. package/dist/admin/pages/SearchPage.d.ts +2 -0
  82. package/dist/admin/pages/SearchPage.d.ts.map +1 -0
  83. package/dist/admin/pages/SearchPage.js +20 -0
  84. package/dist/admin/pages/SearchPage.js.map +1 -0
  85. package/dist/admin/provider.d.ts +11 -0
  86. package/dist/admin/provider.d.ts.map +1 -0
  87. package/dist/admin/provider.js +18 -0
  88. package/dist/admin/provider.js.map +1 -0
  89. package/dist/admin/store/contentStore.d.ts +63 -0
  90. package/dist/admin/store/contentStore.d.ts.map +1 -0
  91. package/dist/admin/store/contentStore.js +202 -0
  92. package/dist/admin/store/contentStore.js.map +1 -0
  93. package/dist/admin/store/contentStoreFetch.d.ts +22 -0
  94. package/dist/admin/store/contentStoreFetch.d.ts.map +1 -0
  95. package/dist/admin/store/contentStoreFetch.js +160 -0
  96. package/dist/admin/store/contentStoreFetch.js.map +1 -0
  97. package/dist/admin/store/contentStoreTypes.d.ts +51 -0
  98. package/dist/admin/store/contentStoreTypes.d.ts.map +1 -0
  99. package/dist/admin/store/contentStoreTypes.js +1 -0
  100. package/{admin/theme.ts → dist/admin/theme.d.ts} +3 -5
  101. package/dist/admin/theme.d.ts.map +1 -0
  102. package/dist/admin/theme.js +8 -0
  103. package/dist/admin/theme.js.map +1 -0
  104. package/dist/admin/types.d.ts +9 -0
  105. package/dist/admin/types.d.ts.map +1 -0
  106. package/dist/admin/types.js +1 -0
  107. package/dist/admin/types.js.map +1 -0
  108. package/dist/{agentDocs-NUEXGXIH.js → agentDocs-Y3LM2CPQ.js} +2 -2
  109. package/dist/chunk-2NMEKWO5.js +38 -0
  110. package/dist/chunk-2NMEKWO5.js.map +1 -0
  111. package/dist/{chunk-33VA3IFB.js → chunk-SWGXG4XK.js} +12 -4
  112. package/dist/chunk-SWGXG4XK.js.map +1 -0
  113. package/dist/cli/index.js +4 -4
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/components/CMSSidebar/CMSSidebar.d.ts +2 -0
  116. package/dist/components/CMSSidebar/CMSSidebar.d.ts.map +1 -0
  117. package/dist/components/CMSSidebar/CMSSidebar.js +104 -0
  118. package/dist/components/CMSSidebar/CMSSidebar.js.map +1 -0
  119. package/dist/components/ContentTypes.d.ts +7 -0
  120. package/dist/components/ContentTypes.d.ts.map +1 -0
  121. package/dist/components/ContentTypes.js +132 -0
  122. package/dist/components/ContentTypes.js.map +1 -0
  123. package/dist/components/CreateBranchDialog.d.ts +8 -0
  124. package/dist/components/CreateBranchDialog.d.ts.map +1 -0
  125. package/dist/components/CreateBranchDialog.js +121 -0
  126. package/dist/components/CreateBranchDialog.js.map +1 -0
  127. package/dist/components/Dashboard/DashboardContent.d.ts +9 -0
  128. package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -0
  129. package/dist/components/Dashboard/DashboardContent.js +265 -0
  130. package/dist/components/Dashboard/DashboardContent.js.map +1 -0
  131. package/dist/components/EditPost/EditPost.d.ts +5 -0
  132. package/dist/components/EditPost/EditPost.d.ts.map +1 -0
  133. package/dist/components/EditPost/EditPost.js +317 -0
  134. package/dist/components/EditPost/EditPost.js.map +1 -0
  135. package/dist/components/FieldHintAndError.d.ts +8 -0
  136. package/dist/components/FieldHintAndError.d.ts.map +1 -0
  137. package/dist/components/FieldHintAndError.js +14 -0
  138. package/dist/components/FieldHintAndError.js.map +1 -0
  139. package/dist/components/FileExplorer/FileExplorer.d.ts +8 -0
  140. package/dist/components/FileExplorer/FileExplorer.d.ts.map +1 -0
  141. package/dist/components/FileExplorer/FileExplorer.js +67 -0
  142. package/dist/components/FileExplorer/FileExplorer.js.map +1 -0
  143. package/dist/components/FormBooleanField.d.ts +13 -0
  144. package/dist/components/FormBooleanField.d.ts.map +1 -0
  145. package/dist/components/FormBooleanField.js +39 -0
  146. package/dist/components/FormBooleanField.js.map +1 -0
  147. package/dist/components/FormColorField.d.ts +13 -0
  148. package/dist/components/FormColorField.d.ts.map +1 -0
  149. package/dist/components/FormColorField.js +100 -0
  150. package/dist/components/FormColorField.js.map +1 -0
  151. package/dist/components/FormConditionalField.d.ts +15 -0
  152. package/dist/components/FormConditionalField.d.ts.map +1 -0
  153. package/dist/components/FormConditionalField.js +319 -0
  154. package/dist/components/FormConditionalField.js.map +1 -0
  155. package/dist/components/FormDatetimeField.d.ts +13 -0
  156. package/dist/components/FormDatetimeField.d.ts.map +1 -0
  157. package/dist/components/FormDatetimeField.js +46 -0
  158. package/dist/components/FormDatetimeField.js.map +1 -0
  159. package/dist/components/FormFields.d.ts +10 -0
  160. package/dist/components/FormFields.d.ts.map +1 -0
  161. package/dist/components/FormFields.js +255 -0
  162. package/dist/components/FormFields.js.map +1 -0
  163. package/dist/components/FormImageField.d.ts +12 -0
  164. package/dist/components/FormImageField.d.ts.map +1 -0
  165. package/dist/components/FormImageField.js +259 -0
  166. package/dist/components/FormImageField.js.map +1 -0
  167. package/dist/components/FormJsonField.d.ts +12 -0
  168. package/dist/components/FormJsonField.d.ts.map +1 -0
  169. package/dist/components/FormJsonField.js +58 -0
  170. package/dist/components/FormJsonField.js.map +1 -0
  171. package/dist/components/FormMarkdownField.d.ts +12 -0
  172. package/dist/components/FormMarkdownField.d.ts.map +1 -0
  173. package/dist/components/FormMarkdownField.js +70 -0
  174. package/dist/components/FormMarkdownField.js.map +1 -0
  175. package/dist/components/FormNumberField.d.ts +15 -0
  176. package/dist/components/FormNumberField.d.ts.map +1 -0
  177. package/dist/components/FormNumberField.js +47 -0
  178. package/dist/components/FormNumberField.js.map +1 -0
  179. package/dist/components/FormReferenceField.d.ts +17 -0
  180. package/dist/components/FormReferenceField.d.ts.map +1 -0
  181. package/dist/components/FormReferenceField.js +522 -0
  182. package/dist/components/FormReferenceField.js.map +1 -0
  183. package/dist/components/FormRichTextField.d.ts +14 -0
  184. package/dist/components/FormRichTextField.d.ts.map +1 -0
  185. package/dist/components/FormRichTextField.js +644 -0
  186. package/dist/components/FormRichTextField.js.map +1 -0
  187. package/dist/components/FormSelectField.d.ts +15 -0
  188. package/dist/components/FormSelectField.d.ts.map +1 -0
  189. package/dist/components/FormSelectField.js +99 -0
  190. package/dist/components/FormSelectField.js.map +1 -0
  191. package/dist/components/FormSlugField.d.ts +13 -0
  192. package/dist/components/FormSlugField.d.ts.map +1 -0
  193. package/dist/components/FormSlugField.js +103 -0
  194. package/dist/components/FormSlugField.js.map +1 -0
  195. package/dist/components/FormStringField.d.ts +11 -0
  196. package/dist/components/FormStringField.d.ts.map +1 -0
  197. package/dist/components/FormStringField.js +32 -0
  198. package/dist/components/FormStringField.js.map +1 -0
  199. package/dist/components/FormStringListField.d.ts +13 -0
  200. package/dist/components/FormStringListField.d.ts.map +1 -0
  201. package/dist/components/FormStringListField.js +159 -0
  202. package/dist/components/FormStringListField.js.map +1 -0
  203. package/dist/components/FormTextField.d.ts +13 -0
  204. package/dist/components/FormTextField.d.ts.map +1 -0
  205. package/dist/components/FormTextField.js +43 -0
  206. package/dist/components/FormTextField.js.map +1 -0
  207. package/dist/components/FormUrlField.d.ts +12 -0
  208. package/dist/components/FormUrlField.d.ts.map +1 -0
  209. package/dist/components/FormUrlField.js +35 -0
  210. package/dist/components/FormUrlField.js.map +1 -0
  211. package/dist/components/Header/Header.d.ts +6 -0
  212. package/dist/components/Header/Header.d.ts.map +1 -0
  213. package/dist/components/Header/Header.js +293 -0
  214. package/dist/components/Header/Header.js.map +1 -0
  215. package/dist/components/Header/ThemeToggle.d.ts +7 -0
  216. package/dist/components/Header/ThemeToggle.d.ts.map +1 -0
  217. package/dist/components/Header/ThemeToggle.js +31 -0
  218. package/dist/components/Header/ThemeToggle.js.map +1 -0
  219. package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts +10 -0
  220. package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts.map +1 -0
  221. package/dist/components/InlineEntryEditor/InlineEntryEditor.js +338 -0
  222. package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -0
  223. package/dist/components/Layout/Layout.d.ts +7 -0
  224. package/dist/components/Layout/Layout.d.ts.map +1 -0
  225. package/dist/components/Layout/Layout.js +46 -0
  226. package/dist/components/Layout/Layout.js.map +1 -0
  227. package/dist/components/LinkedBySection/LinkedBySection.d.ts +6 -0
  228. package/dist/components/LinkedBySection/LinkedBySection.d.ts.map +1 -0
  229. package/dist/components/LinkedBySection/LinkedBySection.js +89 -0
  230. package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -0
  231. package/dist/components/Loading.d.ts +6 -0
  232. package/dist/components/Loading.d.ts.map +1 -0
  233. package/dist/components/Loading.js +14 -0
  234. package/dist/components/Loading.js.map +1 -0
  235. package/dist/components/MediaManager/MediaManager.d.ts +9 -0
  236. package/dist/components/MediaManager/MediaManager.d.ts.map +1 -0
  237. package/dist/components/MediaManager/MediaManager.js +616 -0
  238. package/dist/components/MediaManager/MediaManager.js.map +1 -0
  239. package/dist/components/SearchPage.d.ts +2 -0
  240. package/dist/components/SearchPage.d.ts.map +1 -0
  241. package/dist/components/SearchPage.js +97 -0
  242. package/dist/components/SearchPage.js.map +1 -0
  243. package/dist/components/StatusBadge.d.ts +9 -0
  244. package/dist/components/StatusBadge.d.ts.map +1 -0
  245. package/dist/components/StatusBadge.js +54 -0
  246. package/dist/components/StatusBadge.js.map +1 -0
  247. package/dist/components/public/MarkdownContent.d.ts +11 -0
  248. package/dist/components/public/MarkdownContent.d.ts.map +1 -0
  249. package/dist/components/public/MarkdownContent.js +32 -0
  250. package/dist/components/public/MarkdownContent.js.map +1 -0
  251. package/dist/components/public/RichTextContent.d.ts +22 -0
  252. package/dist/components/public/RichTextContent.d.ts.map +1 -0
  253. package/dist/components/public/RichTextContent.js +174 -0
  254. package/dist/components/public/RichTextContent.js.map +1 -0
  255. package/dist/components/public/SearchBox.d.ts +6 -0
  256. package/dist/components/public/SearchBox.d.ts.map +1 -0
  257. package/dist/components/public/SearchBox.js +197 -0
  258. package/dist/components/public/SearchBox.js.map +1 -0
  259. package/dist/components/public/index.d.ts +5 -40
  260. package/dist/components/public/index.d.ts.map +1 -0
  261. package/dist/components/public/index.js +7 -398
  262. package/dist/components/public/index.js.map +1 -1
  263. package/dist/components/richtext/ComponentEmbedEditor.d.ts +15 -0
  264. package/dist/components/richtext/ComponentEmbedEditor.d.ts.map +1 -0
  265. package/dist/components/richtext/ComponentEmbedEditor.js +153 -0
  266. package/dist/components/richtext/ComponentEmbedEditor.js.map +1 -0
  267. package/dist/components/richtext/ConditionEmbedEditor.d.ts +12 -0
  268. package/dist/components/richtext/ConditionEmbedEditor.d.ts.map +1 -0
  269. package/dist/components/richtext/ConditionEmbedEditor.js +248 -0
  270. package/dist/components/richtext/ConditionEmbedEditor.js.map +1 -0
  271. package/dist/components/richtext/ImageEmbedEditor.d.ts +5 -0
  272. package/dist/components/richtext/ImageEmbedEditor.d.ts.map +1 -0
  273. package/dist/components/richtext/ImageEmbedEditor.js +271 -0
  274. package/dist/components/richtext/ImageEmbedEditor.js.map +1 -0
  275. package/dist/components/richtext/ReferenceEmbedEditor.d.ts +11 -0
  276. package/dist/components/richtext/ReferenceEmbedEditor.d.ts.map +1 -0
  277. package/dist/components/richtext/ReferenceEmbedEditor.js +202 -0
  278. package/dist/components/richtext/ReferenceEmbedEditor.js.map +1 -0
  279. package/dist/components/richtext/SlashCommandMenu.d.ts +23 -0
  280. package/dist/components/richtext/SlashCommandMenu.d.ts.map +1 -0
  281. package/dist/components/richtext/SlashCommandMenu.js +104 -0
  282. package/dist/components/richtext/SlashCommandMenu.js.map +1 -0
  283. package/dist/components/richtext/VariableEmbedEditor.d.ts +13 -0
  284. package/dist/components/richtext/VariableEmbedEditor.d.ts.map +1 -0
  285. package/dist/components/richtext/VariableEmbedEditor.js +58 -0
  286. package/dist/components/richtext/VariableEmbedEditor.js.map +1 -0
  287. package/dist/components/ui/avatar.d.ts +7 -0
  288. package/dist/components/ui/avatar.d.ts.map +1 -0
  289. package/dist/components/ui/avatar.js +45 -0
  290. package/dist/components/ui/avatar.js.map +1 -0
  291. package/dist/components/ui/button.d.ts +12 -0
  292. package/dist/components/ui/button.d.ts.map +1 -0
  293. package/dist/components/ui/button.js +47 -0
  294. package/dist/components/ui/button.js.map +1 -0
  295. package/dist/components/ui/dialog.d.ts +20 -0
  296. package/dist/components/ui/dialog.d.ts.map +1 -0
  297. package/dist/components/ui/dialog.js +93 -0
  298. package/dist/components/ui/dialog.js.map +1 -0
  299. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  300. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  301. package/dist/components/ui/dropdown-menu.js +159 -0
  302. package/dist/components/ui/dropdown-menu.js.map +1 -0
  303. package/dist/components/ui/index.d.ts +15 -0
  304. package/dist/components/ui/index.d.ts.map +1 -0
  305. package/dist/components/ui/index.js +127 -0
  306. package/dist/components/ui/index.js.map +1 -0
  307. package/dist/components/ui/input.d.ts +4 -0
  308. package/dist/components/ui/input.d.ts.map +1 -0
  309. package/dist/components/ui/input.js +28 -0
  310. package/dist/components/ui/input.js.map +1 -0
  311. package/dist/components/ui/label.d.ts +6 -0
  312. package/dist/components/ui/label.d.ts.map +1 -0
  313. package/dist/components/ui/label.js +20 -0
  314. package/dist/components/ui/label.js.map +1 -0
  315. package/dist/components/ui/select.d.ts +14 -0
  316. package/dist/components/ui/select.d.ts.map +1 -0
  317. package/dist/components/ui/select.js +132 -0
  318. package/dist/components/ui/select.js.map +1 -0
  319. package/dist/components/ui/sonner.d.ts +6 -0
  320. package/dist/components/ui/sonner.d.ts.map +1 -0
  321. package/dist/components/ui/sonner.js +37 -0
  322. package/dist/components/ui/sonner.js.map +1 -0
  323. package/dist/components/ui/table.d.ts +11 -0
  324. package/dist/components/ui/table.d.ts.map +1 -0
  325. package/dist/components/ui/table.js +92 -0
  326. package/dist/components/ui/table.js.map +1 -0
  327. package/dist/components/ui/tabs.d.ts +8 -0
  328. package/dist/components/ui/tabs.d.ts.map +1 -0
  329. package/dist/components/ui/tabs.js +59 -0
  330. package/dist/components/ui/tabs.js.map +1 -0
  331. package/dist/components/ui/toast.d.ts +16 -0
  332. package/dist/components/ui/toast.d.ts.map +1 -0
  333. package/dist/components/ui/toast.js +95 -0
  334. package/dist/components/ui/toast.js.map +1 -0
  335. package/dist/components/ui/toaster.d.ts +2 -0
  336. package/dist/components/ui/toaster.d.ts.map +1 -0
  337. package/dist/components/ui/toaster.js +30 -0
  338. package/dist/components/ui/toaster.js.map +1 -0
  339. package/dist/config.cjs +1 -10
  340. package/dist/config.cjs.map +1 -1
  341. package/dist/config.d.ts +4 -13
  342. package/dist/config.d.ts.map +1 -0
  343. package/dist/config.js +3 -11
  344. package/dist/config.js.map +1 -1
  345. package/dist/defineConfig.d.ts +10 -11
  346. package/dist/defineConfig.d.ts.map +1 -0
  347. package/dist/defineConfig.js +4 -4
  348. package/dist/defineConfig.js.map +1 -1
  349. package/dist/github-public.d.ts +37 -0
  350. package/dist/github-public.d.ts.map +1 -0
  351. package/dist/github-public.js +118 -0
  352. package/dist/github-public.js.map +1 -0
  353. package/dist/globals.css +201 -0
  354. package/dist/hooks/useConfig.d.ts +17 -0
  355. package/dist/hooks/useConfig.d.ts.map +1 -0
  356. package/dist/hooks/useConfig.js +22 -0
  357. package/dist/hooks/useConfig.js.map +1 -0
  358. package/dist/hooks/useEntryStack.d.ts +26 -0
  359. package/dist/hooks/useEntryStack.d.ts.map +1 -0
  360. package/dist/hooks/useEntryStack.js +92 -0
  361. package/dist/hooks/useEntryStack.js.map +1 -0
  362. package/dist/hooks/useFileState.d.ts +9 -0
  363. package/dist/hooks/useFileState.d.ts.map +1 -0
  364. package/dist/hooks/useFileState.js +39 -0
  365. package/dist/hooks/useFileState.js.map +1 -0
  366. package/dist/hooks/useToast.d.ts +48 -0
  367. package/dist/hooks/useToast.d.ts.map +1 -0
  368. package/dist/hooks/useToast.js +126 -0
  369. package/dist/hooks/useToast.js.map +1 -0
  370. package/dist/index.cjs +1 -5
  371. package/dist/index.cjs.map +1 -1
  372. package/dist/index.d.ts +12 -5
  373. package/dist/index.d.ts.map +1 -0
  374. package/dist/index.js +4 -11
  375. package/dist/index.js.map +1 -1
  376. package/dist/{init-RQVF5KUT.js → init-V6THBALA.js} +7 -2
  377. package/dist/init-V6THBALA.js.map +1 -0
  378. package/dist/lib/blogPublicPath.d.ts +4 -0
  379. package/dist/lib/blogPublicPath.d.ts.map +1 -0
  380. package/dist/lib/blogPublicPath.js +21 -0
  381. package/dist/lib/blogPublicPath.js.map +1 -0
  382. package/dist/lib/branchHistory.d.ts +30 -0
  383. package/dist/lib/branchHistory.d.ts.map +1 -0
  384. package/dist/lib/branchHistory.js +83 -0
  385. package/dist/lib/branchHistory.js.map +1 -0
  386. package/dist/lib/cmsServerLog.d.ts +13 -0
  387. package/dist/lib/cmsServerLog.d.ts.map +1 -0
  388. package/dist/lib/cmsServerLog.js +15 -0
  389. package/dist/lib/cmsServerLog.js.map +1 -0
  390. package/dist/lib/colorField.d.ts +13 -0
  391. package/dist/lib/colorField.d.ts.map +1 -0
  392. package/{lib/colorField.ts → dist/lib/colorField.js} +12 -16
  393. package/dist/lib/colorField.js.map +1 -0
  394. package/dist/lib/companionMarkdown.d.ts +19 -0
  395. package/dist/lib/companionMarkdown.d.ts.map +1 -0
  396. package/dist/lib/companionMarkdown.js +50 -0
  397. package/dist/lib/companionMarkdown.js.map +1 -0
  398. package/dist/lib/conditionalField.d.ts +43 -0
  399. package/dist/lib/conditionalField.d.ts.map +1 -0
  400. package/dist/lib/conditionalField.js +93 -0
  401. package/dist/lib/conditionalField.js.map +1 -0
  402. package/dist/lib/configStore.cjs +44 -0
  403. package/dist/lib/configStore.cjs.map +1 -0
  404. package/{lib/configStore.ts → dist/lib/configStore.d.ts} +3 -16
  405. package/dist/lib/configStore.d.ts.map +1 -0
  406. package/dist/{chunk-B47VXAHT.js → lib/configStore.js} +4 -14
  407. package/dist/lib/configStore.js.map +1 -0
  408. package/dist/lib/contentSourceError.d.ts +29 -0
  409. package/dist/lib/contentSourceError.d.ts.map +1 -0
  410. package/dist/lib/contentSourceError.js +77 -0
  411. package/dist/lib/contentSourceError.js.map +1 -0
  412. package/dist/lib/datetimeField.d.ts +25 -0
  413. package/dist/lib/datetimeField.d.ts.map +1 -0
  414. package/dist/lib/datetimeField.js +78 -0
  415. package/dist/lib/datetimeField.js.map +1 -0
  416. package/dist/lib/deploymentEnv.d.ts +7 -0
  417. package/dist/lib/deploymentEnv.d.ts.map +1 -0
  418. package/dist/{chunk-BRTXBBVQ.js → lib/deploymentEnv.js} +6 -22
  419. package/dist/lib/deploymentEnv.js.map +1 -0
  420. package/dist/lib/extractImageMetadata.d.ts +11 -0
  421. package/dist/lib/extractImageMetadata.d.ts.map +1 -0
  422. package/dist/lib/extractImageMetadata.js +23 -0
  423. package/dist/lib/extractImageMetadata.js.map +1 -0
  424. package/{lib/githubContentMode.ts → dist/lib/githubContentMode.d.ts} +2 -7
  425. package/dist/lib/githubContentMode.d.ts.map +1 -0
  426. package/dist/lib/githubContentMode.js +11 -0
  427. package/dist/lib/githubContentMode.js.map +1 -0
  428. package/dist/lib/initialEntryFields.d.ts +5 -0
  429. package/dist/lib/initialEntryFields.d.ts.map +1 -0
  430. package/dist/lib/initialEntryFields.js +35 -0
  431. package/dist/lib/initialEntryFields.js.map +1 -0
  432. package/dist/lib/jsonField.d.ts +20 -0
  433. package/dist/lib/jsonField.d.ts.map +1 -0
  434. package/dist/lib/jsonField.js +44 -0
  435. package/dist/lib/jsonField.js.map +1 -0
  436. package/dist/lib/localReader.d.ts +7 -0
  437. package/dist/lib/localReader.d.ts.map +1 -0
  438. package/dist/{localReader-I2THES24.js → lib/localReader.js} +2 -4
  439. package/dist/lib/localReader.js.map +1 -0
  440. package/dist/lib/numberField.d.ts +13 -0
  441. package/dist/lib/numberField.d.ts.map +1 -0
  442. package/{lib/numberField.ts → dist/lib/numberField.js} +10 -17
  443. package/dist/lib/numberField.js.map +1 -0
  444. package/dist/lib/persistedFormFields.d.ts +5 -0
  445. package/dist/lib/persistedFormFields.d.ts.map +1 -0
  446. package/{lib/persistedFormFields.ts → dist/lib/persistedFormFields.js} +52 -65
  447. package/dist/lib/persistedFormFields.js.map +1 -0
  448. package/dist/lib/referenceKeys.d.ts +10 -0
  449. package/dist/lib/referenceKeys.d.ts.map +1 -0
  450. package/{lib/referenceKeys.ts → dist/lib/referenceKeys.js} +12 -19
  451. package/dist/lib/referenceKeys.js.map +1 -0
  452. package/dist/lib/richtext/parseRichText.d.ts +20 -0
  453. package/dist/lib/richtext/parseRichText.d.ts.map +1 -0
  454. package/dist/lib/richtext/parseRichText.js +195 -0
  455. package/dist/lib/richtext/parseRichText.js.map +1 -0
  456. package/dist/lib/richtextFieldConfig.d.ts +7 -0
  457. package/dist/lib/richtextFieldConfig.d.ts.map +1 -0
  458. package/dist/lib/richtextFieldConfig.js +14 -0
  459. package/dist/lib/richtextFieldConfig.js.map +1 -0
  460. package/dist/lib/searchIndex.d.ts +43 -0
  461. package/dist/lib/searchIndex.d.ts.map +1 -0
  462. package/dist/lib/searchIndex.js +154 -0
  463. package/dist/lib/searchIndex.js.map +1 -0
  464. package/dist/lib/selectField.d.ts +13 -0
  465. package/dist/lib/selectField.d.ts.map +1 -0
  466. package/{lib/selectField.ts → dist/lib/selectField.js} +12 -17
  467. package/dist/lib/selectField.js.map +1 -0
  468. package/dist/lib/slugField.d.ts +28 -0
  469. package/dist/lib/slugField.d.ts.map +1 -0
  470. package/dist/lib/slugField.js +60 -0
  471. package/dist/lib/slugField.js.map +1 -0
  472. package/dist/lib/stringListField.d.ts +18 -0
  473. package/dist/lib/stringListField.d.ts.map +1 -0
  474. package/dist/lib/stringListField.js +38 -0
  475. package/dist/lib/stringListField.js.map +1 -0
  476. package/dist/lib/suggestedMediaTitle.d.ts +3 -0
  477. package/dist/lib/suggestedMediaTitle.d.ts.map +1 -0
  478. package/dist/lib/suggestedMediaTitle.js +11 -0
  479. package/dist/lib/suggestedMediaTitle.js.map +1 -0
  480. package/dist/lib/urlField.d.ts +9 -0
  481. package/dist/lib/urlField.d.ts.map +1 -0
  482. package/dist/lib/urlField.js +30 -0
  483. package/dist/lib/urlField.js.map +1 -0
  484. package/{lib/utils.ts → dist/lib/utils.d.ts} +3 -4
  485. package/dist/lib/utils.d.ts.map +1 -0
  486. package/dist/lib/utils.js +8 -0
  487. package/dist/lib/utils.js.map +1 -0
  488. package/dist/lib/validateEntryFields.d.ts +10 -0
  489. package/dist/lib/validateEntryFields.d.ts.map +1 -0
  490. package/{lib/validateEntryFields.ts → dist/lib/validateEntryFields.js} +83 -124
  491. package/dist/lib/validateEntryFields.js.map +1 -0
  492. package/dist/query.d.ts +6 -7
  493. package/dist/query.d.ts.map +1 -0
  494. package/dist/query.js +448 -5
  495. package/dist/query.js.map +1 -1
  496. package/dist/types.d.ts +33 -33
  497. package/dist/types.d.ts.map +1 -0
  498. package/dist/{update-4Z3OK3TX.js → update-RF2HD3WJ.js} +2 -2
  499. package/dist/utils/parseFileName.d.ts +4 -0
  500. package/dist/utils/parseFileName.d.ts.map +1 -0
  501. package/{utils/parseFileName.ts → dist/utils/parseFileName.js} +17 -18
  502. package/dist/utils/parseFileName.js.map +1 -0
  503. package/dist/withOctoCMS.cjs +1 -8
  504. package/dist/withOctoCMS.cjs.map +1 -1
  505. package/dist/withOctoCMS.d.ts +4 -6
  506. package/dist/withOctoCMS.d.ts.map +1 -0
  507. package/dist/withOctoCMS.js +9 -4
  508. package/dist/withOctoCMS.js.map +1 -1
  509. package/globals.css +3 -0
  510. package/package.json +54 -46
  511. package/admin/AdminApp.tsx +0 -59
  512. package/admin/ThemeProvider.test.tsx +0 -177
  513. package/admin/ThemeProvider.tsx +0 -85
  514. package/admin/actions/build.test.ts +0 -120
  515. package/admin/actions/build.ts +0 -139
  516. package/admin/actions/entries.test.ts +0 -311
  517. package/admin/actions/entries.ts +0 -136
  518. package/admin/actions/files.test.ts +0 -785
  519. package/admin/actions/getThemeCookie.test.ts +0 -54
  520. package/admin/actions/getThemeCookie.ts +0 -17
  521. package/admin/actions/git.test.ts +0 -177
  522. package/admin/actions/git.ts +0 -295
  523. package/admin/actions/media.test.ts +0 -528
  524. package/admin/actions/media.ts +0 -325
  525. package/admin/actions/search.ts +0 -94
  526. package/admin/actions/status.ts +0 -63
  527. package/admin/actions/utils.test.ts +0 -80
  528. package/admin/actions/utils.ts +0 -51
  529. package/admin/auth.ts +0 -25
  530. package/admin/consts.ts +0 -19
  531. package/admin/github.pointer.test.ts +0 -43
  532. package/admin/pages/AdminLayout.tsx +0 -50
  533. package/admin/pages/CollectionPage.tsx +0 -41
  534. package/admin/pages/DashboardPage.tsx +0 -34
  535. package/admin/pages/EntryPage.tsx +0 -49
  536. package/admin/pages/MediaPage.tsx +0 -26
  537. package/admin/pages/SearchPage.tsx +0 -23
  538. package/admin/provider.tsx +0 -30
  539. package/admin/store/contentStore.test.ts +0 -323
  540. package/admin/store/contentStore.ts +0 -333
  541. package/admin/store/contentStoreFetch.test.ts +0 -217
  542. package/admin/store/contentStoreFetch.ts +0 -240
  543. package/admin/store/contentStoreTypes.ts +0 -52
  544. package/admin/types.ts +0 -31
  545. package/components/CMSSidebar/CMSSidebar.tsx +0 -108
  546. package/components/ContentTypes.tsx +0 -162
  547. package/components/CreateBranchDialog.tsx +0 -137
  548. package/components/Dashboard/DashboardContent.tsx +0 -370
  549. package/components/EditPost/EditPost.tsx +0 -360
  550. package/components/FieldHintAndError.tsx +0 -20
  551. package/components/FileExplorer/FileExplorer.tsx +0 -99
  552. package/components/FormBooleanField.tsx +0 -51
  553. package/components/FormColorField.tsx +0 -112
  554. package/components/FormConditionalField.tsx +0 -383
  555. package/components/FormDatetimeField.tsx +0 -62
  556. package/components/FormFields.tsx +0 -265
  557. package/components/FormImageField.test.tsx +0 -153
  558. package/components/FormImageField.tsx +0 -281
  559. package/components/FormJsonField.tsx +0 -79
  560. package/components/FormMarkdownField.tsx +0 -83
  561. package/components/FormNumberField.tsx +0 -60
  562. package/components/FormReferenceField.test.tsx +0 -335
  563. package/components/FormReferenceField.tsx +0 -658
  564. package/components/FormRichTextField.tsx +0 -670
  565. package/components/FormSelectField.tsx +0 -138
  566. package/components/FormSlugField.tsx +0 -120
  567. package/components/FormStringField.tsx +0 -40
  568. package/components/FormStringListField.tsx +0 -192
  569. package/components/FormTextField.tsx +0 -54
  570. package/components/FormUrlField.tsx +0 -44
  571. package/components/Header/Header.tsx +0 -352
  572. package/components/Header/ThemeToggle.test.tsx +0 -98
  573. package/components/Header/ThemeToggle.tsx +0 -38
  574. package/components/InlineEntryEditor/InlineEntryEditor.tsx +0 -397
  575. package/components/Layout/Layout.tsx +0 -61
  576. package/components/LinkedBySection/LinkedBySection.tsx +0 -104
  577. package/components/Loading.tsx +0 -18
  578. package/components/MediaManager/MediaManager.tsx +0 -679
  579. package/components/SearchPage.tsx +0 -122
  580. package/components/StatusBadge.tsx +0 -65
  581. package/components/public/MarkdownContent.tsx +0 -49
  582. package/components/public/RichTextContent.tsx +0 -327
  583. package/components/public/SearchBox.tsx +0 -249
  584. package/components/public/index.ts +0 -4
  585. package/components/richtext/ComponentEmbedEditor.tsx +0 -201
  586. package/components/richtext/ConditionEmbedEditor.tsx +0 -273
  587. package/components/richtext/ImageEmbedEditor.tsx +0 -280
  588. package/components/richtext/ReferenceEmbedEditor.tsx +0 -249
  589. package/components/richtext/SlashCommandMenu.tsx +0 -128
  590. package/components/richtext/VariableEmbedEditor.tsx +0 -89
  591. package/components/ui/avatar.tsx +0 -43
  592. package/components/ui/button.tsx +0 -47
  593. package/components/ui/dialog.tsx +0 -97
  594. package/components/ui/dropdown-menu.tsx +0 -181
  595. package/components/ui/index.ts +0 -73
  596. package/components/ui/input.tsx +0 -22
  597. package/components/ui/label.tsx +0 -19
  598. package/components/ui/select.tsx +0 -145
  599. package/components/ui/sonner.tsx +0 -35
  600. package/components/ui/table.tsx +0 -77
  601. package/components/ui/tabs.tsx +0 -55
  602. package/components/ui/toast.tsx +0 -78
  603. package/components/ui/toaster.tsx +0 -28
  604. package/config.ts +0 -4
  605. package/defineConfig.ts +0 -149
  606. package/dist/chunk-33VA3IFB.js.map +0 -1
  607. package/dist/chunk-4MPOTHTY.js +0 -9
  608. package/dist/chunk-4MPOTHTY.js.map +0 -1
  609. package/dist/chunk-4VLN5EX2.js +0 -9204
  610. package/dist/chunk-4VLN5EX2.js.map +0 -1
  611. package/dist/chunk-7CFFE2I6.js +0 -55
  612. package/dist/chunk-B47VXAHT.js.map +0 -1
  613. package/dist/chunk-BRTXBBVQ.js.map +0 -1
  614. package/dist/init-RQVF5KUT.js.map +0 -1
  615. package/dist/localReader-I2THES24.js.map +0 -1
  616. package/github-public.ts +0 -160
  617. package/hooks/useConfig.tsx +0 -31
  618. package/hooks/useEntryStack.test.tsx +0 -194
  619. package/hooks/useEntryStack.tsx +0 -128
  620. package/hooks/useFileState.tsx +0 -44
  621. package/hooks/useToast.tsx +0 -191
  622. package/index.ts +0 -24
  623. package/lib/blogPublicPath.test.ts +0 -27
  624. package/lib/blogPublicPath.ts +0 -18
  625. package/lib/branchHistory.test.ts +0 -164
  626. package/lib/branchHistory.ts +0 -122
  627. package/lib/cmsServerLog.ts +0 -23
  628. package/lib/colorField.test.ts +0 -38
  629. package/lib/companionMarkdown.test.ts +0 -77
  630. package/lib/companionMarkdown.ts +0 -74
  631. package/lib/conditionalField.test.ts +0 -212
  632. package/lib/conditionalField.ts +0 -139
  633. package/lib/contentSourceError.test.ts +0 -70
  634. package/lib/contentSourceError.ts +0 -111
  635. package/lib/datetimeField.test.ts +0 -77
  636. package/lib/datetimeField.ts +0 -91
  637. package/lib/deploymentEnv.test.ts +0 -67
  638. package/lib/deploymentEnv.ts +0 -37
  639. package/lib/extractImageMetadata.ts +0 -34
  640. package/lib/githubContentMode.test.ts +0 -27
  641. package/lib/initialEntryFields.ts +0 -39
  642. package/lib/jsonField.test.ts +0 -59
  643. package/lib/jsonField.ts +0 -54
  644. package/lib/localReader.test.ts +0 -157
  645. package/lib/localReader.ts +0 -37
  646. package/lib/numberField.test.ts +0 -38
  647. package/lib/persistedFormFields.test.ts +0 -106
  648. package/lib/referenceKeys.test.ts +0 -57
  649. package/lib/richtext/parseRichText.test.ts +0 -189
  650. package/lib/richtext/parseRichText.ts +0 -266
  651. package/lib/richtextFieldConfig.ts +0 -20
  652. package/lib/searchIndex.test.ts +0 -312
  653. package/lib/searchIndex.ts +0 -261
  654. package/lib/selectField.test.ts +0 -64
  655. package/lib/slugField.test.ts +0 -90
  656. package/lib/slugField.ts +0 -76
  657. package/lib/stringListField.test.ts +0 -44
  658. package/lib/stringListField.ts +0 -43
  659. package/lib/suggestedMediaTitle.ts +0 -7
  660. package/lib/urlField.test.ts +0 -39
  661. package/lib/urlField.ts +0 -31
  662. package/lib/validateEntryFields.test.ts +0 -326
  663. package/query.ts +0 -666
  664. package/types.ts +0 -359
  665. package/withOctoCMS.ts +0 -16
  666. /package/dist/{chunk-7CFFE2I6.js.map → admin/store/contentStoreTypes.js.map} +0 -0
  667. /package/dist/{agentDocs-NUEXGXIH.js.map → agentDocs-Y3LM2CPQ.js.map} +0 -0
  668. /package/dist/{update-4Z3OK3TX.js.map → update-RF2HD3WJ.js.map} +0 -0
@@ -0,0 +1,22 @@
1
+ type AdminAppProps = {
2
+ params: Promise<{
3
+ path?: string[];
4
+ }>;
5
+ };
6
+ /**
7
+ * Catch-all admin router component. Mount this as the default export of a
8
+ * Next.js optional catch-all route at `src/app/cms/[[...path]]/page.tsx`:
9
+ *
10
+ * export { AdminApp as default } from 'octocms/admin/AdminApp';
11
+ *
12
+ * Route segments map to admin pages:
13
+ * /cms → DashboardPage
14
+ * /cms/search → SearchPage
15
+ * /cms/media → MediaPage (library)
16
+ * /cms/media/<id> → MediaPage with that asset selected (detail panel)
17
+ * /cms/<type> → CollectionPage
18
+ * /cms/<type>/<id>→ EntryPage
19
+ */
20
+ export declare function AdminApp({ params }: AdminAppProps): import("react/jsx-runtime").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=AdminApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminApp.d.ts","sourceRoot":"","sources":["../../admin/AdminApp.tsx"],"names":[],"mappings":"AAQA,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,2CAMjD"}
@@ -0,0 +1,35 @@
1
+ import "../chunk-2NMEKWO5.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Suspense } from "react";
4
+ import { CollectionPage } from "./pages/CollectionPage";
5
+ import { DashboardPage } from "./pages/DashboardPage";
6
+ import { EntryPage } from "./pages/EntryPage";
7
+ import { MediaPage } from "./pages/MediaPage";
8
+ import { SearchPage } from "./pages/SearchPage";
9
+ function AdminApp({ params }) {
10
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(AdminAppRouter, { params }) });
11
+ }
12
+ async function AdminAppRouter({ params }) {
13
+ const { path } = await params;
14
+ const segments = path != null ? path : [];
15
+ if (segments.length === 0) {
16
+ return /* @__PURE__ */ jsx(DashboardPage, {});
17
+ }
18
+ if (segments[0] === "search") {
19
+ return /* @__PURE__ */ jsx(SearchPage, {});
20
+ }
21
+ if (segments[0] === "media") {
22
+ const initialMediaId = segments.length >= 2 ? segments[1] : void 0;
23
+ return /* @__PURE__ */ jsx(MediaPage, { initialMediaId });
24
+ }
25
+ if (segments.length === 1) {
26
+ const [type2] = segments;
27
+ return /* @__PURE__ */ jsx(CollectionPage, { params: Promise.resolve({ type: type2 }) });
28
+ }
29
+ const [type, id] = segments;
30
+ return /* @__PURE__ */ jsx(EntryPage, { params: Promise.resolve({ type, id }) });
31
+ }
32
+ export {
33
+ AdminApp
34
+ };
35
+ //# sourceMappingURL=AdminApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../admin/AdminApp.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\n\nimport { CollectionPage } from './pages/CollectionPage';\nimport { DashboardPage } from './pages/DashboardPage';\nimport { EntryPage } from './pages/EntryPage';\nimport { MediaPage } from './pages/MediaPage';\nimport { SearchPage } from './pages/SearchPage';\n\ntype AdminAppProps = {\n params: Promise<{ path?: string[] }>;\n};\n\n/**\n * Catch-all admin router component. Mount this as the default export of a\n * Next.js optional catch-all route at `src/app/cms/[[...path]]/page.tsx`:\n *\n * export { AdminApp as default } from 'octocms/admin/AdminApp';\n *\n * Route segments map to admin pages:\n * /cms → DashboardPage\n * /cms/search → SearchPage\n * /cms/media → MediaPage (library)\n * /cms/media/<id> → MediaPage with that asset selected (detail panel)\n * /cms/<type> → CollectionPage\n * /cms/<type>/<id>→ EntryPage\n */\nexport function AdminApp({ params }: AdminAppProps) {\n return (\n <Suspense fallback={null}>\n <AdminAppRouter params={params} />\n </Suspense>\n );\n}\n\nasync function AdminAppRouter({ params }: AdminAppProps) {\n const { path } = await params;\n const segments = path ?? [];\n\n if (segments.length === 0) {\n return <DashboardPage />;\n }\n\n if (segments[0] === 'search') {\n return <SearchPage />;\n }\n\n if (segments[0] === 'media') {\n const initialMediaId = segments.length >= 2 ? segments[1] : undefined;\n return <MediaPage initialMediaId={initialMediaId} />;\n }\n\n if (segments.length === 1) {\n const [type] = segments;\n return <CollectionPage params={Promise.resolve({ type })} />;\n }\n\n const [type, id] = segments;\n return <EntryPage params={Promise.resolve({ type, id })} />;\n}\n"],"mappings":";AA6BM;AA7BN,SAAgB,gBAAgB;AAEhC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAoBpB,SAAS,SAAS,EAAE,OAAO,GAAkB;AAClD,SACE,oBAAC,YAAS,UAAU,MAClB,8BAAC,kBAAe,QAAgB,GAClC;AAEJ;AAEA,eAAe,eAAe,EAAE,OAAO,GAAkB;AACvD,QAAM,EAAE,KAAK,IAAI,MAAM;AACvB,QAAM,WAAW,sBAAQ,CAAC;AAE1B,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,oBAAC,iBAAc;AAAA,EACxB;AAEA,MAAI,SAAS,CAAC,MAAM,UAAU;AAC5B,WAAO,oBAAC,cAAW;AAAA,EACrB;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS;AAC3B,UAAM,iBAAiB,SAAS,UAAU,IAAI,SAAS,CAAC,IAAI;AAC5D,WAAO,oBAAC,aAAU,gBAAgC;AAAA,EACpD;AAEA,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,CAACA,KAAI,IAAI;AACf,WAAO,oBAAC,kBAAe,QAAQ,QAAQ,QAAQ,EAAE,MAAAA,MAAK,CAAC,GAAG;AAAA,EAC5D;AAEA,QAAM,CAAC,MAAM,EAAE,IAAI;AACnB,SAAO,oBAAC,aAAU,QAAQ,QAAQ,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG;AAC3D;","names":["type"]}
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { Theme } from './theme';
3
+ type ThemeContextValue = {
4
+ /** The stored preference: 'light' | 'dark' | 'system' */
5
+ theme: Theme;
6
+ /** The applied theme after resolving 'system' via matchMedia */
7
+ resolvedTheme: 'light' | 'dark';
8
+ setTheme: (theme: Theme) => void;
9
+ };
10
+ /**
11
+ * Hook to access the current theme state and setter from anywhere inside the CMS.
12
+ */
13
+ export declare function useTheme(): ThemeContextValue;
14
+ type ThemeProviderProps = {
15
+ /**
16
+ * Initial theme value from the SSR-read cookie. Passed from AdminLayout
17
+ * so the first render already has the correct theme without a hydration flash
18
+ * for users with an explicit 'light' or 'dark' cookie.
19
+ */
20
+ initialTheme: Theme;
21
+ children: React.ReactNode;
22
+ };
23
+ /**
24
+ * Provides theme state for the CMS admin panel.
25
+ *
26
+ * - Resolves 'system' by listening to `prefers-color-scheme`.
27
+ * - Persists the preference to the `cms-theme` cookie (SameSite=Lax, 1 year).
28
+ * - Syncs `class="dark"` onto `document.body` so that Radix UI portal
29
+ * elements (dropdowns, dialogs) — which are appended to `<body>` — also
30
+ * inherit the dark CSS variable scope.
31
+ *
32
+ * This provider is only mounted inside `src/app/cms/layout.tsx`, so the
33
+ * `document.body` class never leaks to public pages.
34
+ */
35
+ export declare function ThemeProvider({ initialTheme, children }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
36
+ export {};
37
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../admin/ThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsE,MAAM,OAAO,CAAC;AAE3F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,KAAK,iBAAiB,GAAG;IACvB,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,gEAAgE;IAChE,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,CAAC;AAQF;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAE5C;AAED,KAAK,kBAAkB,GAAG;IACxB;;;;OAIG;IACH,YAAY,EAAE,KAAK,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAkC3E"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import "../chunk-2NMEKWO5.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { createContext, useCallback, useContext, useEffect, useState } from "react";
5
+ import { THEME_COOKIE } from "./theme";
6
+ const ThemeContext = createContext({
7
+ theme: "system",
8
+ resolvedTheme: "light",
9
+ setTheme: () => {
10
+ }
11
+ });
12
+ function useTheme() {
13
+ return useContext(ThemeContext);
14
+ }
15
+ function ThemeProvider({ initialTheme, children }) {
16
+ const [theme, setThemeState] = useState(initialTheme);
17
+ const [systemDark, setSystemDark] = useState(false);
18
+ useEffect(() => {
19
+ const mq = window.matchMedia("(prefers-color-scheme: dark)");
20
+ setSystemDark(mq.matches);
21
+ const handler = (e) => setSystemDark(e.matches);
22
+ mq.addEventListener("change", handler);
23
+ return () => mq.removeEventListener("change", handler);
24
+ }, []);
25
+ const resolvedTheme = theme === "system" ? systemDark ? "dark" : "light" : theme;
26
+ useEffect(() => {
27
+ document.body.classList.toggle("dark", resolvedTheme === "dark");
28
+ return () => {
29
+ document.body.classList.remove("dark");
30
+ };
31
+ }, [resolvedTheme]);
32
+ const setTheme = useCallback((next) => {
33
+ setThemeState(next);
34
+ document.cookie = `${THEME_COOKIE}=${next};path=/;max-age=31536000;SameSite=Lax`;
35
+ }, []);
36
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { theme, resolvedTheme, setTheme }, children });
37
+ }
38
+ export {
39
+ ThemeProvider,
40
+ useTheme
41
+ };
42
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../admin/ThemeProvider.tsx"],"sourcesContent":["'use client';\n\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react';\n\nimport type { Theme } from './theme';\nimport { THEME_COOKIE } from './theme';\n\ntype ThemeContextValue = {\n /** The stored preference: 'light' | 'dark' | 'system' */\n theme: Theme;\n /** The applied theme after resolving 'system' via matchMedia */\n resolvedTheme: 'light' | 'dark';\n setTheme: (theme: Theme) => void;\n};\n\nconst ThemeContext = createContext<ThemeContextValue>({\n theme: 'system',\n resolvedTheme: 'light',\n setTheme: () => {},\n});\n\n/**\n * Hook to access the current theme state and setter from anywhere inside the CMS.\n */\nexport function useTheme(): ThemeContextValue {\n return useContext(ThemeContext);\n}\n\ntype ThemeProviderProps = {\n /**\n * Initial theme value from the SSR-read cookie. Passed from AdminLayout\n * so the first render already has the correct theme without a hydration flash\n * for users with an explicit 'light' or 'dark' cookie.\n */\n initialTheme: Theme;\n children: React.ReactNode;\n};\n\n/**\n * Provides theme state for the CMS admin panel.\n *\n * - Resolves 'system' by listening to `prefers-color-scheme`.\n * - Persists the preference to the `cms-theme` cookie (SameSite=Lax, 1 year).\n * - Syncs `class=\"dark\"` onto `document.body` so that Radix UI portal\n * elements (dropdowns, dialogs) — which are appended to `<body>` — also\n * inherit the dark CSS variable scope.\n *\n * This provider is only mounted inside `src/app/cms/layout.tsx`, so the\n * `document.body` class never leaks to public pages.\n */\nexport function ThemeProvider({ initialTheme, children }: ThemeProviderProps) {\n const [theme, setThemeState] = useState<Theme>(initialTheme);\n const [systemDark, setSystemDark] = useState(false);\n\n // Detect system preference on the client and track changes.\n useEffect(() => {\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemDark(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n const resolvedTheme: 'light' | 'dark' = theme === 'system' ? (systemDark ? 'dark' : 'light') : theme;\n\n // Sync dark class to document.body so Radix portals inherit the dark scope.\n // Safe: ThemeProvider is only mounted under /cms, never on public pages.\n // The cleanup removes the class when the CMS layout unmounts (e.g. navigating\n // from /cms to a public route via client-side navigation).\n useEffect(() => {\n document.body.classList.toggle('dark', resolvedTheme === 'dark');\n return () => {\n document.body.classList.remove('dark');\n };\n }, [resolvedTheme]);\n\n const setTheme = useCallback((next: Theme) => {\n setThemeState(next);\n // Persist to cookie for SSR reads on next page load.\n document.cookie = `${THEME_COOKIE}=${next};path=/;max-age=31536000;SameSite=Lax`;\n }, []);\n\n return <ThemeContext.Provider value={{ theme, resolvedTheme, setTheme }}>{children}</ThemeContext.Provider>;\n}\n"],"mappings":";;AAmFS;AAjFT,SAAgB,eAAe,aAAa,YAAY,WAAW,gBAAgB;AAGnF,SAAS,oBAAoB;AAU7B,MAAM,eAAe,cAAiC;AAAA,EACpD,OAAO;AAAA,EACP,eAAe;AAAA,EACf,UAAU,MAAM;AAAA,EAAC;AACnB,CAAC;AAKM,SAAS,WAA8B;AAC5C,SAAO,WAAW,YAAY;AAChC;AAwBO,SAAS,cAAc,EAAE,cAAc,SAAS,GAAuB;AAC5E,QAAM,CAAC,OAAO,aAAa,IAAI,SAAgB,YAAY;AAC3D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAGlD,YAAU,MAAM;AACd,UAAM,KAAK,OAAO,WAAW,8BAA8B;AAC3D,kBAAc,GAAG,OAAO;AAExB,UAAM,UAAU,CAAC,MAA2B,cAAc,EAAE,OAAO;AACnE,OAAG,iBAAiB,UAAU,OAAO;AACrC,WAAO,MAAM,GAAG,oBAAoB,UAAU,OAAO;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAkC,UAAU,WAAY,aAAa,SAAS,UAAW;AAM/F,YAAU,MAAM;AACd,aAAS,KAAK,UAAU,OAAO,QAAQ,kBAAkB,MAAM;AAC/D,WAAO,MAAM;AACX,eAAS,KAAK,UAAU,OAAO,MAAM;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,WAAW,YAAY,CAAC,SAAgB;AAC5C,kBAAc,IAAI;AAElB,aAAS,SAAS,GAAG,YAAY,IAAI,IAAI;AAAA,EAC3C,GAAG,CAAC,CAAC;AAEL,SAAO,oBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,OAAO,eAAe,SAAS,GAAI,UAAS;AACrF;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { type ActionResult } from './utils';
2
+ export type BuildJsonsOptions = {
3
+ /** Slug-based `/blog/...` paths to revalidate in addition to the dynamic route segment. */
4
+ blogPaths?: string[];
5
+ };
6
+ export declare const buildJsons: (_editedFileName?: string, options?: BuildJsonsOptions) => Promise<ActionResult>;
7
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../admin/actions/build.ts"],"names":[],"mappings":"AAaA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAOjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AA0FF,eAAO,MAAM,UAAU,GAAU,kBAAkB,MAAM,EAAE,UAAU,iBAAiB,KAAG,OAAO,CAAC,YAAY,CAyB5G,CAAC"}
@@ -0,0 +1,109 @@
1
+ "use server";
2
+ import "../../chunk-2NMEKWO5.js";
3
+ import fsPromises from "fs/promises";
4
+ import path from "path";
5
+ import { glob } from "glob";
6
+ import { revalidatePath, updateTag } from "next/cache";
7
+ import { getConfig } from "../../lib/configStore";
8
+ import { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from "../../lib/companionMarkdown";
9
+ import { buildSearchIndex } from "../../lib/searchIndex";
10
+ import { isProductionMode, saveGitHubFile } from "../github";
11
+ import { actionErr, actionOk } from "./utils";
12
+ const PUBLIC_CACHE_TAGS = ["homePage", "blog"];
13
+ const SEARCH_INDEX_FILE_PATH = "cms/__generated__/search-index.json";
14
+ async function getEntriesForPublicSearch() {
15
+ var _a;
16
+ const config = getConfig();
17
+ const publicCollections = (_a = config.search) == null ? void 0 : _a.publicCollections;
18
+ if (!publicCollections || Object.keys(publicCollections).length === 0) {
19
+ return [];
20
+ }
21
+ const files = await glob(`${config.contentFolder}/**/*.json`);
22
+ const entries = [];
23
+ for (const file of files) {
24
+ const normalized = file.replace(/\\/g, "/");
25
+ if (normalized.includes("/media/")) continue;
26
+ try {
27
+ const filePath = path.join(process.cwd(), normalized);
28
+ const data = await fsPromises.readFile(filePath, { encoding: "utf8" });
29
+ const content = JSON.parse(data);
30
+ const sys = content.sys;
31
+ const type = sys == null ? void 0 : sys.type;
32
+ if (!type || !(type in publicCollections)) continue;
33
+ const companions = {};
34
+ if (type) {
35
+ const mdPaths = companionMarkdownPathsForEntry(normalized, type, config.collections);
36
+ for (const [fieldName, mdPath] of Object.entries(mdPaths)) {
37
+ try {
38
+ const mdFilePath = path.join(process.cwd(), mdPath);
39
+ companions[fieldName] = await fsPromises.readFile(mdFilePath, { encoding: "utf8" });
40
+ } catch (e) {
41
+ companions[fieldName] = "";
42
+ }
43
+ }
44
+ const rtPaths = companionRichTextPathsForEntry(normalized, type, config.collections);
45
+ for (const [fieldName, rtPath] of Object.entries(rtPaths)) {
46
+ try {
47
+ const rtFilePath = path.join(process.cwd(), rtPath);
48
+ companions[fieldName] = await fsPromises.readFile(rtFilePath, { encoding: "utf8" });
49
+ } catch (e) {
50
+ companions[fieldName] = "";
51
+ }
52
+ }
53
+ }
54
+ entries.push({
55
+ path: normalized.replace(`${config.contentFolder}/`, ""),
56
+ content,
57
+ companionContent: companions
58
+ });
59
+ } catch (e) {
60
+ }
61
+ }
62
+ return entries;
63
+ }
64
+ async function buildAndWriteSearchIndex() {
65
+ var _a;
66
+ const config = getConfig();
67
+ const publicCollections = (_a = config.search) == null ? void 0 : _a.publicCollections;
68
+ if (!publicCollections || Object.keys(publicCollections).length === 0) {
69
+ return;
70
+ }
71
+ try {
72
+ const entries = await getEntriesForPublicSearch();
73
+ const indexJson = buildSearchIndex(entries, config, Object.keys(publicCollections));
74
+ if (isProductionMode()) {
75
+ await saveGitHubFile(SEARCH_INDEX_FILE_PATH, indexJson, "CMS: update search index");
76
+ } else {
77
+ const filePath = path.join(process.cwd(), SEARCH_INDEX_FILE_PATH);
78
+ await fsPromises.mkdir(path.dirname(filePath), { recursive: true });
79
+ await fsPromises.writeFile(filePath, indexJson, "utf8");
80
+ }
81
+ } catch (e) {
82
+ }
83
+ }
84
+ const buildJsons = async (_editedFileName, options) => {
85
+ var _a;
86
+ try {
87
+ for (const tag of PUBLIC_CACHE_TAGS) {
88
+ updateTag(tag);
89
+ }
90
+ revalidatePath("/", "layout");
91
+ revalidatePath("/blog", "page");
92
+ revalidatePath("/blog/[slug]", "page");
93
+ const seen = /* @__PURE__ */ new Set();
94
+ for (const p of (_a = options == null ? void 0 : options.blogPaths) != null ? _a : []) {
95
+ if (typeof p === "string" && p.startsWith("/blog/") && !seen.has(p)) {
96
+ seen.add(p);
97
+ revalidatePath(p);
98
+ }
99
+ }
100
+ await buildAndWriteSearchIndex();
101
+ return actionOk();
102
+ } catch (e) {
103
+ return actionErr(e);
104
+ }
105
+ };
106
+ export {
107
+ buildJsons
108
+ };
109
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../admin/actions/build.ts"],"sourcesContent":["'use server';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { glob } from 'glob';\nimport { revalidatePath, updateTag } from 'next/cache';\n\nimport { getConfig } from '../../lib/configStore';\nimport { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from '../../lib/companionMarkdown';\nimport { buildSearchIndex, type EntryForSearch } from '../../lib/searchIndex';\n\nimport { isProductionMode, saveGitHubFile } from '../github';\nimport { actionErr, actionOk, type ActionResult } from './utils';\n\n/** Cache tags used by `getHomePage` / `getBlog` / `getPublishedPosts` in `src/app/cms/ssr/getPageContent.ts`. */\nconst PUBLIC_CACHE_TAGS = ['homePage', 'blog'] as const;\n\nconst SEARCH_INDEX_FILE_PATH = 'cms/__generated__/search-index.json';\n\nexport type BuildJsonsOptions = {\n /** Slug-based `/blog/...` paths to revalidate in addition to the dynamic route segment. */\n blogPaths?: string[];\n};\n\n/** Helper: gather all searchable entries from the filesystem. */\nasync function getEntriesForPublicSearch(): Promise<EntryForSearch[]> {\n const config = getConfig();\n const publicCollections = config.search?.publicCollections;\n if (!publicCollections || Object.keys(publicCollections).length === 0) {\n return [];\n }\n\n const files = await glob(`${config.contentFolder}/**/*.json`);\n const entries: EntryForSearch[] = [];\n\n for (const file of files) {\n const normalized = file.replace(/\\\\/g, '/');\n // Skip media entries\n if (normalized.includes('/media/')) continue;\n\n try {\n const filePath = path.join(process.cwd(), normalized);\n const data = await fsPromises.readFile(filePath, { encoding: 'utf8' });\n const content = JSON.parse(data) as Record<string, unknown>;\n const sys = content.sys as { type?: string } | undefined;\n const type = sys?.type;\n\n // Only include entries from publicCollections\n if (!type || !(type in publicCollections)) continue;\n\n // Read companion markdown/richtext files\n const companions: Record<string, string> = {};\n if (type) {\n const mdPaths = companionMarkdownPathsForEntry(normalized, type, config.collections);\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n try {\n const mdFilePath = path.join(process.cwd(), mdPath);\n companions[fieldName] = await fsPromises.readFile(mdFilePath, { encoding: 'utf8' });\n } catch {\n companions[fieldName] = '';\n }\n }\n const rtPaths = companionRichTextPathsForEntry(normalized, type, config.collections);\n for (const [fieldName, rtPath] of Object.entries(rtPaths)) {\n try {\n const rtFilePath = path.join(process.cwd(), rtPath);\n companions[fieldName] = await fsPromises.readFile(rtFilePath, { encoding: 'utf8' });\n } catch {\n companions[fieldName] = '';\n }\n }\n }\n\n entries.push({\n path: normalized.replace(`${config.contentFolder}/`, ''),\n content,\n companionContent: companions,\n });\n } catch {\n // Skip unreadable files\n }\n }\n\n return entries;\n}\n\n/** Build and write the public search index. */\nasync function buildAndWriteSearchIndex(): Promise<void> {\n const config = getConfig();\n const publicCollections = config.search?.publicCollections;\n if (!publicCollections || Object.keys(publicCollections).length === 0) {\n return;\n }\n\n try {\n const entries = await getEntriesForPublicSearch();\n const indexJson = buildSearchIndex(entries, config, Object.keys(publicCollections));\n\n if (isProductionMode()) {\n // Write to GitHub\n await saveGitHubFile(SEARCH_INDEX_FILE_PATH, indexJson, 'CMS: update search index');\n } else {\n // Write to local filesystem\n const filePath = path.join(process.cwd(), SEARCH_INDEX_FILE_PATH);\n await fsPromises.mkdir(path.dirname(filePath), { recursive: true });\n await fsPromises.writeFile(filePath, indexJson, 'utf8');\n }\n } catch {\n // Silently fail search index generation to not block the build\n }\n}\n\nexport const buildJsons = async (_editedFileName?: string, options?: BuildJsonsOptions): Promise<ActionResult> => {\n try {\n for (const tag of PUBLIC_CACHE_TAGS) {\n updateTag(tag);\n }\n\n revalidatePath('/', 'layout');\n revalidatePath('/blog', 'page');\n revalidatePath('/blog/[slug]', 'page');\n\n const seen = new Set<string>();\n for (const p of options?.blogPaths ?? []) {\n if (typeof p === 'string' && p.startsWith('/blog/') && !seen.has(p)) {\n seen.add(p);\n revalidatePath(p);\n }\n }\n\n // Build and write the public search index\n await buildAndWriteSearchIndex();\n\n return actionOk();\n } catch (e) {\n return actionErr(e);\n }\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,8 @@
1
+ import type { EntryListItem } from '../../types';
2
+ export declare const getEntryList: (collection?: string) => Promise<EntryListItem[]>;
3
+ /**
4
+ * Find all content entries that reference the given entry via reference fields.
5
+ * Returns entries that contain `targetReferenceKey` in any reference field value.
6
+ */
7
+ export declare const getEntryBacklinks: (targetReferenceKey: string) => Promise<EntryListItem[]>;
8
+ //# sourceMappingURL=entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../admin/actions/entries.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAM9D,eAAO,MAAM,YAAY,GAAU,aAAY,MAAa,KAAG,OAAO,CAAC,aAAa,EAAE,CAoDrF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,oBAAoB,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAgE3F,CAAC"}
@@ -0,0 +1,112 @@
1
+ "use server";
2
+ import "../../chunk-2NMEKWO5.js";
3
+ import fsPromises from "fs/promises";
4
+ import path from "path";
5
+ import { getConfig } from "../../lib/configStore";
6
+ import { getContentFiles, getFile } from "./files";
7
+ import { isProductionMode } from "../github";
8
+ import { getEntryTitleField } from "./utils";
9
+ const getEntryList = async (collection = "**") => {
10
+ var _a, _b, _c;
11
+ const config = getConfig();
12
+ const files = await getContentFiles(collection);
13
+ const entries = [];
14
+ for (const file of files) {
15
+ const nameWithoutFolder = file.replace(`${config.contentFolder}/`, "").replace(".json", "");
16
+ const parts = nameWithoutFolder.split("/");
17
+ const type = parts[0];
18
+ let id = parts[parts.length - 1];
19
+ const titleField = getEntryTitleField(type);
20
+ let title = id;
21
+ let status = "merged";
22
+ let updatedAt;
23
+ try {
24
+ const content = await getFile(file);
25
+ if (type === "media") {
26
+ const sysId = (content == null ? void 0 : content.sys) && typeof content.sys === "object" && "id" in content.sys ? content.sys.id : null;
27
+ if (typeof sysId === "string" && sysId !== "") {
28
+ id = sysId;
29
+ }
30
+ const mediaTitle = (_a = content == null ? void 0 : content.fields) == null ? void 0 : _a.title;
31
+ if (typeof mediaTitle === "string" && mediaTitle.trim() !== "") {
32
+ title = mediaTitle.trim();
33
+ }
34
+ } else if (titleField && ((_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[titleField])) {
35
+ title = content.fields[titleField];
36
+ }
37
+ if ((_c = content == null ? void 0 : content.sys) == null ? void 0 : _c.status) {
38
+ status = content.sys.status;
39
+ }
40
+ } catch (_e) {
41
+ }
42
+ if (!isProductionMode()) {
43
+ try {
44
+ const stat = await fsPromises.stat(path.join(process.cwd(), file));
45
+ updatedAt = stat.mtime.toISOString();
46
+ } catch (e) {
47
+ }
48
+ }
49
+ entries.push({ type, id, path: file, title, status, updatedAt });
50
+ }
51
+ entries.sort((a, b) => a.title.localeCompare(b.title));
52
+ return entries;
53
+ };
54
+ const getEntryBacklinks = async (targetReferenceKey) => {
55
+ var _a, _b, _c, _d;
56
+ const config = getConfig();
57
+ const allFiles = await getContentFiles("**");
58
+ const backlinks = [];
59
+ for (const file of allFiles) {
60
+ if (file.includes("/media/")) continue;
61
+ try {
62
+ const content = await getFile(file);
63
+ const type = (_a = content == null ? void 0 : content.sys) == null ? void 0 : _a.type;
64
+ if (!type) continue;
65
+ const collection = config.collections[type];
66
+ if (!collection) continue;
67
+ const referenceFieldKeys = Object.keys(collection.fields).filter(
68
+ (k) => collection.fields[k].format === "reference"
69
+ );
70
+ if (referenceFieldKeys.length === 0) continue;
71
+ let found = false;
72
+ for (const fieldKey of referenceFieldKeys) {
73
+ const fieldValue = (_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[fieldKey];
74
+ if (!fieldValue) continue;
75
+ let keys = [];
76
+ if (typeof fieldValue === "string") {
77
+ try {
78
+ const parsed = JSON.parse(fieldValue);
79
+ keys = Array.isArray(parsed) ? parsed : [fieldValue];
80
+ } catch (e) {
81
+ keys = [fieldValue];
82
+ }
83
+ } else if (Array.isArray(fieldValue)) {
84
+ keys = fieldValue;
85
+ }
86
+ if (keys.includes(targetReferenceKey)) {
87
+ found = true;
88
+ break;
89
+ }
90
+ }
91
+ if (found) {
92
+ const nameWithoutFolder = file.replace(`${config.contentFolder}/`, "").replace(".json", "");
93
+ const parts = nameWithoutFolder.split("/");
94
+ const id = parts[parts.length - 1];
95
+ const titleField = getEntryTitleField(type);
96
+ let title = id;
97
+ if (titleField && ((_c = content == null ? void 0 : content.fields) == null ? void 0 : _c[titleField])) {
98
+ title = content.fields[titleField];
99
+ }
100
+ const status = ((_d = content == null ? void 0 : content.sys) == null ? void 0 : _d.status) || "merged";
101
+ backlinks.push({ type, id, path: file, title, status });
102
+ }
103
+ } catch (_e) {
104
+ }
105
+ }
106
+ return backlinks;
107
+ };
108
+ export {
109
+ getEntryBacklinks,
110
+ getEntryList
111
+ };
112
+ //# sourceMappingURL=entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../admin/actions/entries.ts"],"sourcesContent":["'use server';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { getConfig } from '../../lib/configStore';\nimport type { Config } from '../types';\nimport type { EntryListItem, EntryStatus } from '../../types';\n\nimport { getContentFiles, getFile } from './files';\nimport { isProductionMode } from '../github';\nimport { getEntryTitleField } from './utils';\n\nexport const getEntryList = async (collection: string = '**'): Promise<EntryListItem[]> => {\n const config = getConfig();\n const files = await getContentFiles(collection);\n const entries: EntryListItem[] = [];\n\n for (const file of files) {\n const nameWithoutFolder = file.replace(`${config.contentFolder}/`, '').replace('.json', '');\n const parts = nameWithoutFolder.split('/');\n const type = parts[0];\n let id = parts[parts.length - 1];\n const titleField = getEntryTitleField(type);\n\n let title = id;\n let status: EntryStatus = 'merged';\n let updatedAt: string | undefined;\n\n try {\n const content = await getFile(file);\n\n if (type === 'media') {\n const sysId = content?.sys && typeof content.sys === 'object' && 'id' in content.sys ? content.sys.id : null;\n if (typeof sysId === 'string' && sysId !== '') {\n id = sysId;\n }\n const mediaTitle = content?.fields?.title;\n if (typeof mediaTitle === 'string' && mediaTitle.trim() !== '') {\n title = mediaTitle.trim();\n }\n } else if (titleField && content?.fields?.[titleField]) {\n title = content.fields[titleField];\n }\n if (content?.sys?.status) {\n status = content.sys.status;\n }\n } catch (_e) {\n // Fall back to id as title\n }\n\n if (!isProductionMode()) {\n try {\n const stat = await fsPromises.stat(path.join(process.cwd(), file));\n updatedAt = stat.mtime.toISOString();\n } catch {\n // ignore\n }\n }\n\n entries.push({ type, id, path: file, title, status, updatedAt });\n }\n\n entries.sort((a, b) => a.title.localeCompare(b.title));\n return entries;\n};\n\n/**\n * Find all content entries that reference the given entry via reference fields.\n * Returns entries that contain `targetReferenceKey` in any reference field value.\n */\nexport const getEntryBacklinks = async (targetReferenceKey: string): Promise<EntryListItem[]> => {\n const config = getConfig();\n const allFiles = await getContentFiles('**');\n const backlinks: EntryListItem[] = [];\n\n for (const file of allFiles) {\n // Skip media entries\n if (file.includes('/media/')) continue;\n\n try {\n const content = await getFile(file);\n const type = content?.sys?.type;\n if (!type) continue;\n\n const collection = config.collections[type as keyof Config['collections']];\n if (!collection) continue;\n\n const referenceFieldKeys = Object.keys(collection.fields).filter(\n (k) => collection.fields[k].format === 'reference',\n );\n if (referenceFieldKeys.length === 0) continue;\n\n let found = false;\n for (const fieldKey of referenceFieldKeys) {\n const fieldValue = content?.fields?.[fieldKey];\n if (!fieldValue) continue;\n\n // Reference values can be a single string (cardinality 'one') or a JSON array string (cardinality 'many')\n let keys: string[] = [];\n if (typeof fieldValue === 'string') {\n try {\n const parsed = JSON.parse(fieldValue);\n keys = Array.isArray(parsed) ? parsed : [fieldValue];\n } catch {\n keys = [fieldValue];\n }\n } else if (Array.isArray(fieldValue)) {\n keys = fieldValue;\n }\n\n if (keys.includes(targetReferenceKey)) {\n found = true;\n break;\n }\n }\n\n if (found) {\n const nameWithoutFolder = file.replace(`${config.contentFolder}/`, '').replace('.json', '');\n const parts = nameWithoutFolder.split('/');\n const id = parts[parts.length - 1];\n const titleField = getEntryTitleField(type);\n let title = id;\n if (titleField && content?.fields?.[titleField]) {\n title = content.fields[titleField];\n }\n const status: EntryStatus = content?.sys?.status || 'merged';\n backlinks.push({ type, id, path: file, title, status });\n }\n } catch (_e) {\n // Skip files that can't be read\n }\n }\n\n return backlinks;\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,16 @@
1
+ import { type ActionResult, type NewFileResult, type SaveFileResult } from './utils';
2
+ export type { SaveFileResult } from './utils';
3
+ /**
4
+ * In production, reject writes that would target `config.git.baseBranch` (no feature branch cookie).
5
+ */
6
+ export declare const assertFeatureBranchForWritesIfRequired: () => Promise<void>;
7
+ export declare const waitForPublicReadConsistency: (fileName: string, expectedContent: string, readRef?: string) => Promise<void>;
8
+ export declare const getContentFiles: (collection?: string) => Promise<string[]>;
9
+ export declare const getMediaFiles: (folder?: string) => Promise<string[]>;
10
+ export declare const getFile: (fileName: string) => Promise<any>;
11
+ export declare const saveFile: (formData: any, fileName: string, options?: {
12
+ skipStatusTransition?: boolean;
13
+ }) => Promise<SaveFileResult>;
14
+ export declare const newFile: (type: string) => Promise<NewFileResult>;
15
+ export declare const removeFile: (fileName: string) => Promise<ActionResult>;
16
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../admin/actions/files.ts"],"names":[],"mappings":"AA6BA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAqK9C;;GAEG;AACH,eAAO,MAAM,sCAAsC,QAAa,OAAO,CAAC,IAAI,CAQ3E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,UAAU,MAAM,EAAE,iBAAiB,MAAM,EAAE,UAAU,MAAM,kBAyB7G,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,aAAY,MAAa,sBA8B9D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAQ,MAAa,sBAqBxD,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,UAAU,MAAM,iBAgE7C,CAAC;AAqBF,eAAO,MAAM,QAAQ,GACnB,UAAU,GAAG,EACb,UAAU,MAAM,EAChB,UAAU;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3C,OAAO,CAAC,cAAc,CAoJxB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,aAAa,CAiDjE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,YAAY,CA8DvE,CAAC"}