@jhits/plugin-blog 0.0.8 → 0.0.10

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 (439) hide show
  1. package/dist/api/categories.d.ts +8 -0
  2. package/dist/api/categories.d.ts.map +1 -0
  3. package/dist/api/categories.js +30 -0
  4. package/dist/api/check-title.d.ts +8 -0
  5. package/dist/api/check-title.d.ts.map +1 -0
  6. package/dist/api/check-title.js +47 -0
  7. package/dist/api/config-handler.d.ts +21 -0
  8. package/dist/api/config-handler.d.ts.map +1 -0
  9. package/dist/api/config-handler.js +46 -0
  10. package/dist/api/handler.d.ts +42 -0
  11. package/dist/api/handler.d.ts.map +1 -0
  12. package/dist/api/handler.js +331 -0
  13. package/dist/api/index.d.ts +12 -0
  14. package/dist/api/index.d.ts.map +1 -0
  15. package/dist/api/index.js +12 -0
  16. package/dist/api/route.d.ts +50 -0
  17. package/dist/api/route.d.ts.map +1 -0
  18. package/dist/api/route.js +69 -0
  19. package/dist/api/router.d.ts +27 -0
  20. package/dist/api/router.d.ts.map +1 -0
  21. package/dist/api/router.js +98 -0
  22. package/dist/api-server.d.ts +9 -0
  23. package/dist/api-server.d.ts.map +1 -0
  24. package/dist/api-server.js +9 -0
  25. package/dist/config.d.ts +14 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +156 -0
  28. package/dist/hooks/index.d.ts +8 -0
  29. package/dist/hooks/index.d.ts.map +1 -0
  30. package/dist/hooks/index.js +7 -0
  31. package/dist/hooks/useBlog.d.ts +31 -0
  32. package/dist/hooks/useBlog.d.ts.map +1 -0
  33. package/dist/hooks/useBlog.js +57 -0
  34. package/dist/hooks/useBlogs.d.ts +39 -0
  35. package/dist/hooks/useBlogs.d.ts.map +1 -0
  36. package/dist/hooks/useBlogs.js +82 -0
  37. package/dist/hooks/useCategories.d.ts +9 -0
  38. package/dist/hooks/useCategories.d.ts.map +1 -0
  39. package/dist/hooks/useCategories.js +70 -0
  40. package/dist/index.d.ts +55 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +228 -0
  43. package/dist/index.server.d.ts +12 -0
  44. package/dist/index.server.d.ts.map +1 -0
  45. package/dist/index.server.js +10 -0
  46. package/dist/init.d.ts +40 -0
  47. package/dist/init.d.ts.map +1 -0
  48. package/dist/init.js +41 -0
  49. package/dist/lib/blocks/BlockRenderer.d.ts +54 -0
  50. package/dist/lib/blocks/BlockRenderer.d.ts.map +1 -0
  51. package/dist/lib/blocks/BlockRenderer.js +54 -0
  52. package/dist/lib/blocks/index.d.ts +5 -0
  53. package/dist/lib/blocks/index.d.ts.map +1 -0
  54. package/dist/lib/blocks/index.js +4 -0
  55. package/dist/lib/config-storage.d.ts +30 -0
  56. package/dist/lib/config-storage.d.ts.map +1 -0
  57. package/dist/lib/config-storage.js +31 -0
  58. package/dist/lib/index.d.ts +8 -0
  59. package/dist/lib/index.d.ts.map +1 -0
  60. package/dist/lib/index.js +7 -0
  61. package/dist/lib/layouts/blocks/ColumnsBlock.d.ts +25 -0
  62. package/dist/lib/layouts/blocks/ColumnsBlock.d.ts.map +1 -0
  63. package/dist/lib/layouts/blocks/ColumnsBlock.js +186 -0
  64. package/dist/lib/layouts/blocks/SectionBlock.d.ts +25 -0
  65. package/dist/lib/layouts/blocks/SectionBlock.d.ts.map +1 -0
  66. package/dist/lib/layouts/blocks/SectionBlock.js +44 -0
  67. package/dist/lib/layouts/blocks/index.d.ts +7 -0
  68. package/dist/lib/layouts/blocks/index.d.ts.map +1 -0
  69. package/dist/lib/layouts/blocks/index.js +6 -0
  70. package/dist/lib/layouts/index.d.ts +23 -0
  71. package/dist/lib/layouts/index.d.ts.map +1 -0
  72. package/dist/lib/layouts/index.js +45 -0
  73. package/dist/lib/layouts/registerLayoutBlocks.d.ts +9 -0
  74. package/dist/lib/layouts/registerLayoutBlocks.d.ts.map +1 -0
  75. package/dist/lib/layouts/registerLayoutBlocks.js +60 -0
  76. package/dist/lib/mappers/apiMapper.d.ts +66 -0
  77. package/dist/lib/mappers/apiMapper.d.ts.map +1 -0
  78. package/dist/lib/mappers/apiMapper.js +188 -0
  79. package/dist/lib/migration/index.d.ts +5 -0
  80. package/dist/lib/migration/index.d.ts.map +1 -0
  81. package/dist/lib/migration/index.js +4 -0
  82. package/dist/lib/migration/mapper.d.ts +37 -0
  83. package/dist/lib/migration/mapper.d.ts.map +1 -0
  84. package/dist/lib/migration/mapper.js +98 -0
  85. package/dist/lib/rich-text/RichTextEditor.d.ts +45 -0
  86. package/dist/lib/rich-text/RichTextEditor.d.ts.map +1 -0
  87. package/dist/lib/rich-text/RichTextEditor.js +556 -0
  88. package/dist/lib/rich-text/RichTextPreview.d.ts +16 -0
  89. package/dist/lib/rich-text/RichTextPreview.d.ts.map +1 -0
  90. package/dist/lib/rich-text/RichTextPreview.js +144 -0
  91. package/dist/lib/rich-text/index.d.ts +9 -0
  92. package/dist/lib/rich-text/index.d.ts.map +1 -0
  93. package/dist/lib/rich-text/index.js +6 -0
  94. package/dist/lib/utils/blockHelpers.d.ts +23 -0
  95. package/dist/lib/utils/blockHelpers.d.ts.map +1 -0
  96. package/dist/lib/utils/blockHelpers.js +65 -0
  97. package/dist/lib/utils/configValidation.d.ts +23 -0
  98. package/dist/lib/utils/configValidation.d.ts.map +1 -0
  99. package/dist/lib/utils/configValidation.js +111 -0
  100. package/dist/lib/utils/index.d.ts +7 -0
  101. package/dist/lib/utils/index.d.ts.map +1 -0
  102. package/dist/lib/utils/index.js +6 -0
  103. package/dist/lib/utils/slugify.d.ts +25 -0
  104. package/dist/lib/utils/slugify.d.ts.map +1 -0
  105. package/dist/lib/utils/slugify.js +65 -0
  106. package/dist/registry/BlockRegistry.d.ts +62 -0
  107. package/dist/registry/BlockRegistry.d.ts.map +1 -0
  108. package/dist/registry/BlockRegistry.js +112 -0
  109. package/dist/registry/index.d.ts +6 -0
  110. package/dist/registry/index.d.ts.map +1 -0
  111. package/dist/registry/index.js +4 -0
  112. package/dist/state/EditorContext.d.ts +45 -0
  113. package/dist/state/EditorContext.d.ts.map +1 -0
  114. package/dist/state/EditorContext.js +215 -0
  115. package/dist/state/index.d.ts +7 -0
  116. package/dist/state/index.d.ts.map +1 -0
  117. package/dist/state/index.js +6 -0
  118. package/dist/state/reducer.d.ts +11 -0
  119. package/dist/state/reducer.d.ts.map +1 -0
  120. package/dist/state/reducer.js +599 -0
  121. package/dist/state/types.d.ts +162 -0
  122. package/dist/state/types.d.ts.map +1 -0
  123. package/dist/state/types.js +27 -0
  124. package/dist/types/block.d.ts +221 -0
  125. package/dist/types/block.d.ts.map +1 -0
  126. package/dist/types/block.js +6 -0
  127. package/dist/types/index.d.ts +8 -0
  128. package/dist/types/index.d.ts.map +1 -0
  129. package/dist/types/index.js +5 -0
  130. package/dist/types/post.d.ts +136 -0
  131. package/dist/types/post.d.ts.map +1 -0
  132. package/dist/types/post.js +5 -0
  133. package/dist/utils/client.d.ts +48 -0
  134. package/dist/utils/client.d.ts.map +1 -0
  135. package/dist/utils/client.js +77 -0
  136. package/dist/utils/index.d.ts +6 -0
  137. package/dist/utils/index.d.ts.map +1 -0
  138. package/dist/utils/index.js +5 -0
  139. package/dist/views/CanvasEditor/BlockWrapper.d.ts +16 -0
  140. package/dist/views/CanvasEditor/BlockWrapper.d.ts.map +1 -0
  141. package/dist/views/CanvasEditor/BlockWrapper.js +285 -0
  142. package/dist/views/CanvasEditor/CanvasEditorView.d.ts +14 -0
  143. package/dist/views/CanvasEditor/CanvasEditorView.d.ts.map +1 -0
  144. package/dist/views/CanvasEditor/CanvasEditorView.js +215 -0
  145. package/dist/views/CanvasEditor/EditorBody.d.ts +22 -0
  146. package/dist/views/CanvasEditor/EditorBody.d.ts.map +1 -0
  147. package/dist/views/CanvasEditor/EditorBody.js +505 -0
  148. package/dist/views/CanvasEditor/EditorHeader.d.ts +18 -0
  149. package/dist/views/CanvasEditor/EditorHeader.d.ts.map +1 -0
  150. package/dist/views/CanvasEditor/EditorHeader.js +101 -0
  151. package/dist/views/CanvasEditor/LayoutContainer.d.ts +17 -0
  152. package/dist/views/CanvasEditor/LayoutContainer.d.ts.map +1 -0
  153. package/dist/views/CanvasEditor/LayoutContainer.js +222 -0
  154. package/dist/views/CanvasEditor/SaveConfirmationModal.d.ts +13 -0
  155. package/dist/views/CanvasEditor/SaveConfirmationModal.d.ts.map +1 -0
  156. package/dist/views/CanvasEditor/SaveConfirmationModal.js +78 -0
  157. package/dist/views/CanvasEditor/components/CustomBlockItem.d.ts +14 -0
  158. package/dist/views/CanvasEditor/components/CustomBlockItem.d.ts.map +1 -0
  159. package/dist/views/CanvasEditor/components/CustomBlockItem.js +44 -0
  160. package/dist/views/CanvasEditor/components/EditorCanvas.d.ts +29 -0
  161. package/dist/views/CanvasEditor/components/EditorCanvas.d.ts.map +1 -0
  162. package/dist/views/CanvasEditor/components/EditorCanvas.js +32 -0
  163. package/dist/views/CanvasEditor/components/EditorLibrary.d.ts +7 -0
  164. package/dist/views/CanvasEditor/components/EditorLibrary.d.ts.map +1 -0
  165. package/dist/views/CanvasEditor/components/EditorLibrary.js +25 -0
  166. package/dist/views/CanvasEditor/components/EditorSidebar.d.ts +13 -0
  167. package/dist/views/CanvasEditor/components/EditorSidebar.d.ts.map +1 -0
  168. package/dist/views/CanvasEditor/components/EditorSidebar.js +19 -0
  169. package/dist/views/CanvasEditor/components/ErrorBanner.d.ts +6 -0
  170. package/dist/views/CanvasEditor/components/ErrorBanner.d.ts.map +1 -0
  171. package/dist/views/CanvasEditor/components/ErrorBanner.js +8 -0
  172. package/dist/views/CanvasEditor/components/FeaturedMediaSection.d.ts +25 -0
  173. package/dist/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +1 -0
  174. package/dist/views/CanvasEditor/components/FeaturedMediaSection.js +199 -0
  175. package/dist/views/CanvasEditor/components/LibraryItem.d.ts +14 -0
  176. package/dist/views/CanvasEditor/components/LibraryItem.d.ts.map +1 -0
  177. package/dist/views/CanvasEditor/components/LibraryItem.js +43 -0
  178. package/dist/views/CanvasEditor/components/PrivacySettingsSection.d.ts +15 -0
  179. package/dist/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +1 -0
  180. package/dist/views/CanvasEditor/components/PrivacySettingsSection.js +70 -0
  181. package/dist/views/CanvasEditor/components/index.d.ts +21 -0
  182. package/dist/views/CanvasEditor/components/index.d.ts.map +1 -0
  183. package/dist/views/CanvasEditor/components/index.js +12 -0
  184. package/dist/views/CanvasEditor/hooks/index.d.ts +10 -0
  185. package/dist/views/CanvasEditor/hooks/index.d.ts.map +1 -0
  186. package/dist/views/CanvasEditor/hooks/index.js +9 -0
  187. package/dist/views/CanvasEditor/hooks/useHeroBlock.d.ts +8 -0
  188. package/dist/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +1 -0
  189. package/dist/views/CanvasEditor/hooks/useHeroBlock.js +90 -0
  190. package/dist/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts +3 -0
  191. package/dist/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  192. package/dist/views/CanvasEditor/hooks/useKeyboardShortcuts.js +119 -0
  193. package/dist/views/CanvasEditor/hooks/usePostLoader.d.ts +5 -0
  194. package/dist/views/CanvasEditor/hooks/usePostLoader.d.ts.map +1 -0
  195. package/dist/views/CanvasEditor/hooks/usePostLoader.js +32 -0
  196. package/dist/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts +2 -0
  197. package/dist/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts.map +1 -0
  198. package/dist/views/CanvasEditor/hooks/useRegisteredBlocks.js +47 -0
  199. package/dist/views/CanvasEditor/hooks/useUnsavedChanges.d.ts +25 -0
  200. package/dist/views/CanvasEditor/hooks/useUnsavedChanges.d.ts.map +1 -0
  201. package/dist/views/CanvasEditor/hooks/useUnsavedChanges.js +285 -0
  202. package/dist/views/CanvasEditor/index.d.ts +16 -0
  203. package/dist/views/CanvasEditor/index.d.ts.map +1 -0
  204. package/dist/views/CanvasEditor/index.js +9 -0
  205. package/dist/views/PostManager/EmptyState.d.ts +10 -0
  206. package/dist/views/PostManager/EmptyState.d.ts.map +1 -0
  207. package/dist/views/PostManager/EmptyState.js +12 -0
  208. package/dist/views/PostManager/PostActionsMenu.d.ts +12 -0
  209. package/dist/views/PostManager/PostActionsMenu.d.ts.map +1 -0
  210. package/dist/views/PostManager/PostActionsMenu.js +58 -0
  211. package/dist/views/PostManager/PostCards.d.ts +15 -0
  212. package/dist/views/PostManager/PostCards.d.ts.map +1 -0
  213. package/dist/views/PostManager/PostCards.js +77 -0
  214. package/dist/views/PostManager/PostFilters.d.ts +16 -0
  215. package/dist/views/PostManager/PostFilters.d.ts.map +1 -0
  216. package/dist/views/PostManager/PostFilters.js +10 -0
  217. package/dist/views/PostManager/PostManagerView.d.ts +11 -0
  218. package/dist/views/PostManager/PostManagerView.d.ts.map +1 -0
  219. package/dist/views/PostManager/PostManagerView.js +179 -0
  220. package/dist/views/PostManager/PostStats.d.ts +11 -0
  221. package/dist/views/PostManager/PostStats.d.ts.map +1 -0
  222. package/dist/views/PostManager/PostStats.js +46 -0
  223. package/dist/views/PostManager/PostTable.d.ts +15 -0
  224. package/dist/views/PostManager/PostTable.d.ts.map +1 -0
  225. package/dist/views/PostManager/PostTable.js +77 -0
  226. package/dist/views/PostManager/index.d.ts +12 -0
  227. package/dist/views/PostManager/index.d.ts.map +1 -0
  228. package/dist/views/PostManager/index.js +11 -0
  229. package/dist/views/Preview/PreviewBridgeView.d.ts +12 -0
  230. package/dist/views/Preview/PreviewBridgeView.d.ts.map +1 -0
  231. package/dist/views/Preview/PreviewBridgeView.js +11 -0
  232. package/dist/views/Preview/index.d.ts +6 -0
  233. package/dist/views/Preview/index.d.ts.map +1 -0
  234. package/dist/views/Preview/index.js +4 -0
  235. package/dist/views/Settings/SettingsView.d.ts +10 -0
  236. package/dist/views/Settings/SettingsView.d.ts.map +1 -0
  237. package/dist/views/Settings/SettingsView.js +113 -0
  238. package/dist/views/Settings/index.d.ts +6 -0
  239. package/dist/views/Settings/index.d.ts.map +1 -0
  240. package/dist/views/Settings/index.js +4 -0
  241. package/dist/views/SlugSEO/SlugSEOManagerView.d.ts +12 -0
  242. package/dist/views/SlugSEO/SlugSEOManagerView.d.ts.map +1 -0
  243. package/dist/views/SlugSEO/SlugSEOManagerView.js +11 -0
  244. package/dist/views/SlugSEO/index.d.ts +6 -0
  245. package/dist/views/SlugSEO/index.d.ts.map +1 -0
  246. package/dist/views/SlugSEO/index.js +4 -0
  247. package/package.json +4 -4
  248. package/src/hooks/index.d.ts +8 -0
  249. package/src/hooks/index.d.ts.map +1 -0
  250. package/src/hooks/index.js +7 -0
  251. package/src/hooks/useBlog.d.ts +31 -0
  252. package/src/hooks/useBlog.d.ts.map +1 -0
  253. package/src/hooks/useBlog.js +57 -0
  254. package/src/hooks/useBlogs.d.ts +39 -0
  255. package/src/hooks/useBlogs.d.ts.map +1 -0
  256. package/src/hooks/useBlogs.js +82 -0
  257. package/src/hooks/useCategories.d.ts +9 -0
  258. package/src/hooks/useCategories.d.ts.map +1 -0
  259. package/src/hooks/useCategories.js +70 -0
  260. package/src/index.d.ts +55 -0
  261. package/src/index.d.ts.map +1 -0
  262. package/src/index.js +228 -0
  263. package/src/init.d.ts +40 -0
  264. package/src/init.d.ts.map +1 -0
  265. package/src/init.js +41 -0
  266. package/src/lib/blocks/BlockRenderer.d.ts +54 -0
  267. package/src/lib/blocks/BlockRenderer.d.ts.map +1 -0
  268. package/src/lib/blocks/BlockRenderer.js +54 -0
  269. package/src/lib/config-storage.d.ts +30 -0
  270. package/src/lib/config-storage.d.ts.map +1 -0
  271. package/src/lib/config-storage.js +31 -0
  272. package/src/lib/layouts/blocks/ColumnsBlock.d.ts +25 -0
  273. package/src/lib/layouts/blocks/ColumnsBlock.d.ts.map +1 -0
  274. package/src/lib/layouts/blocks/ColumnsBlock.js +182 -0
  275. package/src/lib/layouts/blocks/SectionBlock.d.ts +25 -0
  276. package/src/lib/layouts/blocks/SectionBlock.d.ts.map +1 -0
  277. package/src/lib/layouts/blocks/SectionBlock.js +44 -0
  278. package/src/lib/layouts/index.d.ts +23 -0
  279. package/src/lib/layouts/index.d.ts.map +1 -0
  280. package/src/lib/layouts/index.js +45 -0
  281. package/src/lib/layouts/registerLayoutBlocks.d.ts +9 -0
  282. package/src/lib/layouts/registerLayoutBlocks.d.ts.map +1 -0
  283. package/src/lib/layouts/registerLayoutBlocks.js +60 -0
  284. package/src/lib/mappers/apiMapper.d.ts +66 -0
  285. package/src/lib/mappers/apiMapper.d.ts.map +1 -0
  286. package/src/lib/mappers/apiMapper.js +191 -0
  287. package/src/lib/rich-text/RichTextEditor.d.ts +45 -0
  288. package/src/lib/rich-text/RichTextEditor.d.ts.map +1 -0
  289. package/src/lib/rich-text/RichTextEditor.js +564 -0
  290. package/src/lib/rich-text/RichTextPreview.d.ts +16 -0
  291. package/src/lib/rich-text/RichTextPreview.d.ts.map +1 -0
  292. package/src/lib/rich-text/RichTextPreview.js +144 -0
  293. package/src/lib/rich-text/index.d.ts +9 -0
  294. package/src/lib/rich-text/index.d.ts.map +1 -0
  295. package/src/lib/rich-text/index.js +6 -0
  296. package/src/lib/utils/blockHelpers.d.ts +23 -0
  297. package/src/lib/utils/blockHelpers.d.ts.map +1 -0
  298. package/src/lib/utils/blockHelpers.js +65 -0
  299. package/src/lib/utils/configValidation.d.ts +23 -0
  300. package/src/lib/utils/configValidation.d.ts.map +1 -0
  301. package/src/lib/utils/configValidation.js +113 -0
  302. package/src/registry/BlockRegistry.d.ts +62 -0
  303. package/src/registry/BlockRegistry.d.ts.map +1 -0
  304. package/src/registry/BlockRegistry.js +112 -0
  305. package/src/registry/index.d.ts +6 -0
  306. package/src/registry/index.d.ts.map +1 -0
  307. package/src/registry/index.js +4 -0
  308. package/src/state/EditorContext.d.ts +45 -0
  309. package/src/state/EditorContext.d.ts.map +1 -0
  310. package/src/state/EditorContext.js +215 -0
  311. package/src/state/index.d.ts +7 -0
  312. package/src/state/index.d.ts.map +1 -0
  313. package/src/state/index.js +6 -0
  314. package/src/state/reducer.d.ts +11 -0
  315. package/src/state/reducer.d.ts.map +1 -0
  316. package/src/state/reducer.js +443 -0
  317. package/src/state/types.d.ts +162 -0
  318. package/src/state/types.d.ts.map +1 -0
  319. package/src/state/types.js +27 -0
  320. package/src/types/block.d.ts +221 -0
  321. package/src/types/block.d.ts.map +1 -0
  322. package/src/types/block.js +6 -0
  323. package/src/types/index.d.ts +8 -0
  324. package/src/types/index.d.ts.map +1 -0
  325. package/src/types/index.js +5 -0
  326. package/src/types/post.d.ts +136 -0
  327. package/src/types/post.d.ts.map +1 -0
  328. package/src/types/post.js +5 -0
  329. package/src/utils/client.d.ts +48 -0
  330. package/src/utils/client.d.ts.map +1 -0
  331. package/src/utils/client.js +77 -0
  332. package/src/views/CanvasEditor/BlockWrapper.d.ts +16 -0
  333. package/src/views/CanvasEditor/BlockWrapper.d.ts.map +1 -0
  334. package/src/views/CanvasEditor/BlockWrapper.js +276 -0
  335. package/src/views/CanvasEditor/CanvasEditorView.d.ts +14 -0
  336. package/src/views/CanvasEditor/CanvasEditorView.d.ts.map +1 -0
  337. package/src/views/CanvasEditor/CanvasEditorView.js +209 -0
  338. package/src/views/CanvasEditor/EditorBody.d.ts +22 -0
  339. package/src/views/CanvasEditor/EditorBody.d.ts.map +1 -0
  340. package/src/views/CanvasEditor/EditorBody.js +505 -0
  341. package/src/views/CanvasEditor/EditorHeader.d.ts +18 -0
  342. package/src/views/CanvasEditor/EditorHeader.d.ts.map +1 -0
  343. package/src/views/CanvasEditor/EditorHeader.js +101 -0
  344. package/src/views/CanvasEditor/LayoutContainer.d.ts +17 -0
  345. package/src/views/CanvasEditor/LayoutContainer.d.ts.map +1 -0
  346. package/src/views/CanvasEditor/LayoutContainer.js +222 -0
  347. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts +13 -0
  348. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts.map +1 -0
  349. package/src/views/CanvasEditor/SaveConfirmationModal.js +78 -0
  350. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts +14 -0
  351. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts.map +1 -0
  352. package/src/views/CanvasEditor/components/CustomBlockItem.js +44 -0
  353. package/src/views/CanvasEditor/components/EditorCanvas.d.ts +29 -0
  354. package/src/views/CanvasEditor/components/EditorCanvas.d.ts.map +1 -0
  355. package/src/views/CanvasEditor/components/EditorCanvas.js +32 -0
  356. package/src/views/CanvasEditor/components/EditorLibrary.d.ts +7 -0
  357. package/src/views/CanvasEditor/components/EditorLibrary.d.ts.map +1 -0
  358. package/src/views/CanvasEditor/components/EditorLibrary.js +25 -0
  359. package/src/views/CanvasEditor/components/EditorSidebar.d.ts +13 -0
  360. package/src/views/CanvasEditor/components/EditorSidebar.d.ts.map +1 -0
  361. package/src/views/CanvasEditor/components/EditorSidebar.js +20 -0
  362. package/src/views/CanvasEditor/components/ErrorBanner.d.ts +6 -0
  363. package/src/views/CanvasEditor/components/ErrorBanner.d.ts.map +1 -0
  364. package/src/views/CanvasEditor/components/ErrorBanner.js +8 -0
  365. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts +25 -0
  366. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +1 -0
  367. package/src/views/CanvasEditor/components/FeaturedMediaSection.js +182 -0
  368. package/src/views/CanvasEditor/components/LibraryItem.d.ts +14 -0
  369. package/src/views/CanvasEditor/components/LibraryItem.d.ts.map +1 -0
  370. package/src/views/CanvasEditor/components/LibraryItem.js +43 -0
  371. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts +15 -0
  372. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +1 -0
  373. package/src/views/CanvasEditor/components/PrivacySettingsSection.js +63 -0
  374. package/src/views/CanvasEditor/components/index.d.ts +21 -0
  375. package/src/views/CanvasEditor/components/index.d.ts.map +1 -0
  376. package/src/views/CanvasEditor/components/index.js +12 -0
  377. package/src/views/CanvasEditor/hooks/index.d.ts +10 -0
  378. package/src/views/CanvasEditor/hooks/index.d.ts.map +1 -0
  379. package/src/views/CanvasEditor/hooks/index.js +9 -0
  380. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts +8 -0
  381. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +1 -0
  382. package/src/views/CanvasEditor/hooks/useHeroBlock.js +79 -0
  383. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts +3 -0
  384. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  385. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.js +114 -0
  386. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts +5 -0
  387. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts.map +1 -0
  388. package/src/views/CanvasEditor/hooks/usePostLoader.js +32 -0
  389. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts +2 -0
  390. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts.map +1 -0
  391. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.js +47 -0
  392. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts +25 -0
  393. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts.map +1 -0
  394. package/src/views/CanvasEditor/hooks/useUnsavedChanges.js +285 -0
  395. package/src/views/CanvasEditor/index.d.ts +16 -0
  396. package/src/views/CanvasEditor/index.d.ts.map +1 -0
  397. package/src/views/CanvasEditor/index.js +9 -0
  398. package/src/views/PostManager/EmptyState.d.ts +10 -0
  399. package/src/views/PostManager/EmptyState.d.ts.map +1 -0
  400. package/src/views/PostManager/EmptyState.js +12 -0
  401. package/src/views/PostManager/PostActionsMenu.d.ts +12 -0
  402. package/src/views/PostManager/PostActionsMenu.d.ts.map +1 -0
  403. package/src/views/PostManager/PostActionsMenu.js +58 -0
  404. package/src/views/PostManager/PostCards.d.ts +15 -0
  405. package/src/views/PostManager/PostCards.d.ts.map +1 -0
  406. package/src/views/PostManager/PostCards.js +79 -0
  407. package/src/views/PostManager/PostFilters.d.ts +16 -0
  408. package/src/views/PostManager/PostFilters.d.ts.map +1 -0
  409. package/src/views/PostManager/PostFilters.js +10 -0
  410. package/src/views/PostManager/PostManagerView.d.ts +11 -0
  411. package/src/views/PostManager/PostManagerView.d.ts.map +1 -0
  412. package/src/views/PostManager/PostManagerView.js +174 -0
  413. package/src/views/PostManager/PostStats.d.ts +11 -0
  414. package/src/views/PostManager/PostStats.d.ts.map +1 -0
  415. package/src/views/PostManager/PostStats.js +46 -0
  416. package/src/views/PostManager/PostTable.d.ts +15 -0
  417. package/src/views/PostManager/PostTable.d.ts.map +1 -0
  418. package/src/views/PostManager/PostTable.js +79 -0
  419. package/src/views/PostManager/index.d.ts +12 -0
  420. package/src/views/PostManager/index.d.ts.map +1 -0
  421. package/src/views/PostManager/index.js +11 -0
  422. package/src/views/Preview/PreviewBridgeView.d.ts +12 -0
  423. package/src/views/Preview/PreviewBridgeView.d.ts.map +1 -0
  424. package/src/views/Preview/PreviewBridgeView.js +11 -0
  425. package/src/views/Preview/index.d.ts +6 -0
  426. package/src/views/Preview/index.d.ts.map +1 -0
  427. package/src/views/Preview/index.js +4 -0
  428. package/src/views/Settings/SettingsView.d.ts +10 -0
  429. package/src/views/Settings/SettingsView.d.ts.map +1 -0
  430. package/src/views/Settings/SettingsView.js +111 -0
  431. package/src/views/Settings/index.d.ts +6 -0
  432. package/src/views/Settings/index.d.ts.map +1 -0
  433. package/src/views/Settings/index.js +4 -0
  434. package/src/views/SlugSEO/SlugSEOManagerView.d.ts +12 -0
  435. package/src/views/SlugSEO/SlugSEOManagerView.d.ts.map +1 -0
  436. package/src/views/SlugSEO/SlugSEOManagerView.js +11 -0
  437. package/src/views/SlugSEO/index.d.ts +6 -0
  438. package/src/views/SlugSEO/index.d.ts.map +1 -0
  439. package/src/views/SlugSEO/index.js +4 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Blog API Route Handler
