@btst/stack 2.6.1 → 2.7.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 (159) hide show
  1. package/dist/api/index.d.cts +2 -2
  2. package/dist/api/index.d.mts +2 -2
  3. package/dist/api/index.d.ts +2 -2
  4. package/dist/client/index.d.cts +2 -2
  5. package/dist/client/index.d.mts +2 -2
  6. package/dist/client/index.d.ts +2 -2
  7. package/dist/components/auto-form/index.d.cts +2 -2
  8. package/dist/components/auto-form/index.d.mts +2 -2
  9. package/dist/components/auto-form/index.d.ts +2 -2
  10. package/dist/components/form-builder/index.d.cts +1 -1
  11. package/dist/components/form-builder/index.d.mts +1 -1
  12. package/dist/components/form-builder/index.d.ts +1 -1
  13. package/dist/components/stepped-auto-form/index.d.cts +1 -1
  14. package/dist/components/stepped-auto-form/index.d.mts +1 -1
  15. package/dist/components/stepped-auto-form/index.d.ts +1 -1
  16. package/dist/index.d.cts +1 -1
  17. package/dist/index.d.mts +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.cjs +20 -2
  20. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.mjs +20 -2
  21. package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +5 -4
  22. package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +5 -4
  23. package/dist/plugins/ai-chat/api/index.d.cts +4 -6
  24. package/dist/plugins/ai-chat/api/index.d.mts +4 -6
  25. package/dist/plugins/ai-chat/api/index.d.ts +4 -6
  26. package/dist/plugins/ai-chat/client/components/index.d.cts +1 -1
  27. package/dist/plugins/ai-chat/client/components/index.d.mts +1 -1
  28. package/dist/plugins/ai-chat/client/components/index.d.ts +1 -1
  29. package/dist/plugins/ai-chat/client/hooks/index.d.cts +1 -3
  30. package/dist/plugins/ai-chat/client/hooks/index.d.mts +1 -3
  31. package/dist/plugins/ai-chat/client/hooks/index.d.ts +1 -3
  32. package/dist/plugins/ai-chat/client/index.d.cts +2 -2
  33. package/dist/plugins/ai-chat/client/index.d.mts +2 -2
  34. package/dist/plugins/ai-chat/client/index.d.ts +2 -2
  35. package/dist/plugins/ai-chat/query-keys.d.cts +1 -3
  36. package/dist/plugins/ai-chat/query-keys.d.mts +1 -3
  37. package/dist/plugins/ai-chat/query-keys.d.ts +1 -3
  38. package/dist/plugins/api/index.d.cts +3 -3
  39. package/dist/plugins/api/index.d.mts +3 -3
  40. package/dist/plugins/api/index.d.ts +3 -3
  41. package/dist/plugins/blog/api/index.d.cts +3 -3
  42. package/dist/plugins/blog/api/index.d.mts +3 -3
  43. package/dist/plugins/blog/api/index.d.ts +3 -3
  44. package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
  45. package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
  46. package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
  47. package/dist/plugins/blog/client/index.d.cts +2 -2
  48. package/dist/plugins/blog/client/index.d.mts +2 -2
  49. package/dist/plugins/blog/client/index.d.ts +2 -2
  50. package/dist/plugins/blog/query-keys.d.cts +3 -3
  51. package/dist/plugins/blog/query-keys.d.mts +3 -3
  52. package/dist/plugins/blog/query-keys.d.ts +3 -3
  53. package/dist/plugins/client/index.d.cts +2 -2
  54. package/dist/plugins/client/index.d.mts +2 -2
  55. package/dist/plugins/client/index.d.ts +2 -2
  56. package/dist/plugins/cms/api/index.d.cts +1 -1
  57. package/dist/plugins/cms/api/index.d.mts +1 -1
  58. package/dist/plugins/cms/api/index.d.ts +1 -1
  59. package/dist/plugins/cms/client/index.d.cts +1 -1
  60. package/dist/plugins/cms/client/index.d.mts +1 -1
  61. package/dist/plugins/cms/client/index.d.ts +1 -1
  62. package/dist/plugins/cms/query-keys.d.cts +1 -1
  63. package/dist/plugins/cms/query-keys.d.mts +1 -1
  64. package/dist/plugins/cms/query-keys.d.ts +1 -1
  65. package/dist/plugins/form-builder/api/index.d.cts +2 -2
  66. package/dist/plugins/form-builder/api/index.d.mts +2 -2
  67. package/dist/plugins/form-builder/api/index.d.ts +2 -2
  68. package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
  69. package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
  70. package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
  71. package/dist/plugins/form-builder/client/index.d.cts +1 -1
  72. package/dist/plugins/form-builder/client/index.d.mts +1 -1
  73. package/dist/plugins/form-builder/client/index.d.ts +1 -1
  74. package/dist/plugins/form-builder/query-keys.d.cts +1 -1
  75. package/dist/plugins/form-builder/query-keys.d.mts +1 -1
  76. package/dist/plugins/form-builder/query-keys.d.ts +1 -1
  77. package/dist/plugins/kanban/api/index.d.cts +2 -2
  78. package/dist/plugins/kanban/api/index.d.mts +2 -2
  79. package/dist/plugins/kanban/api/index.d.ts +2 -2
  80. package/dist/plugins/kanban/query-keys.d.cts +2 -2
  81. package/dist/plugins/kanban/query-keys.d.mts +2 -2
  82. package/dist/plugins/kanban/query-keys.d.ts +2 -2
  83. package/dist/plugins/open-api/api/index.d.cts +3 -3
  84. package/dist/plugins/open-api/api/index.d.mts +3 -3
  85. package/dist/plugins/open-api/api/index.d.ts +3 -3
  86. package/dist/plugins/route-docs/client/index.d.cts +1 -1
  87. package/dist/plugins/route-docs/client/index.d.mts +1 -1
  88. package/dist/plugins/route-docs/client/index.d.ts +1 -1
  89. package/dist/plugins/ui-builder/client/components/index.d.cts +2 -2
  90. package/dist/plugins/ui-builder/client/components/index.d.mts +2 -2
  91. package/dist/plugins/ui-builder/client/components/index.d.ts +2 -2
  92. package/dist/plugins/ui-builder/client/hooks/index.d.cts +3 -3
  93. package/dist/plugins/ui-builder/client/hooks/index.d.mts +3 -3
  94. package/dist/plugins/ui-builder/client/hooks/index.d.ts +3 -3
  95. package/dist/plugins/ui-builder/client/index.d.cts +3 -3
  96. package/dist/plugins/ui-builder/client/index.d.mts +3 -3
  97. package/dist/plugins/ui-builder/client/index.d.ts +3 -3
  98. package/dist/plugins/ui-builder/index.d.cts +3 -3
  99. package/dist/plugins/ui-builder/index.d.mts +3 -3
  100. package/dist/plugins/ui-builder/index.d.ts +3 -3
  101. package/dist/shared/{stack.B1srlBud.d.mts → stack.BFoBvGML.d.mts} +1 -1
  102. package/dist/shared/{stack.DmpPDPxA.d.cts → stack.BOCvd9HK.d.cts} +1 -1
  103. package/dist/shared/{stack.DXnclTG7.d.ts → stack.BSqJrCTM.d.cts} +120 -59
  104. package/dist/shared/{stack.B58oHdqm.d.mts → stack.BX7MHi0J.d.mts} +90 -45
  105. package/dist/shared/{stack.cfCkioTe.d.mts → stack.BXxrFL9R.d.ts} +120 -59
  106. package/dist/shared/{stack.CSx98K5H.d.cts → stack.BYN8wCV6.d.cts} +87 -58
  107. package/dist/shared/{stack.FVWf2JhZ.d.mts → stack.BgQrdSlo.d.mts} +60 -45
  108. package/dist/shared/{stack.BK9Z2dcL.d.ts → stack.BmMB0LNC.d.ts} +1 -1
  109. package/dist/shared/{stack.CFECM0ew.d.cts → stack.C1nXGBr6.d.cts} +1 -1
  110. package/dist/shared/{stack.C9Mg2Q46.d.cts → stack.C9zoS1TN.d.cts} +90 -45
  111. package/dist/shared/{stack.B8vT-Yt4.d.mts → stack.CNLHlv7r.d.mts} +3 -3
  112. package/dist/shared/{stack.fdi94T4S.d.mts → stack.CPsYC2-Z.d.cts} +7 -7
  113. package/dist/shared/{stack.fdi94T4S.d.ts → stack.CPsYC2-Z.d.mts} +7 -7
  114. package/dist/shared/{stack.fdi94T4S.d.cts → stack.CPsYC2-Z.d.ts} +7 -7
  115. package/dist/shared/{stack.BwA7trxA.d.cts → stack.CQAZwXhV.d.cts} +3 -3
  116. package/dist/shared/{stack.7n9Y_u7N.d.cts → stack.CQnwAN7x.d.cts} +6 -6
  117. package/dist/shared/{stack.7n9Y_u7N.d.mts → stack.CQnwAN7x.d.mts} +6 -6
  118. package/dist/shared/{stack.7n9Y_u7N.d.ts → stack.CQnwAN7x.d.ts} +6 -6
  119. package/dist/shared/{stack.D-b5zbPm.d.cts → stack.Cbsrl06u.d.cts} +60 -45
  120. package/dist/shared/{stack.BAT540yW.d.ts → stack.D3BsrpAz.d.ts} +3 -3
  121. package/dist/shared/{stack.DgKOwl20.d.ts → stack.D4Cea8II.d.ts} +170 -110
  122. package/dist/shared/{stack.BgTmujxW.d.mts → stack.D88yU4FT.d.mts} +87 -58
  123. package/dist/shared/{stack.DVtk5CNw.d.mts → stack.DLPa6Gzm.d.mts} +1 -1
  124. package/dist/shared/{stack.ASwEoINr.d.ts → stack.DxJ-tHLt.d.ts} +1 -1
  125. package/dist/shared/{stack.DaZM10cp.d.cts → stack.DzOhpIYM.d.mts} +120 -59
  126. package/dist/shared/{stack.CTDVxbrA.d.ts → stack.Fl2Kl_bt.d.ts} +60 -45
  127. package/dist/shared/{stack.B8D4r97Z.d.mts → stack.HE_IvqV5.d.mts} +170 -110
  128. package/dist/shared/{stack.uWSqCWAb.d.cts → stack.Rtcvl8sS.d.cts} +170 -110
  129. package/dist/shared/{stack.CLQuVdwK.d.ts → stack.RuQ9JCLo.d.ts} +87 -58
  130. package/dist/shared/{stack.sO33ZDhK.d.ts → stack.fQjVhw5a.d.ts} +90 -45
  131. package/dist/shared/{stack.BV9hnvu4.d.cts → stack.sba323Ml.d.cts} +2 -0
  132. package/dist/shared/{stack.BV9hnvu4.d.mts → stack.sba323Ml.d.mts} +2 -0
  133. package/dist/shared/{stack.BV9hnvu4.d.ts → stack.sba323Ml.d.ts} +2 -0
  134. package/package.json +4 -4
  135. package/src/__tests__/plugins.test.tsx +5 -1
  136. package/src/__tests__/stack-api.test.ts +1 -1
  137. package/src/plugins/ai-chat/__tests__/getters.test.ts +1 -1
  138. package/src/plugins/ai-chat/api/getters.ts +1 -1
  139. package/src/plugins/ai-chat/api/plugin.ts +1 -1
  140. package/src/plugins/ai-chat/client/components/chat-layout.tsx +22 -1
  141. package/src/plugins/api/index.ts +5 -1
  142. package/src/plugins/blog/__tests__/getters.test.ts +1 -1
  143. package/src/plugins/blog/api/getters.ts +1 -1
  144. package/src/plugins/blog/api/plugin.ts +1 -1
  145. package/src/plugins/cms/__tests__/getters.test.ts +1 -1
  146. package/src/plugins/cms/api/getters.ts +1 -1
  147. package/src/plugins/cms/api/mutations.ts +1 -1
  148. package/src/plugins/cms/api/plugin.ts +1 -1
  149. package/src/plugins/form-builder/__tests__/getters.test.ts +1 -1
  150. package/src/plugins/form-builder/api/getters.ts +1 -1
  151. package/src/plugins/form-builder/api/plugin.ts +1 -1
  152. package/src/plugins/kanban/__tests__/getters.test.ts +1 -1
  153. package/src/plugins/kanban/api/getters.ts +1 -1
  154. package/src/plugins/kanban/api/mutations.ts +1 -1
  155. package/src/plugins/kanban/api/plugin.ts +6 -5
  156. package/src/types.ts +5 -1
  157. package/dist/shared/{stack.BQmuNl5p.d.mts → stack.BWp0hcm9.d.cts} +3 -3
  158. package/dist/shared/{stack.BQmuNl5p.d.ts → stack.BWp0hcm9.d.mts} +3 -3
  159. package/dist/shared/{stack.BQmuNl5p.d.cts → stack.BWp0hcm9.d.ts} +3 -3
