@btst/stack 2.6.2 → 2.8.0

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 (309) hide show
  1. package/README.md +1 -0
  2. package/dist/api/index.d.cts +2 -2
  3. package/dist/api/index.d.mts +2 -2
  4. package/dist/api/index.d.ts +2 -2
  5. package/dist/client/index.d.cts +2 -2
  6. package/dist/client/index.d.mts +2 -2
  7. package/dist/client/index.d.ts +2 -2
  8. package/dist/components/auto-form/index.d.cts +2 -2
  9. package/dist/components/auto-form/index.d.mts +2 -2
  10. package/dist/components/auto-form/index.d.ts +2 -2
  11. package/dist/components/form-builder/index.d.cts +1 -1
  12. package/dist/components/form-builder/index.d.mts +1 -1
  13. package/dist/components/form-builder/index.d.ts +1 -1
  14. package/dist/components/stepped-auto-form/index.d.cts +1 -1
  15. package/dist/components/stepped-auto-form/index.d.mts +1 -1
  16. package/dist/components/stepped-auto-form/index.d.ts +1 -1
  17. package/dist/index.d.cts +1 -1
  18. package/dist/index.d.mts +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/packages/stack/src/plugins/blog/client/components/loading/post-navigation-skeleton.cjs +13 -0
  21. package/dist/packages/stack/src/plugins/blog/client/components/loading/post-navigation-skeleton.mjs +11 -0
  22. package/dist/packages/stack/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.cjs +17 -0
  23. package/dist/packages/stack/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.mjs +15 -0
  24. package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.cjs +18 -7
  25. package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.mjs +18 -7
  26. package/dist/packages/stack/src/plugins/blog/client/components/shared/post-navigation.cjs +48 -52
  27. package/dist/packages/stack/src/plugins/blog/client/components/shared/post-navigation.mjs +49 -53
  28. package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.cjs +34 -37
  29. package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.mjs +35 -38
  30. package/dist/packages/stack/src/plugins/blog/client/hooks/blog-hooks.cjs +4 -21
  31. package/dist/packages/stack/src/plugins/blog/client/hooks/blog-hooks.mjs +4 -21
  32. package/dist/packages/stack/src/plugins/comments/api/getters.cjs +284 -0
  33. package/dist/packages/stack/src/plugins/comments/api/getters.mjs +280 -0
  34. package/dist/packages/stack/src/plugins/comments/api/mutations.cjs +118 -0
  35. package/dist/packages/stack/src/plugins/comments/api/mutations.mjs +112 -0
  36. package/dist/packages/stack/src/plugins/comments/api/plugin.cjs +335 -0
  37. package/dist/packages/stack/src/plugins/comments/api/plugin.mjs +333 -0
  38. package/dist/packages/stack/src/plugins/comments/api/query-key-defs.cjs +60 -0
  39. package/dist/packages/stack/src/plugins/comments/api/query-key-defs.mjs +55 -0
  40. package/dist/packages/stack/src/plugins/comments/api/serializers.cjs +23 -0
  41. package/dist/packages/stack/src/plugins/comments/api/serializers.mjs +21 -0
  42. package/dist/packages/stack/src/plugins/comments/client/components/comment-count.cjs +46 -0
  43. package/dist/packages/stack/src/plugins/comments/client/components/comment-count.mjs +44 -0
  44. package/dist/packages/stack/src/plugins/comments/client/components/comment-form.cjs +86 -0
  45. package/dist/packages/stack/src/plugins/comments/client/components/comment-form.mjs +84 -0
  46. package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.cjs +540 -0
  47. package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.mjs +538 -0
  48. package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.cjs +64 -0
  49. package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.cjs +426 -0
  50. package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.mjs +424 -0
  51. package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.mjs +62 -0
  52. package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.cjs +66 -0
  53. package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.cjs +256 -0
  54. package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.mjs +254 -0
  55. package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.mjs +64 -0
  56. package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.cjs +86 -0
  57. package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.cjs +191 -0
  58. package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.mjs +189 -0
  59. package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.mjs +84 -0
  60. package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.cjs +27 -0
  61. package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.mjs +25 -0
  62. package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.cjs +37 -0
  63. package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.mjs +35 -0
  64. package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.cjs +476 -0
  65. package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.mjs +464 -0
  66. package/dist/packages/stack/src/plugins/comments/client/localization/comments-moderation.cjs +67 -0
  67. package/dist/packages/stack/src/plugins/comments/client/localization/comments-moderation.mjs +65 -0
  68. package/dist/packages/stack/src/plugins/comments/client/localization/comments-my.cjs +27 -0
  69. package/dist/packages/stack/src/plugins/comments/client/localization/comments-my.mjs +25 -0
  70. package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.cjs +30 -0
  71. package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.mjs +28 -0
  72. package/dist/packages/stack/src/plugins/comments/client/localization/index.cjs +13 -0
  73. package/dist/packages/stack/src/plugins/comments/client/localization/index.mjs +11 -0
  74. package/dist/packages/stack/src/plugins/comments/client/plugin.cjs +116 -0
  75. package/dist/packages/stack/src/plugins/comments/client/plugin.mjs +114 -0
  76. package/dist/packages/stack/src/plugins/comments/client/utils.cjs +41 -0
  77. package/dist/packages/stack/src/plugins/comments/client/utils.mjs +37 -0
  78. package/dist/packages/stack/src/plugins/comments/db.cjs +75 -0
  79. package/dist/packages/stack/src/plugins/comments/db.mjs +73 -0
  80. package/dist/packages/stack/src/plugins/comments/schemas.cjs +45 -0
  81. package/dist/packages/stack/src/plugins/comments/schemas.mjs +38 -0
  82. package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +5 -4
  83. package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +5 -4
  84. package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.cjs +0 -1
  85. package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.mjs +0 -1
  86. package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.cjs +39 -22
  87. package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.mjs +40 -23
  88. package/dist/packages/ui/src/components/avatar.mjs +1 -1
  89. package/dist/packages/ui/src/components/pagination-controls.cjs +64 -0
  90. package/dist/packages/ui/src/components/pagination-controls.mjs +62 -0
  91. package/dist/packages/ui/src/components/when-visible.cjs +39 -0
  92. package/dist/packages/ui/src/components/when-visible.mjs +37 -0
  93. package/dist/plugins/ai-chat/api/index.d.cts +4 -6
  94. package/dist/plugins/ai-chat/api/index.d.mts +4 -6
  95. package/dist/plugins/ai-chat/api/index.d.ts +4 -6
  96. package/dist/plugins/ai-chat/client/hooks/index.d.cts +1 -3
  97. package/dist/plugins/ai-chat/client/hooks/index.d.mts +1 -3
  98. package/dist/plugins/ai-chat/client/hooks/index.d.ts +1 -3
  99. package/dist/plugins/ai-chat/query-keys.d.cts +1 -3
  100. package/dist/plugins/ai-chat/query-keys.d.mts +1 -3
  101. package/dist/plugins/ai-chat/query-keys.d.ts +1 -3
  102. package/dist/plugins/api/index.d.cts +3 -3
  103. package/dist/plugins/api/index.d.mts +3 -3
  104. package/dist/plugins/api/index.d.ts +3 -3
  105. package/dist/plugins/blog/api/index.d.cts +3 -3
  106. package/dist/plugins/blog/api/index.d.mts +3 -3
  107. package/dist/plugins/blog/api/index.d.ts +3 -3
  108. package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
  109. package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
  110. package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
  111. package/dist/plugins/blog/client/index.d.cts +25 -3
  112. package/dist/plugins/blog/client/index.d.mts +25 -3
  113. package/dist/plugins/blog/client/index.d.ts +25 -3
  114. package/dist/plugins/blog/query-keys.d.cts +3 -3
  115. package/dist/plugins/blog/query-keys.d.mts +3 -3
  116. package/dist/plugins/blog/query-keys.d.ts +3 -3
  117. package/dist/plugins/client/index.d.cts +2 -2
  118. package/dist/plugins/client/index.d.mts +2 -2
  119. package/dist/plugins/client/index.d.ts +2 -2
  120. package/dist/plugins/cms/api/index.d.cts +1 -1
  121. package/dist/plugins/cms/api/index.d.mts +1 -1
  122. package/dist/plugins/cms/api/index.d.ts +1 -1
  123. package/dist/plugins/cms/client/index.d.cts +1 -1
  124. package/dist/plugins/cms/client/index.d.mts +1 -1
  125. package/dist/plugins/cms/client/index.d.ts +1 -1
  126. package/dist/plugins/cms/query-keys.d.cts +1 -1
  127. package/dist/plugins/cms/query-keys.d.mts +1 -1
  128. package/dist/plugins/cms/query-keys.d.ts +1 -1
  129. package/dist/plugins/comments/api/index.cjs +21 -0
  130. package/dist/plugins/comments/api/index.d.cts +126 -0
  131. package/dist/plugins/comments/api/index.d.mts +126 -0
  132. package/dist/plugins/comments/api/index.d.ts +126 -0
  133. package/dist/plugins/comments/api/index.mjs +5 -0
  134. package/dist/plugins/comments/client/components/index.cjs +15 -0
  135. package/dist/plugins/comments/client/components/index.d.cts +125 -0
  136. package/dist/plugins/comments/client/components/index.d.mts +125 -0
  137. package/dist/plugins/comments/client/components/index.d.ts +125 -0
  138. package/dist/plugins/comments/client/components/index.mjs +5 -0
  139. package/dist/plugins/comments/client/hooks/index.cjs +17 -0
  140. package/dist/plugins/comments/client/hooks/index.d.cts +200 -0
  141. package/dist/plugins/comments/client/hooks/index.d.mts +200 -0
  142. package/dist/plugins/comments/client/hooks/index.d.ts +200 -0
  143. package/dist/plugins/comments/client/hooks/index.mjs +1 -0
  144. package/dist/plugins/comments/client/index.cjs +9 -0
  145. package/dist/plugins/comments/client/index.d.cts +262 -0
  146. package/dist/plugins/comments/client/index.d.mts +262 -0
  147. package/dist/plugins/comments/client/index.d.ts +262 -0
  148. package/dist/plugins/comments/client/index.mjs +2 -0
  149. package/dist/plugins/comments/client.css +2 -0
  150. package/dist/plugins/comments/query-keys.cjs +113 -0
  151. package/dist/plugins/comments/query-keys.d.cts +71 -0
  152. package/dist/plugins/comments/query-keys.d.mts +71 -0
  153. package/dist/plugins/comments/query-keys.d.ts +71 -0
  154. package/dist/plugins/comments/query-keys.mjs +111 -0
  155. package/dist/plugins/comments/style.css +15 -0
  156. package/dist/plugins/form-builder/api/index.d.cts +2 -2
  157. package/dist/plugins/form-builder/api/index.d.mts +2 -2
  158. package/dist/plugins/form-builder/api/index.d.ts +2 -2
  159. package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
  160. package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
  161. package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
  162. package/dist/plugins/form-builder/client/index.d.cts +1 -1
  163. package/dist/plugins/form-builder/client/index.d.mts +1 -1
  164. package/dist/plugins/form-builder/client/index.d.ts +1 -1
  165. package/dist/plugins/form-builder/query-keys.d.cts +1 -1
  166. package/dist/plugins/form-builder/query-keys.d.mts +1 -1
  167. package/dist/plugins/form-builder/query-keys.d.ts +1 -1
  168. package/dist/plugins/kanban/api/index.d.cts +2 -2
  169. package/dist/plugins/kanban/api/index.d.mts +2 -2
  170. package/dist/plugins/kanban/api/index.d.ts +2 -2
  171. package/dist/plugins/kanban/client/hooks/index.d.cts +1 -1
  172. package/dist/plugins/kanban/client/hooks/index.d.mts +1 -1
  173. package/dist/plugins/kanban/client/hooks/index.d.ts +1 -1
  174. package/dist/plugins/kanban/client/index.d.cts +1 -1
  175. package/dist/plugins/kanban/client/index.d.mts +1 -1
  176. package/dist/plugins/kanban/client/index.d.ts +1 -1
  177. package/dist/plugins/kanban/query-keys.d.cts +2 -2
  178. package/dist/plugins/kanban/query-keys.d.mts +2 -2
  179. package/dist/plugins/kanban/query-keys.d.ts +2 -2
  180. package/dist/plugins/open-api/api/index.d.cts +3 -3
  181. package/dist/plugins/open-api/api/index.d.mts +3 -3
  182. package/dist/plugins/open-api/api/index.d.ts +3 -3
  183. package/dist/plugins/route-docs/client/index.d.cts +1 -1
  184. package/dist/plugins/route-docs/client/index.d.mts +1 -1
  185. package/dist/plugins/route-docs/client/index.d.ts +1 -1
  186. package/dist/plugins/ui-builder/client/components/index.d.cts +2 -2
  187. package/dist/plugins/ui-builder/client/components/index.d.mts +2 -2
  188. package/dist/plugins/ui-builder/client/components/index.d.ts +2 -2
  189. package/dist/plugins/ui-builder/client/hooks/index.d.cts +3 -3
  190. package/dist/plugins/ui-builder/client/hooks/index.d.mts +3 -3
  191. package/dist/plugins/ui-builder/client/hooks/index.d.ts +3 -3
  192. package/dist/plugins/ui-builder/client/index.d.cts +3 -3
  193. package/dist/plugins/ui-builder/client/index.d.mts +3 -3
  194. package/dist/plugins/ui-builder/client/index.d.ts +3 -3
  195. package/dist/plugins/ui-builder/index.d.cts +3 -3
  196. package/dist/plugins/ui-builder/index.d.mts +3 -3
  197. package/dist/plugins/ui-builder/index.d.ts +3 -3
  198. package/dist/shared/{stack.B1srlBud.d.mts → stack.BFoBvGML.d.mts} +1 -1
  199. package/dist/shared/{stack.DmpPDPxA.d.cts → stack.BOCvd9HK.d.cts} +1 -1
  200. package/dist/shared/{stack.n1_i1p2B.d.cts → stack.BOokfhZD.d.cts} +170 -110
  201. package/dist/shared/{stack.DXnclTG7.d.ts → stack.BSqJrCTM.d.cts} +120 -59
  202. package/dist/shared/{stack.B58oHdqm.d.mts → stack.BX7MHi0J.d.mts} +90 -45
  203. package/dist/shared/{stack.cfCkioTe.d.mts → stack.BXxrFL9R.d.ts} +120 -59
  204. package/dist/shared/{stack.CSx98K5H.d.cts → stack.BYN8wCV6.d.cts} +87 -58
  205. package/dist/shared/{stack.FVWf2JhZ.d.mts → stack.BgQrdSlo.d.mts} +60 -45
  206. package/dist/shared/{stack.BK9Z2dcL.d.ts → stack.BmMB0LNC.d.ts} +1 -1
  207. package/dist/shared/{stack.j75TpKh2.d.ts → stack.BvCR4-9H.d.ts} +170 -110
  208. package/dist/shared/{stack.FeaWkglm.d.ts → stack.BxFl46lB.d.cts} +24 -1
  209. package/dist/shared/stack.C-b3Sn8j.d.cts +142 -0
  210. package/dist/shared/stack.C-b3Sn8j.d.mts +142 -0
  211. package/dist/shared/stack.C-b3Sn8j.d.ts +142 -0
  212. package/dist/shared/{stack.CFECM0ew.d.cts → stack.C1nXGBr6.d.cts} +1 -1
  213. package/dist/shared/{stack.C9Mg2Q46.d.cts → stack.C9zoS1TN.d.cts} +90 -45
  214. package/dist/shared/stack.CJE9sAjV.d.ts +335 -0
  215. package/dist/shared/{stack.fdi94T4S.d.mts → stack.CPsYC2-Z.d.cts} +7 -7
  216. package/dist/shared/{stack.fdi94T4S.d.ts → stack.CPsYC2-Z.d.mts} +7 -7
  217. package/dist/shared/{stack.fdi94T4S.d.cts → stack.CPsYC2-Z.d.ts} +7 -7
  218. package/dist/shared/{stack.7n9Y_u7N.d.cts → stack.CQnwAN7x.d.cts} +6 -6
  219. package/dist/shared/{stack.7n9Y_u7N.d.mts → stack.CQnwAN7x.d.mts} +6 -6
  220. package/dist/shared/{stack.7n9Y_u7N.d.ts → stack.CQnwAN7x.d.ts} +6 -6
  221. package/dist/shared/{stack.CxaFNQCV.d.mts → stack.CWxAl9K3.d.mts} +170 -110
  222. package/dist/shared/{stack.D-b5zbPm.d.cts → stack.Cbsrl06u.d.cts} +60 -45
  223. package/dist/shared/stack.CmHRdhl8.d.cts +335 -0
  224. package/dist/shared/{stack.BgTmujxW.d.mts → stack.D88yU4FT.d.mts} +87 -58
  225. package/dist/shared/{stack.DVtk5CNw.d.mts → stack.DLPa6Gzm.d.mts} +1 -1
  226. package/dist/shared/{stack.BAT540yW.d.ts → stack.DOZ1EXjM.d.mts} +9 -15
  227. package/dist/shared/{stack.FeaWkglm.d.mts → stack.DRpeDS6X.d.ts} +24 -1
  228. package/dist/shared/{stack.B8vT-Yt4.d.mts → stack.DX-tQ93o.d.cts} +9 -15
  229. package/dist/shared/stack.Dcz6636A.d.mts +335 -0
  230. package/dist/shared/{stack.ASwEoINr.d.ts → stack.DxJ-tHLt.d.ts} +1 -1
  231. package/dist/shared/{stack.DaZM10cp.d.cts → stack.DzOhpIYM.d.mts} +120 -59
  232. package/dist/shared/{stack.CTDVxbrA.d.ts → stack.Fl2Kl_bt.d.ts} +60 -45
  233. package/dist/shared/{stack.FeaWkglm.d.cts → stack.Jb0kQDJC.d.mts} +24 -1
  234. package/dist/shared/stack.Ldfkr5b2.d.cts +112 -0
  235. package/dist/shared/stack.Ldfkr5b2.d.mts +112 -0
  236. package/dist/shared/stack.Ldfkr5b2.d.ts +112 -0
  237. package/dist/shared/{stack.CLQuVdwK.d.ts → stack.RuQ9JCLo.d.ts} +87 -58
  238. package/dist/shared/{stack.BwA7trxA.d.cts → stack.VF6FhyZw.d.ts} +9 -15
  239. package/dist/shared/{stack.sO33ZDhK.d.ts → stack.fQjVhw5a.d.ts} +90 -45
  240. package/package.json +70 -5
  241. package/src/__tests__/plugins.test.tsx +5 -1
  242. package/src/__tests__/stack-api.test.ts +1 -1
  243. package/src/plugins/ai-chat/__tests__/getters.test.ts +1 -1
  244. package/src/plugins/ai-chat/api/getters.ts +1 -1
  245. package/src/plugins/ai-chat/api/plugin.ts +1 -1
  246. package/src/plugins/api/index.ts +5 -1
  247. package/src/plugins/blog/__tests__/getters.test.ts +1 -1
  248. package/src/plugins/blog/api/getters.ts +1 -1
  249. package/src/plugins/blog/api/plugin.ts +1 -1
  250. package/src/plugins/blog/client/components/loading/post-navigation-skeleton.tsx +10 -0
  251. package/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.tsx +18 -0
  252. package/src/plugins/blog/client/components/pages/post-page.internal.tsx +23 -8
  253. package/src/plugins/blog/client/components/shared/post-navigation.tsx +0 -5
  254. package/src/plugins/blog/client/components/shared/recent-posts-carousel.tsx +1 -5
  255. package/src/plugins/blog/client/hooks/blog-hooks.tsx +8 -33
  256. package/src/plugins/blog/client/overrides.ts +26 -1
  257. package/src/plugins/cms/__tests__/getters.test.ts +1 -1
  258. package/src/plugins/cms/api/getters.ts +1 -1
  259. package/src/plugins/cms/api/mutations.ts +1 -1
  260. package/src/plugins/cms/api/plugin.ts +1 -1
  261. package/src/plugins/cms/client/components/shared/pagination.tsx +14 -42
  262. package/src/plugins/comments/api/getters.ts +444 -0
  263. package/src/plugins/comments/api/index.ts +21 -0
  264. package/src/plugins/comments/api/mutations.ts +206 -0
  265. package/src/plugins/comments/api/plugin.ts +628 -0
  266. package/src/plugins/comments/api/query-key-defs.ts +143 -0
  267. package/src/plugins/comments/api/serializers.ts +37 -0
  268. package/src/plugins/comments/client/components/comment-count.tsx +66 -0
  269. package/src/plugins/comments/client/components/comment-form.tsx +112 -0
  270. package/src/plugins/comments/client/components/comment-thread.tsx +799 -0
  271. package/src/plugins/comments/client/components/index.tsx +11 -0
  272. package/src/plugins/comments/client/components/pages/moderation-page.internal.tsx +550 -0
  273. package/src/plugins/comments/client/components/pages/moderation-page.tsx +70 -0
  274. package/src/plugins/comments/client/components/pages/my-comments-page.internal.tsx +367 -0
  275. package/src/plugins/comments/client/components/pages/my-comments-page.tsx +72 -0
  276. package/src/plugins/comments/client/components/pages/resource-comments-page.internal.tsx +225 -0
  277. package/src/plugins/comments/client/components/pages/resource-comments-page.tsx +97 -0
  278. package/src/plugins/comments/client/components/shared/page-wrapper.tsx +32 -0
  279. package/src/plugins/comments/client/components/shared/pagination.tsx +44 -0
  280. package/src/plugins/comments/client/hooks/index.tsx +13 -0
  281. package/src/plugins/comments/client/hooks/use-comments.tsx +717 -0
  282. package/src/plugins/comments/client/index.ts +14 -0
  283. package/src/plugins/comments/client/localization/comments-moderation.ts +75 -0
  284. package/src/plugins/comments/client/localization/comments-my.ts +32 -0
  285. package/src/plugins/comments/client/localization/comments-thread.ts +32 -0
  286. package/src/plugins/comments/client/localization/index.ts +11 -0
  287. package/src/plugins/comments/client/overrides.ts +164 -0
  288. package/src/plugins/comments/client/plugin.tsx +195 -0
  289. package/src/plugins/comments/client/utils.ts +67 -0
  290. package/src/plugins/comments/client.css +2 -0
  291. package/src/plugins/comments/db.ts +77 -0
  292. package/src/plugins/comments/query-keys.ts +189 -0
  293. package/src/plugins/comments/schemas.ts +72 -0
  294. package/src/plugins/comments/style.css +15 -0
  295. package/src/plugins/comments/types.ts +73 -0
  296. package/src/plugins/form-builder/__tests__/getters.test.ts +1 -1
  297. package/src/plugins/form-builder/api/getters.ts +1 -1
  298. package/src/plugins/form-builder/api/plugin.ts +1 -1
  299. package/src/plugins/kanban/__tests__/getters.test.ts +1 -1
  300. package/src/plugins/kanban/api/getters.ts +1 -1
  301. package/src/plugins/kanban/api/mutations.ts +1 -1
  302. package/src/plugins/kanban/api/plugin.ts +6 -5
  303. package/src/plugins/kanban/client/components/forms/task-form.tsx +0 -1
  304. package/src/plugins/kanban/client/components/pages/board-page.internal.tsx +46 -27
  305. package/src/plugins/kanban/client/overrides.ts +27 -1
  306. package/src/types.ts +5 -1
  307. package/dist/shared/{stack.BQmuNl5p.d.mts → stack.BWp0hcm9.d.cts} +3 -3
  308. package/dist/shared/{stack.BQmuNl5p.d.ts → stack.BWp0hcm9.d.mts} +3 -3
  309. package/dist/shared/{stack.BQmuNl5p.d.cts → stack.BWp0hcm9.d.ts} +3 -3
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.BwA7trxA.cjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.DX-tQ93o.cjs';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.cjs';
3
+ import '../../../../shared/stack.BWp0hcm9.cjs';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.B8vT-Yt4.mjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.DOZ1EXjM.mjs';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.mjs';
3
+ import '../../../../shared/stack.BWp0hcm9.mjs';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.BAT540yW.js';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.VF6FhyZw.js';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.js';
3
+ import '../../../../shared/stack.BWp0hcm9.js';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -1,9 +1,9 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
- import { ComponentType } from 'react';
3
+ import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.cjs';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.BwA7trxA.cjs';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.BWp0hcm9.cjs';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.DX-tQ93o.cjs';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -503,6 +503,28 @@ interface BlogPluginOverrides {
503
503
  * @param context - Route context
504
504
  */
505
505
  onBeforeDraftsPageRendered?: (context: RouteContext) => boolean;
506
+ /**
507
+ * Optional slot rendered below the blog post body.
508
+ * Use this to inject a comment thread or any custom content without
509
+ * coupling the blog plugin to the comments plugin.
510
+ *
511
+ * @example
512
+ * ```tsx
513
+ * blog: {
514
+ * postBottomSlot: (post) => (
515
+ * <CommentThread
516
+ * resourceId={post.slug}
517
+ * resourceType="blog-post"
518
+ * apiBaseURL={apiBaseURL}
519
+ * apiBasePath="/api/data"
520
+ * currentUserId={session?.userId}
521
+ * loginHref="/login"
522
+ * />
523
+ * ),
524
+ * }
525
+ * ```
526
+ */
527
+ postBottomSlot?: (post: SerializedPost) => ReactNode;
506
528
  }
