@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.js';
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,5 +1,5 @@
1
1
  import { ControllerRenderProps, FieldValues } from 'react-hook-form';
2
- import * as zod from 'zod';
2
+ import * as z from 'zod';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
 
5
5
  declare function AutoFormCheckbox({ label, isRequired, field, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react_jsx_runtime.JSX.Element;
@@ -249,7 +249,7 @@ type FieldConfigObject = FieldConfigItem & {
249
249
  * For object fields, allow both FieldConfigItem properties (label, description, etc.)
250
250
  * AND nested field configs for the object's properties.
251
251
  */
252
- type FieldConfig<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
252
+ type FieldConfig<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
253
253
  [Key in keyof SchemaType]?: FieldConfigItem | FieldConfigObject;
254
254
  };
255
255
  declare enum DependencyType {
@@ -258,21 +258,21 @@ declare enum DependencyType {
258
258
  HIDES = 2,
259
259
  SETS_OPTIONS = 3
260
260
  }
261
- type BaseDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
261
+ type BaseDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
262
262
  sourceField: keyof SchemaType;
263
263
  type: DependencyType;
264
264
  targetField: keyof SchemaType;
265
265
  when: (sourceFieldValue: any, targetFieldValue: any) => boolean;
266
266
  };
267
- type ValueDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
267
+ type ValueDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
268
268
  type: DependencyType.DISABLES | DependencyType.REQUIRES | DependencyType.HIDES;
269
269
  };
270
270
  type EnumValues = readonly [string, ...string[]];
271
- type OptionsDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
271
+ type OptionsDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
272
272
  type: DependencyType.SETS_OPTIONS;
273
273
  options: EnumValues;
274
274
  };
275
- type Dependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
275
+ type Dependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
276
276
  /**
277
277
  * A FormInput component can handle a specific Zod type (e.g. "ZodBoolean")
278
278
  */
@@ -283,7 +283,7 @@ type AutoFormInputComponentProps = {
283
283
  label: string;
284
284
  isRequired: boolean;
285
285
  fieldProps: any;
286
- zodItem: zod.ZodType;
286
+ zodItem: z.ZodType;
287
287
  className?: string;
288
288
  };
289
289
 
@@ -1,5 +1,5 @@
1
1
  import { ControllerRenderProps, FieldValues } from 'react-hook-form';
2
- import * as zod from 'zod';
2
+ import * as z from 'zod';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
 
5
5
  declare function AutoFormCheckbox({ label, isRequired, field, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react_jsx_runtime.JSX.Element;
@@ -249,7 +249,7 @@ type FieldConfigObject = FieldConfigItem & {
249
249
  * For object fields, allow both FieldConfigItem properties (label, description, etc.)
250
250
  * AND nested field configs for the object's properties.
251
251
  */
252
- type FieldConfig<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
252
+ type FieldConfig<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
253
253
  [Key in keyof SchemaType]?: FieldConfigItem | FieldConfigObject;
254
254
  };
255
255
  declare enum DependencyType {
@@ -258,21 +258,21 @@ declare enum DependencyType {
258
258
  HIDES = 2,
259
259
  SETS_OPTIONS = 3
260
260
  }
261
- type BaseDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
261
+ type BaseDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
262
262
  sourceField: keyof SchemaType;
263
263
  type: DependencyType;
264
264
  targetField: keyof SchemaType;
265
265
  when: (sourceFieldValue: any, targetFieldValue: any) => boolean;
266
266
  };
267
- type ValueDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
267
+ type ValueDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
268
268
  type: DependencyType.DISABLES | DependencyType.REQUIRES | DependencyType.HIDES;
269
269
  };
270
270
  type EnumValues = readonly [string, ...string[]];
271
- type OptionsDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
271
+ type OptionsDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
272
272
  type: DependencyType.SETS_OPTIONS;
273
273
  options: EnumValues;
274
274
  };
275
- type Dependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
275
+ type Dependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
276
276
  /**
277
277
  * A FormInput component can handle a specific Zod type (e.g. "ZodBoolean")
278
278
  */
@@ -283,7 +283,7 @@ type AutoFormInputComponentProps = {
283
283
  label: string;
284
284
  isRequired: boolean;
285
285
  fieldProps: any;
286
- zodItem: zod.ZodType;
286
+ zodItem: z.ZodType;
287
287
  className?: string;
288
288
  };
289
289
 
@@ -1,5 +1,5 @@
1
1
  import { ControllerRenderProps, FieldValues } from 'react-hook-form';
2
- import * as zod from 'zod';
2
+ import * as z from 'zod';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
 
