@btst/stack 2.7.0 → 2.8.1
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/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/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/blog/client/hooks/index.d.cts +1 -1
- package/dist/plugins/blog/client/hooks/index.d.mts +1 -1
- package/dist/plugins/blog/client/hooks/index.d.ts +1 -1
- package/dist/plugins/blog/client/index.d.cts +24 -2
- package/dist/plugins/blog/client/index.d.mts +24 -2
- package/dist/plugins/blog/client/index.d.ts +24 -2
- 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/kanban/api/index.d.cts +1 -1
- package/dist/plugins/kanban/api/index.d.mts +1 -1
- package/dist/plugins/kanban/api/index.d.ts +1 -1
- 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 +1 -1
- package/dist/plugins/kanban/query-keys.d.mts +1 -1
- package/dist/plugins/kanban/query-keys.d.ts +1 -1
- 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.CJE9sAjV.d.ts +335 -0
- package/dist/shared/stack.CmHRdhl8.d.cts +335 -0
- package/dist/shared/{stack.CNLHlv7r.d.mts → stack.DOZ1EXjM.d.mts} +6 -12
- package/dist/shared/{stack.FeaWkglm.d.mts → stack.DRpeDS6X.d.ts} +24 -1
- package/dist/shared/{stack.CQAZwXhV.d.cts → stack.DX-tQ93o.d.cts} +6 -12
- package/dist/shared/stack.Dcz6636A.d.mts +335 -0
- 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.D3BsrpAz.d.ts → stack.VF6FhyZw.d.ts} +6 -12
- package/package.json +69 -4
- 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/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/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/dist/shared/{stack.Rtcvl8sS.d.cts → stack.BOokfhZD.d.cts} +3 -3
- package/dist/shared/{stack.D4Cea8II.d.ts → stack.BvCR4-9H.d.ts} +3 -3
- package/dist/shared/{stack.HE_IvqV5.d.mts → stack.CWxAl9K3.d.mts} +3 -3
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { C as CommentListResult, S as SerializedComment, a as CommentsThreadDiscriminator } from '../../../../shared/stack.C-b3Sn8j.js';
|
|
2
|
+
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
3
|
+
import { InfiniteData } from '@tanstack/react-query';
|
|
4
|
+
|
|
5
|
+
interface CommentsClientConfig {
|
|
6
|
+
apiBaseURL: string;
|
|
7
|
+
apiBasePath: string;
|
|
8
|
+
headers?: HeadersInit;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Fetch a paginated list of comments for a resource.
|
|
12
|
+
* Returns approved comments by default.
|
|
13
|
+
*/
|
|
14
|
+
declare function useComments(config: CommentsClientConfig, params: {
|
|
15
|
+
resourceId?: string;
|
|
16
|
+
resourceType?: string;
|
|
17
|
+
parentId?: string | null;
|
|
18
|
+
status?: "pending" | "approved" | "spam";
|
|
19
|
+
currentUserId?: string;
|
|
20
|
+
authorId?: string;
|
|
21
|
+
sort?: "asc" | "desc";
|
|
22
|
+
limit?: number;
|
|
23
|
+
offset?: number;
|
|
24
|
+
}, options?: {
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
}): {
|
|
27
|
+
data: CommentListResult | undefined;
|
|
28
|
+
comments: SerializedComment[];
|
|
29
|
+
total: number;
|
|
30
|
+
isLoading: boolean;
|
|
31
|
+
isFetching: boolean;
|
|
32
|
+
error: Error | null;
|
|
33
|
+
refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* useSuspenseQuery version — for use in .internal.tsx files.
|
|
37
|
+
*/
|
|
38
|
+
declare function useSuspenseComments(config: CommentsClientConfig, params: {
|
|
39
|
+
resourceId?: string;
|
|
40
|
+
resourceType?: string;
|
|
41
|
+
parentId?: string | null;
|
|
42
|
+
status?: "pending" | "approved" | "spam";
|
|
43
|
+
currentUserId?: string;
|
|
44
|
+
authorId?: string;
|
|
45
|
+
sort?: "asc" | "desc";
|
|
46
|
+
limit?: number;
|
|
47
|
+
offset?: number;
|
|
48
|
+
}): {
|
|
49
|
+
comments: SerializedComment[];
|
|
50
|
+
total: number;
|
|
51
|
+
refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Page-based variant for the moderation dashboard.
|
|
55
|
+
* Uses useSuspenseQuery with explicit offset so the table always shows exactly
|
|
56
|
+
* one page of results and navigation is handled by Prev / Next controls.
|
|
57
|
+
*/
|
|
58
|
+
declare function useSuspenseModerationComments(config: CommentsClientConfig, params: {
|
|
59
|
+
status?: "pending" | "approved" | "spam";
|
|
60
|
+
limit?: number;
|
|
61
|
+
page?: number;
|
|
62
|
+
}): {
|
|
63
|
+
comments: SerializedComment[];
|
|
64
|
+
total: number;
|
|
65
|
+
limit: number;
|
|
66
|
+
offset: number;
|
|
67
|
+
totalPages: number;
|
|
68
|
+
refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<CommentListResult, Error>>;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Infinite-scroll variant for the CommentThread component.
|
|
72
|
+
* Uses the "commentsThread" factory namespace (separate from the plain
|
|
73
|
+
* useComments / useSuspenseComments queries) to avoid InfiniteData shape conflicts.
|
|
74
|
+
*
|
|
75
|
+
* Mirrors the blog's usePosts pattern: spread the factory base query into
|
|
76
|
+
* useInfiniteQuery, drive pages via pageParam, and derive hasMore from server total.
|
|
77
|
+
*/
|
|
78
|
+
declare function useInfiniteComments(config: CommentsClientConfig, params: {
|
|
79
|
+
resourceId: string;
|
|
80
|
+
resourceType: string;
|
|
81
|
+
parentId?: string | null;
|
|
82
|
+
status?: "pending" | "approved" | "spam";
|
|
83
|
+
currentUserId?: string;
|
|
84
|
+
pageSize?: number;
|
|
85
|
+
}, options?: {
|
|
86
|
+
enabled?: boolean;
|
|
87
|
+
}): {
|
|
88
|
+
comments: SerializedComment[];
|
|
89
|
+
total: number;
|
|
90
|
+
queryKey: readonly ["commentsThread", "list", CommentsThreadDiscriminator];
|
|
91
|
+
isLoading: boolean;
|
|
92
|
+
isFetching: boolean;
|
|
93
|
+
loadMore: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<InfiniteData<CommentListResult, unknown>, Error>>;
|
|
94
|
+
hasMore: boolean;
|
|
95
|
+
isLoadingMore: boolean;
|
|
96
|
+
error: Error | null;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Fetch the approved comment count for a resource.
|
|
100
|
+
*/
|
|
101
|
+
declare function useCommentCount(config: CommentsClientConfig, params: {
|
|
102
|
+
resourceId: string;
|
|
103
|
+
resourceType: string;
|
|
104
|
+
status?: "pending" | "approved" | "spam";
|
|
105
|
+
}): {
|
|
106
|
+
count: number;
|
|
107
|
+
isLoading: boolean;
|
|
108
|
+
error: Error | null;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Post a new comment with optimistic update.
|
|
112
|
+
* When autoApprove is false the optimistic entry shows as "pending" — visible
|
|
113
|
+
* only to the comment's own author via the `currentUserId` match in the UI.
|
|
114
|
+
*
|
|
115
|
+
* Pass `infiniteKey` (from `useInfiniteComments`) when the thread uses an
|
|
116
|
+
* infinite query so the optimistic update targets InfiniteData<CommentListResult>
|
|
117
|
+
* instead of a plain CommentListResult cache entry.
|
|
118
|
+
*/
|
|
119
|
+
declare function usePostComment(config: CommentsClientConfig, params: {
|
|
120
|
+
resourceId: string;
|
|
121
|
+
resourceType: string;
|
|
122
|
+
currentUserId?: string;
|
|
123
|
+
/** When provided, optimistic updates target this infinite-query cache key. */
|
|
124
|
+
infiniteKey?: readonly unknown[];
|
|
125
|
+
/**
|
|
126
|
+
* Page size used by the corresponding `useInfiniteComments` call.
|
|
127
|
+
* Used only when the infinite-query cache is empty at the time of the
|
|
128
|
+
* optimistic update — ensures `getNextPageParam` computes the correct
|
|
129
|
+
* `nextOffset` from `lastPage.limit` instead of a hardcoded fallback.
|
|
130
|
+
*/
|
|
131
|
+
pageSize?: number;
|
|
132
|
+
}): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
|
|
133
|
+
body: string;
|
|
134
|
+
parentId?: string | null;
|
|
135
|
+
limit?: number;
|
|
136
|
+
offset?: number;
|
|
137
|
+
}, {
|
|
138
|
+
previous: InfiniteData<CommentListResult, unknown> | undefined;
|
|
139
|
+
isInfinite: true;
|
|
140
|
+
listKey: readonly unknown[];
|
|
141
|
+
optimisticId: string;
|
|
142
|
+
} | {
|
|
143
|
+
previous: CommentListResult | undefined;
|
|
144
|
+
isInfinite: false;
|
|
145
|
+
listKey: readonly unknown[];
|
|
146
|
+
optimisticId: string;
|
|
147
|
+
}>;
|
|
148
|
+
/**
|
|
149
|
+
* Edit the body of an existing comment.
|
|
150
|
+
*/
|
|
151
|
+
declare function useUpdateComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
|
|
152
|
+
id: string;
|
|
153
|
+
body: string;
|
|
154
|
+
}, unknown>;
|
|
155
|
+
/**
|
|
156
|
+
* Approve a comment (set status to "approved"). Admin use.
|
|
157
|
+
*/
|
|
158
|
+
declare function useApproveComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, string, unknown>;
|
|
159
|
+
/**
|
|
160
|
+
* Update comment status (pending / approved / spam). Admin use.
|
|
161
|
+
*/
|
|
162
|
+
declare function useUpdateCommentStatus(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<SerializedComment, Error, {
|
|
163
|
+
id: string;
|
|
164
|
+
status: "pending" | "approved" | "spam";
|
|
165
|
+
}, unknown>;
|
|
166
|
+
/**
|
|
167
|
+
* Delete a comment. Admin use.
|
|
168
|
+
*/
|
|
169
|
+
declare function useDeleteComment(config: CommentsClientConfig): _tanstack_react_query.UseMutationResult<{
|
|
170
|
+
success: boolean;
|
|
171
|
+
}, Error, string, unknown>;
|
|
172
|
+
/**
|
|
173
|
+
* Toggle a like on a comment with optimistic update.
|
|
174
|
+
*
|
|
175
|
+
* Pass `infiniteKey` (from `useInfiniteComments`) for top-level thread comments
|
|
176
|
+
* so the optimistic update targets InfiniteData<CommentListResult> instead of
|
|
177
|
+
* a plain CommentListResult cache entry.
|
|
178
|
+
*/
|
|
179
|
+
declare function useToggleLike(config: CommentsClientConfig, params: {
|
|
180
|
+
resourceId: string;
|
|
181
|
+
resourceType: string;
|
|
182
|
+
/** parentId of the comment being liked — must match the parentId used by
|
|
183
|
+
* useComments so the optimistic setQueryData hits the correct cache entry.
|
|
184
|
+
* Pass `null` for top-level comments, or the parent comment ID for replies. */
|
|
185
|
+
parentId?: string | null;
|
|
186
|
+
currentUserId?: string;
|
|
187
|
+
/** When the comment lives in an infinite thread, pass the thread's query key
|
|
188
|
+
* so the optimistic update targets the correct InfiniteData cache entry. */
|
|
189
|
+
infiniteKey?: readonly unknown[];
|
|
190
|
+
}): _tanstack_react_query.UseMutationResult<{
|
|
191
|
+
likes: number;
|
|
192
|
+
isLiked: boolean;
|
|
193
|
+
}, Error, {
|
|
194
|
+
commentId: string;
|
|
195
|
+
authorId: string;
|
|
196
|
+
}, {
|
|
197
|
+
previous: CommentListResult | InfiniteData<CommentListResult, unknown> | undefined;
|
|
198
|
+
}>;
|
|
199
|
+
|
|
200
|
+
export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useApproveComment, useCommentCount, useComments, useDeleteComment, useInfiniteComments, usePostComment, useSuspenseComments, useSuspenseModerationComments, useToggleLike, useUpdateComment, useUpdateCommentStatus } from '../../../../packages/stack/src/plugins/comments/client/hooks/use-comments.mjs';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const plugin = require('../../../packages/stack/src/plugins/comments/client/plugin.cjs');
|
|
4
|
+
const index = require('../../../packages/stack/src/plugins/comments/client/localization/index.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
exports.commentsClientPlugin = plugin.commentsClientPlugin;
|
|
9
|
+
exports.COMMENTS_LOCALIZATION = index.COMMENTS_LOCALIZATION;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as _btst_yar from '@btst/yar';
|
|
4
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
5
|
+
import { C as CommentsLocalization } from '../../../shared/stack.Ldfkr5b2.cjs';
|
|
6
|
+
export { a as COMMENTS_LOCALIZATION } from '../../../shared/stack.Ldfkr5b2.cjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Context passed to loader hooks
|
|
10
|
+
*/
|
|
11
|
+
interface LoaderContext {
|
|
12
|
+
/** Current route path */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Route parameters */
|
|
15
|
+
params?: Record<string, string>;
|
|
16
|
+
/** Whether rendering on server (true) or client (false) */
|
|
17
|
+
isSSR: boolean;
|
|
18
|
+
/** Base URL for API calls */
|
|
19
|
+
apiBaseURL: string;
|
|
20
|
+
/** Path where the API is mounted */
|
|
21
|
+
apiBasePath: string;
|
|
22
|
+
/** Optional headers for the request */
|
|
23
|
+
headers?: Headers;
|
|
24
|
+
/** Additional context properties */
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Hooks for Comments client plugin
|
|
29
|
+
*/
|
|
30
|
+
interface CommentsClientHooks {
|
|
31
|
+
/**
|
|
32
|
+
* Called before loading the moderation page. Throw to cancel.
|
|
33
|
+
*/
|
|
34
|
+
beforeLoadModeration?: (context: LoaderContext) => Promise<void> | void;
|
|
35
|
+
/**
|
|
36
|
+
* Called before loading the User Comments page. Throw to cancel.
|
|
37
|
+
*/
|
|
38
|
+
beforeLoadUserComments?: (context: LoaderContext) => Promise<void> | void;
|
|
39
|
+
/**
|
|
40
|
+
* Called when a loading error occurs.
|
|
41
|
+
*/
|
|
42
|
+
onLoadError?: (error: Error, context: LoaderContext) => Promise<void> | void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configuration for the Comments client plugin
|
|
46
|
+
*/
|
|
47
|
+
interface CommentsClientConfig {
|
|
48
|
+
/** Base URL for API calls (e.g., "http://localhost:3000") */
|
|
49
|
+
apiBaseURL: string;
|
|
50
|
+
/** Path where the API is mounted (e.g., "/api/data") */
|
|
51
|
+
apiBasePath: string;
|
|
52
|
+
/** Base URL of your site */
|
|
53
|
+
siteBaseURL: string;
|
|
54
|
+
/** Path where pages are mounted (e.g., "/pages") */
|
|
55
|
+
siteBasePath: string;
|
|
56
|
+
/** React Query client instance */
|
|
57
|
+
queryClient: QueryClient;
|
|
58
|
+
/** Optional headers for SSR */
|
|
59
|
+
headers?: Headers;
|
|
60
|
+
/** Optional lifecycle hooks */
|
|
61
|
+
hooks?: CommentsClientHooks;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Comments client plugin — registers admin moderation routes.
|
|
65
|
+
*
|
|
66
|
+
* The embeddable `CommentThread` and `CommentCount` components are standalone
|
|
67
|
+
* and do not require this plugin to be registered. Register them manually
|
|
68
|
+
* via the layout overrides pattern or use them directly in your pages.
|
|
69
|
+
*/
|
|
70
|
+
declare const commentsClientPlugin: (config: CommentsClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
|
|
71
|
+
moderation: {
|
|
72
|
+
(inputCtx_0?: _btst_yar.InputContext<"/comments/moderation", _btst_yar.RouteOptions> | undefined): {
|
|
73
|
+
PageComponent?: React.ComponentType<unknown> | undefined;
|
|
74
|
+
LoadingComponent?: React.ComponentType<unknown> | undefined;
|
|
75
|
+
ErrorComponent?: React.ComponentType<unknown> | undefined;
|
|
76
|
+
loader?: (() => Promise<void>) | undefined;
|
|
77
|
+
meta?: (() => ({
|
|
78
|
+
title: string;
|
|
79
|
+
name?: undefined;
|
|
80
|
+
content?: undefined;
|
|
81
|
+
property?: undefined;
|
|
82
|
+
} | {
|
|
83
|
+
name: string;
|
|
84
|
+
content: string;
|
|
85
|
+
title?: undefined;
|
|
86
|
+
property?: undefined;
|
|
87
|
+
} | {
|
|
88
|
+
property: string;
|
|
89
|
+
content: string;
|
|
90
|
+
title?: undefined;
|
|
91
|
+
name?: undefined;
|
|
92
|
+
})[]) | undefined;
|
|
93
|
+
extra?: (() => any) | undefined;
|
|
94
|
+
};
|
|
95
|
+
options: _btst_yar.RouteOptions | undefined;
|
|
96
|
+
path: "/comments/moderation";
|
|
97
|
+
meta: _btst_yar.RouteMeta | undefined;
|
|
98
|
+
};
|
|
99
|
+
userComments: {
|
|
100
|
+
(inputCtx_0?: _btst_yar.InputContext<"/comments", _btst_yar.RouteOptions> | undefined): {
|
|
101
|
+
PageComponent?: React.ComponentType<unknown> | undefined;
|
|
102
|
+
LoadingComponent?: React.ComponentType<unknown> | undefined;
|
|
103
|
+
ErrorComponent?: React.ComponentType<unknown> | undefined;
|
|
104
|
+
loader?: (() => Promise<void>) | undefined;
|
|
105
|
+
meta?: (() => ({
|
|
106
|
+
title: string;
|
|
107
|
+
name?: undefined;
|
|
108
|
+
content?: undefined;
|
|
109
|
+
property?: undefined;
|
|
110
|
+
} | {
|
|
111
|
+
name: string;
|
|
112
|
+
content: string;
|
|
113
|
+
title?: undefined;
|
|
114
|
+
property?: undefined;
|
|
115
|
+
} | {
|
|
116
|
+
property: string;
|
|
117
|
+
content: string;
|
|
118
|
+
title?: undefined;
|
|
119
|
+
name?: undefined;
|
|
120
|
+
})[]) | undefined;
|
|
121
|
+
extra?: (() => any) | undefined;
|
|
122
|
+
};
|
|
123
|
+
options: _btst_yar.RouteOptions | undefined;
|
|
124
|
+
path: "/comments";
|
|
125
|
+
meta: _btst_yar.RouteMeta | undefined;
|
|
126
|
+
};
|
|
127
|
+
}>;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Context passed to lifecycle hooks
|
|
131
|
+
*/
|
|
132
|
+
interface RouteContext {
|
|
133
|
+
/** Current route path */
|
|
134
|
+
path: string;
|
|
135
|
+
/** Route parameters (e.g., { resourceId: "my-post", resourceType: "blog-post" }) */
|
|
136
|
+
params?: Record<string, string>;
|
|
137
|
+
/** Whether rendering on server (true) or client (false) */
|
|
138
|
+
isSSR: boolean;
|
|
139
|
+
/** Additional context properties */
|
|
140
|
+
[key: string]: unknown;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Overridable configuration and hooks for the Comments plugin.
|
|
145
|
+
*
|
|
146
|
+
* Provide these in the layout wrapping your pages via `PluginOverridesProvider`.
|
|
147
|
+
*/
|
|
148
|
+
interface CommentsPluginOverrides {
|
|
149
|
+
/**
|
|
150
|
+
* Localization strings for all Comments plugin UI.
|
|
151
|
+
* Defaults to English when not provided.
|
|
152
|
+
*/
|
|
153
|
+
localization?: Partial<CommentsLocalization>;
|
|
154
|
+
/**
|
|
155
|
+
* Base URL for API calls (e.g., "https://example.com")
|
|
156
|
+
*/
|
|
157
|
+
apiBaseURL: string;
|
|
158
|
+
/**
|
|
159
|
+
* Path where the API is mounted (e.g., "/api/data")
|
|
160
|
+
*/
|
|
161
|
+
apiBasePath: string;
|
|
162
|
+
/**
|
|
163
|
+
* Optional headers for authenticated API calls (e.g., forwarding cookies)
|
|
164
|
+
*/
|
|
165
|
+
headers?: Record<string, string>;
|
|
166
|
+
/**
|
|
167
|
+
* Whether to show the "Powered by BTST" attribution on plugin pages.
|
|
168
|
+
* Defaults to true.
|
|
169
|
+
*/
|
|
170
|
+
showAttribution?: boolean;
|
|
171
|
+
/**
|
|
172
|
+
* The ID of the currently authenticated user.
|
|
173
|
+
*
|
|
174
|
+
* Used by the User Comments page and the per-resource comments admin view to
|
|
175
|
+
* scope the comment list to the current user and to enable posting.
|
|
176
|
+
* Can be a static string or an async function (useful when the user ID must
|
|
177
|
+
* be resolved from a session cookie at render time).
|
|
178
|
+
*
|
|
179
|
+
* When absent both pages show a "Please log in" prompt.
|
|
180
|
+
*/
|
|
181
|
+
currentUserId?: string | (() => string | undefined | Promise<string | undefined>);
|
|
182
|
+
/**
|
|
183
|
+
* URL to redirect unauthenticated users to when they try to post a comment.
|
|
184
|
+
*
|
|
185
|
+
* Forwarded to every embedded `CommentThread` (including the one on the
|
|
186
|
+
* per-resource admin comments view). When absent no login link is shown.
|
|
187
|
+
*/
|
|
188
|
+
loginHref?: string;
|
|
189
|
+
/**
|
|
190
|
+
* Default number of top-level comments to load per page in `CommentThread`.
|
|
191
|
+
* Can be overridden per-instance via the `pageSize` prop.
|
|
192
|
+
* Defaults to 100 when not set.
|
|
193
|
+
*/
|
|
194
|
+
defaultCommentPageSize?: number;
|
|
195
|
+
/**
|
|
196
|
+
* When false, the comment form and reply buttons are hidden in all
|
|
197
|
+
* `CommentThread` instances. Users can still read existing comments.
|
|
198
|
+
* Defaults to true.
|
|
199
|
+
*
|
|
200
|
+
* Can be overridden per-instance via the `allowPosting` prop on `CommentThread`.
|
|
201
|
+
*/
|
|
202
|
+
allowPosting?: boolean;
|
|
203
|
+
/**
|
|
204
|
+
* When false, the edit button is hidden on all comment cards in all
|
|
205
|
+
* `CommentThread` instances.
|
|
206
|
+
* Defaults to true.
|
|
207
|
+
*
|
|
208
|
+
* Can be overridden per-instance via the `allowEditing` prop on `CommentThread`.
|
|
209
|
+
*/
|
|
210
|
+
allowEditing?: boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Per-resource-type URL builders used to link each comment back to its
|
|
213
|
+
* original resource on the User Comments page.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```ts
|
|
217
|
+
* resourceLinks: {
|
|
218
|
+
* "blog-post": (slug) => `/pages/blog/${slug}`,
|
|
219
|
+
* "kanban-task": (id) => `/pages/kanban?task=${id}`,
|
|
220
|
+
* }
|
|
221
|
+
* ```
|
|
222
|
+
*
|
|
223
|
+
* When a resource type has no entry the ID is shown as plain text.
|
|
224
|
+
*/
|
|
225
|
+
resourceLinks?: Record<string, (id: string) => string>;
|
|
226
|
+
/**
|
|
227
|
+
* Called before the moderation dashboard page is rendered.
|
|
228
|
+
* Return false to block rendering (e.g., redirect to login or show 403).
|
|
229
|
+
* @param context - Route context
|
|
230
|
+
*/
|
|
231
|
+
onBeforeModerationPageRendered?: (context: RouteContext) => boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Called before the per-resource comments page is rendered.
|
|
234
|
+
* Return false to block rendering (e.g., for authorization).
|
|
235
|
+
* @param resourceType - The type of resource (e.g., "blog-post")
|
|
236
|
+
* @param resourceId - The ID of the resource
|
|
237
|
+
* @param context - Route context
|
|
238
|
+
*/
|
|
239
|
+
onBeforeResourceCommentsRendered?: (resourceType: string, resourceId: string, context: RouteContext) => boolean;
|
|
240
|
+
/**
|
|
241
|
+
* Called before the User Comments page is rendered.
|
|
242
|
+
* Throw to block rendering (e.g., when the user is not authenticated).
|
|
243
|
+
* @param context - Route context
|
|
244
|
+
*/
|
|
245
|
+
onBeforeUserCommentsPageRendered?: (context: RouteContext) => boolean | void;
|
|
246
|
+
/**
|
|
247
|
+
* Called when a route is rendered.
|
|
248
|
+
* @param routeName - Name of the route (e.g., 'moderation', 'resourceComments')
|
|
249
|
+
* @param context - Route context
|
|
250
|
+
*/
|
|
251
|
+
onRouteRender?: (routeName: string, context: RouteContext) => void | Promise<void>;
|
|
252
|
+
/**
|
|
253
|
+
* Called when a route encounters an error.
|
|
254
|
+
* @param routeName - Name of the route
|
|
255
|
+
* @param error - The error that occurred
|
|
256
|
+
* @param context - Route context
|
|
257
|
+
*/
|
|
258
|
+
onRouteError?: (routeName: string, error: Error, context: RouteContext) => void | Promise<void>;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export { CommentsLocalization, commentsClientPlugin };
|
|
262
|
+
export type { CommentsClientConfig, CommentsClientHooks, CommentsPluginOverrides, LoaderContext, RouteContext };
|