507
529
 
508
530
  export { blogClientPlugin };
@@ -1,9 +1,9 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
- import { ComponentType } from 'react';
3
+ import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.mjs';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.B8vT-Yt4.mjs';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.BWp0hcm9.mjs';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.DOZ1EXjM.mjs';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -503,6 +503,28 @@ interface BlogPluginOverrides {
503
503
  * @param context - Route context
504
504
  */
505
505
  onBeforeDraftsPageRendered?: (context: RouteContext) => boolean;
506
+ /**
507
+ * Optional slot rendered below the blog post body.
508
+ * Use this to inject a comment thread or any custom content without
509
+ * coupling the blog plugin to the comments plugin.
510
+ *
511
+ * @example
512
+ * ```tsx
513
+ * blog: {
514
+ * postBottomSlot: (post) => (
515
+ * <CommentThread
516
+ * resourceId={post.slug}
517
+ * resourceType="blog-post"
518
+ * apiBaseURL={apiBaseURL}
519
+ * apiBasePath="/api/data"
520
+ * currentUserId={session?.userId}
521
+ * loginHref="/login"
522
+ * />
523
+ * ),
524
+ * }
525
+ * ```
526
+ */
527
+ postBottomSlot?: (post: SerializedPost) => ReactNode;
506
528
  }