5
5
  declare function AutoFormCheckbox({ label, isRequired, field, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react_jsx_runtime.JSX.Element;
@@ -249,7 +249,7 @@ type FieldConfigObject = FieldConfigItem & {
249
249
  * For object fields, allow both FieldConfigItem properties (label, description, etc.)
250
250
  * AND nested field configs for the object's properties.
251
251
  */
252
- type FieldConfig<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
252
+ type FieldConfig<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
253
253
  [Key in keyof SchemaType]?: FieldConfigItem | FieldConfigObject;
254
254
  };
255
255
  declare enum DependencyType {
@@ -258,21 +258,21 @@ declare enum DependencyType {
258
258
  HIDES = 2,
259
259
  SETS_OPTIONS = 3
260
260
  }
261
- type BaseDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = {
261
+ type BaseDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = {
262
262
  sourceField: keyof SchemaType;
263
263
  type: DependencyType;
264
264
  targetField: keyof SchemaType;
265
265
  when: (sourceFieldValue: any, targetFieldValue: any) => boolean;
266
266
  };
267
- type ValueDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
267
+ type ValueDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
268
268
  type: DependencyType.DISABLES | DependencyType.REQUIRES | DependencyType.HIDES;
269
269
  };
270
270
  type EnumValues = readonly [string, ...string[]];
271
- type OptionsDependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
271
+ type OptionsDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = BaseDependency<SchemaType> & {
272
272
  type: DependencyType.SETS_OPTIONS;
273
273
  options: EnumValues;
274
274
  };
275
- type Dependency<SchemaType extends zod.infer<zod.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
275
+ type Dependency<SchemaType extends z.infer<z.ZodObject<any, any>>> = ValueDependency<SchemaType> | OptionsDependency<SchemaType>;
276
276
  /**
277
277
  * A FormInput component can handle a specific Zod type (e.g. "ZodBoolean")
278
278
  */
@@ -283,7 +283,7 @@ type AutoFormInputComponentProps = {
283
283
  label: string;
284
284
  isRequired: boolean;
285
285
  fieldProps: any;
286
- zodItem: zod.ZodType;
286
+ zodItem: z.ZodType;
287
287
  className?: string;
288
288
  };
289
289
 
@@ -1,5 +1,5 @@
1
1
  import { Route, createRouter } from '@btst/yar';
2
- import { Adapter, DbPlugin, DatabaseDefinition } from '@btst/db';
2
+ import { DBAdapter, DbPlugin, DatabaseDefinition } from '@btst/db';
3
3
  import { Endpoint, Router } from 'better-call';
4
4
 
5
5
  /**
@@ -12,7 +12,7 @@ interface StackContext {
12
12
  /** The API base path (e.g., "/api/data") */
13
13
  basePath: string;
14
14
  /** The database adapter */
15
- adapter: Adapter;
15
+ adapter: DBAdapter;
16
16
  }
17
17
  /**
18
18
  * Context passed to client plugins during route creation
@@ -47,7 +47,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
47
47
  * create, update, updateMany, delete, deleteMany, findOne, findMany, count
48
48
  * @param context - Optional context with access to all plugins (for introspection)
49
49
  */
50
- routes: (adapter: Adapter, context?: StackContext) => TRoutes;
50
+ routes: (adapter: DBAdapter, context?: StackContext) => TRoutes;
51
51
  dbPlugin: DbPlugin;
52
52
  /**
53
53
  * Optional factory that returns server-side getter functions bound to the adapter.
@@ -56,7 +56,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
56
56
  *
57
57
  * @param adapter - The adapter instance shared with `routes`
58
58
  */
59
- api?: (adapter: Adapter) => TApi;
59
+ api?: (adapter: DBAdapter) => TApi;
60
60
  }
61
61
  /**
62
62
  * Frontend plugin definition
@@ -99,7 +99,7 @@ interface BackendLibConfig<TPlugins extends Record<string, BackendPlugin<any, an
99
99
  basePath: string;
100
100
  dbSchema?: DatabaseDefinition;
101
101
  plugins: TPlugins;
102
- adapter: (db: DatabaseDefinition) => Adapter;
102
+ adapter: (db: DatabaseDefinition) => DBAdapter;
103
103
  }
104
104
  /**
105
105
  * Configuration for creating the client library
@@ -144,7 +144,7 @@ interface BackendLib<TRoutes extends Record<string, Endpoint> = Record<string, E
144
144
  router: Router;
145
145
  dbSchema: DatabaseDefinition;
146
146
  /** The database adapter shared across all plugins */
147
- adapter: Adapter;
147
+ adapter: DBAdapter;
148
148
  /** Fully-typed server-side getter functions, namespaced per plugin */
149
149
  api: TApis;
150
150
  }
@@ -1,5 +1,5 @@
1
1
  import { Route, createRouter } from '@btst/yar';
2
- import { Adapter, DbPlugin, DatabaseDefinition } from '@btst/db';
2
+ import { DBAdapter, DbPlugin, DatabaseDefinition } from '@btst/db';
3
3
  import { Endpoint, Router } from 'better-call';
