@btst/plugin-cms 1.0.0 → 1.2.0-beta.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 (76) hide show
  1. package/dist/api/getters.cjs +37 -25
  2. package/dist/api/getters.mjs +37 -25
  3. package/dist/api/index.cjs +1 -0
  4. package/dist/api/index.d.cts +17 -8
  5. package/dist/api/index.d.mts +17 -8
  6. package/dist/api/index.d.ts +17 -8
  7. package/dist/api/index.mjs +1 -1
  8. package/dist/api/mutations.cjs +46 -19
  9. package/dist/api/mutations.mjs +46 -20
  10. package/dist/api/operations.cjs +586 -177
  11. package/dist/api/operations.mjs +585 -178
  12. package/dist/api/plugin.cjs +56 -7
  13. package/dist/api/plugin.mjs +57 -8
  14. package/dist/api/publication.cjs +8 -0
  15. package/dist/api/publication.mjs +6 -0
  16. package/dist/client/components/forms/content-form.cjs +107 -1
  17. package/dist/client/components/forms/content-form.mjs +108 -2
  18. package/dist/client/components/pages/content-editor-page.internal.cjs +23 -5
  19. package/dist/client/components/pages/content-editor-page.internal.mjs +23 -5
  20. package/dist/client/components/pages/content-list-page.internal.cjs +3 -0
  21. package/dist/client/components/pages/content-list-page.internal.mjs +3 -0
  22. package/dist/client/components/pages/dashboard-page.internal.cjs +10 -30
  23. package/dist/client/components/pages/dashboard-page.internal.mjs +10 -30
  24. package/dist/client/components/revision-history.cjs +161 -0
  25. package/dist/client/components/revision-history.mjs +159 -0
  26. package/dist/client/components/shared/content-type-card.cjs +56 -0
  27. package/dist/client/components/shared/content-type-card.mjs +54 -0
  28. package/dist/client/components/shared/empty-state.cjs +18 -1
  29. package/dist/client/components/shared/empty-state.mjs +19 -2
  30. package/dist/client/hooks/cms-hooks.cjs +18 -2
  31. package/dist/client/hooks/cms-hooks.mjs +17 -3
  32. package/dist/client/hooks/index.cjs +2 -0
  33. package/dist/client/hooks/index.d.cts +306 -2
  34. package/dist/client/hooks/index.d.mts +306 -2
  35. package/dist/client/hooks/index.d.ts +306 -2
  36. package/dist/client/hooks/index.mjs +1 -1
  37. package/dist/client/index.d.cts +55 -2
  38. package/dist/client/index.d.mts +55 -2
  39. package/dist/client/index.d.ts +55 -2
  40. package/dist/db.cjs +25 -0
  41. package/dist/db.mjs +25 -0
  42. package/dist/permissions.cjs +2 -0
  43. package/dist/permissions.d.cts +1 -0
  44. package/dist/permissions.d.mts +1 -0
  45. package/dist/permissions.d.ts +1 -0
  46. package/dist/permissions.mjs +2 -0
  47. package/dist/query-keys.cjs +31 -1
  48. package/dist/query-keys.d.cts +1 -1
  49. package/dist/query-keys.d.mts +1 -1
  50. package/dist/query-keys.d.ts +1 -1
  51. package/dist/query-keys.mjs +31 -1
  52. package/dist/shared/{plugin-cms.W4Le8D91.d.mts → plugin-cms.DAAUZ41w.d.mts} +377 -144
  53. package/dist/shared/{plugin-cms.c-GeWvTf.d.cts → plugin-cms.DJ_293QU.d.cts} +377 -144
  54. package/dist/shared/{plugin-cms.DQLAoogy.d.ts → plugin-cms.DlUSv7wz.d.ts} +377 -144
  55. package/dist/types.d.cts +38 -2
  56. package/dist/types.d.mts +38 -2
  57. package/dist/types.d.ts +38 -2
  58. package/dist/ui/src/components/auto-form/config.cjs +2 -0
  59. package/dist/ui/src/components/auto-form/config.mjs +2 -0
  60. package/dist/ui/src/components/auto-form/fields/file.cjs +68 -0
  61. package/dist/ui/src/components/auto-form/fields/file.mjs +63 -0
  62. package/dist/ui/src/components/auto-form/fields/object.cjs +9 -2
  63. package/dist/ui/src/components/auto-form/fields/object.mjs +9 -2
  64. package/dist/ui/src/components/auto-form/helpers.cjs +9 -0
  65. package/dist/ui/src/components/auto-form/helpers.mjs +9 -0
  66. package/dist/ui/src/components/auto-form/index.cjs +29 -4
  67. package/dist/ui/src/components/auto-form/index.mjs +31 -6
  68. package/dist/ui/src/components/auto-form/stepped-auto-form.cjs +34 -29
  69. package/dist/ui/src/components/auto-form/stepped-auto-form.mjs +35 -30
  70. package/dist/ui/src/components/sheet.cjs +126 -0
  71. package/dist/ui/src/components/sheet.mjs +105 -0
  72. package/dist/ui/src/lib/form-visibility.cjs +20 -0
  73. package/dist/ui/src/lib/form-visibility.mjs +18 -0
  74. package/dist/ui/src/lib/schema-converter.cjs +101 -0
  75. package/dist/ui/src/lib/schema-converter.mjs +100 -1
  76. package/package.json +5 -4