507
529
 
508
530
  export { blogClientPlugin };
@@ -1,9 +1,9 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
- import { ComponentType } from 'react';
3
+ import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.js';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.BAT540yW.js';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.BWp0hcm9.js';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.VF6FhyZw.js';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -503,6 +503,28 @@ interface BlogPluginOverrides {
503
503
  * @param context - Route context
504
504
  */
505
505
  onBeforeDraftsPageRendered?: (context: RouteContext) => boolean;
506
+ /**
507
+ * Optional slot rendered below the blog post body.
508
+ * Use this to inject a comment thread or any custom content without
509
+ * coupling the blog plugin to the comments plugin.
510
+ *
511
+ * @example
512
+ * ```tsx
513
+ * blog: {
514
+ * postBottomSlot: (post) => (
515
+ * <CommentThread
516
+ * resourceId={post.slug}
517
+ * resourceType="blog-post"
518
+ * apiBaseURL={apiBaseURL}
519
+ * apiBasePath="/api/data"
520
+ * currentUserId={session?.userId}
521
+ * loginHref="/login"
522
+ * />
523
+ * ),
524
+ * }
525
+ * ```
526
+ */
527
+ postBottomSlot?: (post: SerializedPost) => ReactNode;
506
528
  }
507
529
 
508
530
  export { blogClientPlugin };
