octocms 0.3.5 → 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 (670) 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-4DFOPJEP.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-BSCCWET6.js → chunk-SWGXG4XK.js} +13 -5
  112. package/dist/chunk-SWGXG4XK.js.map +1 -0
  113. package/dist/cli/index.js +5 -5
  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-W7KLXTGY.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/{typesGen-NSSMVJVV.js → typesGen-RDG5SY5R.js} +2 -2
  499. package/dist/{typesGen-NSSMVJVV.js.map → typesGen-RDG5SY5R.js.map} +1 -1
  500. package/dist/{update-E4KTUEPW.js → update-RF2HD3WJ.js} +2 -2
  501. package/dist/utils/parseFileName.d.ts +4 -0
  502. package/dist/utils/parseFileName.d.ts.map +1 -0
  503. package/{utils/parseFileName.ts → dist/utils/parseFileName.js} +17 -18
  504. package/dist/utils/parseFileName.js.map +1 -0
  505. package/dist/withOctoCMS.cjs +1 -8
  506. package/dist/withOctoCMS.cjs.map +1 -1
  507. package/dist/withOctoCMS.d.ts +4 -6
  508. package/dist/withOctoCMS.d.ts.map +1 -0
  509. package/dist/withOctoCMS.js +9 -4
  510. package/dist/withOctoCMS.js.map +1 -1
  511. package/globals.css +3 -0
  512. package/package.json +54 -45
  513. package/admin/AdminApp.tsx +0 -59
  514. package/admin/ThemeProvider.test.tsx +0 -177
  515. package/admin/ThemeProvider.tsx +0 -85
  516. package/admin/actions/build.test.ts +0 -120
  517. package/admin/actions/build.ts +0 -139
  518. package/admin/actions/entries.test.ts +0 -311
  519. package/admin/actions/entries.ts +0 -136
  520. package/admin/actions/files.test.ts +0 -785
  521. package/admin/actions/getThemeCookie.test.ts +0 -54
  522. package/admin/actions/getThemeCookie.ts +0 -17
  523. package/admin/actions/git.test.ts +0 -177
  524. package/admin/actions/git.ts +0 -295
  525. package/admin/actions/media.test.ts +0 -528
  526. package/admin/actions/media.ts +0 -325
  527. package/admin/actions/search.ts +0 -94
  528. package/admin/actions/status.ts +0 -63
  529. package/admin/actions/utils.test.ts +0 -80
  530. package/admin/actions/utils.ts +0 -51
  531. package/admin/auth.ts +0 -25
  532. package/admin/consts.ts +0 -19
  533. package/admin/github.pointer.test.ts +0 -43
  534. package/admin/pages/AdminLayout.tsx +0 -50
  535. package/admin/pages/CollectionPage.tsx +0 -41
  536. package/admin/pages/DashboardPage.tsx +0 -34
  537. package/admin/pages/EntryPage.tsx +0 -49
  538. package/admin/pages/MediaPage.tsx +0 -26
  539. package/admin/pages/SearchPage.tsx +0 -23
  540. package/admin/provider.tsx +0 -30
  541. package/admin/store/contentStore.test.ts +0 -323
  542. package/admin/store/contentStore.ts +0 -333
  543. package/admin/store/contentStoreFetch.test.ts +0 -217
  544. package/admin/store/contentStoreFetch.ts +0 -240
  545. package/admin/store/contentStoreTypes.ts +0 -52
  546. package/admin/types.ts +0 -31
  547. package/components/CMSSidebar/CMSSidebar.tsx +0 -108
  548. package/components/ContentTypes.tsx +0 -162
  549. package/components/CreateBranchDialog.tsx +0 -137
  550. package/components/Dashboard/DashboardContent.tsx +0 -370
  551. package/components/EditPost/EditPost.tsx +0 -360
  552. package/components/FieldHintAndError.tsx +0 -20
  553. package/components/FileExplorer/FileExplorer.tsx +0 -99
  554. package/components/FormBooleanField.tsx +0 -51
  555. package/components/FormColorField.tsx +0 -112
  556. package/components/FormConditionalField.tsx +0 -383
  557. package/components/FormDatetimeField.tsx +0 -62
  558. package/components/FormFields.tsx +0 -265
  559. package/components/FormImageField.test.tsx +0 -153
  560. package/components/FormImageField.tsx +0 -281
  561. package/components/FormJsonField.tsx +0 -79
  562. package/components/FormMarkdownField.tsx +0 -83
  563. package/components/FormNumberField.tsx +0 -60
  564. package/components/FormReferenceField.test.tsx +0 -335
  565. package/components/FormReferenceField.tsx +0 -658
  566. package/components/FormRichTextField.tsx +0 -670
  567. package/components/FormSelectField.tsx +0 -138
  568. package/components/FormSlugField.tsx +0 -120
  569. package/components/FormStringField.tsx +0 -40
  570. package/components/FormStringListField.tsx +0 -192
  571. package/components/FormTextField.tsx +0 -54
  572. package/components/FormUrlField.tsx +0 -44
  573. package/components/Header/Header.tsx +0 -352
  574. package/components/Header/ThemeToggle.test.tsx +0 -98
  575. package/components/Header/ThemeToggle.tsx +0 -38
  576. package/components/InlineEntryEditor/InlineEntryEditor.tsx +0 -397
  577. package/components/Layout/Layout.tsx +0 -61
  578. package/components/LinkedBySection/LinkedBySection.tsx +0 -104
  579. package/components/Loading.tsx +0 -18
  580. package/components/MediaManager/MediaManager.tsx +0 -679
  581. package/components/SearchPage.tsx +0 -122
  582. package/components/StatusBadge.tsx +0 -65
  583. package/components/public/MarkdownContent.tsx +0 -49
  584. package/components/public/RichTextContent.tsx +0 -327
  585. package/components/public/SearchBox.tsx +0 -249
  586. package/components/public/index.ts +0 -4
  587. package/components/richtext/ComponentEmbedEditor.tsx +0 -201
  588. package/components/richtext/ConditionEmbedEditor.tsx +0 -273
  589. package/components/richtext/ImageEmbedEditor.tsx +0 -280
  590. package/components/richtext/ReferenceEmbedEditor.tsx +0 -249
  591. package/components/richtext/SlashCommandMenu.tsx +0 -128
  592. package/components/richtext/VariableEmbedEditor.tsx +0 -89
  593. package/components/ui/avatar.tsx +0 -43
  594. package/components/ui/button.tsx +0 -47
  595. package/components/ui/dialog.tsx +0 -97
  596. package/components/ui/dropdown-menu.tsx +0 -181
  597. package/components/ui/index.ts +0 -73
  598. package/components/ui/input.tsx +0 -22
  599. package/components/ui/label.tsx +0 -19
  600. package/components/ui/select.tsx +0 -145
  601. package/components/ui/sonner.tsx +0 -35
  602. package/components/ui/table.tsx +0 -77
  603. package/components/ui/tabs.tsx +0 -55
  604. package/components/ui/toast.tsx +0 -78
  605. package/components/ui/toaster.tsx +0 -28
  606. package/config.ts +0 -4
  607. package/defineConfig.ts +0 -149
  608. package/dist/chunk-4MPOTHTY.js +0 -9
  609. package/dist/chunk-4MPOTHTY.js.map +0 -1
  610. package/dist/chunk-4VLN5EX2.js +0 -9204
  611. package/dist/chunk-4VLN5EX2.js.map +0 -1
  612. package/dist/chunk-7CFFE2I6.js +0 -55
  613. package/dist/chunk-B47VXAHT.js.map +0 -1
  614. package/dist/chunk-BRTXBBVQ.js.map +0 -1
  615. package/dist/chunk-BSCCWET6.js.map +0 -1
  616. package/dist/init-W7KLXTGY.js.map +0 -1
  617. package/dist/localReader-I2THES24.js.map +0 -1
  618. package/github-public.ts +0 -160
  619. package/hooks/useConfig.tsx +0 -31
  620. package/hooks/useEntryStack.test.tsx +0 -194
  621. package/hooks/useEntryStack.tsx +0 -128
  622. package/hooks/useFileState.tsx +0 -44
  623. package/hooks/useToast.tsx +0 -191
  624. package/index.ts +0 -24
  625. package/lib/blogPublicPath.test.ts +0 -27
  626. package/lib/blogPublicPath.ts +0 -18
  627. package/lib/branchHistory.test.ts +0 -164
  628. package/lib/branchHistory.ts +0 -122
  629. package/lib/cmsServerLog.ts +0 -23
  630. package/lib/colorField.test.ts +0 -38
  631. package/lib/companionMarkdown.test.ts +0 -77
  632. package/lib/companionMarkdown.ts +0 -74
  633. package/lib/conditionalField.test.ts +0 -212
  634. package/lib/conditionalField.ts +0 -139
  635. package/lib/contentSourceError.test.ts +0 -70
  636. package/lib/contentSourceError.ts +0 -111
  637. package/lib/datetimeField.test.ts +0 -77
  638. package/lib/datetimeField.ts +0 -91
  639. package/lib/deploymentEnv.test.ts +0 -67
  640. package/lib/deploymentEnv.ts +0 -37
  641. package/lib/extractImageMetadata.ts +0 -34
  642. package/lib/githubContentMode.test.ts +0 -27
  643. package/lib/initialEntryFields.ts +0 -39
  644. package/lib/jsonField.test.ts +0 -59
  645. package/lib/jsonField.ts +0 -54
  646. package/lib/localReader.test.ts +0 -157
  647. package/lib/localReader.ts +0 -37
  648. package/lib/numberField.test.ts +0 -38
  649. package/lib/persistedFormFields.test.ts +0 -106
  650. package/lib/referenceKeys.test.ts +0 -57
  651. package/lib/richtext/parseRichText.test.ts +0 -189
  652. package/lib/richtext/parseRichText.ts +0 -266
  653. package/lib/richtextFieldConfig.ts +0 -20
  654. package/lib/searchIndex.test.ts +0 -312
  655. package/lib/searchIndex.ts +0 -261
  656. package/lib/selectField.test.ts +0 -64
  657. package/lib/slugField.test.ts +0 -90
  658. package/lib/slugField.ts +0 -76
  659. package/lib/stringListField.test.ts +0 -44
  660. package/lib/stringListField.ts +0 -43
  661. package/lib/suggestedMediaTitle.ts +0 -7
  662. package/lib/urlField.test.ts +0 -39
  663. package/lib/urlField.ts +0 -31
  664. package/lib/validateEntryFields.test.ts +0 -326
  665. package/query.ts +0 -666
  666. package/types.ts +0 -359
  667. package/withOctoCMS.ts +0 -16
  668. /package/dist/{chunk-7CFFE2I6.js.map → admin/store/contentStoreTypes.js.map} +0 -0
  669. /package/dist/{agentDocs-4DFOPJEP.js.map → agentDocs-Y3LM2CPQ.js.map} +0 -0
  670. /package/dist/{update-E4KTUEPW.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":";;AAEA,OAAO,gBAAgB;AACvB,OAAO,UAAU;AAEjB,SAAS,iBAAiB;AAI1B,SAAS,iBAAiB,eAAe;AACzC,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AAE5B,MAAM,eAAe,OAAO,aAAqB,SAAmC;AAb3F;AAcE,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,MAAM,gBAAgB,UAAU;AAC9C,QAAM,UAA2B,CAAC;AAElC,aAAW,QAAQ,OAAO;AACxB,UAAM,oBAAoB,KAAK,QAAQ,GAAG,OAAO,aAAa,KAAK,EAAE,EAAE,QAAQ,SAAS,EAAE;AAC1F,UAAM,QAAQ,kBAAkB,MAAM,GAAG;AACzC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,KAAK,MAAM,MAAM,SAAS,CAAC;AAC/B,UAAM,aAAa,mBAAmB,IAAI;AAE1C,QAAI,QAAQ;AACZ,QAAI,SAAsB;AAC1B,QAAI;AAEJ,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,IAAI;AAElC,UAAI,SAAS,SAAS;AACpB,cAAM,SAAQ,mCAAS,QAAO,OAAO,QAAQ,QAAQ,YAAY,QAAQ,QAAQ,MAAM,QAAQ,IAAI,KAAK;AACxG,YAAI,OAAO,UAAU,YAAY,UAAU,IAAI;AAC7C,eAAK;AAAA,QACP;AACA,cAAM,cAAa,wCAAS,WAAT,mBAAiB;AACpC,YAAI,OAAO,eAAe,YAAY,WAAW,KAAK,MAAM,IAAI;AAC9D,kBAAQ,WAAW,KAAK;AAAA,QAC1B;AAAA,MACF,WAAW,gBAAc,wCAAS,WAAT,mBAAkB,cAAa;AACtD,gBAAQ,QAAQ,OAAO,UAAU;AAAA,MACnC;AACA,WAAI,wCAAS,QAAT,mBAAc,QAAQ;AACxB,iBAAS,QAAQ,IAAI;AAAA,MACvB;AAAA,IACF,SAAS,IAAI;AAAA,IAEb;AAEA,QAAI,CAAC,iBAAiB,GAAG;AACvB,UAAI;AACF,cAAM,OAAO,MAAM,WAAW,KAAK,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC;AACjE,oBAAY,KAAK,MAAM,YAAY;AAAA,MACrC,SAAQ;AAAA,MAER;AAAA,IACF;AAEA,YAAQ,KAAK,EAAE,MAAM,IAAI,MAAM,MAAM,OAAO,QAAQ,UAAU,CAAC;AAAA,EACjE;AAEA,UAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AACrD,SAAO;AACT;AAMO,MAAM,oBAAoB,OAAO,uBAAyD;AAvEjG;AAwEE,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,MAAM,gBAAgB,IAAI;AAC3C,QAAM,YAA6B,CAAC;AAEpC,aAAW,QAAQ,UAAU;AAE3B,QAAI,KAAK,SAAS,SAAS,EAAG;AAE9B,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,IAAI;AAClC,YAAM,QAAO,wCAAS,QAAT,mBAAc;AAC3B,UAAI,CAAC,KAAM;AAEX,YAAM,aAAa,OAAO,YAAY,IAAmC;AACzE,UAAI,CAAC,WAAY;AAEjB,YAAM,qBAAqB,OAAO,KAAK,WAAW,MAAM,EAAE;AAAA,QACxD,CAAC,MAAM,WAAW,OAAO,CAAC,EAAE,WAAW;AAAA,MACzC;AACA,UAAI,mBAAmB,WAAW,EAAG;AAErC,UAAI,QAAQ;AACZ,iBAAW,YAAY,oBAAoB;AACzC,cAAM,cAAa,wCAAS,WAAT,mBAAkB;AACrC,YAAI,CAAC,WAAY;AAGjB,YAAI,OAAiB,CAAC;AACtB,YAAI,OAAO,eAAe,UAAU;AAClC,cAAI;AACF,kBAAM,SAAS,KAAK,MAAM,UAAU;AACpC,mBAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,UAAU;AAAA,UACrD,SAAQ;AACN,mBAAO,CAAC,UAAU;AAAA,UACpB;AAAA,QACF,WAAW,MAAM,QAAQ,UAAU,GAAG;AACpC,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,kBAAQ;AACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO;AACT,cAAM,oBAAoB,KAAK,QAAQ,GAAG,OAAO,aAAa,KAAK,EAAE,EAAE,QAAQ,SAAS,EAAE;AAC1F,cAAM,QAAQ,kBAAkB,MAAM,GAAG;AACzC,cAAM,KAAK,MAAM,MAAM,SAAS,CAAC;AACjC,cAAM,aAAa,mBAAmB,IAAI;AAC1C,YAAI,QAAQ;AACZ,YAAI,gBAAc,wCAAS,WAAT,mBAAkB,cAAa;AAC/C,kBAAQ,QAAQ,OAAO,UAAU;AAAA,QACnC;AACA,cAAM,WAAsB,wCAAS,QAAT,mBAAc,WAAU;AACpD,kBAAU,KAAK,EAAE,MAAM,IAAI,MAAM,MAAM,OAAO,OAAO,CAAC;AAAA,MACxD;AAAA,IACF,SAAS,IAAI;AAAA,IAEb;AAAA,EACF;AAEA,SAAO;AACT;","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"}