@@ -1,6 +1,7 @@
1
1
  'use client';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { SerializedContentItemWithType, CMSReadView, CMSContentFields, CMSReadOptions, CMSContentItemResult, SerializedContentType, CMSContentTypeMap, SerializedContentRevision, InverseRelation } from '../../types.js';
2
4
  import { ResourceFormConfig, ResourceFormResult, ResourceSelectResult } from '@btst/stack/plugins/client/hooks';
3
- import { SerializedContentItemWithType, CMSReadView, CMSContentFields, CMSReadOptions, CMSContentItemResult, SerializedContentType, CMSContentTypeMap, InverseRelation } from '../../types.js';
4
5
  import 'zod';
5
6
 
6
7
  interface UseContentTypesResult {
@@ -207,10 +208,12 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
207
208
  mutate: (vars: {
208
209
  slug: string;
209
210
  data: TData;
211
+ publishAt?: string | null;
210
212
  }) => void;
211
213
  mutateAsync: (vars: {
212
214
  slug: string;
213
215
  data: TData;
216
+ publishAt?: string | null;
214
217
  }) => Promise<SerializedContentItemWithType<TData>>;
215
218
  data: undefined;
216
219
  variables: undefined;
@@ -230,16 +233,19 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
230
233
  mutate: (vars: {
231
234
  slug: string;
232
235
  data: TData;
236
+ publishAt?: string | null;
233
237
  }) => void;
234
238
  mutateAsync: (vars: {
235
239
  slug: string;
236
240
  data: TData;
241
+ publishAt?: string | null;
237
242
  }) => Promise<SerializedContentItemWithType<TData>>;
238
243
  data: undefined;
239
244
  variables: {
240
245
  typeSlug: string;
241
246
  slug: string;
242
247
  data: Record<string, unknown>;
248
+ publishAt?: string | null;
243
249
  };
244
250
  error: null;
245
251
  isError: false;
@@ -257,10 +263,12 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
257
263
  mutate: (vars: {
258
264
  slug: string;
259
265
  data: TData;
266
+ publishAt?: string | null;
260
267
  }) => void;
261
268
  mutateAsync: (vars: {
262
269
  slug: string;
263
270
  data: TData;
271
+ publishAt?: string | null;
264
272
  }) => Promise<SerializedContentItemWithType<TData>>;
265
273
  data: undefined;
266
274
  error: Error;
@@ -268,6 +276,7 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
268
276
  typeSlug: string;
269
277
  slug: string;
270
278
  data: Record<string, unknown>;
279
+ publishAt?: string | null;
271
280
  };
272
281
  isError: true;
273
282
  isIdle: false;
@@ -284,10 +293,12 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
284
293
  mutate: (vars: {
285
294
  slug: string;
286
295
  data: TData;
296
+ publishAt?: string | null;
287
297
  }) => void;
288
298
  mutateAsync: (vars: {
289
299
  slug: string;
290
300
  data: TData;
301
+ publishAt?: string | null;
291
302
  }) => Promise<SerializedContentItemWithType<TData>>;
292
303
  data: SerializedContentItemWithType<Record<string, unknown>> | null;
293
304
  error: null;
@@ -295,6 +306,7 @@ declare function useCreateContent<TData = Record<string, unknown>>(typeSlug: str
295
306
  typeSlug: string;
296
307
  slug: string;
297
308
  data: Record<string, unknown>;
309
+ publishAt?: string | null;
298
310
  };
299
311
  isError: false;
300
312
  isIdle: false;
@@ -330,6 +342,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
330
342
  data: {
331
343
  slug?: string;
332
344
  data?: TData;
345
+ publishAt?: string | null;
333
346
  };
334
347
  }) => void;
335
348
  mutateAsync: (vars: {
@@ -337,6 +350,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
337
350
  data: {
338
351
  slug?: string;
339
352
  data?: TData;
353
+ publishAt?: string | null;
340
354
  };
341
355
  }) => Promise<SerializedContentItemWithType<TData>>;
342
356
  data: undefined;
@@ -359,6 +373,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
359
373
  data: {
360
374
  slug?: string;
361
375
  data?: TData;
376
+ publishAt?: string | null;
362
377
  };
