@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,335 @@
1
+ import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
2
+ import { d as Comment, S as SerializedComment, C as CommentListResult } from './stack.C-b3Sn8j.cjs';
3
+ import * as better_call from 'better-call';
4
+ import { z } from 'zod';
5
+
6
+ /**
7
+ * Schema for the POST /comments request body.
8
+ * authorId is intentionally absent — the server resolves identity from the
9
+ * session inside onBeforePost and injects it. Never trust authorId from the
10
+ * client body.
11
+ */
12
+ declare const createCommentSchema: z.ZodObject<{
13
+ resourceId: z.ZodString;
14
+ resourceType: z.ZodString;
15
+ parentId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
16
+ body: z.ZodString;
17
+ }, z.core.$strip>;
18
+ /**
19
+ * Schema for GET /comments query parameters.
20
+ *
21
+ * `currentUserId` is intentionally absent — it is never accepted from the client.
22
+ * The server always resolves the caller's identity via the `resolveCurrentUserId`
23
+ * hook and injects it internally. Accepting it from the client would allow any
24
+ * anonymous caller to supply an arbitrary user ID and read that user's pending
25
+ * (pre-moderation) comments.
26
+ */
27
+ declare const CommentListQuerySchema: z.ZodObject<{
28
+ resourceId: z.ZodOptional<z.ZodString>;
29
+ resourceType: z.ZodOptional<z.ZodString>;
30
+ parentId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
31
+ status: z.ZodOptional<z.ZodEnum<{
32
+ pending: "pending";
33
+ approved: "approved";
34
+ spam: "spam";
35
+ }>>;
36
+ authorId: z.ZodOptional<z.ZodString>;
37
+ sort: z.ZodOptional<z.ZodEnum<{
38
+ asc: "asc";
39
+ desc: "desc";
40
+ }>>;
41
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
42
+ offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
43
+ }, z.core.$strip>;
44
+ /**
45
+ * Internal params schema used by `listComments()` and the `api` factory.
46
+ * Extends the HTTP query schema with `currentUserId`, which is always injected
47
+ * server-side (either by the HTTP handler via `resolveCurrentUserId`, or by a
48
+ * trusted server-side caller such as a Server Component or cron job).
49
+ */
50
+ declare const CommentListParamsSchema: z.ZodObject<{
51
+ resourceId: z.ZodOptional<z.ZodString>;
52
+ resourceType: z.ZodOptional<z.ZodString>;
53
+ parentId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
54
+ status: z.ZodOptional<z.ZodEnum<{
55
+ pending: "pending";
56
+ approved: "approved";
57
+ spam: "spam";
58
+ }>>;
59
+ authorId: z.ZodOptional<z.ZodString>;
60
+ sort: z.ZodOptional<z.ZodEnum<{
61
+ asc: "asc";
62
+ desc: "desc";
63
+ }>>;
64
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
65
+ offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
66
+ currentUserId: z.ZodOptional<z.ZodString>;
67
+ }, z.core.$strip>;
68
+ declare const CommentCountQuerySchema: z.ZodObject<{
69
+ resourceId: z.ZodString;
70
+ resourceType: z.ZodString;
71
+ status: z.ZodOptional<z.ZodEnum<{
72
+ pending: "pending";
73
+ approved: "approved";
74
+ spam: "spam";
75
+ }>>;
76
+ }, z.core.$strip>;
77
+
78
+ /**
79
+ * Context passed to comments API hooks
80
+ */
81
+ interface CommentsApiContext {
82
+ body?: unknown;
83
+ params?: unknown;
84
+ query?: unknown;
85
+ request?: Request;
86
+ headers?: Headers;
87
+ [key: string]: unknown;
88
+ }
89
+ /** Shared hook and config fields that are always present regardless of allowPosting. */
90
+ interface CommentsBackendOptionsBase {
91
+ /**
92
+ * When true, new comments are automatically approved (status: "approved").
93
+ * Default: false — all comments start as "pending" until a moderator approves.
94
+ */
95
+ autoApprove?: boolean;
96
+ /**
97
+ * When false, the `PATCH /comments/:id` endpoint is not registered and
98
+ * comment bodies cannot be edited.
99
+ * Default: true.
100
+ */
101
+ allowEditing?: boolean;
102
+ /**
103
+ * Server-side user resolution hook. Called once per unique authorId when
104
+ * serving GET /comments. Return null for deleted/unknown users (shown as "[deleted]").
105
+ * Deduplicates lookups — each unique authorId is resolved only once per request.
106
+ */
107
+ resolveUser?: (authorId: string) => Promise<{
108
+ name: string;
109
+ avatarUrl?: string;
110
+ } | null>;
111
+ /**
112
+ * Called before the comment list or count is returned. Throw to reject.
113
+ * When this hook is absent, any request with `status` other than "approved"
114
+ * is automatically rejected with 403 on both `GET /comments` and
115
+ * `GET /comments/count` — preventing anonymous callers from reading or
116
+ * probing the pending/spam moderation queues. Configure this hook to
117
+ * authorize admin callers (e.g. check session role).
118
+ */
119
+ onBeforeList?: (query: z.infer<typeof CommentListQuerySchema>, context: CommentsApiContext) => Promise<void> | void;
120
+ /**
121
+ * Called after a comment is successfully created.
122
+ */
123
+ onAfterPost?: (comment: Comment, context: CommentsApiContext) => Promise<void> | void;
124
+ /**
125
+ * Called before a comment body is edited. Throw an error to reject the edit.
126
+ * Use this to enforce that only the comment owner can edit (compare authorId to session).
127
+ */
128
+ onBeforeEdit?: (commentId: string, update: {
129
+ body: string;
130
+ }, context: CommentsApiContext) => Promise<void> | void;
131
+ /**
132
+ * Called after a comment is successfully edited.
133
+ */
134
+ onAfterEdit?: (comment: Comment, context: CommentsApiContext) => Promise<void> | void;
135
+ /**
136
+ * Called before a like is toggled. Throw to reject.
137
+ *
138
+ * When this hook is **absent**, any like/unlike request is automatically
139
+ * rejected with 403 — preventing unauthenticated callers from toggling likes
140
+ * on behalf of arbitrary user IDs. Configure this hook to verify `authorId`
141
+ * matches the authenticated session.
142
+ */
143
+ onBeforeLike?: (commentId: string, authorId: string, context: CommentsApiContext) => Promise<void> | void;
144
+ /**
145
+ * Called before a comment's status is changed. Throw to reject.
146
+ *
147
+ * When this hook is **absent**, any status-change request is automatically
148
+ * rejected with 403 — preventing unauthenticated callers from moderating
149
+ * comments. Configure this hook to verify the caller has admin/moderator
150
+ * privileges.
151
+ */
152
+ onBeforeStatusChange?: (commentId: string, status: "pending" | "approved" | "spam", context: CommentsApiContext) => Promise<void> | void;
153
+ /**
154
+ * Called after a comment status is changed to "approved".
155
+ */
156
+ onAfterApprove?: (comment: Comment, context: CommentsApiContext) => Promise<void> | void;
157
+ /**
158
+ * Called before a comment is deleted. Throw to reject.
159
+ *
160
+ * When this hook is **absent**, any delete request is automatically rejected
161
+ * with 403 — preventing unauthenticated callers from deleting comments.
162
+ * Configure this hook to enforce admin-only access.
163
+ */
164
+ onBeforeDelete?: (commentId: string, context: CommentsApiContext) => Promise<void> | void;
165
+ /**
166
+ * Called after a comment is deleted.
167
+ */
168
+ onAfterDelete?: (commentId: string, context: CommentsApiContext) => Promise<void> | void;
169
+ /**
170
+ * Called before the comment list is returned for an author-scoped query
171
+ * (i.e. when `authorId` is present in `GET /comments`). Throw to reject.
172
+ *
173
+ * When this hook is **absent**, any request that includes `authorId` is
174
+ * automatically rejected with 403 — preventing anonymous callers from
175
+ * reading or probing any user's comment history.
176
+ */
177
+ onBeforeListByAuthor?: (authorId: string, query: z.infer<typeof CommentListQuerySchema>, context: CommentsApiContext) => Promise<void> | void;
178
+ }
179
+ /**
180
+ * Configuration options for the comments backend plugin.
181
+ *
182
+ * TypeScript enforces the security-critical hooks based on `allowPosting`:
183
+ * - When `allowPosting` is absent or `true`, `onBeforePost` and
184
+ * `resolveCurrentUserId` are **required**.
185
+ * - When `allowPosting` is `false`, both become optional (the POST endpoint
186
+ * is not registered so neither hook is ever called).
187
+ */
188
+ type CommentsBackendOptions = CommentsBackendOptionsBase & ({
189
+ /**
190
+ * Posting is enabled (default). `onBeforePost` and `resolveCurrentUserId`
191
+ * are required to prevent anonymous authorship and impersonation.
192
+ */
193
+ allowPosting?: true;
194
+ /**
195
+ * Called before a comment is created. Must return `{ authorId: string }` —
196
+ * the server-resolved identity of the commenter.
197
+ *
198
+ * ⚠️ SECURITY REQUIRED: Derive `authorId` from the authenticated session
199
+ * (e.g. JWT / session cookie). Never trust any ID supplied by the client.
200
+ * Throw to reject the request (e.g. when the user is not authenticated).
201
+ *
202
+ * `authorId` is intentionally absent from the POST body schema. This hook
203
+ * is the only place it can be set.
204
+ */
205
+ onBeforePost: (input: z.infer<typeof createCommentSchema>, context: CommentsApiContext) => Promise<{
206
+ authorId: string;
207
+ }> | {
208
+ authorId: string;
209
+ };
210
+ /**
211
+ * Resolve the current authenticated user's ID from the request context
212
+ * (e.g. session cookie or JWT). Used to include the user's own pending
213
+ * comments alongside approved ones in `GET /comments` responses so they
214
+ * remain visible immediately after posting.
215
+ *
216
+ * Return `null` or `undefined` for unauthenticated requests.
217
+ *
218
+ * ```ts
219
+ * resolveCurrentUserId: async (ctx) => {
220
+ * const session = await getSession(ctx.headers)
221
+ * return session?.user?.id ?? null
222
+ * }
223
+ * ```
224
+ */
225
+ resolveCurrentUserId: (context: CommentsApiContext) => Promise<string | null | undefined> | string | null | undefined;
226
+ } | {
227
+ /**
228
+ * When `false`, the `POST /comments` endpoint is not registered.
229
+ * No new comments or replies can be submitted — users can only read
230
+ * existing comments. `onBeforePost` and `resolveCurrentUserId` become
231
+ * optional because they are never called.
232
+ */
233
+ allowPosting: false;
234
+ onBeforePost?: (input: z.infer<typeof createCommentSchema>, context: CommentsApiContext) => Promise<{
235
+ authorId: string;
236
+ }> | {
237
+ authorId: string;
238
+ };
239
+ resolveCurrentUserId?: (context: CommentsApiContext) => Promise<string | null | undefined> | string | null | undefined;
240
+ });
241
+ declare const commentsBackendPlugin: (options: CommentsBackendOptions) => _btst_stack_plugins_api.BackendPlugin<{
242
+ readonly getCommentCount: better_call.StrictEndpoint<"/comments/count", {} & {
243
+ method: "GET";
244
+ } & {
245
+ query: better_call.StandardSchemaV1<{
246
+ resourceId: string;
247
+ resourceType: string;
248
+ status?: "pending" | "approved" | "spam" | undefined;
249
+ }, {
250
+ resourceId: string;
251
+ resourceType: string;
252
+ status?: "pending" | "approved" | "spam" | undefined;
253
+ }>;
254
+ }, {
255
+ count: number;
256
+ }>;
257
+ readonly toggleLike: better_call.StrictEndpoint<"/comments/:id/like", {} & {
258
+ method: "POST";
259
+ body: better_call.StandardSchemaV1<{
260
+ authorId: string;
261
+ }, {
262
+ authorId: string;
263
+ }>;
264
+ }, {
265
+ likes: number;
266
+ isLiked: boolean;
267
+ }>;
268
+ readonly updateCommentStatus: better_call.StrictEndpoint<"/comments/:id/status", {} & {
269
+ method: "PATCH";
270
+ body: better_call.StandardSchemaV1<{
271
+ status: "pending" | "approved" | "spam";
272
+ }, {
273
+ status: "pending" | "approved" | "spam";
274
+ }>;
275
+ }, SerializedComment>;
276
+ readonly deleteComment: better_call.StrictEndpoint<"/comments/:id", {} & {
277
+ method: "DELETE";
278
+ body: better_call.StandardSchemaV1<unknown, unknown>;
279
+ }, {
280
+ success: boolean;
281
+ }>;
282
+ readonly updateComment?: better_call.StrictEndpoint<"/comments/:id", {} & {
283
+ method: "PATCH";
284
+ body: better_call.StandardSchemaV1<{
285
+ body: string;
286
+ }, {
287
+ body: string;
288
+ }>;
289
+ }, SerializedComment> | undefined;
290
+ readonly createComment?: better_call.StrictEndpoint<"/comments", {} & {
291
+ method: "POST";
292
+ body: better_call.StandardSchemaV1<{
293
+ resourceId: string;
294
+ resourceType: string;
295
+ body: string;
296
+ parentId?: string | null | undefined;
297
+ }, {
298
+ resourceId: string;
299
+ resourceType: string;
300
+ body: string;
301
+ parentId?: string | null | undefined;
302
+ }>;
303
+ }, SerializedComment> | undefined;
304
+ readonly listComments: better_call.StrictEndpoint<"/comments", {} & {
305
+ method: "GET";
306
+ } & {
307
+ query: better_call.StandardSchemaV1<{
308
+ resourceId?: string | undefined;
309
+ resourceType?: string | undefined;
310
+ parentId?: string | null | undefined;
311
+ status?: "pending" | "approved" | "spam" | undefined;
312
+ authorId?: string | undefined;
313
+ sort?: "asc" | "desc" | undefined;
314
+ limit?: unknown;
315
+ offset?: unknown;
316
+ }, {
317
+ resourceId?: string | undefined;
318
+ resourceType?: string | undefined;
319
+ parentId?: string | null | undefined;
320
+ status?: "pending" | "approved" | "spam" | undefined;
321
+ authorId?: string | undefined;
322
+ sort?: "asc" | "desc" | undefined;
323
+ limit?: unknown;
324
+ offset?: unknown;
325
+ }>;
326
+ }, CommentListResult>;
327
+ }, {
328
+ listComments: (params: z.infer<typeof CommentListParamsSchema>) => Promise<CommentListResult>;
329
+ getCommentById: (id: string, currentUserId?: string) => Promise<SerializedComment | null>;
330
+ getCommentCount: (params: z.infer<typeof CommentCountQuerySchema>) => Promise<number>;
331
+ }>;
332
+ type CommentsApiRouter = ReturnType<ReturnType<typeof commentsBackendPlugin>["routes"]>;
333
+
334
+ export { CommentListParamsSchema as a, CommentCountQuerySchema as b, commentsBackendPlugin as c };
335
+ export type { CommentsApiRouter as C, CommentsApiContext as d, CommentsBackendOptions as e };
@@ -1,8 +1,8 @@
1
1
  import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