@@ -1,8 +1,8 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.DaZM10cp.cjs';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.BSqJrCTM.cjs';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.cjs';
4
+ import '../../shared/stack.BWp0hcm9.cjs';
5
5
  import '@btst/stack/plugins/api';
6
- import 'better-call';
7
6
  import '@btst/db';
7
+ import 'better-call';
8
8
  import 'zod';
@@ -1,8 +1,8 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.cfCkioTe.mjs';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.DzOhpIYM.mjs';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.mjs';
4
+ import '../../shared/stack.BWp0hcm9.mjs';
5
5
  import '@btst/stack/plugins/api';
6
- import 'better-call';
7
6
  import '@btst/db';
7
+ import 'better-call';
8
8
  import 'zod';
@@ -1,8 +1,8 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.DXnclTG7.js';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.BXxrFL9R.js';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.js';
4
+ import '../../shared/stack.BWp0hcm9.js';
5
5
  import '@btst/stack/plugins/api';
6
- import 'better-call';
7
6
  import '@btst/db';
7
+ import 'better-call';
8
8
  import 'zod';
@@ -1,5 +1,5 @@
1
- import { C as ClientPlugin } from '../../shared/stack.7n9Y_u7N.cjs';
2
- export { P as PluginOverrides } from '../../shared/stack.7n9Y_u7N.cjs';
1
+ import { C as ClientPlugin } from '../../shared/stack.CQnwAN7x.cjs';
2
+ export { P as PluginOverrides } from '../../shared/stack.CQnwAN7x.cjs';
3
3
  import { Route } from '@btst/yar';