363
378
  }) => void;
364
379
  mutateAsync: (vars: {
@@ -366,6 +381,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
366
381
  data: {
367
382
  slug?: string;
368
383
  data?: TData;
384
+ publishAt?: string | null;
369
385
  };
370
386
  }) => Promise<SerializedContentItemWithType<TData>>;
371
387
  data: undefined;
@@ -375,6 +391,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
375
391
  data: {
376
392
  slug?: string;
377
393
  data?: Record<string, unknown>;
394
+ publishAt?: string | null;
378
395
  };
379
396
  };
380
397
  error: null;
@@ -395,6 +412,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
395
412
  data: {
396
413
  slug?: string;
397
414
  data?: TData;
415
+ publishAt?: string | null;
398
416
  };
399
417
  }) => void;
400
418
  mutateAsync: (vars: {
@@ -402,6 +420,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
402
420
  data: {
403
421
  slug?: string;
404
422
  data?: TData;
423
+ publishAt?: string | null;
405
424
  };
406
425
  }) => Promise<SerializedContentItemWithType<TData>>;
407
426
  data: undefined;
@@ -412,6 +431,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
412
431
  data: {
413
432
  slug?: string;
414
433
  data?: Record<string, unknown>;
434
+ publishAt?: string | null;
415
435
  };
416
436
  };
417
437
  isError: true;
@@ -431,6 +451,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
431
451
  data: {
432
452
  slug?: string;
433
453
  data?: TData;
454
+ publishAt?: string | null;
434
455
  };
435
456
  }) => void;
436
457
  mutateAsync: (vars: {
@@ -438,6 +459,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
438
459
  data: {
439
460
  slug?: string;
440
461
  data?: TData;
462
+ publishAt?: string | null;
441
463
  };
442
464
  }) => Promise<SerializedContentItemWithType<TData>>;
443
465
  data: SerializedContentItemWithType<Record<string, unknown>> | null;
@@ -448,6 +470,7 @@ declare function useUpdateContent<TData = Record<string, unknown>>(typeSlug: str
448
470
  data: {
449
471
  slug?: string;
450
472
  data?: Record<string, unknown>;
473
+ publishAt?: string | null;
451
474
  };
452
475
  };
453
476
  isError: false;
@@ -688,6 +711,287 @@ declare function useInverseRelationItems<TView extends CMSReadView = undefined,
688
711
  error: Error | null;
689
712
  refetch: () => void;
690
713
  };
