@btst/stack 2.5.6 → 2.6.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 (97) hide show
  1. package/README.md +23 -0
  2. package/dist/client/components/index.d.cts +9 -9
  3. package/dist/client/components/index.d.mts +9 -9
  4. package/dist/client/components/index.d.ts +9 -9
  5. package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.cjs +1 -1
  6. package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.mjs +1 -1
  7. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.cjs +44 -35
  8. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.mjs +44 -35
  9. package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.cjs +1 -1
  10. package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.mjs +1 -1
  11. package/dist/packages/stack/src/plugins/blog/client/hooks/use-debounce.cjs +22 -0
  12. package/dist/packages/stack/src/plugins/blog/client/hooks/use-debounce.mjs +23 -2
  13. package/dist/packages/stack/src/plugins/blog/client/plugin.cjs +12 -6
  14. package/dist/packages/stack/src/plugins/blog/client/plugin.mjs +12 -6
  15. package/dist/packages/stack/src/plugins/cms/client/components/shared/default-error.cjs +1 -1
  16. package/dist/packages/stack/src/plugins/cms/client/components/shared/default-error.mjs +1 -1
  17. package/dist/packages/stack/src/plugins/cms/client/plugin.cjs +38 -26
  18. package/dist/packages/stack/src/plugins/cms/client/plugin.mjs +38 -26
  19. package/dist/packages/stack/src/plugins/form-builder/client/components/shared/default-error.cjs +1 -1
  20. package/dist/packages/stack/src/plugins/form-builder/client/components/shared/default-error.mjs +1 -1
  21. package/dist/packages/stack/src/plugins/form-builder/client/plugin.cjs +32 -20
  22. package/dist/packages/stack/src/plugins/form-builder/client/plugin.mjs +32 -20
  23. package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.cjs +1 -1
  24. package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.mjs +1 -1
  25. package/dist/packages/stack/src/plugins/kanban/client/plugin.cjs +6 -3
  26. package/dist/packages/stack/src/plugins/kanban/client/plugin.mjs +6 -3
  27. package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.cjs +1 -1
  28. package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.mjs +1 -1
  29. package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.cjs +1 -1
  30. package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.mjs +1 -1
  31. package/dist/packages/stack/src/plugins/ui-builder/client/plugin.cjs +24 -15
  32. package/dist/packages/stack/src/plugins/ui-builder/client/plugin.mjs +24 -15
  33. package/dist/packages/ui/src/components/search-select.cjs +13 -3
  34. package/dist/packages/ui/src/components/search-select.mjs +14 -4
  35. package/dist/plugins/ai-chat/client/index.d.cts +17 -4
  36. package/dist/plugins/ai-chat/client/index.d.mts +17 -4
  37. package/dist/plugins/ai-chat/client/index.d.ts +17 -4
  38. package/dist/plugins/blog/client/hooks/index.cjs +3 -0
  39. package/dist/plugins/blog/client/hooks/index.d.cts +7 -226
  40. package/dist/plugins/blog/client/hooks/index.d.mts +7 -226
  41. package/dist/plugins/blog/client/hooks/index.d.ts +7 -226
  42. package/dist/plugins/blog/client/hooks/index.mjs +1 -0
  43. package/dist/plugins/blog/client/index.d.cts +45 -21
  44. package/dist/plugins/blog/client/index.d.mts +45 -21
  45. package/dist/plugins/blog/client/index.d.ts +45 -21
  46. package/dist/plugins/cms/client/index.d.cts +35 -14
  47. package/dist/plugins/cms/client/index.d.mts +35 -14
  48. package/dist/plugins/cms/client/index.d.ts +35 -14
  49. package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
  50. package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
  51. package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
  52. package/dist/plugins/form-builder/client/index.d.cts +32 -14
  53. package/dist/plugins/form-builder/client/index.d.mts +32 -14
  54. package/dist/plugins/form-builder/client/index.d.ts +32 -14
  55. package/dist/plugins/kanban/api/index.d.cts +1 -1
  56. package/dist/plugins/kanban/api/index.d.mts +1 -1
  57. package/dist/plugins/kanban/api/index.d.ts +1 -1
  58. package/dist/plugins/kanban/client/components/index.d.cts +5 -5
  59. package/dist/plugins/kanban/client/components/index.d.mts +5 -5
  60. package/dist/plugins/kanban/client/components/index.d.ts +5 -5
  61. package/dist/plugins/kanban/client/index.d.cts +25 -10
  62. package/dist/plugins/kanban/client/index.d.mts +25 -10
  63. package/dist/plugins/kanban/client/index.d.ts +25 -10
  64. package/dist/plugins/kanban/query-keys.d.cts +1 -1
  65. package/dist/plugins/kanban/query-keys.d.mts +1 -1
  66. package/dist/plugins/kanban/query-keys.d.ts +1 -1
  67. package/dist/plugins/route-docs/client/index.d.cts +4 -4
  68. package/dist/plugins/route-docs/client/index.d.mts +4 -4
  69. package/dist/plugins/route-docs/client/index.d.ts +4 -4
  70. package/dist/plugins/ui-builder/client/components/index.d.cts +1 -1
  71. package/dist/plugins/ui-builder/client/components/index.d.mts +1 -1
  72. package/dist/plugins/ui-builder/client/components/index.d.ts +1 -1
  73. package/dist/plugins/ui-builder/client/index.d.cts +29 -15
  74. package/dist/plugins/ui-builder/client/index.d.mts +29 -15
  75. package/dist/plugins/ui-builder/client/index.d.ts +29 -15
  76. package/dist/shared/stack.CNLHlv7r.d.mts +228 -0
  77. package/dist/shared/stack.CQAZwXhV.d.cts +228 -0
  78. package/dist/shared/stack.D3BsrpAz.d.ts +228 -0
  79. package/package.json +19 -2
  80. package/src/__tests__/page-component-overrides.test.tsx +147 -0
  81. package/src/plugins/ai-chat/client/components/shared/default-error.tsx +1 -1
  82. package/src/plugins/ai-chat/client/plugin.tsx +60 -32
  83. package/src/plugins/blog/client/components/shared/default-error.tsx +2 -1
  84. package/src/plugins/blog/client/hooks/index.tsx +1 -0
  85. package/src/plugins/blog/client/plugin.tsx +41 -6
  86. package/src/plugins/cms/client/components/shared/default-error.tsx +3 -2
  87. package/src/plugins/cms/client/plugin.tsx +65 -32
  88. package/src/plugins/form-builder/client/components/shared/default-error.tsx +3 -2
  89. package/src/plugins/form-builder/client/plugin.tsx +56 -23
  90. package/src/plugins/kanban/client/components/shared/default-error.tsx +3 -2
  91. package/src/plugins/kanban/client/plugin.tsx +23 -3
  92. package/src/plugins/ui-builder/client/components/page-renderer.tsx +5 -3
  93. package/src/plugins/ui-builder/client/components/shared/default-error.tsx +3 -2
  94. package/src/plugins/ui-builder/client/plugin.tsx +41 -15
  95. package/dist/shared/{stack.CxNeGV2z.d.mts → stack.Ba_Ks8qi.d.mts} +9 -9
  96. package/dist/shared/{stack.DSxTDZBQ.d.cts → stack.CFqqZUes.d.cts} +9 -9
  97. package/dist/shared/{stack.BFcg0tDz.d.ts → stack.DMobugrZ.d.ts} +9 -9
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as react from 'react';
2
+ import * as React from 'react';
3
3
  import { HTMLAttributes, ReactNode } from 'react';
