@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.
- package/README.md +1 -0
- package/dist/api/index.d.cts +2 -2
- package/dist/api/index.d.mts +2 -2
- package/dist/api/index.d.ts +2 -2
- package/dist/client/index.d.cts +2 -2
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/components/auto-form/index.d.cts +2 -2
- package/dist/components/auto-form/index.d.mts +2 -2
- package/dist/components/auto-form/index.d.ts +2 -2
- package/dist/components/form-builder/index.d.cts +1 -1
- package/dist/components/form-builder/index.d.mts +1 -1
- package/dist/components/form-builder/index.d.ts +1 -1
- package/dist/components/stepped-auto-form/index.d.cts +1 -1
- package/dist/components/stepped-auto-form/index.d.mts +1 -1
- package/dist/components/stepped-auto-form/index.d.ts +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/packages/stack/src/plugins/blog/client/components/loading/post-navigation-skeleton.cjs +13 -0
- package/dist/packages/stack/src/plugins/blog/client/components/loading/post-navigation-skeleton.mjs +11 -0
- package/dist/packages/stack/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.cjs +17 -0
- package/dist/packages/stack/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.mjs +15 -0
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.cjs +18 -7
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.mjs +18 -7
- package/dist/packages/stack/src/plugins/blog/client/components/shared/post-navigation.cjs +48 -52
- package/dist/packages/stack/src/plugins/blog/client/components/shared/post-navigation.mjs +49 -53
- package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.cjs +34 -37
- package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.mjs +35 -38
- package/dist/packages/stack/src/plugins/blog/client/hooks/blog-hooks.cjs +4 -21
- package/dist/packages/stack/src/plugins/blog/client/hooks/blog-hooks.mjs +4 -21
- package/dist/packages/stack/src/plugins/comments/api/getters.cjs +284 -0
- package/dist/packages/stack/src/plugins/comments/api/getters.mjs +280 -0
- package/dist/packages/stack/src/plugins/comments/api/mutations.cjs +118 -0
- package/dist/packages/stack/src/plugins/comments/api/mutations.mjs +112 -0
- package/dist/packages/stack/src/plugins/comments/api/plugin.cjs +335 -0
- package/dist/packages/stack/src/plugins/comments/api/plugin.mjs +333 -0
- package/dist/packages/stack/src/plugins/comments/api/query-key-defs.cjs +60 -0
- package/dist/packages/stack/src/plugins/comments/api/query-key-defs.mjs +55 -0
- package/dist/packages/stack/src/plugins/comments/api/serializers.cjs +23 -0
- package/dist/packages/stack/src/plugins/comments/api/serializers.mjs +21 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-count.cjs +46 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-count.mjs +44 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-form.cjs +86 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-form.mjs +84 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.cjs +540 -0
- package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.mjs +538 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.cjs +64 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.cjs +426 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.mjs +424 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.mjs +62 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.cjs +66 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.cjs +256 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.mjs +254 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.mjs +64 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.cjs +86 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.cjs +191 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.mjs +189 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.mjs +84 -0
- package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.cjs +27 -0
- package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.mjs +25 -0
- package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.cjs +37 -0
- package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.mjs +35 -0
- package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.cjs +476 -0
- package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.mjs +464 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-moderation.cjs +67 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-moderation.mjs +65 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-my.cjs +27 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-my.mjs +25 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.cjs +30 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.mjs +28 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/index.cjs +13 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/index.mjs +11 -0
- package/dist/packages/stack/src/plugins/comments/client/plugin.cjs +116 -0
- package/dist/packages/stack/src/plugins/comments/client/plugin.mjs +114 -0
- package/dist/packages/stack/src/plugins/comments/client/utils.cjs +41 -0
- package/dist/packages/stack/src/plugins/comments/client/utils.mjs +37 -0
- package/dist/packages/stack/src/plugins/comments/db.cjs +75 -0
- package/dist/packages/stack/src/plugins/comments/db.mjs +73 -0
- package/dist/packages/stack/src/plugins/comments/schemas.cjs +45 -0
- package/dist/packages/stack/src/plugins/comments/schemas.mjs +38 -0
- package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +5 -4
- package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +5 -4
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.cjs +0 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.mjs +0 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.cjs +39 -22
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.mjs +40 -23
- package/dist/packages/ui/src/components/avatar.mjs +1 -1
- package/dist/packages/ui/src/components/pagination-controls.cjs +64 -0
- package/dist/packages/ui/src/components/pagination-controls.mjs +62 -0
- package/dist/packages/ui/src/components/when-visible.cjs +39 -0
- package/dist/packages/ui/src/components/when-visible.mjs +37 -0
- package/dist/plugins/ai-chat/api/index.d.cts +4 -6
- package/dist/plugins/ai-chat/api/index.d.mts +4 -6
- package/dist/plugins/ai-chat/api/index.d.ts +4 -6
- package/dist/plugins/ai-chat/client/hooks/index.d.cts +1 -3
- package/dist/plugins/ai-chat/client/hooks/index.d.mts +1 -3
- package/dist/plugins/ai-chat/client/hooks/index.d.ts +1 -3
- package/dist/plugins/ai-chat/query-keys.d.cts +1 -3
- package/dist/plugins/ai-chat/query-keys.d.mts +1 -3
- package/dist/plugins/ai-chat/query-keys.d.ts +1 -3
- package/dist/plugins/api/index.d.cts +3 -3
- package/dist/plugins/api/index.d.mts +3 -3
- package/dist/plugins/api/index.d.ts +3 -3
- package/dist/plugins/blog/api/index.d.cts +3 -3
- package/dist/plugins/blog/api/index.d.mts +3 -3
- package/dist/plugins/blog/api/index.d.ts +3 -3
- package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
- package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
- package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
- package/dist/plugins/blog/client/index.d.cts +25 -3
- package/dist/plugins/blog/client/index.d.mts +25 -3
- package/dist/plugins/blog/client/index.d.ts +25 -3
- package/dist/plugins/blog/query-keys.d.cts +3 -3
- package/dist/plugins/blog/query-keys.d.mts +3 -3
- package/dist/plugins/blog/query-keys.d.ts +3 -3
- package/dist/plugins/client/index.d.cts +2 -2
- package/dist/plugins/client/index.d.mts +2 -2
- package/dist/plugins/client/index.d.ts +2 -2
- package/dist/plugins/cms/api/index.d.cts +1 -1
- package/dist/plugins/cms/api/index.d.mts +1 -1
- package/dist/plugins/cms/api/index.d.ts +1 -1
- package/dist/plugins/cms/client/index.d.cts +1 -1
- package/dist/plugins/cms/client/index.d.mts +1 -1
- package/dist/plugins/cms/client/index.d.ts +1 -1
- package/dist/plugins/cms/query-keys.d.cts +1 -1
- package/dist/plugins/cms/query-keys.d.mts +1 -1
- package/dist/plugins/cms/query-keys.d.ts +1 -1
- package/dist/plugins/comments/api/index.cjs +21 -0
- package/dist/plugins/comments/api/index.d.cts +126 -0
- package/dist/plugins/comments/api/index.d.mts +126 -0
- package/dist/plugins/comments/api/index.d.ts +126 -0
- package/dist/plugins/comments/api/index.mjs +5 -0
- package/dist/plugins/comments/client/components/index.cjs +15 -0
- package/dist/plugins/comments/client/components/index.d.cts +125 -0
- package/dist/plugins/comments/client/components/index.d.mts +125 -0
- package/dist/plugins/comments/client/components/index.d.ts +125 -0
- package/dist/plugins/comments/client/components/index.mjs +5 -0
- package/dist/plugins/comments/client/hooks/index.cjs +17 -0
- package/dist/plugins/comments/client/hooks/index.d.cts +200 -0
- package/dist/plugins/comments/client/hooks/index.d.mts +200 -0
- package/dist/plugins/comments/client/hooks/index.d.ts +200 -0
- package/dist/plugins/comments/client/hooks/index.mjs +1 -0
- package/dist/plugins/comments/client/index.cjs +9 -0
- package/dist/plugins/comments/client/index.d.cts +262 -0
- package/dist/plugins/comments/client/index.d.mts +262 -0
- package/dist/plugins/comments/client/index.d.ts +262 -0
- package/dist/plugins/comments/client/index.mjs +2 -0
- package/dist/plugins/comments/client.css +2 -0
- package/dist/plugins/comments/query-keys.cjs +113 -0
- package/dist/plugins/comments/query-keys.d.cts +71 -0
- package/dist/plugins/comments/query-keys.d.mts +71 -0
- package/dist/plugins/comments/query-keys.d.ts +71 -0
- package/dist/plugins/comments/query-keys.mjs +111 -0
- package/dist/plugins/comments/style.css +15 -0
- package/dist/plugins/form-builder/api/index.d.cts +2 -2
- package/dist/plugins/form-builder/api/index.d.mts +2 -2
- package/dist/plugins/form-builder/api/index.d.ts +2 -2
- package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
- package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
- package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
- package/dist/plugins/form-builder/client/index.d.cts +1 -1
- package/dist/plugins/form-builder/client/index.d.mts +1 -1
- package/dist/plugins/form-builder/client/index.d.ts +1 -1
- package/dist/plugins/form-builder/query-keys.d.cts +1 -1
- package/dist/plugins/form-builder/query-keys.d.mts +1 -1
- package/dist/plugins/form-builder/query-keys.d.ts +1 -1
- package/dist/plugins/kanban/api/index.d.cts +2 -2
- package/dist/plugins/kanban/api/index.d.mts +2 -2
- package/dist/plugins/kanban/api/index.d.ts +2 -2
- package/dist/plugins/kanban/client/hooks/index.d.cts +1 -1
- package/dist/plugins/kanban/client/hooks/index.d.mts +1 -1
- package/dist/plugins/kanban/client/hooks/index.d.ts +1 -1
- package/dist/plugins/kanban/client/index.d.cts +1 -1
- package/dist/plugins/kanban/client/index.d.mts +1 -1
- package/dist/plugins/kanban/client/index.d.ts +1 -1
- package/dist/plugins/kanban/query-keys.d.cts +2 -2
- package/dist/plugins/kanban/query-keys.d.mts +2 -2
- package/dist/plugins/kanban/query-keys.d.ts +2 -2
- package/dist/plugins/open-api/api/index.d.cts +3 -3
- package/dist/plugins/open-api/api/index.d.mts +3 -3
- package/dist/plugins/open-api/api/index.d.ts +3 -3
- package/dist/plugins/route-docs/client/index.d.cts +1 -1
- package/dist/plugins/route-docs/client/index.d.mts +1 -1
- package/dist/plugins/route-docs/client/index.d.ts +1 -1
- package/dist/plugins/ui-builder/client/components/index.d.cts +2 -2
- package/dist/plugins/ui-builder/client/components/index.d.mts +2 -2
- package/dist/plugins/ui-builder/client/components/index.d.ts +2 -2
- package/dist/plugins/ui-builder/client/hooks/index.d.cts +3 -3
- package/dist/plugins/ui-builder/client/hooks/index.d.mts +3 -3
- package/dist/plugins/ui-builder/client/hooks/index.d.ts +3 -3
- package/dist/plugins/ui-builder/client/index.d.cts +3 -3
- package/dist/plugins/ui-builder/client/index.d.mts +3 -3
- package/dist/plugins/ui-builder/client/index.d.ts +3 -3
- package/dist/plugins/ui-builder/index.d.cts +3 -3
- package/dist/plugins/ui-builder/index.d.mts +3 -3
- package/dist/plugins/ui-builder/index.d.ts +3 -3
- package/dist/shared/{stack.B1srlBud.d.mts → stack.BFoBvGML.d.mts} +1 -1
- package/dist/shared/{stack.DmpPDPxA.d.cts → stack.BOCvd9HK.d.cts} +1 -1
- package/dist/shared/{stack.n1_i1p2B.d.cts → stack.BOokfhZD.d.cts} +170 -110
- package/dist/shared/{stack.DXnclTG7.d.ts → stack.BSqJrCTM.d.cts} +120 -59
- package/dist/shared/{stack.B58oHdqm.d.mts → stack.BX7MHi0J.d.mts} +90 -45
- package/dist/shared/{stack.cfCkioTe.d.mts → stack.BXxrFL9R.d.ts} +120 -59
- package/dist/shared/{stack.CSx98K5H.d.cts → stack.BYN8wCV6.d.cts} +87 -58
- package/dist/shared/{stack.FVWf2JhZ.d.mts → stack.BgQrdSlo.d.mts} +60 -45
- package/dist/shared/{stack.BK9Z2dcL.d.ts → stack.BmMB0LNC.d.ts} +1 -1
- package/dist/shared/{stack.j75TpKh2.d.ts → stack.BvCR4-9H.d.ts} +170 -110
- package/dist/shared/{stack.FeaWkglm.d.ts → stack.BxFl46lB.d.cts} +24 -1
- package/dist/shared/stack.C-b3Sn8j.d.cts +142 -0
- package/dist/shared/stack.C-b3Sn8j.d.mts +142 -0
- package/dist/shared/stack.C-b3Sn8j.d.ts +142 -0
- package/dist/shared/{stack.CFECM0ew.d.cts → stack.C1nXGBr6.d.cts} +1 -1
- package/dist/shared/{stack.C9Mg2Q46.d.cts → stack.C9zoS1TN.d.cts} +90 -45
- package/dist/shared/stack.CJE9sAjV.d.ts +335 -0
- package/dist/shared/{stack.fdi94T4S.d.mts → stack.CPsYC2-Z.d.cts} +7 -7
- package/dist/shared/{stack.fdi94T4S.d.ts → stack.CPsYC2-Z.d.mts} +7 -7
- package/dist/shared/{stack.fdi94T4S.d.cts → stack.CPsYC2-Z.d.ts} +7 -7
- package/dist/shared/{stack.7n9Y_u7N.d.cts → stack.CQnwAN7x.d.cts} +6 -6
- package/dist/shared/{stack.7n9Y_u7N.d.mts → stack.CQnwAN7x.d.mts} +6 -6
- package/dist/shared/{stack.7n9Y_u7N.d.ts → stack.CQnwAN7x.d.ts} +6 -6
- package/dist/shared/{stack.CxaFNQCV.d.mts → stack.CWxAl9K3.d.mts} +170 -110
- package/dist/shared/{stack.D-b5zbPm.d.cts → stack.Cbsrl06u.d.cts} +60 -45
- package/dist/shared/stack.CmHRdhl8.d.cts +335 -0
- package/dist/shared/{stack.BgTmujxW.d.mts → stack.D88yU4FT.d.mts} +87 -58
- package/dist/shared/{stack.DVtk5CNw.d.mts → stack.DLPa6Gzm.d.mts} +1 -1
- package/dist/shared/{stack.BAT540yW.d.ts → stack.DOZ1EXjM.d.mts} +9 -15
- package/dist/shared/{stack.FeaWkglm.d.mts → stack.DRpeDS6X.d.ts} +24 -1
- package/dist/shared/{stack.B8vT-Yt4.d.mts → stack.DX-tQ93o.d.cts} +9 -15
- package/dist/shared/stack.Dcz6636A.d.mts +335 -0
- package/dist/shared/{stack.ASwEoINr.d.ts → stack.DxJ-tHLt.d.ts} +1 -1
- package/dist/shared/{stack.DaZM10cp.d.cts → stack.DzOhpIYM.d.mts} +120 -59
- package/dist/shared/{stack.CTDVxbrA.d.ts → stack.Fl2Kl_bt.d.ts} +60 -45
- package/dist/shared/{stack.FeaWkglm.d.cts → stack.Jb0kQDJC.d.mts} +24 -1
- package/dist/shared/stack.Ldfkr5b2.d.cts +112 -0
- package/dist/shared/stack.Ldfkr5b2.d.mts +112 -0
- package/dist/shared/stack.Ldfkr5b2.d.ts +112 -0
- package/dist/shared/{stack.CLQuVdwK.d.ts → stack.RuQ9JCLo.d.ts} +87 -58
- package/dist/shared/{stack.BwA7trxA.d.cts → stack.VF6FhyZw.d.ts} +9 -15
- package/dist/shared/{stack.sO33ZDhK.d.ts → stack.fQjVhw5a.d.ts} +90 -45
- package/package.json +70 -5
- package/src/__tests__/plugins.test.tsx +5 -1
- package/src/__tests__/stack-api.test.ts +1 -1
- package/src/plugins/ai-chat/__tests__/getters.test.ts +1 -1
- package/src/plugins/ai-chat/api/getters.ts +1 -1
- package/src/plugins/ai-chat/api/plugin.ts +1 -1
- package/src/plugins/api/index.ts +5 -1
- package/src/plugins/blog/__tests__/getters.test.ts +1 -1
- package/src/plugins/blog/api/getters.ts +1 -1
- package/src/plugins/blog/api/plugin.ts +1 -1
- package/src/plugins/blog/client/components/loading/post-navigation-skeleton.tsx +10 -0
- package/src/plugins/blog/client/components/loading/recent-posts-carousel-skeleton.tsx +18 -0
- package/src/plugins/blog/client/components/pages/post-page.internal.tsx +23 -8
- package/src/plugins/blog/client/components/shared/post-navigation.tsx +0 -5
- package/src/plugins/blog/client/components/shared/recent-posts-carousel.tsx +1 -5
- package/src/plugins/blog/client/hooks/blog-hooks.tsx +8 -33
- package/src/plugins/blog/client/overrides.ts +26 -1
- package/src/plugins/cms/__tests__/getters.test.ts +1 -1
- package/src/plugins/cms/api/getters.ts +1 -1
- package/src/plugins/cms/api/mutations.ts +1 -1
- package/src/plugins/cms/api/plugin.ts +1 -1
- package/src/plugins/cms/client/components/shared/pagination.tsx +14 -42
- package/src/plugins/comments/api/getters.ts +444 -0
- package/src/plugins/comments/api/index.ts +21 -0
- package/src/plugins/comments/api/mutations.ts +206 -0
- package/src/plugins/comments/api/plugin.ts +628 -0
- package/src/plugins/comments/api/query-key-defs.ts +143 -0
- package/src/plugins/comments/api/serializers.ts +37 -0
- package/src/plugins/comments/client/components/comment-count.tsx +66 -0
- package/src/plugins/comments/client/components/comment-form.tsx +112 -0
- package/src/plugins/comments/client/components/comment-thread.tsx +799 -0
- package/src/plugins/comments/client/components/index.tsx +11 -0
- package/src/plugins/comments/client/components/pages/moderation-page.internal.tsx +550 -0
- package/src/plugins/comments/client/components/pages/moderation-page.tsx +70 -0
- package/src/plugins/comments/client/components/pages/my-comments-page.internal.tsx +367 -0
- package/src/plugins/comments/client/components/pages/my-comments-page.tsx +72 -0
- package/src/plugins/comments/client/components/pages/resource-comments-page.internal.tsx +225 -0
- package/src/plugins/comments/client/components/pages/resource-comments-page.tsx +97 -0
- package/src/plugins/comments/client/components/shared/page-wrapper.tsx +32 -0
- package/src/plugins/comments/client/components/shared/pagination.tsx +44 -0
- package/src/plugins/comments/client/hooks/index.tsx +13 -0
- package/src/plugins/comments/client/hooks/use-comments.tsx +717 -0
- package/src/plugins/comments/client/index.ts +14 -0
- package/src/plugins/comments/client/localization/comments-moderation.ts +75 -0
- package/src/plugins/comments/client/localization/comments-my.ts +32 -0
- package/src/plugins/comments/client/localization/comments-thread.ts +32 -0
- package/src/plugins/comments/client/localization/index.ts +11 -0
- package/src/plugins/comments/client/overrides.ts +164 -0
- package/src/plugins/comments/client/plugin.tsx +195 -0
- package/src/plugins/comments/client/utils.ts +67 -0
- package/src/plugins/comments/client.css +2 -0
- package/src/plugins/comments/db.ts +77 -0
- package/src/plugins/comments/query-keys.ts +189 -0
- package/src/plugins/comments/schemas.ts +72 -0
- package/src/plugins/comments/style.css +15 -0
- package/src/plugins/comments/types.ts +73 -0
- package/src/plugins/form-builder/__tests__/getters.test.ts +1 -1
- package/src/plugins/form-builder/api/getters.ts +1 -1
- package/src/plugins/form-builder/api/plugin.ts +1 -1
- package/src/plugins/kanban/__tests__/getters.test.ts +1 -1
- package/src/plugins/kanban/api/getters.ts +1 -1
- package/src/plugins/kanban/api/mutations.ts +1 -1
- package/src/plugins/kanban/api/plugin.ts +6 -5
- package/src/plugins/kanban/client/components/forms/task-form.tsx +0 -1
- package/src/plugins/kanban/client/components/pages/board-page.internal.tsx +46 -27
- package/src/plugins/kanban/client/overrides.ts +27 -1
- package/src/types.ts +5 -1
- package/dist/shared/{stack.BQmuNl5p.d.mts → stack.BWp0hcm9.d.cts} +3 -3
- package/dist/shared/{stack.BQmuNl5p.d.ts → stack.BWp0hcm9.d.mts} +3 -3
- package/dist/shared/{stack.BQmuNl5p.d.cts → stack.BWp0hcm9.d.ts} +3 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ComponentType } from 'react';
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
import { b as SerializedTask } from './stack.DJaKVY7v.js';
|
|
2
3
|
|
|
3
4
|
interface KanbanCommonLocalization {
|
|
4
5
|
backToBoards: string;
|
|
@@ -185,6 +186,28 @@ interface KanbanPluginOverrides {
|
|
|
185
186
|
* @param context - Route context
|
|
186
187
|
*/
|
|
187
188
|
onBeforeNewBoardPageRendered?: (context: RouteContext) => boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Optional slot rendered at the bottom of the task detail dialog.
|
|
191
|
+
* Use this to inject a comment thread or any custom content without
|
|
192
|
+
* coupling the kanban plugin to the comments plugin.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```tsx
|
|
196
|
+
* kanban: {
|
|
197
|
+
* taskDetailBottomSlot: (task) => (
|
|
198
|
+
* <CommentThread
|
|
199
|
+
* resourceId={task.id}
|
|
200
|
+
* resourceType="kanban-task"
|
|
201
|
+
* apiBaseURL={apiBaseURL}
|
|
202
|
+
* apiBasePath="/api/data"
|
|
203
|
+
* currentUserId={session?.userId}
|
|
204
|
+
* loginHref="/login"
|
|
205
|
+
* />
|
|
206
|
+
* ),
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
taskDetailBottomSlot?: (task: SerializedTask) => ReactNode;
|
|
188
211
|
}
|
|
189
212
|
|
|
190
213
|
export type { KanbanPluginOverrides as K, KanbanUser as a };
|
|
@@ -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.
|
|
2
|
+
import { S as SerializedPost, c as createPostSchema, u as updatePostSchema, a as SerializedTag } from './stack.BWp0hcm9.cjs';
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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 };
|
|
@@ -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.mjs';
|
|
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,10 +1,10 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
2
|
import { QueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { createApiClient } from '@btst/stack/plugins/client';
|
|
4
|
-
import { P as Post, T as Tag, c as createPostSchema, u as updatePostSchema, S as SerializedPost, a as SerializedTag } from './stack.
|
|
4
|
+
import { P as Post, T as Tag, c as createPostSchema, u as updatePostSchema, S as SerializedPost, a as SerializedTag } from './stack.BWp0hcm9.mjs';
|
|
5
5
|
import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
|
|
6
|
+
import { DBAdapter } from '@btst/db';
|
|
6
7
|
import * as better_call from 'better-call';
|
|
7
|
-
import { Adapter } from '@btst/db';
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -41,7 +41,7 @@ interface PostListResult {
|
|
|
41
41
|
* @param adapter - The database adapter
|
|
42
42
|
* @param params - Optional filter/pagination parameters (same shape as the list API query)
|
|
43
43
|
*/
|
|
44
|
-
declare function getAllPosts(adapter:
|
|
44
|
+
declare function getAllPosts(adapter: DBAdapter, params?: PostListParams): Promise<PostListResult>;
|
|
45
45
|
/**
|
|
46
46
|
* Retrieve a single post by its slug, including associated tags.
|
|
47
47
|
* Returns null if no post is found.
|
|
@@ -53,7 +53,7 @@ declare function getAllPosts(adapter: Adapter, params?: PostListParams): Promise
|
|
|
53
53
|
* @param adapter - The database adapter
|
|
54
54
|
* @param slug - The post slug
|
|
55
55
|
*/
|
|
56
|
-
declare function getPostBySlug(adapter:
|
|
56
|
+
declare function getPostBySlug(adapter: DBAdapter, slug: string): Promise<(Post & {
|
|
57
57
|
tags: Tag[];
|
|
58
58
|
}) | null>;
|
|
59
59
|
/**
|
|
@@ -65,7 +65,7 @@ declare function getPostBySlug(adapter: Adapter, slug: string): Promise<(Post &
|
|
|
65
65
|
*
|
|
66
66
|
* @param adapter - The database adapter
|
|
67
67
|
*/
|
|
68
|
-
declare function getAllTags(adapter:
|
|
68
|
+
declare function getAllTags(adapter: DBAdapter): Promise<Tag[]>;
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
71
|
* Route keys for the blog plugin — matches the keys returned by
|
|
@@ -197,70 +197,131 @@ interface BlogBackendHooks {
|
|
|
197
197
|
* @param hooks - Optional configuration hooks for customizing plugin behavior
|
|
198
198
|
*/
|
|
199
199
|
declare const blogBackendPlugin: (hooks?: BlogBackendHooks) => _btst_stack_plugins_api.BackendPlugin<{
|
|
200
|
-
readonly listPosts: better_call.StrictEndpoint<"/posts", {
|
|
200
|
+
readonly listPosts: better_call.StrictEndpoint<"/posts", {} & {
|
|
201
201
|
method: "GET";
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
202
|
+
} & {
|
|
203
|
+
query: better_call.StandardSchemaV1<{
|
|
204
|
+
slug?: string | undefined;
|
|
205
|
+
tagSlug?: string | undefined;
|
|
206
|
+
offset?: unknown;
|
|
207
|
+
limit?: unknown;
|
|
208
|
+
query?: string | undefined;
|
|
209
|
+
published?: string | undefined;
|
|
210
|
+
} | {
|
|
211
|
+
published: boolean | undefined;
|
|
212
|
+
slug?: string | undefined;
|
|
213
|
+
tagSlug?: string | undefined;
|
|
214
|
+
offset?: number | undefined;
|
|
215
|
+
limit?: number | undefined;
|
|
216
|
+
query?: string | undefined;
|
|
217
|
+
}, {
|
|
218
|
+
slug?: string | undefined;
|
|
219
|
+
tagSlug?: string | undefined;
|
|
220
|
+
offset?: unknown;
|
|
221
|
+
limit?: unknown;
|
|
222
|
+
query?: string | undefined;
|
|
223
|
+
published?: string | undefined;
|
|
224
|
+
} | {
|
|
225
|
+
published: boolean | undefined;
|
|
226
|
+
slug?: string | undefined;
|
|
227
|
+
tagSlug?: string | undefined;
|
|
228
|
+
offset?: number | undefined;
|
|
229
|
+
limit?: number | undefined;
|
|
230
|
+
query?: string | undefined;
|
|
231
|
+
}>;
|
|
210
232
|
}, PostListResult>;
|
|
211
|
-
readonly createPost: better_call.StrictEndpoint<"/posts", {
|
|
233
|
+
readonly createPost: better_call.StrictEndpoint<"/posts", {} & {
|
|
212
234
|
method: "POST";
|
|
213
|
-
body:
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
name:
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
},
|
|
235
|
+
body: better_call.StandardSchemaV1<{
|
|
236
|
+
title: string;
|
|
237
|
+
content: string;
|
|
238
|
+
excerpt: string;
|
|
239
|
+
tags?: ({
|
|
240
|
+
name: string;
|
|
241
|
+
} | {
|
|
242
|
+
id: string;
|
|
243
|
+
name: string;
|
|
244
|
+
slug: string;
|
|
245
|
+
})[] | undefined;
|
|
246
|
+
slug?: string | undefined;
|
|
247
|
+
published?: boolean | undefined;
|
|
248
|
+
publishedAt?: unknown;
|
|
249
|
+
createdAt?: unknown;
|
|
250
|
+
updatedAt?: unknown;
|
|
251
|
+
image?: string | undefined;
|
|
252
|
+
}, {
|
|
253
|
+
title: string;
|
|
254
|
+
content: string;
|
|
255
|
+
excerpt: string;
|
|
256
|
+
tags?: ({
|
|
257
|
+
name: string;
|
|
258
|
+
} | {
|
|
259
|
+
id: string;
|
|
260
|
+
name: string;
|
|
261
|
+
slug: string;
|
|
262
|
+
})[] | undefined;
|
|
263
|
+
slug?: string | undefined;
|
|
264
|
+
published?: boolean | undefined;
|
|
265
|
+
publishedAt?: unknown;
|
|
266
|
+
createdAt?: unknown;
|
|
267
|
+
updatedAt?: unknown;
|
|
268
|
+
image?: string | undefined;
|
|
269
|
+
}>;
|
|
231
270
|
}, Post>;
|
|
232
|
-
readonly updatePost: better_call.StrictEndpoint<"/posts/:id", {
|
|
271
|
+
readonly updatePost: better_call.StrictEndpoint<"/posts/:id", {} & {
|
|
233
272
|
method: "PUT";
|
|
234
|
-
body:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
},
|
|
273
|
+
body: better_call.StandardSchemaV1<{
|
|
274
|
+
title: string;
|
|
275
|
+
content: string;
|
|
276
|
+
excerpt: string;
|
|
277
|
+
slug: string;
|
|
278
|
+
id: string;
|
|
279
|
+
publishedAt?: unknown;
|
|
280
|
+
createdAt?: unknown;
|
|
281
|
+
updatedAt?: unknown;
|
|
282
|
+
image?: string | undefined;
|
|
283
|
+
published?: boolean | undefined;
|
|
284
|
+
tags?: ({
|
|
285
|
+
name: string;
|
|
286
|
+
} | {
|
|
287
|
+
id: string;
|
|
288
|
+
name: string;
|
|
289
|
+
slug: string;
|
|
290
|
+
})[] | undefined;
|
|
291
|
+
}, {
|
|
292
|
+
title: string;
|
|
293
|
+
content: string;
|
|
294
|
+
excerpt: string;
|
|
295
|
+
slug: string;
|
|
296
|
+
id: string;
|
|
297
|
+
publishedAt?: unknown;
|
|
298
|
+
createdAt?: unknown;
|
|
299
|
+
updatedAt?: unknown;
|
|
300
|
+
image?: string | undefined;
|
|
301
|
+
published?: boolean | undefined;
|
|
302
|
+
tags?: ({
|
|
303
|
+
name: string;
|
|
304
|
+
} | {
|
|
305
|
+
id: string;
|
|
306
|
+
name: string;
|
|
307
|
+
slug: string;
|
|
308
|
+
})[] | undefined;
|
|
309
|
+
}>;
|
|
253
310
|
}, Post>;
|
|
254
|
-
readonly deletePost: better_call.StrictEndpoint<"/posts/:id", {
|
|
311
|
+
readonly deletePost: better_call.StrictEndpoint<"/posts/:id", {} & {
|
|
255
312
|
method: "DELETE";
|
|
313
|
+
body: better_call.StandardSchemaV1<unknown, unknown>;
|
|
256
314
|
}, {
|
|
257
315
|
success: boolean;
|
|
258
316
|
}>;
|
|
259
|
-
readonly getNextPreviousPosts: better_call.StrictEndpoint<"/posts/next-previous", {
|
|
317
|
+
readonly getNextPreviousPosts: better_call.StrictEndpoint<"/posts/next-previous", {} & {
|
|
260
318
|
method: "GET";
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
319
|
+
} & {
|
|
320
|
+
query: better_call.StandardSchemaV1<{
|
|
321
|
+
date: unknown;
|
|
322
|
+
}, {
|
|
323
|
+
date: unknown;
|
|
324
|
+
}>;
|
|
264
325
|
}, {
|
|
265
326
|
previous: {
|
|
266
327
|
tags: Tag[];
|
|
@@ -295,7 +356,7 @@ declare const blogBackendPlugin: (hooks?: BlogBackendHooks) => _btst_stack_plugi
|
|
|
295
356
|
updatedAt: Date;
|
|
296
357
|
} | null;
|
|
297
358
|
}>;
|
|
298
|
-
readonly listTags: better_call.StrictEndpoint<"/tags", {
|
|
359
|
+
readonly listTags: better_call.StrictEndpoint<"/tags", {} & {
|
|
299
360
|
method: "GET";
|
|
300
361
|
}, Tag[]>;
|
|
301
362
|
}, {
|