714
+ /** Paginated revision snapshots, newest first. Fetches only when enabled. */
715
+ declare function useContentRevisions(typeSlug: string, id: string, enabled?: boolean): {
716
+ revisions: SerializedContentRevision[];
717
+ data: _tanstack_react_query.InfiniteData<{
718
+ items: SerializedContentRevision[];
719
+ total: number;
720
+ }, number>;
721
+ error: Error;
722
+ isError: true;
723
+ isPending: false;
724
+ isLoading: false;
725
+ isLoadingError: false;
726
+ isRefetchError: true;
727
+ isSuccess: false;
728
+ isPlaceholderData: false;
729
+ status: "error";
730
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
731
+ items: SerializedContentRevision[];
732
+ total: number;
733
+ }, number>, Error>>;
734
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
735
+ items: SerializedContentRevision[];
736
+ total: number;
737
+ }, number>, Error>>;
738
+ hasNextPage: boolean;
739
+ hasPreviousPage: boolean;
740
+ isFetchNextPageError: boolean;
741
+ isFetchingNextPage: boolean;
742
+ isFetchPreviousPageError: boolean;
743
+ isFetchingPreviousPage: boolean;
744
+ dataUpdatedAt: number;
745
+ errorUpdatedAt: number;
746
+ failureCount: number;
747
+ failureReason: Error | null;
748
+ errorUpdateCount: number;
749
+ isFetched: boolean;
750
+ isFetchedAfterMount: boolean;
751
+ isFetching: boolean;
752
+ isInitialLoading: boolean;
753
+ isPaused: boolean;
754
+ isRefetching: boolean;
755
+ isStale: boolean;
756
+ isEnabled: boolean;
757
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
758
+ items: SerializedContentRevision[];
759
+ total: number;
760
+ }, number>, Error>>;
761
+ fetchStatus: _tanstack_react_query.FetchStatus;
762
+ } | {
763
+ revisions: SerializedContentRevision[];
764
+ data: _tanstack_react_query.InfiniteData<{
765
+ items: SerializedContentRevision[];
766
+ total: number;
767
+ }, number>;
768
+ error: null;
769
+ isError: false;
770
+ isPending: false;
771
+ isLoading: false;
772
+ isLoadingError: false;
773
+ isRefetchError: false;
774
+ isFetchNextPageError: false;
775
+ isFetchPreviousPageError: false;
776
+ isSuccess: true;
777
+ isPlaceholderData: false;
778
+ status: "success";
779
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
780
+ items: SerializedContentRevision[];
781
+ total: number;
782
+ }, number>, Error>>;
783
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
784
+ items: SerializedContentRevision[];
785
+ total: number;
786
+ }, number>, Error>>;
787
+ hasNextPage: boolean;
788
+ hasPreviousPage: boolean;
789
+ isFetchingNextPage: boolean;
790
+ isFetchingPreviousPage: boolean;
791
+ dataUpdatedAt: number;
792
+ errorUpdatedAt: number;
793
+ failureCount: number;
794
+ failureReason: Error | null;
795
+ errorUpdateCount: number;
796
+ isFetched: boolean;
797
+ isFetchedAfterMount: boolean;
798
+ isFetching: boolean;
799
+ isInitialLoading: boolean;
800
+ isPaused: boolean;
801
+ isRefetching: boolean;
802
+ isStale: boolean;
803
+ isEnabled: boolean;
804
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
805
+ items: SerializedContentRevision[];
806
+ total: number;
807
+ }, number>, Error>>;
808
+ fetchStatus: _tanstack_react_query.FetchStatus;
809
+ } | {
810
+ revisions: SerializedContentRevision[];
811
+ data: undefined;
812
+ error: Error;
813
+ isError: true;
814
+ isPending: false;
815
+ isLoading: false;
816
+ isLoadingError: true;
817
+ isRefetchError: false;
818
+ isFetchNextPageError: false;
819
+ isFetchPreviousPageError: false;
820
+ isSuccess: false;
821
+ isPlaceholderData: false;
822
+ status: "error";
823
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
824
+ items: SerializedContentRevision[];
825
+ total: number;
826
+ }, number>, Error>>;
827
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
828
+ items: SerializedContentRevision[];
829
+ total: number;
830
+ }, number>, Error>>;
831
+ hasNextPage: boolean;
832
+ hasPreviousPage: boolean;
833
+ isFetchingNextPage: boolean;
834
+ isFetchingPreviousPage: boolean;
835
+ dataUpdatedAt: number;
836
+ errorUpdatedAt: number;
837
+ failureCount: number;
838
+ failureReason: Error | null;
839
+ errorUpdateCount: number;
840
+ isFetched: boolean;
841
+ isFetchedAfterMount: boolean;
842
+ isFetching: boolean;
843
+ isInitialLoading: boolean;
844
+ isPaused: boolean;
845
+ isRefetching: boolean;
846
+ isStale: boolean;
847
+ isEnabled: boolean;
848
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
849
+ items: SerializedContentRevision[];
850
+ total: number;
851
+ }, number>, Error>>;
852
+ fetchStatus: _tanstack_react_query.FetchStatus;
853
+ } | {
854
+ revisions: SerializedContentRevision[];
855
+ data: undefined;
856
+ error: null;
857
+ isError: false;
858
+ isPending: true;
859
+ isLoading: true;
860
+ isLoadingError: false;
861
+ isRefetchError: false;
862
+ isFetchNextPageError: false;
863
+ isFetchPreviousPageError: false;
864
+ isSuccess: false;
865
+ isPlaceholderData: false;
866
+ status: "pending";
867
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
868
+ items: SerializedContentRevision[];
869
+ total: number;
870
+ }, number>, Error>>;
871
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
872
+ items: SerializedContentRevision[];
873
+ total: number;
874
+ }, number>, Error>>;
875
+ hasNextPage: boolean;
876
+ hasPreviousPage: boolean;
877
+ isFetchingNextPage: boolean;
878
+ isFetchingPreviousPage: boolean;
879
+ dataUpdatedAt: number;
880
+ errorUpdatedAt: number;
881
+ failureCount: number;
882
+ failureReason: Error | null;
883
+ errorUpdateCount: number;
884
+ isFetched: boolean;
885
+ isFetchedAfterMount: boolean;
886
+ isFetching: boolean;
887
+ isInitialLoading: boolean;
888
+ isPaused: boolean;
889
+ isRefetching: boolean;
890
+ isStale: boolean;
891
+ isEnabled: boolean;
892
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
893
+ items: SerializedContentRevision[];
894
+ total: number;
895
+ }, number>, Error>>;
896
+ fetchStatus: _tanstack_react_query.FetchStatus;
897
+ } | {
898
+ revisions: SerializedContentRevision[];
899
+ data: undefined;
900
+ error: null;
901
+ isError: false;
902
+ isPending: true;
903
+ isLoadingError: false;
904
+ isRefetchError: false;
905
+ isFetchNextPageError: false;
906
+ isFetchPreviousPageError: false;
907
+ isSuccess: false;
908
+ isPlaceholderData: false;
909
+ status: "pending";
910
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
911
+ items: SerializedContentRevision[];
912
+ total: number;
913
+ }, number>, Error>>;
914
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
915
+ items: SerializedContentRevision[];
916
+ total: number;
917
+ }, number>, Error>>;
918
+ hasNextPage: boolean;
919
+ hasPreviousPage: boolean;
920
+ isFetchingNextPage: boolean;
921
+ isFetchingPreviousPage: boolean;
922
+ dataUpdatedAt: number;
923
+ errorUpdatedAt: number;
924
+ failureCount: number;
925
+ failureReason: Error | null;
926
+ errorUpdateCount: number;
927
+ isFetched: boolean;
928
+ isFetchedAfterMount: boolean;
929
+ isFetching: boolean;
930
+ isLoading: boolean;
931
+ isInitialLoading: boolean;
932
+ isPaused: boolean;
933
+ isRefetching: boolean;
934
+ isStale: boolean;
935
+ isEnabled: boolean;
936
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
937
+ items: SerializedContentRevision[];
938
+ total: number;
939
+ }, number>, Error>>;
940
+ fetchStatus: _tanstack_react_query.FetchStatus;
941
+ } | {
942
+ revisions: SerializedContentRevision[];
943
+ data: _tanstack_react_query.InfiniteData<{
944
+ items: SerializedContentRevision[];
945
+ total: number;
946
+ }, number>;
947
+ isError: false;
948
+ error: null;
949
+ isPending: false;
950
+ isLoading: false;
951
+ isLoadingError: false;
952
+ isRefetchError: false;
953
+ isSuccess: true;
954
+ isPlaceholderData: true;
955
+ isFetchNextPageError: false;
956
+ isFetchPreviousPageError: false;
957
+ status: "success";
958
+ fetchNextPage: (options?: _tanstack_react_query.FetchNextPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
959
+ items: SerializedContentRevision[];
960
+ total: number;
961
+ }, number>, Error>>;
962
+ fetchPreviousPage: (options?: _tanstack_react_query.FetchPreviousPageOptions) => Promise<_tanstack_react_query.InfiniteQueryObserverResult<_tanstack_react_query.InfiniteData<{
963
+ items: SerializedContentRevision[];
964
+ total: number;
965
+ }, number>, Error>>;
966
+ hasNextPage: boolean;
967
+ hasPreviousPage: boolean;
968
+ isFetchingNextPage: boolean;
969
+ isFetchingPreviousPage: boolean;
970
+ dataUpdatedAt: number;
971
+ errorUpdatedAt: number;
972
+ failureCount: number;
973
+ failureReason: Error | null;
974
+ errorUpdateCount: number;
975
+ isFetched: boolean;
976
+ isFetchedAfterMount: boolean;
977
+ isFetching: boolean;
978
+ isInitialLoading: boolean;
979
+ isPaused: boolean;
980
+ isRefetching: boolean;
981
+ isStale: boolean;
982
+ isEnabled: boolean;
983
+ refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<{
984
+ items: SerializedContentRevision[];
985
+ total: number;
986
+ }, number>, Error>>;
987
+ fetchStatus: _tanstack_react_query.FetchStatus;
988
+ };
989
+ /** Restore a saved revision and refresh the editor, history and relation queries. */
990
+ declare function useRestoreContentRevision(): _tanstack_react_query.UseMutationResult<SerializedContentItemWithType<Record<string, unknown>>, Error, {
991
+ typeSlug: string;
992
+ id: string;
993
+ revisionId: string;
994
+ }>;
691
995
 
