@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
@@ -0,0 +1,200 @@
1
+ import { C as CommentListResult, S as SerializedComment, a as CommentsThreadDiscriminator } from '../../../../shared/stack.C-b3Sn8j.cjs';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { InfiniteData } from '@tanstack/react-query';
4
+
5
+ interface CommentsClientConfig {
6
+ apiBaseURL: string;
7
+ apiBasePath: string;
8
+ headers?: HeadersInit;
9
+ }
10
+ /**
11
+ * Fetch a paginated list of comments for a resource.
12
+ * Returns approved comments by default.
13
+ */
14
+ declare function useComments(config: CommentsClientConfig, params: {
15
+ resourceId?: string;
16
+ resourceType?: string;
17
+ parentId?: string | null;
18
+ status?: "pending" | "approved" | "spam";
19
+ currentUserId?: string;
20
+ authorId?: string;
21
+ sort?: "asc" | "desc";
22
+ limit?: number;
23
+ offset?: number;
24
+ }, options?: {
25
+ enabled?: boolean;
26
+ }): {
27
+ data: CommentListResult | undefined;
28
+ comments: SerializedComment[];
29
+ total: number;
30
+ isLoading: boolean;
31
+ isFetching: boolean;
32
+ error: Error | null;
33
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
34
+ };
35
+ /**
36
+ * useSuspenseQuery version — for use in .internal.tsx files.
37
+ */
38
+ declare function useSuspenseComments(config: CommentsClientConfig, params: {
39
+ resourceId?: string;
40
+ resourceType?: string;
41
+ parentId?: string | null;
42
+ status?: "pending" | "approved" | "spam";
43
+ currentUserId?: string;
44
+ authorId?: string;
45
+ sort?: "asc" | "desc";
46
+ limit?: number;
47
+ offset?: number;
48
+ }): {
49
+ comments: SerializedComment[];
50
+ total: number;
51
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
52
+ };
53
+ /**
54
+ * Page-based variant for the moderation dashboard.
55
+ * Uses useSuspenseQuery with explicit offset so the table always shows exactly
56
+ * one page of results and navigation is handled by Prev / Next controls.
57
+ */
58
+ declare function useSuspenseModerationComments(config: CommentsClientConfig, params: {
59
+ status?: "pending" | "approved" | "spam";
60
+ limit?: number;
61
+ page?: number;
62
+ }): {
63
+ comments: SerializedComment[];
64
+ total: number;
65
+ limit: number;
66
+ offset: number;
67
+ totalPages: number;
68
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
69
+ };
70
+ /**
71
+ * Infinite-scroll variant for the CommentThread component.
72
+ * Uses the "commentsThread" factory namespace (separate from the plain
73
+ * useComments / useSuspenseComments queries) to avoid InfiniteData shape conflicts.
74
+ *
75
+ * Mirrors the blog's usePosts pattern: spread the factory base query into
76
+ * useInfiniteQuery, drive pages via pageParam, and derive hasMore from server total.
77
+ */
78
+ declare function useInfiniteComments(config: CommentsClientConfig, params: {
79
+ resourceId: string;
80
+ resourceType: string;
81
+ parentId?: string | null;
82
+ status?: "pending" | "approved" | "spam";
83
+ currentUserId?: string;
84
+ pageSize?: number;
85
+ }, options?: {
86
+ enabled?: boolean;
87
+ }): {
88
+ comments: SerializedComment[];
89
+ total: number;
90
+ queryKey: readonly ["commentsThread", "list", CommentsThreadDiscriminator];
91
+ isLoading: boolean;
92
+ isFetching: boolean;
93
+ loadMore: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<InfiniteData<CommentListResult, unknown>, Error>>;
94
+ hasMore: boolean;
95
+ isLoadingMore: boolean;
96
+ error: Error | null;
97
+ };
98
+ /**
99
+ * Fetch the approved comment count for a resource.
100
+ */
101
+ declare function useCommentCount(config: CommentsClientConfig, params: {
102
+ resourceId: string;
103
+ resourceType: string;
104
+ status?: "pending" | "approved" | "spam";
105
+ }): {
106
+ count: number;
107
+ isLoading: boolean;
108
+ error: Error | null;
109
+ };
110
+ /**
111
+ * Post a new comment with optimistic update.
112
+ * When autoApprove is false the optimistic entry shows as "pending" — visible
113
+ * only to the comment's own author via the `currentUserId` match in the UI.
114
+ *
115
+ * Pass `infiniteKey` (from `useInfiniteComments`) when the thread uses an
116
+ * infinite query so the optimistic update targets InfiniteData<CommentListResult>
117
+ * instead of a plain CommentListResult cache entry.
118
+ */
119
+ declare function usePostComment(config: CommentsClientConfig, params: {
120
+ resourceId: string;
121
+ resourceType: string;
122
+ currentUserId?: string;
123
+ /** When provided, optimistic updates target this infinite-query cache key. */
124
+ infiniteKey?: readonly unknown[];
125
+ /**
126
+ * Page size used by the corresponding `useInfiniteComments` call.
127
+ * Used only when the infinite-query cache is empty at the time of the
128
+ * optimistic update — ensures `getNextPageParam` computes the correct
129
+ * `nextOffset` from `lastPage.limit` instead of a hardcoded fallback.
130
+ */
131
+ pageSize?: number;
132
+ }): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
133
+ body: string;
134
+ parentId?: string | null;
135
+ limit?: number;
136
+ offset?: number;
137
+ }, {
138
+ previous: InfiniteData<CommentListResult, unknown> | undefined;
139
+ isInfinite: true;
140
+ listKey: readonly unknown[];
141
+ optimisticId: string;
142
+ } | {
143
+ previous: CommentListResult | undefined;
144
+ isInfinite: false;
145
+ listKey: readonly unknown[];
146
+ optimisticId: string;
147
+ }>;
148
+ /**
149
+ * Edit the body of an existing comment.
150
+ */
151
+ declare function useUpdateComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
152
+ id: string;
153
+ body: string;
154
+ }, unknown>;
155
+ /**
156
+ * Approve a comment (set status to "approved"). Admin use.
157
+ */
158
+ declare function useApproveComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, string, unknown>;
159
+ /**
160
+ * Update comment status (pending / approved / spam). Admin use.
161
+ */
162
+ declare function useUpdateCommentStatus(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
163
+ id: string;
164
+ status: "pending" | "approved" | "spam";
165
+ }, unknown>;
166
+ /**
167
+ * Delete a comment. Admin use.
168
+ */
169
+ declare function useDeleteComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<{
170
+ success: boolean;
171
+ }, Error, string, unknown>;
172
+ /**
173
+ * Toggle a like on a comment with optimistic update.
174
+ *
175
+ * Pass `infiniteKey` (from `useInfiniteComments`) for top-level thread comments
176
+ * so the optimistic update targets InfiniteData<CommentListResult> instead of
177
+ * a plain CommentListResult cache entry.
178
+ */
179
+ declare function useToggleLike(config: CommentsClientConfig, params: {
180
+ resourceId: string;
181
+ resourceType: string;
182
+ /** parentId of the comment being liked — must match the parentId used by
183
+ * useComments so the optimistic setQueryData hits the correct cache entry.
184
+ * Pass `null` for top-level comments, or the parent comment ID for replies. */
185
+ parentId?: string | null;
186
+ currentUserId?: string;
187
+ /** When the comment lives in an infinite thread, pass the thread's query key
188
+ * so the optimistic update targets the correct InfiniteData cache entry. */
189
+ infiniteKey?: readonly unknown[];
190
+ }): _tanstack_react_query.UseMutationResult<{
191
+ likes: number;
192
+ isLiked: boolean;
193
+ }, Error, {
194
+ commentId: string;
195
+ authorId: string;
196
+ }, {
197
+ previous: CommentListResult | InfiniteData<CommentListResult, unknown> | undefined;
198
+ }>;
199
+
200
+ export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus };
@@ -0,0 +1,200 @@
1
+ import { C as CommentListResult, S as SerializedComment, a as CommentsThreadDiscriminator } from '../../../../shared/stack.C-b3Sn8j.mjs';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { InfiniteData } from '@tanstack/react-query';
4
+
5
+ interface CommentsClientConfig {
6
+ apiBaseURL: string;
7
+ apiBasePath: string;
8
+ headers?: HeadersInit;
9
+ }
10
+ /**
11
+ * Fetch a paginated list of comments for a resource.
12
+ * Returns approved comments by default.
13
+ */
14
+ declare function useComments(config: CommentsClientConfig, params: {
15
+ resourceId?: string;
16
+ resourceType?: string;
17
+ parentId?: string | null;
18
+ status?: "pending" | "approved" | "spam";
19
+ currentUserId?: string;
20
+ authorId?: string;
21
+ sort?: "asc" | "desc";
22
+ limit?: number;
23
+ offset?: number;
24
+ }, options?: {
25
+ enabled?: boolean;
26
+ }): {
27
+ data: CommentListResult | undefined;
28
+ comments: SerializedComment[];
29
+ total: number;
30
+ isLoading: boolean;
31
+ isFetching: boolean;
32
+ error: Error | null;
33
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
34
+ };
35
+ /**
36
+ * useSuspenseQuery version — for use in .internal.tsx files.
37
+ */
38
+ declare function useSuspenseComments(config: CommentsClientConfig, params: {
39
+ resourceId?: string;
40
+ resourceType?: string;
41
+ parentId?: string | null;
42
+ status?: "pending" | "approved" | "spam";
43
+ currentUserId?: string;
44
+ authorId?: string;
45
+ sort?: "asc" | "desc";
46
+ limit?: number;
47
+ offset?: number;
48
+ }): {
49
+ comments: SerializedComment[];
50
+ total: number;
51
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
52
+ };
53
+ /**
54
+ * Page-based variant for the moderation dashboard.
55
+ * Uses useSuspenseQuery with explicit offset so the table always shows exactly
56
+ * one page of results and navigation is handled by Prev / Next controls.
57
+ */
58
+ declare function useSuspenseModerationComments(config: CommentsClientConfig, params: {
59
+ status?: "pending" | "approved" | "spam";
60
+ limit?: number;
61
+ page?: number;
62
+ }): {
63
+ comments: SerializedComment[];
64
+ total: number;
65
+ limit: number;
66
+ offset: number;
67
+ totalPages: number;
68
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
69
+ };
70
+ /**
71
+ * Infinite-scroll variant for the CommentThread component.
72
+ * Uses the "commentsThread" factory namespace (separate from the plain
73
+ * useComments / useSuspenseComments queries) to avoid InfiniteData shape conflicts.
74
+ *
75
+ * Mirrors the blog's usePosts pattern: spread the factory base query into
76
+ * useInfiniteQuery, drive pages via pageParam, and derive hasMore from server total.
77
+ */
78
+ declare function useInfiniteComments(config: CommentsClientConfig, params: {
79
+ resourceId: string;
80
+ resourceType: string;
81
+ parentId?: string | null;
82
+ status?: "pending" | "approved" | "spam";
83
+ currentUserId?: string;
84
+ pageSize?: number;
85
+ }, options?: {
86
+ enabled?: boolean;
87
+ }): {
88
+ comments: SerializedComment[];
89
+ total: number;
90
+ queryKey: readonly ["commentsThread", "list", CommentsThreadDiscriminator];
91
+ isLoading: boolean;
92
+ isFetching: boolean;
93
+ loadMore: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<InfiniteData<CommentListResult, unknown>, Error>>;
94
+ hasMore: boolean;
95
+ isLoadingMore: boolean;
96
+ error: Error | null;
97
+ };
98
+ /**
99
+ * Fetch the approved comment count for a resource.
100
+ */
101
+ declare function useCommentCount(config: CommentsClientConfig, params: {
102
+ resourceId: string;
103
+ resourceType: string;
104
+ status?: "pending" | "approved" | "spam";
105
+ }): {
106
+ count: number;
107
+ isLoading: boolean;
108
+ error: Error | null;
109
+ };
110
+ /**
111
+ * Post a new comment with optimistic update.
112
+ * When autoApprove is false the optimistic entry shows as "pending" — visible
113
+ * only to the comment's own author via the `currentUserId` match in the UI.
114
+ *
115
+ * Pass `infiniteKey` (from `useInfiniteComments`) when the thread uses an
116
+ * infinite query so the optimistic update targets InfiniteData<CommentListResult>
117
+ * instead of a plain CommentListResult cache entry.
118
+ */
119
+ declare function usePostComment(config: CommentsClientConfig, params: {
120
+ resourceId: string;
121
+ resourceType: string;
122
+ currentUserId?: string;
123
+ /** When provided, optimistic updates target this infinite-query cache key. */
124
+ infiniteKey?: readonly unknown[];
125
+ /**
126
+ * Page size used by the corresponding `useInfiniteComments` call.
127
+ * Used only when the infinite-query cache is empty at the time of the
128
+ * optimistic update — ensures `getNextPageParam` computes the correct
129
+ * `nextOffset` from `lastPage.limit` instead of a hardcoded fallback.
130
+ */
131
+ pageSize?: number;
132
+ }): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
133
+ body: string;
134
+ parentId?: string | null;
135
+ limit?: number;
136
+ offset?: number;
137
+ }, {
138
+ previous: InfiniteData<CommentListResult, unknown> | undefined;
139
+ isInfinite: true;
140
+ listKey: readonly unknown[];
141
+ optimisticId: string;
142
+ } | {
143
+ previous: CommentListResult | undefined;
144
+ isInfinite: false;
145
+ listKey: readonly unknown[];
146
+ optimisticId: string;
147
+ }>;
148
+ /**
149
+ * Edit the body of an existing comment.
150
+ */
151
+ declare function useUpdateComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
152
+ id: string;
153
+ body: string;
154
+ }, unknown>;
155
+ /**
156
+ * Approve a comment (set status to "approved"). Admin use.
157
+ */
158
+ declare function useApproveComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, string, unknown>;
159
+ /**
160
+ * Update comment status (pending / approved / spam). Admin use.
161
+ */
162
+ declare function useUpdateCommentStatus(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
163
+ id: string;
164
+ status: "pending" | "approved" | "spam";
165
+ }, unknown>;
166
+ /**
167
+ * Delete a comment. Admin use.
168
+ */
169
+ declare function useDeleteComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<{
170
+ success: boolean;
171
+ }, Error, string, unknown>;
172
+ /**
173
+ * Toggle a like on a comment with optimistic update.
174
+ *
175
+ * Pass `infiniteKey` (from `useInfiniteComments`) for top-level thread comments
176
+ * so the optimistic update targets InfiniteData<CommentListResult> instead of
177
+ * a plain CommentListResult cache entry.
178
+ */
179
+ declare function useToggleLike(config: CommentsClientConfig, params: {
180
+ resourceId: string;
181
+ resourceType: string;
182
+ /** parentId of the comment being liked — must match the parentId used by
183
+ * useComments so the optimistic setQueryData hits the correct cache entry.
184
+ * Pass `null` for top-level comments, or the parent comment ID for replies. */
185
+ parentId?: string | null;
186
+ currentUserId?: string;
187
+ /** When the comment lives in an infinite thread, pass the thread's query key
188
+ * so the optimistic update targets the correct InfiniteData cache entry. */
189
+ infiniteKey?: readonly unknown[];
190
+ }): _tanstack_react_query.UseMutationResult<{
191
+ likes: number;
192
+ isLiked: boolean;
193
+ }, Error, {
194
+ commentId: string;
195
+ authorId: string;
196
+ }, {
197
+ previous: CommentListResult | InfiniteData<CommentListResult, unknown> | undefined;
198
+ }>;
199
+
200
+ export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus };
@@ -0,0 +1,200 @@
1
+ import { C as CommentListResult, S as SerializedComment, a as CommentsThreadDiscriminator } from '../../../../shared/stack.C-b3Sn8j.js';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { InfiniteData } from '@tanstack/react-query';
4
+
5
+ interface CommentsClientConfig {
6
+ apiBaseURL: string;
7
+ apiBasePath: string;
8
+ headers?: HeadersInit;
9
+ }
10
+ /**
11
+ * Fetch a paginated list of comments for a resource.
12
+ * Returns approved comments by default.
13
+ */
14
+ declare function useComments(config: CommentsClientConfig, params: {
15
+ resourceId?: string;
16
+ resourceType?: string;
17
+ parentId?: string | null;
18
+ status?: "pending" | "approved" | "spam";
19
+ currentUserId?: string;
20
+ authorId?: string;
21
+ sort?: "asc" | "desc";
22
+ limit?: number;
23
+ offset?: number;
24
+ }, options?: {
25
+ enabled?: boolean;
26
+ }): {
27
+ data: CommentListResult | undefined;
28
+ comments: SerializedComment[];
29
+ total: number;
30
+ isLoading: boolean;
31
+ isFetching: boolean;
32
+ error: Error | null;
33
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
34
+ };
35
+ /**
36
+ * useSuspenseQuery version — for use in .internal.tsx files.
37
+ */
38
+ declare function useSuspenseComments(config: CommentsClientConfig, params: {
39
+ resourceId?: string;
40
+ resourceType?: string;
41
+ parentId?: string | null;
42
+ status?: "pending" | "approved" | "spam";
43
+ currentUserId?: string;
44
+ authorId?: string;
45
+ sort?: "asc" | "desc";
46
+ limit?: number;
47
+ offset?: number;
48
+ }): {
49
+ comments: SerializedComment[];
50
+ total: number;
51
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
52
+ };
53
+ /**
54
+ * Page-based variant for the moderation dashboard.
55
+ * Uses useSuspenseQuery with explicit offset so the table always shows exactly
56
+ * one page of results and navigation is handled by Prev / Next controls.
57
+ */
58
+ declare function useSuspenseModerationComments(config: CommentsClientConfig, params: {
59
+ status?: "pending" | "approved" | "spam";
60
+ limit?: number;
61
+ page?: number;
62
+ }): {
63
+ comments: SerializedComment[];
64
+ total: number;
65
+ limit: number;
66
+ offset: number;
67
+ totalPages: number;
68
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
69
+ };
70
+ /**
71
+ * Infinite-scroll variant for the CommentThread component.
72
+ * Uses the "commentsThread" factory namespace (separate from the plain
73
+ * useComments / useSuspenseComments queries) to avoid InfiniteData shape conflicts.
74
+ *
75
+ * Mirrors the blog's usePosts pattern: spread the factory base query into
76
+ * useInfiniteQuery, drive pages via pageParam, and derive hasMore from server total.
77
+ */
78
+ declare function useInfiniteComments(config: CommentsClientConfig, params: {
79
+ resourceId: string;
80
+ resourceType: string;
81
+ parentId?: string | null;
82
+ status?: "pending" | "approved" | "spam";
83
+ currentUserId?: string;
84
+ pageSize?: number;
85
+ }, options?: {
86
+ enabled?: boolean;
87
+ }): {
88
+ comments: SerializedComment[];
89
+ total: number;
90
+ queryKey: readonly ["commentsThread", "list", CommentsThreadDiscriminator];
91
+ isLoading: boolean;
92
+ isFetching: boolean;
93
+ loadMore: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<InfiniteData<CommentListResult, unknown>, Error>>;
94
+ hasMore: boolean;
95
+ isLoadingMore: boolean;
96
+ error: Error | null;
97
+ };
98
+ /**
99
+ * Fetch the approved comment count for a resource.
100
+ */
101
+ declare function useCommentCount(config: CommentsClientConfig, params: {
102
+ resourceId: string;
103
+ resourceType: string;
104
+ status?: "pending" | "approved" | "spam";
105
+ }): {
106
+ count: number;
107
+ isLoading: boolean;
108
+ error: Error | null;
109
+ };
110
+ /**
111
+ * Post a new comment with optimistic update.
112
+ * When autoApprove is false the optimistic entry shows as "pending" — visible
113
+ * only to the comment's own author via the `currentUserId` match in the UI.
114
+ *
115
+ * Pass `infiniteKey` (from `useInfiniteComments`) when the thread uses an
116
+ * infinite query so the optimistic update targets InfiniteData<CommentListResult>
117
+ * instead of a plain CommentListResult cache entry.
118
+ */
119
+ declare function usePostComment(config: CommentsClientConfig, params: {
120
+ resourceId: string;
121
+ resourceType: string;
122
+ currentUserId?: string;
123
+ /** When provided, optimistic updates target this infinite-query cache key. */
124
+ infiniteKey?: readonly unknown[];
125
+ /**
126
+ * Page size used by the corresponding `useInfiniteComments` call.
127
+ * Used only when the infinite-query cache is empty at the time of the
128
+ * optimistic update — ensures `getNextPageParam` computes the correct
129
+ * `nextOffset` from `lastPage.limit` instead of a hardcoded fallback.
130
+ */
131
+ pageSize?: number;
132
+ }): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
133
+ body: string;
134
+ parentId?: string | null;
135
+ limit?: number;
136
+ offset?: number;
137
+ }, {
138
+ previous: InfiniteData<CommentListResult, unknown> | undefined;
139
+ isInfinite: true;
140
+ listKey: readonly unknown[];
141
+ optimisticId: string;
142
+ } | {
143
+ previous: CommentListResult | undefined;
144
+ isInfinite: false;
145
+ listKey: readonly unknown[];
146
+ optimisticId: string;
147
+ }>;
148
+ /**
149
+ * Edit the body of an existing comment.
150
+ */
151
+ declare function useUpdateComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
152
+ id: string;
153
+ body: string;
154
+ }, unknown>;
155
+ /**
156
+ * Approve a comment (set status to "approved"). Admin use.
157
+ */
158
+ declare function useApproveComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, string, unknown>;
159
+ /**
160
+ * Update comment status (pending / approved / spam). Admin use.
161
+ */
162
+ declare function useUpdateCommentStatus(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
163
+ id: string;
164
+ status: "pending" | "approved" | "spam";
165
+ }, unknown>;
166
+ /**
167
+ * Delete a comment. Admin use.
168
+ */
169
+ declare function useDeleteComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<{
170
+ success: boolean;
171
+ }, Error, string, unknown>;
172
+ /**
173
+ * Toggle a like on a comment with optimistic update.
174
+ *
175
+ * Pass `infiniteKey` (from `useInfiniteComments`) for top-level thread comments
176
+ * so the optimistic update targets InfiniteData<CommentListResult> instead of
177
+ * a plain CommentListResult cache entry.
178
+ */
179
+ declare function useToggleLike(config: CommentsClientConfig, params: {
180
+ resourceId: string;
181
+ resourceType: string;
182
+ /** parentId of the comment being liked — must match the parentId used by
183
+ * useComments so the optimistic setQueryData hits the correct cache entry.
184
+ * Pass `null` for top-level comments, or the parent comment ID for replies. */
185
+ parentId?: string | null;
186
+ currentUserId?: string;
187
+ /** When the comment lives in an infinite thread, pass the thread's query key
188
+ * so the optimistic update targets the correct InfiniteData cache entry. */
189
+ infiniteKey?: readonly unknown[];
190
+ }): _tanstack_react_query.UseMutationResult<{
191
+ likes: number;
192
+ isLiked: boolean;
193
+ }, Error, {
194
+ commentId: string;
195
+ authorId: string;
196
+ }, {
197
+ previous: CommentListResult | InfiniteData<CommentListResult, unknown> | undefined;
198
+ }>;
199
+
200
+ export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus };
@@ -0,0 +1 @@
1
+ export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus } from '../../../../packages/stack/src/plugins/comments/client/hooks/use-comments.mjs';
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const plugin = require('../../../packages/stack/src/plugins/comments/client/plugin.cjs');
4
+ const index = require('../../../packages/stack/src/plugins/comments/client/localization/index.cjs');
5
+
6
+
7
+
8
+ exports.commentsClientPlugin = plugin.commentsClientPlugin;
9
+ exports.COMMENTS_LOCALIZATION = index.COMMENTS_LOCALIZATION;