4
4
  export { Route, createRoute, createRouter } from '@btst/yar';
5
5
  import { createClient } from 'better-call/client';
@@ -1,5 +1,5 @@
1
- import { C as ClientPlugin } from '../../shared/stack.7n9Y_u7N.mjs';
2
- export { P as PluginOverrides } from '../../shared/stack.7n9Y_u7N.mjs';
1
+ import { C as ClientPlugin } from '../../shared/stack.CQnwAN7x.mjs';
2
+ export { P as PluginOverrides } from '../../shared/stack.CQnwAN7x.mjs';
3
3
  import { Route } from '@btst/yar';
4
4
  export { Route, createRoute, createRouter } from '@btst/yar';
5
5
  import { createClient } from 'better-call/client';
@@ -1,5 +1,5 @@
1
- import { C as ClientPlugin } from '../../shared/stack.7n9Y_u7N.js';
2
- export { P as PluginOverrides } from '../../shared/stack.7n9Y_u7N.js';
1
+ import { C as ClientPlugin } from '../../shared/stack.CQnwAN7x.js';
2
+ export { P as PluginOverrides } from '../../shared/stack.CQnwAN7x.js';
3
3
  import { Route } from '@btst/yar';
4
4
  export { Route, createRoute, createRouter } from '@btst/yar';