692
- export { useContent, useContentByRelation, useContentItem, useContentItemBySlug, useContentItemForm, useContentItemPopulated, useContentOptions, useContentType, useContentTypes, useCreateContent, useDeleteContent, useInverseRelationItems, useInverseRelations, useSuspenseContent, useSuspenseContentByRelation, useSuspenseContentItem, useSuspenseContentItemPopulated, useSuspenseContentTypes, useUpdateContent };
996
+ export { useContent, useContentByRelation, useContentItem, useContentItemBySlug, useContentItemForm, useContentItemPopulated, useContentOptions, useContentRevisions, useContentType, useContentTypes, useCreateContent, useDeleteContent, useInverseRelationItems, useInverseRelations, useRestoreContentRevision, useSuspenseContent, useSuspenseContentByRelation, useSuspenseContentItem, useSuspenseContentItemPopulated, useSuspenseContentTypes, useUpdateContent };
693
997
  export type { ContentItemWithRelations, UseContentByRelationOptions, UseContentOptions, UseContentResult, UseContentTypesResult };
@@ -1 +1 @@
1
- export { useContent, useContentByRelation, useContentItem, useContentItemBySlug, useContentItemForm, useContentItemPopulated, useContentOptions, useContentType, useContentTypes, useCreateContent, useDeleteContent, useInverseRelationItems, useInverseRelations, useSuspenseContent, useSuspenseContentByRelation, useSuspenseContentItem, useSuspenseContentItemPopulated, useSuspenseContentTypes, useUpdateContent } from './cms-hooks.mjs';
1
+ export { useContent, useContentByRelation, useContentItem, useContentItemBySlug, useContentItemForm, useContentItemPopulated, useContentOptions, useContentRevisions, useContentType, useContentTypes, useCreateContent, useDeleteContent, useInverseRelationItems, useInverseRelations, useRestoreContentRevision, useSuspenseContent, useSuspenseContentByRelation, useSuspenseContentItem, useSuspenseContentItemPopulated, useSuspenseContentTypes, useUpdateContent } from './cms-hooks.mjs';
@@ -4,12 +4,30 @@ import * as _btst_yar from '@btst/yar';
4
4
  import * as react from 'react';