3
+ * Server-only wrapper for the blog API handlers
4
+ * This file should ONLY be used in Next.js API routes
5
+ *
6
+ * IMPORTANT: This file should ONLY be imported in server-side API routes.
7
+ * Do NOT import this in client-side code.
8
+ */
9
+ import { NextResponse } from 'next/server';
10
+ import { GET as handlerGET, POST as handlerPOST, GET_BY_SLUG, PUT_BY_SLUG, DELETE_BY_SLUG, } from './handler';
11
+ /**
12
+ * Default configuration factory
13
+ * Client apps should provide their own config with MongoDB connection and auth
14
+ */
15
+ export function createBlogApiConfig(config) {
16
+ return config;
17
+ }
18
+ /**
19
+ * GET handler - List all blogs or get by slug
20
+ * Usage:
21
+ * GET /api/blogs - List all
22
+ * GET /api/blogs/[slug] - Get by slug
23
+ */
24
+ export async function GET(req, context, config) {
25
+ if (!config) {
26
+ return NextResponse.json({ error: 'Blog API config not provided' }, { status: 500 });
27
+ }
28
+ // Check if we have a slug parameter (single blog request)
29
+ if (context?.params) {
30
+ const { slug } = await context.params;
31
+ if (slug) {
32
+ return GET_BY_SLUG(req, slug, config);
33
+ }
34
+ }
35
+ // Otherwise, list all blogs
36
+ return handlerGET(req, config);
37
+ }
38
+ /**
39
+ * POST handler - Create new blog
40
+ * Usage: POST /api/blogs
41
+ */
42
+ export async function POST(req, context, config) {
43
+ if (!config) {
44
+ return NextResponse.json({ error: 'Blog API config not provided' }, { status: 500 });
45
+ }
46
+ return handlerPOST(req, config);
47
+ }
48
+ /**
49
+ * PUT handler - Update blog by slug
50
+ * Usage: PUT /api/blogs/[slug]
51
+ */
52
+ export async function PUT(req, context, config) {
53
+ if (!config) {
54
+ return NextResponse.json({ error: 'Blog API config not provided' }, { status: 500 });
55
+ }
56
+ const { slug } = await context.params;
57
+ return PUT_BY_SLUG(req, slug, config);
58
+ }
59
+ /**
60
+ * DELETE handler - Delete blog by slug
61
+ * Usage: DELETE /api/blogs/[slug]
62
+ */
63
+ export async function DELETE(req, context, config) {
64
+ if (!config) {
65
+ return NextResponse.json({ error: 'Blog API config not provided' }, { status: 500 });
66
+ }
67
+ const { slug } = await context.params;
68
+ return DELETE_BY_SLUG(req, slug, config);
69
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Plugin Blog API Router
3
+ * Centralized API handler for all blog plugin routes
4
+ *
5
+ * This router handles requests to /api/plugin-blog/*
6
+ * and routes them to the appropriate handler
7
+ */
8
+ import { NextRequest, NextResponse } from 'next/server';
9
+ export interface BlogApiRouterConfig {
10
+ /** MongoDB client promise - should return { db: () => Database } */
11
+ getDb: () => Promise<{
12
+ db: () => any;
13
+ }>;
14
+ /** Function to get authenticated user ID from request */
15
+ getUserId: (req: NextRequest) => Promise<string | null>;
16
+ /** Collection name (default: 'blogs') */
17
+ collectionName?: string;
18
+ /** Site ID for multi-site setups */
19
+ siteId?: string;
20
+ }
21
+ /**
22
+ * Handle blog API requests
23
+ * Routes requests to appropriate handlers based on path
24
+ * Similar to plugin-dep, accepts config directly instead of requiring initialization
25
+ */
26
+ export declare function handleBlogApi(req: NextRequest, path: string[], config: BlogApiRouterConfig): Promise<NextResponse>;
27
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKxD,MAAM,WAAW,mBAAmB;IAChC,oEAAoE;IACpE,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,CAAA;KAAE,CAAC,CAAC;IACxC,yDAAyD;IACzD,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxD,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAC/B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA2FvB"}
@@ -0,0 +1,98 @@
1
+ 'use server';
2
+ /**
3
+ * Plugin Blog API Router
4
+ * Centralized API handler for all blog plugin routes
5
+ *
6
+ * This router handles requests to /api/plugin-blog/*
7
+ * and routes them to the appropriate handler
8
+ */
9
+ import { NextResponse } from 'next/server';
10
+ import { GET as BlogListHandler, POST as BlogCreateHandler } from './handler';
11
+ import { GET as BlogGetHandler, PUT as BlogUpdateHandler, DELETE as BlogDeleteHandler, createBlogApiConfig } from './route';
12
+ import { GET as ConfigGetHandler, POST as ConfigPostHandler } from './config-handler';
13
+ /**
14
+ * Handle blog API requests
15
+ * Routes requests to appropriate handlers based on path
16
+ * Similar to plugin-dep, accepts config directly instead of requiring initialization
17
+ */
18
+ export async function handleBlogApi(req, path, config) {
19
+ // Create the blog API config from the router config
20
+ const blogApiConfig = createBlogApiConfig({
21
+ getDb: config.getDb,
22
+ getUserId: config.getUserId,
23
+ collectionName: config.collectionName || 'blogs',
24
+ });
25
+ const method = req.method;
26
+ // Handle empty path array - means we're at /api/plugin-blog
27
+ // Ensure path is always an array
28
+ const safePath = Array.isArray(path) ? path : [];
29
+ const route = safePath.length > 0 ? safePath[0] : '';
30
+ try {
31
+ // Route: /api/plugin-blog (list/create) - empty path or 'list'
32
+ // This handles both /api/plugin-blog and /api/plugin-blog?limit=3
33
+ if (!route || route === 'list') {
34
+ if (method === 'GET') {
35
+ return await BlogListHandler(req, blogApiConfig);
36
+ }
37
+ if (method === 'POST') {
38
+ return await BlogCreateHandler(req, blogApiConfig);
39
+ }
40
+ // Method not allowed for root route
41
+ return NextResponse.json({ error: `Method ${method} not allowed for route: /` }, { status: 405 });
42
+ }
43
+ // Route: /api/plugin-blog/new (create new)
44
+ else if (route === 'new') {
45
+ if (method === 'POST') {
46
+ return await BlogCreateHandler(req, blogApiConfig);
47
+ }
48
+ }
49
+ // Route: /api/plugin-blog/categories (get categories)
50
+ else if (route === 'categories') {
51
+ if (method === 'GET') {
52
+ // Import categories handler
53
+ const categoriesModule = await import('./categories');
54
+ return await categoriesModule.GET(req, blogApiConfig);
55
+ }
56
+ }
57
+ // Route: /api/plugin-blog/check-title (check title duplicate)
58
+ else if (route === 'check-title') {
59
+ if (method === 'GET') {
60
+ const checkTitleModule = await import('./check-title');
61
+ return await checkTitleModule.GET(req, blogApiConfig);
62
+ }
63
+ }
64
+ // Route: /api/plugin-blog/config (get/save plugin config)
65
+ else if (route === 'config') {
66
+ const configApiConfig = {
67
+ getDb: config.getDb,
68
+ getUserId: config.getUserId,
69
+ siteId: config.siteId || 'default',
70
+ };
71
+ if (method === 'GET') {
72
+ return await ConfigGetHandler(req, configApiConfig);
73
+ }
74
+ if (method === 'POST') {
75
+ return await ConfigPostHandler(req, configApiConfig);
76
+ }
77
+ }
78
+ // Route: /api/plugin-blog/[slug] (get/update/delete by slug)
79
+ else {
80
+ const slug = route;
81
+ if (method === 'GET') {
82
+ return await BlogGetHandler(req, { params: Promise.resolve({ slug }) }, blogApiConfig);
83
+ }
84
+ if (method === 'PUT') {
85
+ return await BlogUpdateHandler(req, { params: Promise.resolve({ slug }) }, blogApiConfig);
86
+ }
87
+ if (method === 'DELETE') {
88
+ return await BlogDeleteHandler(req, { params: Promise.resolve({ slug }) }, blogApiConfig);
89
+ }
90
+ }
91
+ // Method not allowed
92
+ return NextResponse.json({ error: `Method ${method} not allowed for route: ${route || '/'}` }, { status: 405 });
93
+ }
94
+ catch (error) {
95
+ console.error('[BlogApiRouter] Error:', error);
96
+ return NextResponse.json({ error: error.message || 'Internal server error' }, { status: 500 });
97
+ }
98
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin Blog - Server-Only API Exports
3
+ * This file is only imported in server-side code (API routes)
4
+ *
5
+ * IMPORTANT: This file uses Node.js modules (fs, path, etc.) and should NEVER
6
+ * be imported in client-side code. Only use in server-side API routes.
7
+ */
8
+ export * from './api';
9
+ //# sourceMappingURL=api-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../src/api-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin Blog - Server-Only API Exports
3
+ * This file is only imported in server-side code (API routes)
4
+ *
5
+ * IMPORTANT: This file uses Node.js modules (fs, path, etc.) and should NEVER
6
+ * be imported in client-side code. Only use in server-side API routes.
7
+ */
8
+ // Re-export everything from the API index
9
+ export * from './api';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Plugin Blog Configuration
3
+ * Automatically creates required API routes in client apps
4
+ */
5
+ /**
6
+ * Automatically creates plugin-blog API catch-all route
7
+ * This route forwards requests to the plugin's API router
8
+ */
9
+ /**
10
+ * @deprecated Routes are now handled by the unified /api/[pluginId]/[...path]/route.ts
11
+ * This function is kept for backwards compatibility but does nothing
12
+ */
13
+ export declare function ensureBlogRoutes(): void;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH;;;GAGG;AACH,wBAAgB,gBAAgB,SAgJ/B"}
package/dist/config.js ADDED
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Plugin Blog Configuration
3
+ * Automatically creates required API routes in client apps
4
+ */
5
+ import { writeFileSync, mkdirSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ /**
8
+ * Automatically creates plugin-blog API catch-all route
9
+ * This route forwards requests to the plugin's API router
10
+ */
11
+ /**
12
+ * @deprecated Routes are now handled by the unified /api/[pluginId]/[...path]/route.ts
13
+ * This function is kept for backwards compatibility but does nothing
14
+ */
15
+ export function ensureBlogRoutes() {
16
+ // Routes are now handled by the unified /api/[pluginId]/[...path]/route.ts
17
+ // No need to generate individual routes anymore
18
+ return;
19
+ try {
20
+ // Find the host app directory (where next.config.ts is)
21
+ let appDir = process.cwd();
22
+ const possiblePaths = [
23
+ appDir,
24
+ join(appDir, '..'),
25
+ join(appDir, '..', '..'),
26
+ ];
27
+ for (const basePath of possiblePaths) {
28
+ const configPath = join(basePath, 'next.config.ts');
29
+ if (existsSync(configPath)) {
30
+ appDir = basePath;
31
+ break;
32
+ }
33
+ }
34
+ const apiDir = join(appDir, 'src', 'app', 'api');
35
+ const pluginBlogApiDir = join(apiDir, 'plugin-blog', '[...path]');
36
+ const pluginBlogApiPath = join(pluginBlogApiDir, 'route.ts');
37
+ // Check if route already exists
38
+ if (existsSync(pluginBlogApiPath)) {
39
+ const fs = require('fs');
40
+ const existingContent = fs.readFileSync(pluginBlogApiPath, 'utf8');
41
+ if (existingContent.includes('@jhits/plugin-blog') || existingContent.includes('plugin-blog')) {
42
+ // Already set up, skip
43
+ return;
44
+ }
45
+ }
46
+ // Create plugin-blog API catch-all route
47
+ mkdirSync(pluginBlogApiDir, { recursive: true });
48
+ writeFileSync(pluginBlogApiPath, `// Auto-generated by @jhits/plugin-blog - Blog Plugin API
49
+ // This route is automatically created for the blog plugin
50
+ import { NextRequest } from 'next/server';
51
+ import { handleBlogApi } from '@jhits/plugin-blog/api';
52
+ import { MongoClient } from 'mongodb';
53
+ import { cookies } from 'next/headers';
54
+ import jwt from 'jsonwebtoken';
55
+
56
+ const JWT_SECRET = process.env.JWT_SECRET || 'secret';
57
+ const MONGODB_URI = process.env.MONGODB_URI || process.env.MONGO_URI || '';
58
+
59
+ // MongoDB client singleton
60
+ let client: MongoClient | null = null;
61
+ let clientPromise: Promise<MongoClient>;
62
+
63
+ if (!MONGODB_URI) {
64
+ throw new Error('Please add MONGODB_URI to your .env.local file');
65
+ }
66
+
67
+ if (process.env.NODE_ENV === 'development') {
68
+ const globalWithMongo = global as typeof globalThis & {
69
+ _mongoClientPromise?: Promise<MongoClient>;
70
+ };
71
+
72
+ if (!globalWithMongo._mongoClientPromise) {
73
+ client = new MongoClient(MONGODB_URI);
74
+ globalWithMongo._mongoClientPromise = client.connect();
75
+ }
76
+ clientPromise = globalWithMongo._mongoClientPromise;
77
+ } else {
78
+ client = new MongoClient(MONGODB_URI);
79
+ clientPromise = client.connect();
80
+ }
81
+
82
+ async function getUserId(req: NextRequest): Promise<string | null> {
83
+ try {
84
+ const cookieStore = await cookies();
85
+ const token = cookieStore.get('auth_token')?.value;
86
+ if (!token) return null;
87
+ const decoded = jwt.verify(token, JWT_SECRET) as { id: string };
88
+ return decoded.id;
89
+ } catch {
90
+ return null;
91
+ }
92
+ }
93
+
94
+ // Get the API config
95
+ function getBlogApiConfig() {
96
+ return {
97
+ getDb: async () => {
98
+ const client = await clientPromise;
99
+ return { db: () => client.db() };
100
+ },
101
+ getUserId,
102
+ collectionName: 'blogs',
103
+ };
104
+ }
105
+
106
+ export async function GET(
107
+ req: NextRequest,
108
+ { params }: { params: Promise<{ path: string[] }> }
109
+ ) {
110
+ const { path } = await params;
111
+ const config = getBlogApiConfig();
112
+ return handleBlogApi(req, path, config);
113
+ }
114
+
115
+ export async function POST(
116
+ req: NextRequest,
117
+ { params }: { params: Promise<{ path: string[] }> }
118
+ ) {
119
+ const { path } = await params;
120
+ const config = getBlogApiConfig();
121
+ return handleBlogApi(req, path, config);
122
+ }
123
+
124
+ export async function PUT(
125
+ req: NextRequest,
126
+ { params }: { params: Promise<{ path: string[] }> }
127
+ ) {
128
+ ensureInitialized();
129
+ const { path } = await params;
130
+ return handleBlogApi(req, path);
131
+ }
132
+
133
+ export async function DELETE(
134
+ req: NextRequest,
135
+ { params }: { params: Promise<{ path: string[] }> }
136
+ ) {
137
+ ensureInitialized();
138
+ const { path } = await params;
139
+ return handleBlogApi(req, path);
140
+ }
141
+
142
+ export async function PATCH(
143
+ req: NextRequest,
144
+ { params }: { params: Promise<{ path: string[] }> }
145
+ ) {
146
+ ensureInitialized();
147
+ const { path } = await params;
148
+ return handleBlogApi(req, path);
149
+ }
150
+ `);
151
+ }
152
+ catch (error) {
153
+ // Ignore errors - route might already exist or app structure is different
154
+ console.warn('[plugin-blog] Could not ensure blog routes:', error);
155
+ }
156
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Blog Hooks
3
+ * React hooks for fetching blog data in client applications
4
+ */
5
+ export { useBlogs, type UseBlogsOptions, type UseBlogsResult } from './useBlogs';
6
+ export { useBlog, type UseBlogOptions, type UseBlogResult } from './useBlog';
7
+ export { useCategories } from './useCategories';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Blog Hooks
3
+ * React hooks for fetching blog data in client applications
4
+ */
5
+ export { useBlogs } from './useBlogs';
6
+ export { useBlog } from './useBlog';
7
+ export { useCategories } from './useCategories';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * useBlog Hook
3
+ * React hook for fetching a single blog post by slug
4
+ */
5
+ import { BlogPost } from '../types/post';
6
+ export interface UseBlogOptions {
7
+ /** Blog post slug */
8
+ slug: string;
9
+ /** API base URL (default: '/api/blogs') */
10
+ apiBaseUrl?: string;
11
+ }
12
+ export interface UseBlogResult {
13
+ /** Blog post data */
14
+ blog: BlogPost | null;
15
+ /** Whether data is currently loading */
16
+ loading: boolean;
17
+ /** Error message if fetch failed */
18
+ error: string | null;
19
+ /** Function to refetch the blog post */
20
+ refetch: () => Promise<void>;
21
+ }
22
+ /**
23
+ * React hook to fetch a single blog post by slug
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const { blog, loading, error } = useBlog({ slug: 'my-blog-post' });
28
+ * ```
29
+ */
30
+ export declare function useBlog(options: UseBlogOptions): UseBlogResult;
31
+ //# sourceMappingURL=useBlog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlog.d.ts","sourceRoot":"","sources":["../../src/hooks/useBlog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC3B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC1B,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAgD9D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * useBlog Hook
3
+ * React hook for fetching a single blog post by slug
4
+ */
5
+ import { useState, useEffect } from 'react';
6
+ import { apiToBlogPost } from '../lib/mappers/apiMapper';
7
+ /**
8
+ * React hook to fetch a single blog post by slug
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { blog, loading, error } = useBlog({ slug: 'my-blog-post' });
13
+ * ```
14
+ */
15
+ export function useBlog(options) {
16
+ const { slug, apiBaseUrl = '/api/plugin-blog' } = options;
17
+ const [blog, setBlog] = useState(null);
18
+ const [loading, setLoading] = useState(true);
19
+ const [error, setError] = useState(null);
20
+ const fetchBlog = async () => {
21
+ if (!slug) {
22
+ setLoading(false);
23
+ return;
24
+ }
25
+ try {
26
+ setLoading(true);
27
+ setError(null);
28
+ const response = await fetch(`${apiBaseUrl}/${slug}`);
29
+ if (!response.ok) {
30
+ if (response.status === 404) {
31
+ throw new Error('Blog post not found');
32
+ }
33
+ throw new Error(`Failed to fetch blog: ${response.status}`);
34
+ }
35
+ const apiDoc = await response.json();
36
+ const blogPost = apiToBlogPost(apiDoc);
37
+ setBlog(blogPost);
38
+ }
39
+ catch (err) {
40
+ console.error('[useBlog] Error fetching blog:', err);
41
+ setError(err.message || 'Failed to fetch blog');
42
+ setBlog(null);
43
+ }
44
+ finally {
45
+ setLoading(false);
46
+ }
47
+ };
48
+ useEffect(() => {
49
+ fetchBlog();
50
+ }, [slug, apiBaseUrl]);
51
+ return {
52
+ blog,
53
+ loading,
54
+ error,
55
+ refetch: fetchBlog,
56
+ };
57
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * useBlogs Hook
3
+ * React hook for fetching blog posts in client applications
4
+ */
5
+ import { PostListItem } from '../types/post';
6
+ export interface UseBlogsOptions {
7
+ /** Maximum number of posts to fetch (default: 10) */
8
+ limit?: number;
9
+ /** Number of posts to skip (default: 0) */
10
+ skip?: number;
11
+ /** Filter by status (published, draft, concept) */
12
+ status?: string;
13
+ /** Whether to fetch all posts for admin (includes drafts) */
14
+ admin?: boolean;
15
+ /** API base URL (default: '/api/blogs') */
16
+ apiBaseUrl?: string;
17
+ }
18
+ export interface UseBlogsResult {
19
+ /** Array of blog posts */
20
+ blogs: PostListItem[];
21
+ /** Whether data is currently loading */
22
+ loading: boolean;
23
+ /** Error message if fetch failed */
24
+ error: string | null;
25
+ /** Total number of posts available */
26
+ total: number;
27
+ /** Function to refetch blogs */
28
+ refetch: () => Promise<void>;
29
+ }
30
+ /**
31
+ * React hook to fetch blog posts
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * const { blogs, loading, error } = useBlogs({ limit: 5 });
36
+ * ```
37
+ */
38
+ export declare function useBlogs(options?: UseBlogsOptions): UseBlogsResult;
39
+ //# sourceMappingURL=useBlogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlogs.d.ts","sourceRoot":"","sources":["../../src/hooks/useBlogs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC5B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CA8EtE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * useBlogs Hook
3
+ * React hook for fetching blog posts in client applications
4
+ */
5
+ import { useState, useEffect } from 'react';
6
+ import { apiToBlogPost } from '../lib/mappers/apiMapper';
7
+ /**
8
+ * React hook to fetch blog posts
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { blogs, loading, error } = useBlogs({ limit: 5 });
13
+ * ```
14
+ */
15
+ export function useBlogs(options = {}) {
16
+ const { limit = 10, skip = 0, status, admin = false, apiBaseUrl = '/api/plugin-blog', } = options;
17
+ const [blogs, setBlogs] = useState([]);
18
+ const [loading, setLoading] = useState(true);
19
+ const [error, setError] = useState(null);
20
+ const [total, setTotal] = useState(0);
21
+ const fetchBlogs = async () => {
22
+ try {
23
+ setLoading(true);
24
+ setError(null);
25
+ const params = new URLSearchParams();
26
+ if (limit)
27
+ params.set('limit', limit.toString());
28
+ if (skip)
29
+ params.set('skip', skip.toString());
30
+ if (status)
31
+ params.set('status', status);
32
+ if (admin)
33
+ params.set('admin', 'true');
34
+ const url = `${apiBaseUrl}?${params.toString()}`;
35
+ const response = await fetch(url);
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to fetch blogs: ${response.status}`);
38
+ }
39
+ const data = await response.json();
40
+ // Handle error response
41
+ if (data.error) {
42
+ throw new Error(data.error || 'Failed to fetch blogs');
43
+ }
44
+ // Convert API format to PostListItem format
45
+ const blogsArray = Array.isArray(data.blogs) ? data.blogs : [];
46
+ const convertedBlogs = blogsArray.map((apiDoc) => {
47
+ const blogPost = apiToBlogPost(apiDoc);
48
+ return {
49
+ id: blogPost.id,
50
+ title: blogPost.title,
51
+ slug: blogPost.slug,
52
+ excerpt: blogPost.metadata.excerpt || '',
53
+ status: blogPost.publication.status,
54
+ authorId: blogPost.publication.authorId || '',
55
+ updatedAt: blogPost.updatedAt,
56
+ featuredImage: blogPost.metadata.featuredImage,
57
+ };
58
+ });
59
+ setBlogs(convertedBlogs);
60
+ setTotal(data.total || convertedBlogs.length);
61
+ }
62
+ catch (err) {
63
+ console.error('[useBlogs] Error fetching blogs:', err);
64
+ setError(err.message || 'Failed to fetch blogs');
65
+ setBlogs([]);
66
+ setTotal(0);
67
+ }
68
+ finally {
69
+ setLoading(false);
70
+ }
71
+ };
72
+ useEffect(() => {
73
+ fetchBlogs();
74
+ }, [limit, skip, status, admin, apiBaseUrl]);
75
+ return {
76
+ blogs,
77
+ loading,
78
+ error,
79
+ total,
80
+ refetch: fetchBlogs,
81
+ };
82
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hook to fetch categories from existing blog posts
3
+ * Extracts categories from Hero blocks in all posts
4
+ */
5
+ export declare function useCategories(): {
6
+ categories: string[];
7
+ loading: boolean;
8
+ };
9
+ //# sourceMappingURL=useCategories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCategories.d.ts","sourceRoot":"","sources":["../../src/hooks/useCategories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,aAAa;;;EAkE5B"}