2
- import * as better_call from 'better-call';
3
2
  import { S as SerializedForm, b as SerializedFormSubmissionWithData, F as Form, d as FormSubmission, a as SerializedFormSubmission, e as FormSubmissionWithForm, f as FormBuilderBackendConfig } from './stack.BozPgbrZ.mjs';
3
+ import * as better_call from 'better-call';
4
4
  import { z } from 'zod';
5
- import { Adapter } from '@btst/db';
5
+ import { DBAdapter } from '@btst/db';
6
6
  import { QueryClient } from '@tanstack/react-query';
7
7
 
8
8
  /**
@@ -30,7 +30,7 @@ declare function serializeFormSubmissionWithData(submission: FormSubmissionWithF
30
30
  * @param adapter - The database adapter
31
31
  * @param params - Optional filter/pagination parameters
32
32
  */
33
- declare function getAllForms(adapter: Adapter, params?: {
33
+ declare function getAllForms(adapter: DBAdapter, params?: {
34
34
  status?: string;
35
35
  limit?: number;
36
36
  offset?: number;
@@ -51,7 +51,7 @@ declare function getAllForms(adapter: Adapter, params?: {
51
51
  * @param adapter - The database adapter
52
52
  * @param id - The form UUID
53
53
  */
54
- declare function getFormById(adapter: Adapter, id: string): Promise<SerializedForm | null>;
54
+ declare function getFormById(adapter: DBAdapter, id: string): Promise<SerializedForm | null>;
55
55
  /**
56
56
  * Retrieve a single form by its slug.
57
57
  * Returns null if the form is not found.
@@ -63,7 +63,7 @@ declare function getFormById(adapter: Adapter, id: string): Promise<SerializedFo
63
63
  * @param adapter - The database adapter
64
64
  * @param slug - The form slug
65
65
  */
66
- declare function getFormBySlug(adapter: Adapter, slug: string): Promise<SerializedForm | null>;
66
+ declare function getFormBySlug(adapter: DBAdapter, slug: string): Promise<SerializedForm | null>;
67
67
  /**
68
68
  * Retrieve submissions for a form by form ID, with optional pagination.
69
69
  * Returns an empty result if the form does not exist.
@@ -76,7 +76,7 @@ declare function getFormBySlug(adapter: Adapter, slug: string): Promise<Serializ
76
76
  * @param formId - The form ID
77
77
  * @param params - Optional pagination parameters
78
78
  */
79
- declare function getFormSubmissions(adapter: Adapter, formId: string, params?: {
79
+ declare function getFormSubmissions(adapter: DBAdapter, formId: string, params?: {
80
80
  limit?: number;
81
81
  offset?: number;
82
82
  }): Promise<{
@@ -104,17 +104,18 @@ interface FormBuilderPrefetchForRoute {
104
104
  * @param config - Configuration with optional hooks
105
105
  */
106
106
  declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _btst_stack_plugins_api.BackendPlugin<{
107
- listForms: better_call.StrictEndpoint<"/forms", {
107
+ listForms: better_call.StrictEndpoint<"/forms", {} & {
108
108
  method: "GET";
109
- query: z.ZodObject<{
110
- status: z.ZodOptional<z.ZodEnum<{
111
- active: "active";
112
- inactive: "inactive";
113
- archived: "archived";
114
- }>>;
115
- limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
116
- offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
117
- }, z.core.$strip>;
109
+ } & {
110
+ query: better_call.StandardSchemaV1<{
111
+ status?: "active" | "inactive" | "archived" | undefined;
112
+ limit?: unknown;
113
+ offset?: unknown;
114
+ }, {
115
+ status?: "active" | "inactive" | "archived" | undefined;
116
+ limit?: unknown;
117
+ offset?: unknown;
118
+ }>;
118
119
  }, {
119
120
  items: SerializedForm[];
120
121
  total: number;
@@ -122,68 +123,88 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
122
123
  offset?: number;
123
124
  }>;
124
125
  getFormBySlug: better_call.StrictEndpoint<"/forms/:slug", {
125
- method: "GET";
126
126
  params: z.ZodObject<{
127
127
  slug: z.ZodString;
128
128
  }, z.core.$strip>;
129
+ } & {
130
+ method: "GET";
129
131
  }, SerializedForm>;
130
132
  getFormById: better_call.StrictEndpoint<"/forms/id/:id", {
131
- method: "GET";
132
133
  params: z.ZodObject<{
133
134
  id: z.ZodString;
134
135
  }, z.core.$strip>;
136
+ } & {
137
+ method: "GET";
135
138
  }, SerializedForm>;
136
- createForm: better_call.StrictEndpoint<"/forms", {
139
+ createForm: better_call.StrictEndpoint<"/forms", {} & {
137
140
  method: "POST";
138
- body: z.ZodObject<{
139
- name: z.ZodString;
140
- slug: z.ZodString;
141
- description: z.ZodOptional<z.ZodString>;
142
- schema: z.ZodString;
143
- successMessage: z.ZodOptional<z.ZodString>;
144
- redirectUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
145
- status: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
146
- active: "active";
147
- inactive: "inactive";
148
- archived: "archived";
149
- }>>>;
150
- }, z.core.$strip>;
141
+ body: better_call.StandardSchemaV1<{
142
+ name: string;
143
+ slug: string;
144
+ schema: string;
145
+ description?: string | undefined;
146
+ successMessage?: string | undefined;
147
+ redirectUrl?: string | undefined;
148
+ status?: "active" | "inactive" | "archived" | undefined;
149
+ }, {
150
+ name: string;
151
+ slug: string;
152
+ schema: string;
153
+ description?: string | undefined;
154
+ successMessage?: string | undefined;
155
+ redirectUrl?: string | undefined;
156
+ status?: "active" | "inactive" | "archived" | undefined;
157
+ }>;
151
158
  }, SerializedForm>;
152
159
  updateForm: better_call.StrictEndpoint<"/forms/:id", {
153
- method: "PUT";
154
160
  params: z.ZodObject<{
155
161
  id: z.ZodString;
156
162
  }, z.core.$strip>;
157
- body: z.ZodObject<{
158
- name: z.ZodOptional<z.ZodString>;
159
- slug: z.ZodOptional<z.ZodString>;
160
- description: z.ZodOptional<z.ZodString>;
161
- schema: z.ZodOptional<z.ZodString>;
162
- successMessage: z.ZodOptional<z.ZodString>;
163
- redirectUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
164
- status: z.ZodOptional<z.ZodEnum<{
165
- active: "active";
166
- inactive: "inactive";
167
- archived: "archived";
168
- }>>;
169
- }, z.core.$strip>;
163
+ } & {
164
+ method: "PUT";
165
+ body: better_call.StandardSchemaV1<{
166
+ name?: string | undefined;
167
+ slug?: string | undefined;
168
+ description?: string | undefined;
169
+ schema?: string | undefined;
170
+ successMessage?: string | undefined;
171
+ redirectUrl?: string | undefined;
172
+ status?: "active" | "inactive" | "archived" | undefined;
173
+ }, {
174
+ name?: string | undefined;
175
+ slug?: string | undefined;
176
+ description?: string | undefined;
177
+ schema?: string | undefined;
178
+ successMessage?: string | undefined;
179
+ redirectUrl?: string | undefined;
180
+ status?: "active" | "inactive" | "archived" | undefined;
181
+ }>;
170
182
  }, SerializedForm>;
171
183
  deleteForm: better_call.StrictEndpoint<"/forms/:id", {
172
- method: "DELETE";
173
184
  params: z.ZodObject<{
174
185
  id: z.ZodString;
175
186
  }, z.core.$strip>;
187
+ } & {
188
+ method: "DELETE";
189
+ body: better_call.StandardSchemaV1<unknown, unknown>;
176
190
  }, {
177
191
  success: boolean;
178
192
  }>;
179
193
  submitForm: better_call.StrictEndpoint<"/forms/:slug/submit", {
180
- method: "POST";
181
194
  params: z.ZodObject<{
182
195
  slug: z.ZodString;
183
196
  }, z.core.$strip>;
184
- body: z.ZodObject<{
185
- data: z.ZodObject<{}, z.core.$loose>;
186
- }, z.core.$strip>;
197
+ } & {
198
+ method: "POST";
199
+ body: better_call.StandardSchemaV1<{
200
+ data: {
201
+ [x: string]: unknown;
202
+ };
203
+ }, {
204
+ data: {
205
+ [x: string]: unknown;
206
+ };
207
+ }>;
187
208
  }, {
188
209
  form: {
189
210
  successMessage: string | undefined;
@@ -198,14 +219,19 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
198
219
  userAgent?: string | undefined;
199
220
  }>;
200
221
  listSubmissions: better_call.StrictEndpoint<"/forms/:formId/submissions", {
201
- method: "GET";
202
222
  params: z.ZodObject<{
203
223
  formId: z.ZodString;
204
224
  }, z.core.$strip>;
205
- query: z.ZodObject<{
206
- limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
207
- offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
208
- }, z.core.$strip>;
225
+ } & {
226
+ method: "GET";
227
+ } & {
228
+ query: better_call.StandardSchemaV1<{
229
+ limit?: unknown;
230
+ offset?: unknown;
231
+ }, {
232
+ limit?: unknown;
233
+ offset?: unknown;
234
+ }>;
209
235
  }, {
210
236
  items: SerializedFormSubmissionWithData[];
211
237
  total: number;
@@ -213,18 +239,21 @@ declare const formBuilderBackendPlugin: (config?: FormBuilderBackendConfig) => _
213
239
  offset?: number;
214
240
  }>;
215
241
  getSubmission: better_call.StrictEndpoint<"/forms/:formId/submissions/:subId", {
216
- method: "GET";
217
242
  params: z.ZodObject<{
218
243
  formId: z.ZodString;
219
244
  subId: z.ZodString;
220
245
  }, z.core.$strip>;
246
+ } & {
247
+ method: "GET";
221
248
  }, SerializedFormSubmissionWithData<Record<string, unknown>>>;
222
249
  deleteSubmission: better_call.StrictEndpoint<"/forms/:formId/submissions/:subId", {
223
- method: "DELETE";
224
250
  params: z.ZodObject<{
225
251
  formId: z.ZodString;
226
252
  subId: z.ZodString;
227
253
  }, z.core.$strip>;
254
+ } & {
255
+ method: "DELETE";
256
+ body: better_call.StandardSchemaV1<unknown, unknown>;
228
257
  }, {
229
258
  success: boolean;
230
259
  }>;
@@ -1,4 +1,4 @@
1
- import { C as ComponentLayer, V as Variable } from './stack.B1srlBud.mjs';
1
+ import { C as ComponentLayer, V as Variable } from './stack.BFoBvGML.mjs';
2
2
 
3
3
  /**
4
4
  * UI Builder Page data structure
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { S as SerializedPost, c as createPostSchema, u as updatePostSchema, a as SerializedTag } from './stack.BQmuNl5p.js';
2
+ import { S as SerializedPost, c as createPostSchema, u as updatePostSchema, a as SerializedTag } from './stack.BWp0hcm9.mjs';
3
3
  import { z } from 'zod';
4
4
 
5
5
  /**
@@ -135,14 +135,14 @@ declare function useCreatePost(): _tanstack_react_query.UseMutationResult<Serial
135
135
  name: string;
136
136
  slug: string;
137
137
  })[];
138
+ published: boolean;
138
139
  title: string;
139
140
  content: string;
140
141
  excerpt: string;
141
- published: boolean;
142
142
  slug?: string | undefined;
143
+ publishedAt?: Date | undefined;
143
144
  createdAt?: Date | undefined;
144
145
  updatedAt?: Date | undefined;
145
- publishedAt?: Date | undefined;
146
146
  image?: string | undefined;
147
147
  }, unknown>;
148
148
  /** Update an existing post by id */
@@ -184,13 +184,10 @@ interface UseNextPreviousPostsResult {
184
184
  refetch: () => void;
185
185
  }
186
186
  /**
187
- * Hook for fetching previous and next posts relative to a given date
188
- * Uses useInView to only fetch when the component is in view
187
+ * Hook for fetching previous and next posts relative to a given date.
188
+ * Pair with `<WhenVisible>` in the render tree for lazy loading.
189
189
  */
190
- declare function useNextPreviousPosts(createdAt: string | Date, options?: UseNextPreviousPostsOptions): UseNextPreviousPostsResult & {
191
- ref: (node: Element | null) => void;
192
- inView: boolean;
193
- };
190
+ declare function useNextPreviousPosts(createdAt: string | Date, options?: UseNextPreviousPostsOptions): UseNextPreviousPostsResult;
194
191
  /**
195
192
  * Options for the useRecentPosts hook
196
193
  */
@@ -216,13 +213,10 @@ interface UseRecentPostsResult {
216
213
  refetch: () => void;
217
214
  }
218
215
  /**
219
- * Hook for fetching recent posts
220
- * Uses useInView to only fetch when the component is in view
216
+ * Hook for fetching recent posts.
217
+ * Pair with `<WhenVisible>` in the render tree for lazy loading.
221
218
  */
222
- declare function useRecentPosts(options?: UseRecentPostsOptions): UseRecentPostsResult & {
223
- ref: (node: Element | null) => void;
224
- inView: boolean;
225
- };
219
+ declare function useRecentPosts(options?: UseRecentPostsOptions): UseRecentPostsResult;
226
220
 
227
221
  export { useSuspensePosts as f, usePost as g, useSuspensePost as h, useTags as i, useSuspenseTags as j, useCreatePost as k, useUpdatePost as l, useDeletePost as m, usePostSearch as n, useNextPreviousPosts as q, useRecentPosts as t, usePosts as u };
228
222
  export type { PostCreateInput as P, UsePostsOptions as U, UsePostsResult as a, UsePostSearchOptions as b, UsePostSearchResult as c, UsePostResult as d, PostUpdateInput as e, UseNextPreviousPostsOptions as o, UseNextPreviousPostsResult as p, UseRecentPostsOptions as r, UseRecentPostsResult as s };