5
5
  import { createClient } from 'better-call/client';
@@ -1,4 +1,4 @@
1
- export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.C9Mg2Q46.cjs';
1
+ export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.C9zoS1TN.cjs';
2
2
  import '@btst/stack/plugins/api';
3
3
  import '../../../shared/stack.B8QD11QU.cjs';
4
4
  import 'zod';
@@ -1,4 +1,4 @@
1
- export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.B58oHdqm.mjs';
1
+ export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.BX7MHi0J.mjs';
2
2
  import '@btst/stack/plugins/api';
3
3
  import '../../../shared/stack.B8QD11QU.mjs';
4
4
  import 'zod';
@@ -1,4 +1,4 @@
1
- export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.sO33ZDhK.js';
1
+ export { C as CMSApiRouter, b as CMSRouteKey, l as CMS_QUERY_KEYS, k as CreateCMSContentItemInput, c as cmsBackendPlugin, j as createCMSContentItem, d as getAllContentItems, g as getAllContentTypes, f as getContentItemById, e as getContentItemBySlug, h as serializeContentItem, i as serializeContentItemWithType, s as serializeContentType } from '../../../shared/stack.fQjVhw5a.js';
2
2
  import '@btst/stack/plugins/api';
3
3
  import '../../../shared/stack.B8QD11QU.js';
4
4
  import 'zod';
@@ -2,7 +2,7 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { A as AutoFormInputComponentProps } from '../../../shared/stack.fdi94T4S.cjs';
5
+ import { A as AutoFormInputComponentProps } from '../../../shared/stack.CPsYC2-Z.cjs';
6
6
  export { b as FormSchemaMetadata, F as FormStep, f as formSchemaToZod, a as getStepGroupMap, g as getSteps, h as hasSteps, z as zodToFormSchema } from '../../../shared/stack.Co034Fpm.cjs';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
8
  import 'react-hook-form';
@@ -2,7 +2,7 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { A as AutoFormInputComponentProps } from '../../../shared/stack.fdi94T4S.mjs';
5
+ import { A as AutoFormInputComponentProps } from '../../../shared/stack.CPsYC2-Z.mjs';
6
6
  export { b as FormSchemaMetadata, F as FormStep, f as formSchemaToZod, a as getStepGroupMap, g as getSteps, h as hasSteps, z as zodToFormSchema } from '../../../shared/stack.Co034Fpm.mjs';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
8
  import 'react-hook-form';
@@ -2,7 +2,7 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { A as AutoFormInputComponentProps } from '../../../shared/stack.fdi94T4S.js';
5
+ import { A as AutoFormInputComponentProps } from '../../../shared/stack.CPsYC2-Z.js';
6
6
  export { b as FormSchemaMetadata, F as FormStep, f as formSchemaToZod, a as getStepGroupMap, g as getSteps, h as hasSteps, z as zodToFormSchema } from '../../../shared/stack.Co034Fpm.js';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
8
  import 'react-hook-form';
@@ -1,4 +1,4 @@
1
- import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.C9Mg2Q46.cjs';
1
+ import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.C9zoS1TN.cjs';
2
2
  import * as _tanstack_react_query from '@tanstack/react-query';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedContentType, P as PaginatedContentItems, a as SerializedContentItemWithType } from '../../shared/stack.B8QD11QU.cjs';
@@ -1,4 +1,4 @@
1
- import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.B58oHdqm.mjs';
1
+ import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.BX7MHi0J.mjs';
2
2
  import * as _tanstack_react_query from '@tanstack/react-query';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedContentType, P as PaginatedContentItems, a as SerializedContentItemWithType } from '../../shared/stack.B8QD11QU.mjs';