@@ -2,7 +2,7 @@ import * as _btst_stack_plugins_api from '@btst/stack/plugins/api';
2
2
  import { a as SerializedContentItemWithType, S as SerializedContentType, b as ContentType, c as ContentItem, d as SerializedContentItem, e as ContentItemWithType, f as CMSBackendConfig, I as InverseRelation } from './stack.B8QD11QU.js';
3
3
  import * as better_call from 'better-call';
4
4
  import { z } from 'zod';
5
- import { Adapter } from '@btst/db';
5
+ import { DBAdapter } from '@btst/db';
6
6
  import { QueryClient } from '@tanstack/react-query';
7
7
 
8
8
  /**
@@ -29,7 +29,7 @@ declare function serializeContentItemWithType(item: ContentItemWithType): Serial
29
29
  *
30
30
  * @param adapter - The database adapter
31
31
  */
32
- declare function getAllContentTypes(adapter: Adapter): Promise<SerializedContentType[]>;
32
+ declare function getAllContentTypes(adapter: DBAdapter): Promise<SerializedContentType[]>;
33
33
  /**
34
34
  * Retrieve all content items for a given content type, with optional pagination.
35
35
  * Pure DB function — no hooks, no HTTP context. Safe for SSG and server-side use.
@@ -42,7 +42,7 @@ declare function getAllContentTypes(adapter: Adapter): Promise<SerializedContent
42
42
  * @param contentTypeSlug - The slug of the content type to query
43
43
  * @param params - Optional filter/pagination parameters
44
44
  */