4
4
  import { a as SerializedColumn, b as SerializedTask, c as SerializedBoard } from '../../../../shared/stack.DJaKVY7v.mjs';
5
5
 
@@ -29,7 +29,7 @@ interface EmptyStateProps {
29
29
  declare function EmptyState({ title, description, action, icon, className, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
30
30
 
31
31
  interface DefaultErrorProps {
32
- error?: Error;
32
+ error?: unknown;
33
33
  reset?: () => void;
34
34
  }
35
35
  declare function DefaultError({ error, reset }: DefaultErrorProps): react_jsx_runtime.JSX.Element;
@@ -46,7 +46,7 @@ interface KanbanBoardProps {
46
46
  onDeleteColumn: (columnId: string) => void;
47
47
  }
48
48
  declare function KanbanBoardComponent({ columns, kanbanState, onKanbanChange, onAddTask, onEditTask, onEditColumn, onDeleteColumn, }: KanbanBoardProps): react_jsx_runtime.JSX.Element;
49
- declare const KanbanBoard: react.MemoExoticComponent<typeof KanbanBoardComponent>;
49
+ declare const KanbanBoard: React.MemoExoticComponent<typeof KanbanBoardComponent>;
50
50
 
51
51
  interface ColumnContentProps {
52
52
  column: SerializedColumn & {
@@ -58,14 +58,14 @@ interface ColumnContentProps {
58
58
  onDeleteColumn: () => void;
59
59
  }
60
60
  declare function ColumnContentComponent({ column, onAddTask, onEditTask, onEditColumn, onDeleteColumn, }: ColumnContentProps): react_jsx_runtime.JSX.Element;
61
- declare const ColumnContent: react.MemoExoticComponent<typeof ColumnContentComponent>;
61
+ declare const ColumnContent: React.MemoExoticComponent<typeof ColumnContentComponent>;
62
62
 
63
63
  interface TaskCardProps {
64
64
  task: SerializedTask;
65
65
  onClick: () => void;
66
66
  }
67
67
  declare function TaskCardComponent({ task, onClick }: TaskCardProps): react_jsx_runtime.JSX.Element;
68
- declare const TaskCard: react.MemoExoticComponent<typeof TaskCardComponent>;
68
+ declare const TaskCard: React.MemoExoticComponent<typeof TaskCardComponent>;
69
69
 
70
70
  interface BoardFormProps {
71
71
  board?: SerializedBoard;
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as react from 'react';
2
+ import * as React from 'react';
3
3
  import { HTMLAttributes, ReactNode } from 'react';
4
4
  import { a as SerializedColumn, b as SerializedTask, c as SerializedBoard } from '../../../../shared/stack.DJaKVY7v.js';
5
5
 
@@ -29,7 +29,7 @@ interface EmptyStateProps {
29
29
  declare function EmptyState({ title, description, action, icon, className, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
30
30
 
31
31
  interface DefaultErrorProps {
32
- error?: Error;
32
+ error?: unknown;
33
33
  reset?: () => void;
34
34
  }
35
35
  declare function DefaultError({ error, reset }: DefaultErrorProps): react_jsx_runtime.JSX.Element;
@@ -46,7 +46,7 @@ interface KanbanBoardProps {
46
46
  onDeleteColumn: (columnId: string) => void;
47
47
  }
48
48
  declare function KanbanBoardComponent({ columns, kanbanState, onKanbanChange, onAddTask, onEditTask, onEditColumn, onDeleteColumn, }: KanbanBoardProps): react_jsx_runtime.JSX.Element;
49
- declare const KanbanBoard: react.MemoExoticComponent<typeof KanbanBoardComponent>;
49
+ declare const KanbanBoard: React.MemoExoticComponent<typeof KanbanBoardComponent>;
50
50
 
51
51
  interface ColumnContentProps {
52
52
  column: SerializedColumn & {
@@ -58,14 +58,14 @@ interface ColumnContentProps {
58
58
  onDeleteColumn: () => void;
59
59
  }
60
60
  declare function ColumnContentComponent({ column, onAddTask, onEditTask, onEditColumn, onDeleteColumn, }: ColumnContentProps): react_jsx_runtime.JSX.Element;
61
- declare const ColumnContent: react.MemoExoticComponent<typeof ColumnContentComponent>;
61
+ declare const ColumnContent: React.MemoExoticComponent<typeof ColumnContentComponent>;
62
62
 
63
63
  interface TaskCardProps {
64
64
  task: SerializedTask;
65
65
  onClick: () => void;
66
66
  }
67
67
  declare function TaskCardComponent({ task, onClick }: TaskCardProps): react_jsx_runtime.JSX.Element;
68
- declare const TaskCard: react.MemoExoticComponent<typeof TaskCardComponent>;
68
+ declare const TaskCard: React.MemoExoticComponent<typeof TaskCardComponent>;
69
69
 
70
70
  interface BoardFormProps {
71
71
  board?: SerializedBoard;
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
3
2
  import * as _btst_yar from '@btst/yar';
3
+ import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { S as SerializedBoardWithColumns } from '../../../shared/stack.DJaKVY7v.cjs';
6
6
  export { K as KanbanPluginOverrides, a as KanbanUser } from '../../../shared/stack.FeaWkglm.cjs';
@@ -66,6 +66,21 @@ interface KanbanClientConfig {
66
66
  hooks?: KanbanClientHooks;
67
67
  /** Optional headers for SSR (e.g., forwarding cookies) */
68
68
  headers?: Headers;
69
+ /**
70
+ * Optional page component overrides.
71
+ * Replace any plugin page with a custom React component.
72
+ * The built-in component is used as the fallback when not provided.
73
+ */
74
+ pageComponents?: {
75
+ /** Replaces the boards list page */
76
+ boards?: ComponentType;
77
+ /** Replaces the new board page */
78
+ newBoard?: ComponentType;
79
+ /** Replaces the board detail page */
80
+ board?: ComponentType<{
81
+ boardId: string;
82
+ }>;
83
+ };
69
84
  }
70
85
  /**
71
86
  * Hooks for kanban client plugin
@@ -108,9 +123,9 @@ interface KanbanClientHooks {
108
123
  declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
109
124
  boards: {
110
125
  (inputCtx_0?: _btst_yar.InputContext<"/kanban", _btst_yar.RouteOptions> | undefined): {
111
- PageComponent?: react.ComponentType<unknown> | undefined;
112
- LoadingComponent?: react.ComponentType<unknown> | undefined;
113
- ErrorComponent?: react.ComponentType<unknown> | undefined;
126
+ PageComponent?: ComponentType<{}> | undefined;
127
+ LoadingComponent?: ComponentType<{}> | undefined;
128
+ ErrorComponent?: ComponentType<{}> | undefined;
114
129
  loader?: (() => Promise<void>) | undefined;
115
130
  meta?: (() => ({
116
131
  title: string;
@@ -136,9 +151,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
136
151
  };
137
152
  newBoard: {
138
153
  (inputCtx_0?: _btst_yar.InputContext<"/kanban/new", _btst_yar.RouteOptions> | undefined): {
139
- PageComponent?: react.ComponentType<unknown> | undefined;
140
- LoadingComponent?: react.ComponentType<unknown> | undefined;
141
- ErrorComponent?: react.ComponentType<unknown> | undefined;
154
+ PageComponent?: ComponentType<{}> | undefined;
155
+ LoadingComponent?: ComponentType<{}> | undefined;
156
+ ErrorComponent?: ComponentType<{}> | undefined;
142
157
  loader?: (() => Promise<void>) | undefined;
143
158
  meta?: (() => ({
144
159
  title: string;
@@ -164,9 +179,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
164
179
  };
165
180
  board: {
166
181
  (inputCtx_0: _btst_yar.InputContext<"/kanban/:boardId", _btst_yar.RouteOptions>): {
167
- PageComponent?: react.ComponentType<unknown> | undefined;
168
- LoadingComponent?: react.ComponentType<unknown> | undefined;
169
- ErrorComponent?: react.ComponentType<unknown> | undefined;
182
+ PageComponent?: ComponentType<unknown> | undefined;
183
+ LoadingComponent?: ComponentType<unknown> | undefined;
184
+ ErrorComponent?: ComponentType<unknown> | undefined;
170
185
  loader?: (() => Promise<void>) | undefined;
171
186
  meta?: (() => ({
172
187
  title: string;
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
3
2
  import * as _btst_yar from '@btst/yar';
3
+ import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { S as SerializedBoardWithColumns } from '../../../shared/stack.DJaKVY7v.mjs';
6
6
  export { K as KanbanPluginOverrides, a as KanbanUser } from '../../../shared/stack.FeaWkglm.mjs';
@@ -66,6 +66,21 @@ interface KanbanClientConfig {
66
66
  hooks?: KanbanClientHooks;
67
67
  /** Optional headers for SSR (e.g., forwarding cookies) */
68
68
  headers?: Headers;
69
+ /**
70
+ * Optional page component overrides.
71
+ * Replace any plugin page with a custom React component.
72
+ * The built-in component is used as the fallback when not provided.
73
+ */
74
+ pageComponents?: {
75
+ /** Replaces the boards list page */
76
+ boards?: ComponentType;
77
+ /** Replaces the new board page */
78
+ newBoard?: ComponentType;
79
+ /** Replaces the board detail page */
80
+ board?: ComponentType<{
81
+ boardId: string;
82
+ }>;
83
+ };
69
84
  }
70
85
  /**
71
86
  * Hooks for kanban client plugin
@@ -108,9 +123,9 @@ interface KanbanClientHooks {
108
123
  declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
109
124
  boards: {
110
125
  (inputCtx_0?: _btst_yar.InputContext<"/kanban", _btst_yar.RouteOptions> | undefined): {
111
- PageComponent?: react.ComponentType<unknown> | undefined;
112
- LoadingComponent?: react.ComponentType<unknown> | undefined;
113
- ErrorComponent?: react.ComponentType<unknown> | undefined;
126
+ PageComponent?: ComponentType<{}> | undefined;
127
+ LoadingComponent?: ComponentType<{}> | undefined;
128
+ ErrorComponent?: ComponentType<{}> | undefined;
114
129
  loader?: (() => Promise<void>) | undefined;
115
130
  meta?: (() => ({
116
131
  title: string;
@@ -136,9 +151,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
136
151
  };
137
152
  newBoard: {
138
153
  (inputCtx_0?: _btst_yar.InputContext<"/kanban/new", _btst_yar.RouteOptions> | undefined): {
139
- PageComponent?: react.ComponentType<unknown> | undefined;
140
- LoadingComponent?: react.ComponentType<unknown> | undefined;
141
- ErrorComponent?: react.ComponentType<unknown> | undefined;
154
+ PageComponent?: ComponentType<{}> | undefined;
155
+ LoadingComponent?: ComponentType<{}> | undefined;
156
+ ErrorComponent?: ComponentType<{}> | undefined;
142
157
  loader?: (() => Promise<void>) | undefined;
143
158
  meta?: (() => ({
144
159
  title: string;
@@ -164,9 +179,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
164
179
  };
165
180
  board: {
166
181
  (inputCtx_0: _btst_yar.InputContext<"/kanban/:boardId", _btst_yar.RouteOptions>): {
167
- PageComponent?: react.ComponentType<unknown> | undefined;
168
- LoadingComponent?: react.ComponentType<unknown> | undefined;
169
- ErrorComponent?: react.ComponentType<unknown> | undefined;
182
+ PageComponent?: ComponentType<unknown> | undefined;
183
+ LoadingComponent?: ComponentType<unknown> | undefined;
184
+ ErrorComponent?: ComponentType<unknown> | undefined;
170
185
  loader?: (() => Promise<void>) | undefined;
171
186
  meta?: (() => ({
172
187
  title: string;
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
3
2
  import * as _btst_yar from '@btst/yar';
3
+ import { ComponentType } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { S as SerializedBoardWithColumns } from '../../../shared/stack.DJaKVY7v.js';
6
6
  export { K as KanbanPluginOverrides, a as KanbanUser } from '../../../shared/stack.FeaWkglm.js';
@@ -66,6 +66,21 @@ interface KanbanClientConfig {
66
66
  hooks?: KanbanClientHooks;
67
67
  /** Optional headers for SSR (e.g., forwarding cookies) */
68
68
  headers?: Headers;
69
+ /**
70
+ * Optional page component overrides.
71
+ * Replace any plugin page with a custom React component.
72
+ * The built-in component is used as the fallback when not provided.
73
+ */
74
+ pageComponents?: {
75
+ /** Replaces the boards list page */
76
+ boards?: ComponentType;
77
+ /** Replaces the new board page */
78
+ newBoard?: ComponentType;
79
+ /** Replaces the board detail page */
80
+ board?: ComponentType<{
81
+ boardId: string;
82
+ }>;
83
+ };
69
84
  }
70
85
  /**
71
86
  * Hooks for kanban client plugin
@@ -108,9 +123,9 @@ interface KanbanClientHooks {
108
123
  declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
109
124
  boards: {
110
125
  (inputCtx_0?: _btst_yar.InputContext<"/kanban", _btst_yar.RouteOptions> | undefined): {
111
- PageComponent?: react.ComponentType<unknown> | undefined;
112
- LoadingComponent?: react.ComponentType<unknown> | undefined;
113
- ErrorComponent?: react.ComponentType<unknown> | undefined;
126
+ PageComponent?: ComponentType<{}> | undefined;
127
+ LoadingComponent?: ComponentType<{}> | undefined;
128
+ ErrorComponent?: ComponentType<{}> | undefined;
114
129
  loader?: (() => Promise<void>) | undefined;
115
130
  meta?: (() => ({
116
131
  title: string;
@@ -136,9 +151,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
136
151
  };
137
152
  newBoard: {
138
153
  (inputCtx_0?: _btst_yar.InputContext<"/kanban/new", _btst_yar.RouteOptions> | undefined): {
139
- PageComponent?: react.ComponentType<unknown> | undefined;
140
- LoadingComponent?: react.ComponentType<unknown> | undefined;
141
- ErrorComponent?: react.ComponentType<unknown> | undefined;
154
+ PageComponent?: ComponentType<{}> | undefined;
155
+ LoadingComponent?: ComponentType<{}> | undefined;
156
+ ErrorComponent?: ComponentType<{}> | undefined;
142
157
  loader?: (() => Promise<void>) | undefined;
143
158
  meta?: (() => ({
144
159
  title: string;
@@ -164,9 +179,9 @@ declare const kanbanClientPlugin: (config: KanbanClientConfig) => _btst_stack_pl
164
179
  };
165
180
  board: {
166
181
  (inputCtx_0: _btst_yar.InputContext<"/kanban/:boardId", _btst_yar.RouteOptions>): {
167
- PageComponent?: react.ComponentType<unknown> | undefined;
168
- LoadingComponent?: react.ComponentType<unknown> | undefined;
169
- ErrorComponent?: react.ComponentType<unknown> | undefined;
182
+ PageComponent?: ComponentType<unknown> | undefined;
183
+ LoadingComponent?: ComponentType<unknown> | undefined;
184
+ ErrorComponent?: ComponentType<unknown> | undefined;
170
185
  loader?: (() => Promise<void>) | undefined;
171
186
  meta?: (() => ({
172
187
  title: string;
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.DSxTDZBQ.cjs';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.CFqqZUes.cjs';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.cjs';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.CxNeGV2z.mjs';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.Ba_Ks8qi.mjs';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.mjs';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.BFcg0tDz.js';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.DMobugrZ.js';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.js';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
2
+ import * as React from 'react';
3
3
  import * as _btst_yar from '@btst/yar';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { a as SitemapEntry, b as ClientStackContext } from '../../../shared/stack.7n9Y_u7N.cjs';
@@ -101,9 +101,9 @@ interface RouteDocsClientConfig {
101
101
  declare const routeDocsClientPlugin: (config: RouteDocsClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
102
102
  docs: {
103
103
  (inputCtx_0?: _btst_yar.InputContext<"/route-docs", _btst_yar.RouteOptions> | undefined): {
104
- PageComponent?: react.ComponentType<unknown> | undefined;
105
- LoadingComponent?: react.ComponentType<unknown> | undefined;
106
- ErrorComponent?: react.ComponentType<unknown> | undefined;
104
+ PageComponent?: React.ComponentType<unknown> | undefined;
105
+ LoadingComponent?: React.ComponentType<unknown> | undefined;
106
+ ErrorComponent?: React.ComponentType<unknown> | undefined;
107
107
  loader?: (() => Promise<void>) | undefined;
108
108
  meta?: (() => ({
109
109
  title: string;
@@ -1,5 +1,5 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
2
+ import * as React from 'react';
3
3
  import * as _btst_yar from '@btst/yar';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { a as SitemapEntry, b as ClientStackContext } from '../../../shared/stack.7n9Y_u7N.mjs';
@@ -101,9 +101,9 @@ interface RouteDocsClientConfig {
101
101
  declare const routeDocsClientPlugin: (config: RouteDocsClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
102
102
  docs: {
103
103
  (inputCtx_0?: _btst_yar.InputContext<"/route-docs", _btst_yar.RouteOptions> | undefined): {
104
- PageComponent?: react.ComponentType<unknown> | undefined;
105
- LoadingComponent?: react.ComponentType<unknown> | undefined;
106
- ErrorComponent?: react.ComponentType<unknown> | undefined;
104
+ PageComponent?: React.ComponentType<unknown> | undefined;
105
+ LoadingComponent?: React.ComponentType<unknown> | undefined;
106
+ ErrorComponent?: React.ComponentType<unknown> | undefined;
107
107
  loader?: (() => Promise<void>) | undefined;
108
108
  meta?: (() => ({
109
109
  title: string;
@@ -1,5 +1,5 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
2
+ import * as React from 'react';
3
3
  import * as _btst_yar from '@btst/yar';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
5
  import { a as SitemapEntry, b as ClientStackContext } from '../../../shared/stack.7n9Y_u7N.js';
@@ -101,9 +101,9 @@ interface RouteDocsClientConfig {
101
101
  declare const routeDocsClientPlugin: (config: RouteDocsClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
102
102
  docs: {
103
103
  (inputCtx_0?: _btst_yar.InputContext<"/route-docs", _btst_yar.RouteOptions> | undefined): {
104
- PageComponent?: react.ComponentType<unknown> | undefined;
105
- LoadingComponent?: react.ComponentType<unknown> | undefined;
106
- ErrorComponent?: react.ComponentType<unknown> | undefined;
104
+ PageComponent?: React.ComponentType<unknown> | undefined;
105
+ LoadingComponent?: React.ComponentType<unknown> | undefined;
106
+ ErrorComponent?: React.ComponentType<unknown> | undefined;
107
107
  loader?: (() => Promise<void>) | undefined;
108
108
  meta?: (() => ({
109
109
  title: string;
@@ -18,7 +18,7 @@ interface PageRendererProps {
18
18
  LoadingComponent?: ComponentType;
19
19
  /** Custom error component */
20
20
  ErrorComponent?: ComponentType<{
21
- error: Error;
21
+ error: unknown;
22
22
  }>;
23
23
  /** Custom not found component */
24
24
  NotFoundComponent?: ComponentType;
@@ -18,7 +18,7 @@ interface PageRendererProps {
18
18
  LoadingComponent?: ComponentType;
19
19
  /** Custom error component */
20
20
  ErrorComponent?: ComponentType<{
21
- error: Error;
21
+ error: unknown;
22
22
  }>;
23
23
  /** Custom not found component */
24
24
  NotFoundComponent?: ComponentType;
@@ -18,7 +18,7 @@ interface PageRendererProps {
18
18
  LoadingComponent?: ComponentType;
19
19
  /** Custom error component */
20
20
  ErrorComponent?: ComponentType<{
21
- error: Error;
21
+ error: unknown;
22
22
  }>;
23
23
  /** Custom not found component */
24
24
  NotFoundComponent?: ComponentType;
@@ -1,7 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
3
- import react__default, { ComponentType } from 'react';
4
2
  import * as _btst_yar from '@btst/yar';
3
+ import React__default, { ComponentType } from 'react';
5
4
  import { QueryClient } from '@tanstack/react-query';
6
5
  import { c as UIBuilderClientHooks } from '../../../shared/stack.Cl7ok_cY.cjs';
7
6
  import { a as ComponentRegistry, b as FieldConfigFunction, C as ComponentLayer, F as FunctionRegistry } from '../../../shared/stack.C5ZSOJGJ.cjs';
@@ -32,6 +31,21 @@ interface UIBuilderClientConfig {
32
31
  hooks?: UIBuilderClientHooks;
33
32
  /** Component registry to use for the UI Builder */
34
33
  componentRegistry?: ComponentRegistry;
34
+ /**
35
+ * Optional page component overrides.
36
+ * Replace any plugin page with a custom React component.
37
+ * The built-in component is used as the fallback when not provided.
38
+ */
39
+ pageComponents?: {
40
+ /** Replaces the page list page */
41
+ pageList?: ComponentType;
42
+ /** Replaces the new page builder page */
43
+ newPage?: ComponentType;
44
+ /** Replaces the edit page builder page */
45
+ editPage?: ComponentType<{
46
+ id: string;
47
+ }>;
48
+ };
35
49
  }
36
50
  /**
37
51
  * UI Builder client plugin
@@ -64,9 +78,9 @@ interface UIBuilderClientConfig {
64
78
  declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
65
79
  pageList: {
66
80
  (inputCtx_0?: _btst_yar.InputContext<"/ui-builder", _btst_yar.RouteOptions> | undefined): {
67
- PageComponent?: react.ComponentType<unknown> | undefined;
68
- LoadingComponent?: react.ComponentType<unknown> | undefined;
69
- ErrorComponent?: react.ComponentType<unknown> | undefined;
81
+ PageComponent?: ComponentType<{}> | undefined;
82
+ LoadingComponent?: ComponentType<{}> | undefined;
83
+ ErrorComponent?: ComponentType<{}> | undefined;
70
84
  loader?: (() => Promise<void>) | undefined;
71
85
  meta?: (() => ({
72
86
  title: string;
@@ -85,9 +99,9 @@ declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_st
85
99
  };
86
100
  newPage: {
87
101
  (inputCtx_0?: _btst_yar.InputContext<"/ui-builder/new", _btst_yar.RouteOptions> | undefined): {
88
- PageComponent?: react.ComponentType<unknown> | undefined;
89
- LoadingComponent?: react.ComponentType<unknown> | undefined;
90
- ErrorComponent?: react.ComponentType<unknown> | undefined;
102
+ PageComponent?: ComponentType<{}> | undefined;
103
+ LoadingComponent?: ComponentType<{}> | undefined;
104
+ ErrorComponent?: ComponentType<{}> | undefined;
91
105
  loader?: (() => Promise<void>) | undefined;
92
106
  meta?: (() => ({
93
107
  title: string;
@@ -106,9 +120,9 @@ declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_st
106
120
  };
107
121
  editPage: {
108
122
  (inputCtx_0: _btst_yar.InputContext<"/ui-builder/:id/edit", _btst_yar.RouteOptions>): {
109
- PageComponent?: react.ComponentType<unknown> | undefined;
110
- LoadingComponent?: react.ComponentType<unknown> | undefined;
111
- ErrorComponent?: react.ComponentType<unknown> | undefined;
123
+ PageComponent?: ComponentType<unknown> | undefined;
124
+ LoadingComponent?: ComponentType<unknown> | undefined;
125
+ ErrorComponent?: ComponentType<unknown> | undefined;
112
126
  loader?: (() => Promise<void>) | undefined;
113
127
  meta?: (() => ({
114
128
  title: string;
@@ -202,20 +216,20 @@ declare function createComponentRegistry(components: ComponentRegistry): Compone
202
216
  declare const classNameFieldOverrides: FieldConfigFunction;
203
217
  declare const childrenFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
204
218
  renderParent: (({ children }: {
205
- children: react__default.ReactNode;
219
+ children: React__default.ReactNode;
206
220
  }) => react_jsx_runtime.JSX.Element) | undefined;
207
221
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
208
222
  };
209
223
  declare const iconNameFieldOverrides: FieldConfigFunction;
210
224
  declare const childrenAsTextareaFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
211
225
  renderParent: (({ children }: {
212
- children: react__default.ReactNode;
226
+ children: React__default.ReactNode;
213
227
  }) => react_jsx_runtime.JSX.Element) | undefined;
214
228
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
215
229
  };
216
230
  declare const childrenAsTipTapFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
217
231
  renderParent: (({ children }: {
218
- children: react__default.ReactNode;
232
+ children: React__default.ReactNode;
219
233
  }) => react_jsx_runtime.JSX.Element) | undefined;
220
234
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
221
235
  };
@@ -223,7 +237,7 @@ declare const commonFieldOverrides: (allowBinding?: boolean) => Record<string, (
223
237
  className: (layer: ComponentLayer) => FieldConfigItem;
224
238
  children: (layer: ComponentLayer) => {
225
239
  renderParent: (({ children }: {
226
- children: react__default.ReactNode;
240
+ children: React__default.ReactNode;
227
241
  }) => react_jsx_runtime.JSX.Element) | undefined;
228
242
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
229
243
  };
@@ -1,7 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
- import * as react from 'react';
3
- import react__default, { ComponentType } from 'react';
4
2
  import * as _btst_yar from '@btst/yar';
3
+ import React__default, { ComponentType } from 'react';
5
4
  import { QueryClient } from '@tanstack/react-query';
6
5
  import { c as UIBuilderClientHooks } from '../../../shared/stack.VMmQdbsJ.mjs';
7
6
  import { a as ComponentRegistry, b as FieldConfigFunction, C as ComponentLayer, F as FunctionRegistry } from '../../../shared/stack.Dq4qVr1F.mjs';
@@ -32,6 +31,21 @@ interface UIBuilderClientConfig {
32
31
  hooks?: UIBuilderClientHooks;
33
32
  /** Component registry to use for the UI Builder */
34
33
  componentRegistry?: ComponentRegistry;
34
+ /**
35
+ * Optional page component overrides.
36
+ * Replace any plugin page with a custom React component.
37
+ * The built-in component is used as the fallback when not provided.
38
+ */
39
+ pageComponents?: {
40
+ /** Replaces the page list page */
41
+ pageList?: ComponentType;
42
+ /** Replaces the new page builder page */
43
+ newPage?: ComponentType;
44
+ /** Replaces the edit page builder page */
45
+ editPage?: ComponentType<{
46
+ id: string;
47
+ }>;
48
+ };
35
49
  }
36
50
  /**
37
51
  * UI Builder client plugin
@@ -64,9 +78,9 @@ interface UIBuilderClientConfig {
64
78
  declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
65
79
  pageList: {
66
80
  (inputCtx_0?: _btst_yar.InputContext<"/ui-builder", _btst_yar.RouteOptions> | undefined): {
67
- PageComponent?: react.ComponentType<unknown> | undefined;
68
- LoadingComponent?: react.ComponentType<unknown> | undefined;
69
- ErrorComponent?: react.ComponentType<unknown> | undefined;
81
+ PageComponent?: ComponentType<{}> | undefined;
82
+ LoadingComponent?: ComponentType<{}> | undefined;
83
+ ErrorComponent?: ComponentType<{}> | undefined;
70
84
  loader?: (() => Promise<void>) | undefined;
71
85
  meta?: (() => ({
72
86
  title: string;
@@ -85,9 +99,9 @@ declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_st
85
99
  };
86
100
  newPage: {
87
101
  (inputCtx_0?: _btst_yar.InputContext<"/ui-builder/new", _btst_yar.RouteOptions> | undefined): {
88
- PageComponent?: react.ComponentType<unknown> | undefined;
89
- LoadingComponent?: react.ComponentType<unknown> | undefined;
90
- ErrorComponent?: react.ComponentType<unknown> | undefined;
102
+ PageComponent?: ComponentType<{}> | undefined;
103
+ LoadingComponent?: ComponentType<{}> | undefined;
104
+ ErrorComponent?: ComponentType<{}> | undefined;
91
105
  loader?: (() => Promise<void>) | undefined;
92
106
  meta?: (() => ({
93
107
  title: string;
@@ -106,9 +120,9 @@ declare const uiBuilderClientPlugin: (config: UIBuilderClientConfig) => _btst_st
106
120
  };
107
121
  editPage: {
108
122
  (inputCtx_0: _btst_yar.InputContext<"/ui-builder/:id/edit", _btst_yar.RouteOptions>): {
109
- PageComponent?: react.ComponentType<unknown> | undefined;
110
- LoadingComponent?: react.ComponentType<unknown> | undefined;
111
- ErrorComponent?: react.ComponentType<unknown> | undefined;
123
+ PageComponent?: ComponentType<unknown> | undefined;
124
+ LoadingComponent?: ComponentType<unknown> | undefined;
125
+ ErrorComponent?: ComponentType<unknown> | undefined;
112
126
  loader?: (() => Promise<void>) | undefined;
113
127
  meta?: (() => ({
114
128
  title: string;
@@ -202,20 +216,20 @@ declare function createComponentRegistry(components: ComponentRegistry): Compone
202
216
  declare const classNameFieldOverrides: FieldConfigFunction;
203
217
  declare const childrenFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
204
218
  renderParent: (({ children }: {
205
- children: react__default.ReactNode;
219
+ children: React__default.ReactNode;
206
220
  }) => react_jsx_runtime.JSX.Element) | undefined;
207
221
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
208
222
  };
209
223
  declare const iconNameFieldOverrides: FieldConfigFunction;
210
224
  declare const childrenAsTextareaFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
211
225
  renderParent: (({ children }: {
212
- children: react__default.ReactNode;
226
+ children: React__default.ReactNode;
213
227
  }) => react_jsx_runtime.JSX.Element) | undefined;
214
228
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
215
229
  };
216
230
  declare const childrenAsTipTapFieldOverrides: (layer: ComponentLayer, allowVariableBinding?: boolean) => {
217
231
  renderParent: (({ children }: {
218
- children: react__default.ReactNode;
232
+ children: React__default.ReactNode;
219
233
  }) => react_jsx_runtime.JSX.Element) | undefined;
220
234
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
221
235
  };
@@ -223,7 +237,7 @@ declare const commonFieldOverrides: (allowBinding?: boolean) => Record<string, (
223
237
  className: (layer: ComponentLayer) => FieldConfigItem;
224
238
  children: (layer: ComponentLayer) => {
225
239
  renderParent: (({ children }: {
226
- children: react__default.ReactNode;
240
+ children: React__default.ReactNode;
227
241
  }) => react_jsx_runtime.JSX.Element) | undefined;
228
242
  fieldType: ({ label, isRequired, fieldConfigItem, field, fieldProps, }: AutoFormInputComponentProps) => react_jsx_runtime.JSX.Element;
229
243
  };