@@ -1,4 +1,4 @@
1
- import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.sO33ZDhK.js';
1
+ import { C as CMSApiRouter, a as ContentListDiscriminator } from '../../shared/stack.fQjVhw5a.js';
2
2
  import * as _tanstack_react_query from '@tanstack/react-query';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedContentType, P as PaginatedContentItems, a as SerializedContentItemWithType } from '../../shared/stack.B8QD11QU.js';
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const plugin = require('../../../packages/stack/src/plugins/comments/api/plugin.cjs');
4
+ const getters = require('../../../packages/stack/src/plugins/comments/api/getters.cjs');
5
+ const mutations = require('../../../packages/stack/src/plugins/comments/api/mutations.cjs');
6
+ const serializers = require('../../../packages/stack/src/plugins/comments/api/serializers.cjs');
7
+ const queryKeyDefs = require('../../../packages/stack/src/plugins/comments/api/query-key-defs.cjs');
8
+
9
+
10
+
11
+ exports.commentsBackendPlugin = plugin.commentsBackendPlugin;
12
+ exports.getCommentById = getters.getCommentById;
13
+ exports.getCommentCount = getters.getCommentCount;
14
+ exports.listComments = getters.listComments;
15
+ exports.createComment = mutations.createComment;
16
+ exports.deleteComment = mutations.deleteComment;
17
+ exports.toggleCommentLike = mutations.toggleCommentLike;
18
+ exports.updateComment = mutations.updateComment;
19
+ exports.updateCommentStatus = mutations.updateCommentStatus;
20
+ exports.serializeComment = serializers.serializeComment;
21
+ exports.COMMENTS_QUERY_KEYS = queryKeyDefs.COMMENTS_QUERY_KEYS;
@@ -0,0 +1,126 @@
1
+ import { a as CommentListParamsSchema, b as CommentCountQuerySchema } from '../../../shared/stack.CmHRdhl8.cjs';
2
+ export { d as CommentsApiContext, C as CommentsApiRouter, e as CommentsBackendOptions, c as commentsBackendPlugin } from '../../../shared/stack.CmHRdhl8.cjs';
3
+ import { DBAdapter } from '@btst/db';
4
+ import { C as CommentListResult, S as SerializedComment, d as Comment } from '../../../shared/stack.C-b3Sn8j.cjs';
5
+ export { e as COMMENTS_QUERY_KEYS } from '../../../shared/stack.C-b3Sn8j.cjs';
6
+ import { z } from 'zod';
7
+ import '@btst/stack/plugins/api';
8
+ import 'better-call';
9
+
10
+ /**
11
+ * List comments for a resource, optionally filtered by status and parentId.
12
+ * Server-side resolves author display info and like status.
13
+ *
14
+ * When `status` is "approved" (default) and `currentUserId` is provided, the
15
+ * result also includes the current user's own pending comments so they remain
16
+ * visible after a page refresh without requiring admin access.
17
+ *
18
+ * Pure DB function — no hooks, no HTTP context. Safe for server-side use.
19
+ *
20
+ * @param adapter - The database adapter
21
+ * @param params - Filter/pagination parameters
22
+ * @param resolveUser - Optional consumer hook to resolve author display info
23
+ */
24
+ declare function listComments(adapter: DBAdapter, params: z.infer<typeof CommentListParamsSchema>, resolveUser?: (authorId: string) => Promise<{
25
+ name: string;
26
+ avatarUrl?: string;
27
+ } | null>): Promise<CommentListResult>;
28
+ /**
29
+ * Get a single comment by ID, enriched with author info.
30
+ * Returns null if not found.
31
+ *
32
+ * Pure DB function — no hooks, no HTTP context.
33
+ */
34
+ declare function getCommentById(adapter: DBAdapter, id: string, resolveUser?: (authorId: string) => Promise<{
35
+ name: string;
36
+ avatarUrl?: string;
37
+ } | null>, currentUserId?: string): Promise<SerializedComment | null>;
38
+ /**
39
+ * Count comments for a resource, optionally filtered by status.
40
+ *
41
+ * Pure DB function — no hooks, no HTTP context.
42
+ */
43
+ declare function getCommentCount(adapter: DBAdapter, params: z.infer<typeof CommentCountQuerySchema>): Promise<number>;
44
+
45
+ /**
46
+ * Input for creating a new comment.
47
+ */
48
+ interface CreateCommentInput {
49
+ resourceId: string;
50
+ resourceType: string;
51
+ parentId?: string | null;
52
+ authorId: string;
53
+ body: string;
54
+ status?: "pending" | "approved" | "spam";
55
+ }
56
+ /**
57
+ * Create a new comment.
58
+ *
59
+ * @remarks **Security:** No authorization hooks are called. The caller is
60
+ * responsible for any access-control checks (e.g., onBeforePost) before
61
+ * invoking this function.
62
+ */
63
+ declare function createComment(adapter: DBAdapter, input: CreateCommentInput): Promise<Comment>;
64
+ /**
65
+ * Update the body of an existing comment and set editedAt.
66
+ *
67
+ * @remarks **Security:** No authorization hooks are called. The caller is
68
+ * responsible for ensuring the requesting user owns the comment (onBeforeEdit).
69
+ */
70
+ declare function updateComment(adapter: DBAdapter, id: string, body: string): Promise<Comment | null>;
71
+ /**
72
+ * Update the status of a comment (approve, reject, spam).
73
+ *
74
+ * @remarks **Security:** No authorization hooks are called. Callers should
75
+ * ensure the requesting user has moderation privileges.
76
+ */
77
+ declare function updateCommentStatus(adapter: DBAdapter, id: string, status: "pending" | "approved" | "spam"): Promise<Comment | null>;
78
+ /**
79
+ * Delete a comment by ID, cascading to any child replies.
80
+ *
81
+ * Replies reference the parent via `parentId`. Because the schema declares no
82
+ * DB-level cascade on `comment.parentId`, orphaned replies must be removed here
83
+ * in the application layer. `commentLike` rows are covered by the FK cascade
84
+ * on `commentLike.commentId` (declared in `db.ts`).
85
+ *
86
+ * Comments are only one level deep (the UI prevents replying to replies), so a
87
+ * single-level cascade is sufficient — no recursive walk is needed.
88
+ *
89
+ * @remarks **Security:** No authorization hooks are called. Callers should
90
+ * ensure the requesting user has permission to delete this comment.
91
+ */
92
+ declare function deleteComment(adapter: DBAdapter, id: string): Promise<boolean>;
93
+ /**
94
+ * Toggle a like on a comment for a given authorId.
95
+ * - If the user has not liked the comment: creates a commentLike row and increments the likes counter.
96
+ * - If the user has already liked the comment: deletes the commentLike row and decrements the likes counter.
97
+ * Returns the updated likes count.
98
+ *
99
+ * All reads and writes are performed inside a single transaction to prevent
100
+ * concurrent requests from causing counter drift or duplicate like rows.
101
+ *
102
+ * @remarks **Security:** No authorization hooks are called. The caller is
103
+ * responsible for ensuring the requesting user is authenticated (authorId is valid).
104
+ */
105
+ declare function toggleCommentLike(adapter: DBAdapter, commentId: string, authorId: string): Promise<{
106
+ likes: number;
107
+ isLiked: boolean;
108
+ }>;
109
+
110
+ /**
111
+ * Serialize a raw Comment DB record into a SerializedComment for SSG/setQueryData.
112
+ * Note: resolvedAuthorName, resolvedAvatarUrl, and isLikedByCurrentUser are not
113
+ * available from the DB record alone — use getters.ts enrichment for those.
114
+ * This serializer is for cases where you already have a SerializedComment from
115
+ * the HTTP layer and just need a type-safe round-trip.
116
+ *
117
+ * Pure function — no DB access, no hooks.
118
+ */
119
+ declare function serializeComment(comment: Comment): Omit<SerializedComment, "resolvedAuthorName" | "resolvedAvatarUrl" | "isLikedByCurrentUser"> & {
120
+ resolvedAuthorName: string;
121
+ resolvedAvatarUrl: null;
122
+ isLikedByCurrentUser: false;
123
+ };
124
+
125
+ export { createComment, deleteComment, getCommentById, getCommentCount, listComments, serializeComment, toggleCommentLike, updateComment, updateCommentStatus };
126
+ export type { CreateCommentInput };
@@ -0,0 +1,126 @@
1
+ import { a as CommentListParamsSchema, b as CommentCountQuerySchema } from '../../../shared/stack.Dcz6636A.mjs';
2
+ export { d as CommentsApiContext, C as CommentsApiRouter, e as CommentsBackendOptions, c as commentsBackendPlugin } from '../../../shared/stack.Dcz6636A.mjs';
3
+ import { DBAdapter } from '@btst/db';
4
+ import { C as CommentListResult, S as SerializedComment, d as Comment } from '../../../shared/stack.C-b3Sn8j.mjs';
5
+ export { e as COMMENTS_QUERY_KEYS } from '../../../shared/stack.C-b3Sn8j.mjs';
6
+ import { z } from 'zod';
7
+ import '@btst/stack/plugins/api';
8
+ import 'better-call';
9
+
10
+ /**
11
+ * List comments for a resource, optionally filtered by status and parentId.
12
+ * Server-side resolves author display info and like status.
13
+ *
14
+ * When `status` is "approved" (default) and `currentUserId` is provided, the
15
+ * result also includes the current user's own pending comments so they remain
16
+ * visible after a page refresh without requiring admin access.
17
+ *
18
+ * Pure DB function — no hooks, no HTTP context. Safe for server-side use.
19
+ *
20
+ * @param adapter - The database adapter
21
+ * @param params - Filter/pagination parameters
22
+ * @param resolveUser - Optional consumer hook to resolve author display info
23
+ */
24
+ declare function listComments(adapter: DBAdapter, params: z.infer<typeof CommentListParamsSchema>, resolveUser?: (authorId: string) => Promise<{
25
+ name: string;
26
+ avatarUrl?: string;
27
+ } | null>): Promise<CommentListResult>;
28
+ /**
29
+ * Get a single comment by ID, enriched with author info.
30
+ * Returns null if not found.
31
+ *
32
+ * Pure DB function — no hooks, no HTTP context.
33
+ */
34
+ declare function getCommentById(adapter: DBAdapter, id: string, resolveUser?: (authorId: string) => Promise<{
35
+ name: string;
36
+ avatarUrl?: string;
37
+ } | null>, currentUserId?: string): Promise<SerializedComment | null>;
38
+ /**
39
+ * Count comments for a resource, optionally filtered by status.
40
+ *
41
+ * Pure DB function — no hooks, no HTTP context.
42
+ */
43
+ declare function getCommentCount(adapter: DBAdapter, params: z.infer<typeof CommentCountQuerySchema>): Promise<number>;
44
+
45
+ /**
46
+ * Input for creating a new comment.
47
+ */
48
+ interface CreateCommentInput {
49
+ resourceId: string;
50
+ resourceType: string;
51
+ parentId?: string | null;
52
+ authorId: string;
53
+ body: string;
54
+ status?: "pending" | "approved" | "spam";
55
+ }
56
+ /**
57
+ * Create a new comment.
58
+ *
59
+ * @remarks **Security:** No authorization hooks are called. The caller is
60
+ * responsible for any access-control checks (e.g., onBeforePost) before
61
+ * invoking this function.
62
+ */
63
+ declare function createComment(adapter: DBAdapter, input: CreateCommentInput): Promise<Comment>;
64
+ /**
65
+ * Update the body of an existing comment and set editedAt.
66
+ *
67
+ * @remarks **Security:** No authorization hooks are called. The caller is
68
+ * responsible for ensuring the requesting user owns the comment (onBeforeEdit).
69
+ */
70
+ declare function updateComment(adapter: DBAdapter, id: string, body: string): Promise<Comment | null>;
71
+ /**
72
+ * Update the status of a comment (approve, reject, spam).
73
+ *
74
+ * @remarks **Security:** No authorization hooks are called. Callers should
75
+ * ensure the requesting user has moderation privileges.
76
+ */
77
+ declare function updateCommentStatus(adapter: DBAdapter, id: string, status: "pending" | "approved" | "spam"): Promise<Comment | null>;
78
+ /**
79
+ * Delete a comment by ID, cascading to any child replies.
80
+ *
81
+ * Replies reference the parent via `parentId`. Because the schema declares no
82
+ * DB-level cascade on `comment.parentId`, orphaned replies must be removed here
83
+ * in the application layer. `commentLike` rows are covered by the FK cascade
84
+ * on `commentLike.commentId` (declared in `db.ts`).
85
+ *
86
+ * Comments are only one level deep (the UI prevents replying to replies), so a
87
+ * single-level cascade is sufficient — no recursive walk is needed.
88
+ *
89
+ * @remarks **Security:** No authorization hooks are called. Callers should
90
+ * ensure the requesting user has permission to delete this comment.
91
+ */
92
+ declare function deleteComment(adapter: DBAdapter, id: string): Promise<boolean>;
93
+ /**
94
+ * Toggle a like on a comment for a given authorId.
95
+ * - If the user has not liked the comment: creates a commentLike row and increments the likes counter.
96
+ * - If the user has already liked the comment: deletes the commentLike row and decrements the likes counter.
97
+ * Returns the updated likes count.
98
+ *
99
+ * All reads and writes are performed inside a single transaction to prevent
100
+ * concurrent requests from causing counter drift or duplicate like rows.
101
+ *
102
+ * @remarks **Security:** No authorization hooks are called. The caller is
103
+ * responsible for ensuring the requesting user is authenticated (authorId is valid).
104
+ */
105
+ declare function toggleCommentLike(adapter: DBAdapter, commentId: string, authorId: string): Promise<{
106
+ likes: number;
107
+ isLiked: boolean;
108
+ }>;
109
+
110
+ /**
111
+ * Serialize a raw Comment DB record into a SerializedComment for SSG/setQueryData.
112
+ * Note: resolvedAuthorName, resolvedAvatarUrl, and isLikedByCurrentUser are not
113
+ * available from the DB record alone — use getters.ts enrichment for those.
114
+ * This serializer is for cases where you already have a SerializedComment from
115
+ * the HTTP layer and just need a type-safe round-trip.
116
+ *
117
+ * Pure function — no DB access, no hooks.
118
+ */
119
+ declare function serializeComment(comment: Comment): Omit<SerializedComment, "resolvedAuthorName" | "resolvedAvatarUrl" | "isLikedByCurrentUser"> & {
120
+ resolvedAuthorName: string;
121
+ resolvedAvatarUrl: null;
122
+ isLikedByCurrentUser: false;
123
+ };
124
+
125
+ export { createComment, deleteComment, getCommentById, getCommentCount, listComments, serializeComment, toggleCommentLike, updateComment, updateCommentStatus };
126
+ export type { CreateCommentInput };