4
4
 
5
5
  /**
@@ -12,7 +12,7 @@ interface StackContext {
12
12
  /** The API base path (e.g., "/api/data") */
13
13
  basePath: string;
14
14
  /** The database adapter */
15
- adapter: Adapter;
15
+ adapter: DBAdapter;
16
16
  }
17
17
  /**
18
18
  * Context passed to client plugins during route creation
@@ -47,7 +47,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
47
47
  * create, update, updateMany, delete, deleteMany, findOne, findMany, count
48
48
  * @param context - Optional context with access to all plugins (for introspection)
49
49
  */
50
- routes: (adapter: Adapter, context?: StackContext) => TRoutes;
50
+ routes: (adapter: DBAdapter, context?: StackContext) => TRoutes;
51
51
  dbPlugin: DbPlugin;
52
52
  /**
53
53
  * Optional factory that returns server-side getter functions bound to the adapter.
@@ -56,7 +56,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
56
56
  *
57
57
  * @param adapter - The adapter instance shared with `routes`
58
58
  */
59
- api?: (adapter: Adapter) => TApi;
59
+ api?: (adapter: DBAdapter) => TApi;
60
60
  }
61
61
  /**
62
62
  * Frontend plugin definition
@@ -99,7 +99,7 @@ interface BackendLibConfig<TPlugins extends Record<string, BackendPlugin<any, an
99
99
  basePath: string;
100
100
  dbSchema?: DatabaseDefinition;
101
101
  plugins: TPlugins;
102
- adapter: (db: DatabaseDefinition) => Adapter;
102
+ adapter: (db: DatabaseDefinition) => DBAdapter;
103
103
  }
104
104
  /**
105
105
  * Configuration for creating the client library
@@ -144,7 +144,7 @@ interface BackendLib<TRoutes extends Record<string, Endpoint> = Record<string, E
144
144
  router: Router;
145
145
  dbSchema: DatabaseDefinition;
146
146
  /** The database adapter shared across all plugins */
147
- adapter: Adapter;
147
+ adapter: DBAdapter;
148
148
  /** Fully-typed server-side getter functions, namespaced per plugin */
149
149
  api: TApis;
150
150
  }
@@ -1,5 +1,5 @@
1
1
  import { Route, createRouter } from '@btst/yar';
2
- import { Adapter, DbPlugin, DatabaseDefinition } from '@btst/db';
2
+ import { DBAdapter, DbPlugin, DatabaseDefinition } from '@btst/db';
3
3
  import { Endpoint, Router } from 'better-call';
4
4
 
5
5
  /**
@@ -12,7 +12,7 @@ interface StackContext {
12
12
  /** The API base path (e.g., "/api/data") */
13
13
  basePath: string;
14
14
  /** The database adapter */
15
- adapter: Adapter;
15
+ adapter: DBAdapter;
16
16
  }
17
17
  /**
18
18
  * Context passed to client plugins during route creation
@@ -47,7 +47,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
47
47
  * create, update, updateMany, delete, deleteMany, findOne, findMany, count
48
48
  * @param context - Optional context with access to all plugins (for introspection)
49
49
  */
50
- routes: (adapter: Adapter, context?: StackContext) => TRoutes;
50
+ routes: (adapter: DBAdapter, context?: StackContext) => TRoutes;
51
51
  dbPlugin: DbPlugin;
52
52
  /**
53
53
  * Optional factory that returns server-side getter functions bound to the adapter.
@@ -56,7 +56,7 @@ interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string
56
56
  *
57
57
  * @param adapter - The adapter instance shared with `routes`
58
58
  */
59
- api?: (adapter: Adapter) => TApi;
59
+ api?: (adapter: DBAdapter) => TApi;
60
60
  }
61
61
  /**
62
62
  * Frontend plugin definition
@@ -99,7 +99,7 @@ interface BackendLibConfig<TPlugins extends Record<string, BackendPlugin<any, an
99
99
  basePath: string;
100
100
  dbSchema?: DatabaseDefinition;
101
101
  plugins: TPlugins;
102
- adapter: (db: DatabaseDefinition) => Adapter;
102
+ adapter: (db: DatabaseDefinition) => DBAdapter;
103
103
  }
104
104
  /**
105
105
  * Configuration for creating the client library
@@ -144,7 +144,7 @@ interface BackendLib<TRoutes extends Record<string, Endpoint> = Record<string, E
144
144
  router: Router;
145
145
  dbSchema: DatabaseDefinition;
146
146
  /** The database adapter shared across all plugins */
147
- adapter: Adapter;
147
+ adapter: DBAdapter;
148
148
  /** Fully-typed server-side getter functions, namespaced per plugin */
149
149
  api: TApis;
150
150
  }