5
5
  import { ComponentType } from 'react';
6
6
  import { D as DashboardPageComponent } from '../shared/plugin-cms.BBshPRkb.cjs';
7
- import { ContentTypeConfig } from '../types.cjs';
7
+ import { SerializedContentType, ContentTypeConfig } from '../types.cjs';
8
8
  export { CMSContentFields, CMSContentItemResult, CMSReadOptions, CMSReadView, CMSSelectedData, PaginatedContentItems, SerializedContentItemContent } from '../types.cjs';
9
9
  import { ControllerRenderProps, FieldValues } from 'react-hook-form';
10
10
  import * as z from 'zod';
11
11
  import { z as z$1 } from 'zod';
12
12
 
13
+ /** Content supplied to a CMS empty-state presentation. */
14
+ interface EmptyStateProps {
15
+ title: string;
16
+ description?: string;
17
+ action?: React.ReactNode;
18
+ }
19
+
20
+ /** Display data and navigation supplied by the CMS dashboard. */
21
+ interface ContentTypeCardProps {
22
+ contentType: SerializedContentType & {
23
+ itemCount: number;
24
+ };
25
+ itemCountLabel: string;
26
+ onOpen: () => void;
27
+ className?: string;
28
+ titleClassName?: string;
29
+ }
30
+
13
31
  declare const CMS_LOCALIZATION: {
14
32
  CMS_RELATION_LOADING: string;
15
33
  CMS_RELATION_SELECT_PLACEHOLDER: string;
@@ -93,6 +111,15 @@ declare const CMS_LOCALIZATION: {
93
111
  };
94
112
  type CMSLocalization = typeof CMS_LOCALIZATION;
95
113
 
114
+ /** A single visibility condition against a sibling field's value. */
115
+ type ShowIfCondition = {
116
+ field: string;
117
+ operator: "equals" | "notEquals" | "in" | "isTruthy";
118
+ value?: unknown;
119
+ };
120
+
121
+ declare function AutoFormFile({ field, fieldProps, fieldConfigItem, label, isRequired }: AutoFormInputComponentProps): react.JSX.Element;
122
+
96
123
  declare function AutoFormCheckbox({ label, isRequired, field, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react.JSX.Element;
97
124
 
98
125
  declare function AutoFormDate({ label, isRequired, field, fieldConfigItem, fieldProps, zodItem, }: AutoFormInputComponentProps): react.JSX.Element;
@@ -110,6 +137,7 @@ declare function AutoFormSwitch({ label, isRequired, field, fieldConfigItem, fie
110
137
  declare function AutoFormTextarea({ label, isRequired, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react.JSX.Element;
111
138
 
112
139
  declare const INPUT_COMPONENTS: {
140
+ file: typeof AutoFormFile;
113
141
  checkbox: typeof AutoFormCheckbox;
114
142
  date: typeof AutoFormDate;
115
143
  select: typeof AutoFormEnum;
@@ -173,6 +201,10 @@ type FieldInputProps = SerializableInputProps & Omit<React.InputHTMLAttributes<H
173
201
  * so that JSON Schema properties can be easily converted to field configs.
174
202
  */
175
203
  type FieldConfigItem = {
204
+ /** Show this field only when the condition matches. */
205
+ showIf?: ShowIfCondition;
206
+ /** Standalone file upload handler; resolves to a stored URL. */
207
+ onUpload?: (file: File) => Promise<string>;
176
208
  /** Description text or React node */
177
209
  description?: React.ReactNode;
178
210
  /** Input props passed to the field component */
@@ -238,6 +270,22 @@ interface RouteContext {
238
270
  * plugin-specific components and behavior.
239
271
  */
240
272
  interface CMSPluginOverrides {
273
+ /** Presentation scoped to built-in route keys. */
274
+ pageOverrides?: {
275
+ dashboard?: {
276
+ ContentTypeCard?: ComponentType<ContentTypeCardProps>;
277
+ EmptyState?: ComponentType<EmptyStateProps>;
278
+ };
279
+ contentList?: {
280
+ EmptyState?: ComponentType<EmptyStateProps>;
281
+ };
282
+ newContent?: {
283
+ EmptyState?: ComponentType<EmptyStateProps>;
284
+ };
285
+ editContent?: {
286
+ EmptyState?: ComponentType<EmptyStateProps>;
287
+ };
288
+ };
241
289
  /**
242
290
  * Function used to upload a new image file and return its URL.
243
291
  * Used by the default "file" field component when not selecting an existing
@@ -542,6 +590,8 @@ declare const cmsClientPlugin: (config?: CMSClientConfig) => _btst_stack_client.
542
590
  interface FormStep {
543
591
  id: string;
544
592
  title: string;
593
+ /** Display this step only when its condition matches. */
594
+ showIf?: ShowIfCondition;
545
595
  }
546
596
  interface FormSchemaMetadata {
547
597
  /** Multi-step form step definitions */
@@ -555,6 +605,9 @@ interface JsonSchemaProperty {
555
605
  formatMinimum?: string;
556
606
  formatMaximum?: string;
557
607
  stepGroup?: number;
608
+ showIf?: ShowIfCondition;
609
+ items?: JsonSchemaProperty;
610
+ required?: string[];
558
611
  properties?: Record<string, JsonSchemaProperty>;
559
612
  [key: string]: unknown;
560
613
  }
@@ -651,4 +704,4 @@ interface CMSFileUploadProps extends AutoFormInputComponentProps {
651
704
  declare function CMSFileUpload({ label, isRequired, fieldConfigItem, fieldProps, field, uploadImage, imageInputField: ImageInputField, imagePicker: ImagePickerTrigger, }: CMSFileUploadProps): react.JSX.Element;
652
705
 
653
706
  export { CMSFileUpload, ContentTypeConfig, cmsClientPlugin, formSchemaToZod, getStepGroupMap, getSteps, hasSteps, zodToFormSchema };
654
- export type { AutoFormInputComponentProps, CMSClientConfig, CMSClientHooks, CMSFileUploadProps, CMSLocalization, CMSPluginOverrides, CMSProviderConfig, FormSchemaMetadata, FormStep, LoaderContext, RouteContext };
707
+ export type { AutoFormInputComponentProps, CMSClientConfig, CMSClientHooks, CMSFileUploadProps, CMSLocalization, CMSPluginOverrides, CMSProviderConfig, ContentTypeCardProps, EmptyStateProps, FormSchemaMetadata, FormStep, LoaderContext, RouteContext };
@@ -4,12 +4,30 @@ import * as _btst_yar from '@btst/yar';
4
4
  import * as react from 'react';
5
5
  import { ComponentType } from 'react';
6
6
  import { D as DashboardPageComponent } from '../shared/plugin-cms.BBshPRkb.mjs';
7
- import { ContentTypeConfig } from '../types.mjs';
7
+ import { SerializedContentType, ContentTypeConfig } from '../types.mjs';
8
8
  export { CMSContentFields, CMSContentItemResult, CMSReadOptions, CMSReadView, CMSSelectedData, PaginatedContentItems, SerializedContentItemContent } from '../types.mjs';
9
9
  import { ControllerRenderProps, FieldValues } from 'react-hook-form';
10
10
  import * as z from 'zod';
11
11
  import { z as z$1 } from 'zod';
12
12
 
13
+ /** Content supplied to a CMS empty-state presentation. */
14
+ interface EmptyStateProps {
15
+ title: string;
16
+ description?: string;
17
+ action?: React.ReactNode;
18
+ }
19
+
20
+ /** Display data and navigation supplied by the CMS dashboard. */
21
+ interface ContentTypeCardProps {
22
+ contentType: SerializedContentType & {
23
+ itemCount: number;
24
+ };
25
+ itemCountLabel: string;
26
+ onOpen: () => void;
27
+ className?: string;
28
+ titleClassName?: string;
29
+ }
30
+
13
31
  declare const CMS_LOCALIZATION: {
14
32
  CMS_RELATION_LOADING: string;
15
33
  CMS_RELATION_SELECT_PLACEHOLDER: string;
@@ -93,6 +111,15 @@ declare const CMS_LOCALIZATION: {
93
111
  };
94
112
  type CMSLocalization = typeof CMS_LOCALIZATION;
95
113
 
114
+ /** A single visibility condition against a sibling field's value. */
115
+ type ShowIfCondition = {
116
+ field: string;
117
+ operator: "equals" | "notEquals" | "in" | "isTruthy";
118
+ value?: unknown;
119
+ };
120
+
121
+ declare function AutoFormFile({ field, fieldProps, fieldConfigItem, label, isRequired }: AutoFormInputComponentProps): react.JSX.Element;
122
+
96
123
  declare function AutoFormCheckbox({ label, isRequired, field, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react.JSX.Element;
97
124
 
98
125
  declare function AutoFormDate({ label, isRequired, field, fieldConfigItem, fieldProps, zodItem, }: AutoFormInputComponentProps): react.JSX.Element;
@@ -110,6 +137,7 @@ declare function AutoFormSwitch({ label, isRequired, field, fieldConfigItem, fie
110
137
  declare function AutoFormTextarea({ label, isRequired, fieldConfigItem, fieldProps, }: AutoFormInputComponentProps): react.JSX.Element;
111
138
 
112
139
  declare const INPUT_COMPONENTS: {
140
+ file: typeof AutoFormFile;
113
141
  checkbox: typeof AutoFormCheckbox;
114
142
  date: typeof AutoFormDate;
115
143
  select: typeof AutoFormEnum;
@@ -173,6 +201,10 @@ type FieldInputProps = SerializableInputProps & Omit<React.InputHTMLAttributes<H
173
201
  * so that JSON Schema properties can be easily converted to field configs.
174
202
  */
175
203
  type FieldConfigItem = {
204
+ /** Show this field only when the condition matches. */
205
+ showIf?: ShowIfCondition;
206
+ /** Standalone file upload handler; resolves to a stored URL. */
207
+ onUpload?: (file: File) => Promise<string>;
176
208
  /** Description text or React node */
177
209
  description?: React.ReactNode;
178
210
  /** Input props passed to the field component */
@@ -238,6 +270,22 @@ interface RouteContext {
238
270
  * plugin-specific components and behavior.
239
271
  */
240
272
  interface CMSPluginOverrides {
273
+ /** Presentation scoped to built-in route keys. */
274
+ pageOverrides?: {
275
+ dashboard?: {
276
+ ContentTypeCard?: ComponentType<ContentTypeCardProps>;
277
+ EmptyState?: ComponentType<EmptyStateProps>;
278
+ };
279
+ contentList?: {
280
+ EmptyState?: ComponentType<EmptyStateProps>;
281
+ };
282
+ newContent?: {
283
+ EmptyState?: ComponentType<EmptyStateProps>;
284
+ };
285
+ editContent?: {
286
+ EmptyState?: ComponentType<EmptyStateProps>;
287
+ };
288
+ };
241
289
  /**
242
290
  * Function used to upload a new image file and return its URL.
243
291
  * Used by the default "file" field component when not selecting an existing
@@ -542,6 +590,8 @@ declare const cmsClientPlugin: (config?: CMSClientConfig) => _btst_stack_client.
542
590
  interface FormStep {
543
591
  id: string;
544
592
  title: string;
593
+ /** Display this step only when its condition matches. */
594
+ showIf?: ShowIfCondition;
545
595
  }
546
596
  interface FormSchemaMetadata {
547
597
  /** Multi-step form step definitions */
@@ -555,6 +605,9 @@ interface JsonSchemaProperty {
555
605
  formatMinimum?: string;
556
606
  formatMaximum?: string;
557
607
  stepGroup?: number;
608
+ showIf?: ShowIfCondition;
609
+ items?: JsonSchemaProperty;
610
+ required?: string[];
558
611
  properties?: Record<string, JsonSchemaProperty>;
559
612
  [key: string]: unknown;
560
613
  }
@@ -651,4 +704,4 @@ interface CMSFileUploadProps extends AutoFormInputComponentProps {
651
704
  declare function CMSFileUpload({ label, isRequired, fieldConfigItem, fieldProps, field, uploadImage, imageInputField: ImageInputField, imagePicker: ImagePickerTrigger, }: CMSFileUploadProps): react.JSX.Element;
652
705
 
653
706
  export { CMSFileUpload, ContentTypeConfig, cmsClientPlugin, formSchemaToZod, getStepGroupMap, getSteps, hasSteps, zodToFormSchema };
654
- export type { AutoFormInputComponentProps, CMSClientConfig, CMSClientHooks, CMSFileUploadProps, CMSLocalization, CMSPluginOverrides, CMSProviderConfig, FormSchemaMetadata, FormStep, LoaderContext, RouteContext };
707
+ export type { AutoFormInputComponentProps, CMSClientConfig, CMSClientHooks, CMSFileUploadProps, CMSLocalization, CMSPluginOverrides, CMSProviderConfig, ContentTypeCardProps, EmptyStateProps, FormSchemaMetadata, FormStep, LoaderContext, RouteContext };