45
- declare function getAllContentItems(adapter: Adapter, contentTypeSlug: string, params?: {
45
+ declare function getAllContentItems(adapter: DBAdapter, contentTypeSlug: string, params?: {
46
46
  slug?: string;
47
47
  limit?: number;
48
48
  offset?: number;
@@ -63,7 +63,7 @@ declare function getAllContentItems(adapter: Adapter, contentTypeSlug: string, p
63
63
  * @param adapter - The database adapter
64
64
  * @param id - The content item ID (UUID)
65
65
  */
66
- declare function getContentItemById(adapter: Adapter, id: string): Promise<SerializedContentItemWithType | null>;
66
+ declare function getContentItemById(adapter: DBAdapter, id: string): Promise<SerializedContentItemWithType | null>;
67
67
  /**
68
68
  * Retrieve a single content item by its slug within a content type.
69
69
  * Returns null if the content type or item is not found.
@@ -76,7 +76,7 @@ declare function getContentItemById(adapter: Adapter, id: string): Promise<Seria
76
76
  * @param contentTypeSlug - The slug of the content type
77
77
  * @param slug - The slug of the content item
78
78
  */
79
- declare function getContentItemBySlug(adapter: Adapter, contentTypeSlug: string, slug: string): Promise<SerializedContentItemWithType | null>;
79
+ declare function getContentItemBySlug(adapter: DBAdapter, contentTypeSlug: string, slug: string): Promise<SerializedContentItemWithType | null>;
80
80
 
81
81
  /**
82
82
  * Input for creating a new CMS content item.
@@ -105,7 +105,7 @@ interface CreateCMSContentItemInput {
105
105
  * @param contentTypeSlug - Slug of the target content type
106
106
  * @param input - Item slug and data payload
107
107
  */
108
- declare function createCMSContentItem(adapter: Adapter, contentTypeSlug: string, input: CreateCMSContentItemInput): Promise<SerializedContentItem>;
108
+ declare function createCMSContentItem(adapter: DBAdapter, contentTypeSlug: string, input: CreateCMSContentItemInput): Promise<SerializedContentItem>;
109
109
 
110
110
  /**
111
111
  * Route keys for the CMS plugin — matches the keys returned by
@@ -129,7 +129,7 @@ interface CMSPrefetchForRoute {
129
129
  * @param config - Configuration with content types and optional hooks
130
130
  */
131
131
  declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugins_api.BackendPlugin<{
132
- listContentTypes: better_call.StrictEndpoint<"/content-types", {
132
+ listContentTypes: better_call.StrictEndpoint<"/content-types", {} & {
133
133
  method: "GET";
134
134
  }, {
135
135
  itemCount: number;
@@ -144,21 +144,28 @@ declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugin
144
144
  autoFormVersion?: number | undefined;
145
145
  }[]>;
146
146
  getContentTypeBySlug: better_call.StrictEndpoint<"/content-types/:slug", {
147
- method: "GET";
148
147
  params: z.ZodObject<{
149
148
  slug: z.ZodString;
150
149
  }, z.core.$strip>;
150
+ } & {
151
+ method: "GET";
151
152
  }, SerializedContentType>;
152
153
  listContentItems: better_call.StrictEndpoint<"/content/:typeSlug", {
153
- method: "GET";
154
154
  params: z.ZodObject<{
155
155
  typeSlug: z.ZodString;
156
156
  }, z.core.$strip>;
157
- query: z.ZodObject<{
158
- slug: z.ZodOptional<z.ZodString>;
159
- limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
160
- offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
161
- }, z.core.$strip>;
157
+ } & {
158
+ method: "GET";
159
+ } & {
160
+ query: better_call.StandardSchemaV1<{
161
+ slug?: string | undefined;
162
+ limit?: unknown;
163
+ offset?: unknown;
164
+ }, {
165
+ slug?: string | undefined;
166
+ limit?: unknown;
167
+ offset?: unknown;
168
+ }>;
162
169
  }, {
163
170
  items: SerializedContentItemWithType[];
164
171
  total: number;
@@ -166,21 +173,30 @@ declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugin
166
173
  offset?: number;
167
174
  }>;
168
175
  getContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
169
- method: "GET";
170
176
  params: z.ZodObject<{
171
177
  typeSlug: z.ZodString;
172
178
  id: z.ZodString;
173
179
  }, z.core.$strip>;
180
+ } & {
181
+ method: "GET";
174
182
  }, SerializedContentItemWithType<Record<string, unknown>>>;
175
183
  createContentItem: better_call.StrictEndpoint<"/content/:typeSlug", {
176
- method: "POST";
177
184
  params: z.ZodObject<{
178
185
  typeSlug: z.ZodString;
179
186
  }, z.core.$strip>;
180
- body: z.ZodObject<{
181
- slug: z.ZodString;
182
- data: z.ZodObject<{}, z.core.$loose>;
183
- }, z.core.$strip>;
187
+ } & {
188
+ method: "POST";
189
+ body: better_call.StandardSchemaV1<{
190
+ slug: string;
191
+ data: {
192
+ [x: string]: unknown;
193
+ };
194
+ }, {
195
+ slug: string;
196
+ data: {
197
+ [x: string]: unknown;
198
+ };
199
+ }>;
184
200
  }, {
185
201
  parsedData: Record<string, unknown>;
186
202
  createdAt: string;
@@ -192,31 +208,42 @@ declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugin
192
208
  authorId?: string | undefined;
193
209
  }>;
194
210
  updateContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
195
- method: "PUT";
196
211
  params: z.ZodObject<{
197
212
  typeSlug: z.ZodString;
198
213
  id: z.ZodString;
199
214
  }, z.core.$strip>;
200
- body: z.ZodObject<{
201
- slug: z.ZodOptional<z.ZodString>;
202
- data: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
203
- }, z.core.$strip>;
215
+ } & {
216
+ method: "PUT";
217
+ body: better_call.StandardSchemaV1<{
218
+ slug?: string | undefined;
219
+ data?: {
220
+ [x: string]: unknown;
221
+ } | undefined;
222
+ }, {
223
+ slug?: string | undefined;
224
+ data?: {
225
+ [x: string]: unknown;
226
+ } | undefined;
227
+ }>;
204
228
  }, SerializedContentItemWithType<Record<string, unknown>>>;
205
229
  deleteContentItem: better_call.StrictEndpoint<"/content/:typeSlug/:id", {
206
- method: "DELETE";
207
230
  params: z.ZodObject<{
208
231
  typeSlug: z.ZodString;
209
232
  id: z.ZodString;
210
233
  }, z.core.$strip>;
234
+ } & {
235
+ method: "DELETE";
236
+ body: better_call.StandardSchemaV1<unknown, unknown>;
211
237
  }, {
212
238
  success: boolean;
213
239
  }>;
214
240
  getContentItemPopulated: better_call.StrictEndpoint<"/content/:typeSlug/:id/populated", {
215
- method: "GET";
216
241
  params: z.ZodObject<{
217
242
  typeSlug: z.ZodString;
218
243
  id: z.ZodString;
219
244
  }, z.core.$strip>;
245
+ } & {
246
+ method: "GET";
220
247
  }, {
221
248
  _relations: Record<string, SerializedContentItemWithType<Record<string, unknown>>[]>;
222
249
  parsedData: Record<string, unknown>;
@@ -230,16 +257,23 @@ declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugin
230
257
  authorId?: string | undefined;
231
258
  }>;
232
259
  listContentByRelation: better_call.StrictEndpoint<"/content/:typeSlug/by-relation", {
233
- method: "GET";
234
260
  params: z.ZodObject<{
235
261
  typeSlug: z.ZodString;
236
262
  }, z.core.$strip>;
237
- query: z.ZodObject<{
238
- field: z.ZodString;
239
- targetId: z.ZodString;
240
- limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
241
- offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
242
- }, z.core.$strip>;
263
+ } & {
264
+ method: "GET";
265
+ } & {
266
+ query: better_call.StandardSchemaV1<{
267
+ field: string;
268
+ targetId: string;
269
+ limit?: unknown;
270
+ offset?: unknown;
271
+ }, {
272
+ field: string;
273
+ targetId: string;
274
+ limit?: unknown;
275
+ offset?: unknown;
276
+ }>;
243
277
  }, {
244
278
  items: SerializedContentItemWithType<Record<string, unknown>>[];
245
279
  total: number;
@@ -247,28 +281,39 @@ declare const cmsBackendPlugin: (config: CMSBackendConfig) => _btst_stack_plugin
247
281
  offset: number;
248
282
  }>;
249
283
  getInverseRelations: better_call.StrictEndpoint<"/content-types/:slug/inverse-relations", {
250
- method: "GET";
251
284
  params: z.ZodObject<{
252
285
  slug: z.ZodString;
253
286
  }, z.core.$strip>;
254
- query: z.ZodObject<{
255
- itemId: z.ZodOptional<z.ZodString>;
256
- }, z.core.$strip>;
287
+ } & {
288
+ method: "GET";
289
+ } & {
290
+ query: better_call.StandardSchemaV1<{
291
+ itemId?: string | undefined;
292
+ }, {
293
+ itemId?: string | undefined;
294
+ }>;
257
295
  }, {
258
296
  inverseRelations: InverseRelation[];
259
297
  }>;
260
298
  listInverseRelationItems: better_call.StrictEndpoint<"/content-types/:slug/inverse-relations/:sourceType", {
261
- method: "GET";
262
299
  params: z.ZodObject<{
263
300
  slug: z.ZodString;
264
301
  sourceType: z.ZodString;
265
302
  }, z.core.$strip>;
266
- query: z.ZodObject<{
267
- itemId: z.ZodString;
268
- fieldName: z.ZodString;
269
- limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
270
- offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
271
- }, z.core.$strip>;
303
+ } & {
304
+ method: "GET";
305
+ } & {
306
+ query: better_call.StandardSchemaV1<{
307
+ itemId: string;
308
+ fieldName: string;
309
+ limit?: unknown;
310
+ offset?: unknown;
311
+ }, {
312
+ itemId: string;
313
+ fieldName: string;
314
+ limit?: unknown;
315
+ offset?: unknown;
316
+ }>;
272
317
  }, {
273
318
  items: SerializedContentItemWithType<Record<string, unknown>>[];
274
319
  total: number;
@@ -259,6 +259,8 @@ interface ChatLayoutBaseProps {
259
259
  initialMessages?: UIMessage[];
260
260
  /** Called whenever messages change (for persistence). Only fires in public mode. */
261
261
  onMessagesChange?: (messages: UIMessage[]) => void;
262
+ /** Called when the user clears the chat (e.g. clicks the trash button in widget mode). Use this to clear persisted messages. */
263
+ onClear?: () => void;
262
264
  }
263
265
  interface ChatLayoutWidgetProps extends ChatLayoutBaseProps {
264
266
  /** Widget mode: compact embeddable panel with a floating trigger button */
@@ -259,6 +259,8 @@ interface ChatLayoutBaseProps {
259
259
  initialMessages?: UIMessage[];
260
260
  /** Called whenever messages change (for persistence). Only fires in public mode. */
261
261
  onMessagesChange?: (messages: UIMessage[]) => void;
262
+ /** Called when the user clears the chat (e.g. clicks the trash button in widget mode). Use this to clear persisted messages. */
263
+ onClear?: () => void;
262
264
  }
263
265
  interface ChatLayoutWidgetProps extends ChatLayoutBaseProps {
264
266
  /** Widget mode: compact embeddable panel with a floating trigger button */
@@ -259,6 +259,8 @@ interface ChatLayoutBaseProps {
259
259
  initialMessages?: UIMessage[];
260
260
  /** Called whenever messages change (for persistence). Only fires in public mode. */
261
261
  onMessagesChange?: (messages: UIMessage[]) => void;
262
+ /** Called when the user clears the chat (e.g. clicks the trash button in widget mode). Use this to clear persisted messages. */
263
+ onClear?: () => void;
262
264
  }
263
265
  interface ChatLayoutWidgetProps extends ChatLayoutBaseProps {
264
266
  /** Widget mode: compact embeddable panel with a floating trigger button */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@btst/stack",
3
- "version": "2.6.1",
3
+ "version": "2.7.0",
4
4
  "description": "A composable, plugin-based library for building full-stack applications.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -571,7 +571,7 @@
571
571
  }
572
572
  },
573
573
  "dependencies": {
574
- "@btst/db": "2.0.3",
574
+ "@btst/db": "2.1.0",
575
575
  "@lukemorales/query-key-factory": "^1.3.4",
576
576
  "@milkdown/crepe": "^7.17.1",
577
577
  "@milkdown/kit": "^7.17.1",
@@ -588,7 +588,7 @@
588
588
  "@radix-ui/react-switch": ">=1.1.0",
589
589
  "@tanstack/react-query": "^5.0.0",
590
590
  "ai": ">=5.0.0",
591
- "better-call": ">=1.1.5",
591
+ "better-call": ">=1.3.2",
592
592
  "class-variance-authority": ">=0.7.0",
593
593
  "clsx": ">=2.1.0",
594
594
  "cmdk": ">=1.1.0",
@@ -616,7 +616,7 @@
616
616
  "devDependencies": {
617
617
  "tsx": "catalog:",
618
618
  "@ai-sdk/react": "^2.0.94",
619
- "@btst/adapter-memory": "2.0.3",
619
+ "@btst/adapter-memory": "2.1.0",
620
620
  "@btst/yar": "1.2.0",
621
621
  "@types/react": "^19.0.0",
622
622
  "@types/slug": "^5.0.9",
@@ -4,7 +4,11 @@ import { createStackClient } from "../client";
4
4
  import { defineBackendPlugin } from "../plugins/api";
5
5
  import { defineClientPlugin } from "../plugins/client";
6
6
  import type { BackendPlugin, ClientPlugin } from "../types";
7
- import type { BetterAuthDBSchema, DatabaseDefinition, Adapter } from "@btst/db";
7
+ import type {
8
+ BetterAuthDBSchema,
9
+ DatabaseDefinition,
10
+ DBAdapter as Adapter,
11
+ } from "@btst/db";
8
12
  import { createDbPlugin } from "@btst/db";
9
13
  import { createMemoryAdapter } from "@btst/adapter-memory";
10
14
  import { createEndpoint as endpoint } from "better-call";
@@ -3,7 +3,7 @@ import { stack } from "../api";
3
3
  import { defineBackendPlugin } from "../plugins/api";
4
4
  import { createDbPlugin } from "@btst/db";
5
5
  import { createMemoryAdapter } from "@btst/adapter-memory";
6
- import type { Adapter, DatabaseDefinition } from "@btst/db";
6
+ import type { DBAdapter as Adapter, DatabaseDefinition } from "@btst/db";
7
7
  import { blogBackendPlugin } from "../plugins/blog/api";
8
8
  import { kanbanBackendPlugin } from "../plugins/kanban/api";
9
9
 
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from "vitest";
2
2
  import { createMemoryAdapter } from "@btst/adapter-memory";
3
3
  import { defineDb } from "@btst/db";
4
- import type { Adapter } from "@btst/db";
4
+ import type { DBAdapter as Adapter } from "@btst/db";
5
5
  import { aiChatSchema } from "../db";
6
6
  import { getAllConversations, getConversationById } from "../api/getters";
7
7
 
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type { Conversation, ConversationWithMessages, Message } from "../types";
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import { defineBackendPlugin } from "@btst/stack/plugins/api";
3
3
  import { createEndpoint } from "@btst/stack/plugins/api";
4
4
  import {
@@ -37,6 +37,8 @@ interface ChatLayoutBaseProps {
37
37
  initialMessages?: UIMessage[];
38
38
  /** Called whenever messages change (for persistence). Only fires in public mode. */
39
39
  onMessagesChange?: (messages: UIMessage[]) => void;
40
+ /** Called when the user clears the chat (e.g. clicks the trash button in widget mode). Use this to clear persisted messages. */
41
+ onClear?: () => void;
40
42
  }
41
43
 
42
44
  interface ChatLayoutWidgetProps extends ChatLayoutBaseProps {
@@ -84,6 +86,7 @@ export function ChatLayout(props: ChatLayoutProps) {
84
86
  showSidebar = true,
85
87
  initialMessages,
86
88
  onMessagesChange,
89
+ onClear,
87
90
  } = props;
88
91
 
89
92
  // Widget-specific props — TypeScript narrows props to ChatLayoutWidgetProps here
@@ -156,7 +159,10 @@ export function ChatLayout(props: ChatLayoutProps) {
156
159
  variant="ghost"
157
160
  size="icon"
158
161
  className="h-5 w-5"
159
- onClick={() => setWidgetResetKey((prev) => prev + 1)}
162
+ onClick={() => {
163
+ onClear?.();
164
+ setWidgetResetKey((prev) => prev + 1);
165
+ }}
160
166
  aria-label="Clear chat"
161
167
  title="Clear chat"
162
168
  >
@@ -293,6 +299,21 @@ export function ChatLayout(props: ChatLayoutProps) {
293
299
  {pageAIContext.routeName}
294
300
  </Badge>
295
301
  )}
302
+
303
+ {onClear && (
304
+ <Button
305
+ variant="ghost"
306
+ size="icon"
307
+ onClick={() => {
308
+ onClear();
309
+ setChatResetKey((prev) => prev + 1);
310
+ }}
311
+ aria-label="Clear chat"
312
+ title="Clear chat"
313
+ >
314
+ <Trash2 className="h-4 w-4" />
315
+ </Button>
316
+ )}
296
317
  </div>
297
318
 
298
319
  <ChatInterface
@@ -18,7 +18,11 @@ export type {
18
18
  ClientPlugin,
19
19
  } from "../../types";
20
20
 
21
- export type { Adapter, DatabaseDefinition, DbPlugin } from "@btst/db";
21
+ export type {
22
+ DBAdapter as Adapter,
23
+ DatabaseDefinition,
24
+ DbPlugin,
25
+ } from "@btst/db";
22
26
 
23
27
  // Re-export Better Call functions needed for plugins
24
28
  export type { Endpoint, Router } from "better-call";
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from "vitest";
2
2
  import { createMemoryAdapter } from "@btst/adapter-memory";
3
3
  import { defineDb } from "@btst/db";
4
- import type { Adapter } from "@btst/db";
4
+ import type { DBAdapter as Adapter } from "@btst/db";
5
5
  import { blogSchema } from "../db";
6
6
  import { getAllPosts, getPostBySlug, getAllTags } from "../api/getters";
7
7
 
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type { Post, PostWithPostTag, Tag } from "../types";
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import { defineBackendPlugin } from "@btst/stack/plugins/api";
3
3
  import { createEndpoint } from "@btst/stack/plugins/api";
4
4
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from "vitest";
2
2
  import { createMemoryAdapter } from "@btst/adapter-memory";
3
3
  import { defineDb } from "@btst/db";
4
- import type { Adapter } from "@btst/db";
4
+ import type { DBAdapter as Adapter } from "@btst/db";
5
5
  import { cmsSchema } from "../db";
6
6
  import {
7
7
  getAllContentTypes,
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type {
3
3
  ContentType,
4
4
  ContentItem,
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type { ContentType, ContentItem } from "../types";
3
3
  import { serializeContentItem } from "./getters";
4
4
  import type { SerializedContentItem } from "../types";
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import { defineBackendPlugin } from "@btst/stack/plugins/api";
3
3
  import { createEndpoint } from "@btst/stack/plugins/api";
4
4
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from "vitest";
2
2
  import { createMemoryAdapter } from "@btst/adapter-memory";
3
3
  import { defineDb } from "@btst/db";
4
- import type { Adapter } from "@btst/db";
4
+ import type { DBAdapter as Adapter } from "@btst/db";
5
5
  import { formBuilderSchema } from "../db";
6
6
  import { getAllForms, getFormBySlug, getFormSubmissions } from "../api/getters";
7
7
 
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type {
3
3
  Form,
4
4
  FormSubmission,
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import { defineBackendPlugin } from "@btst/stack/plugins/api";
3
3
  import { createEndpoint } from "@btst/stack/plugins/api";
4
4
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, beforeEach } from "vitest";
2
2
  import { createMemoryAdapter } from "@btst/adapter-memory";
3
3
  import { defineDb } from "@btst/db";
4
- import type { Adapter } from "@btst/db";
4
+ import type { DBAdapter as Adapter } from "@btst/db";
5
5
  import { kanbanSchema } from "../db";
6
6
  import { getAllBoards, getBoardById } from "../api/getters";
7
7
 
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type {
3
3
  BoardWithKanbanColumn,
4
4
  BoardWithColumns,
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import type { Board, Column, Task, Priority } from "../types";
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { Adapter } from "@btst/db";
1
+ import type { DBAdapter as Adapter } from "@btst/db";
2
2
  import { defineBackendPlugin } from "@btst/stack/plugins/api";
3
3
  import { createEndpoint } from "@btst/stack/plugins/api";
4
4
  import { z } from "zod";
@@ -444,7 +444,7 @@ export const kanbanBackendPlugin = (hooks?: KanbanBackendHooks) =>
444
444
  const createdColumns: ColumnWithTasks[] = [];
445
445
 
446
446
  await adapter.transaction(async (tx) => {
447
- newBoard = await tx.create<Board>({
447
+ const createdBoard = await tx.create<Board>({
448
448
  model: "kanbanBoard",
449
449
  data: {
450
450
  ...boardData,
@@ -453,12 +453,13 @@ export const kanbanBackendPlugin = (hooks?: KanbanBackendHooks) =>
453
453
  updatedAt: new Date(),
454
454
  },
455
455
  });
456
+ newBoard = createdBoard;
456
457
 
457
458
  // Create default columns
458
459
  const defaultColumns = [
459
- { title: "To Do", order: 0, boardId: newBoard.id },
460
- { title: "In Progress", order: 1, boardId: newBoard.id },
461
- { title: "Done", order: 2, boardId: newBoard.id },
460
+ { title: "To Do", order: 0, boardId: createdBoard.id },
461
+ { title: "In Progress", order: 1, boardId: createdBoard.id },
462
+ { title: "Done", order: 2, boardId: createdBoard.id },
462
463
  ];
463
464
 
464
465
  for (const colData of defaultColumns) {
package/src/types.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import type { Route, createRouter } from "@btst/yar";
2
- import type { Adapter, DatabaseDefinition, DbPlugin } from "@btst/db";
2
+ import type {
3
+ DBAdapter as Adapter,
4
+ DatabaseDefinition,
5
+ DbPlugin,
6
+ } from "@btst/db";
3
7
  import type { Endpoint, Router } from "better-call";
4
8
 
5
9
  /**
@@ -42,15 +42,15 @@ declare const createPostSchema: z.ZodObject<{
42
42
  name: z.ZodString;
43
43
  slug: z.ZodString;
44
44
  }, z.core.$strip>]>>>>;
45
- title: z.ZodString;
46
45
  slug: z.ZodOptional<z.ZodString>;
46
+ published: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
47
+ publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
47
48
  createdAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
48
49
  updatedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
49
- publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
50
+ title: z.ZodString;
50
51
  content: z.ZodString;
51
52
  excerpt: z.ZodString;
52
53
  image: z.ZodOptional<z.ZodString>;
53
- published: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
54
54
  }, z.core.$strip>;
55
55
  declare const updatePostSchema: z.ZodObject<{
56
56
  publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
@@ -42,15 +42,15 @@ declare const createPostSchema: z.ZodObject<{
42
42
  name: z.ZodString;
43
43
  slug: z.ZodString;
44
44
  }, z.core.$strip>]>>>>;
45
- title: z.ZodString;
46
45
  slug: z.ZodOptional<z.ZodString>;
46
+ published: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
47
+ publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
47
48
  createdAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
48
49
  updatedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
49
- publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
50
+ title: z.ZodString;
50
51
  content: z.ZodString;
51
52
  excerpt: z.ZodString;
52
53
  image: z.ZodOptional<z.ZodString>;
53
- published: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
54
54
  }, z.core.$strip>;
55
55
  declare const updatePostSchema: z.ZodObject<{
56
56
  publishedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;