@rebasepro/cms-types 0.17.0-canary.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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/dist/admin_collection.d.ts +650 -0
  3. package/dist/augment.d.ts +81 -0
  4. package/dist/collections.d.ts +282 -0
  5. package/dist/controllers/analytics_controller.d.ts +7 -0
  6. package/dist/controllers/auth.d.ts +111 -0
  7. package/dist/controllers/customization_controller.d.ts +69 -0
  8. package/dist/controllers/dialogs_controller.d.ts +36 -0
  9. package/dist/controllers/index.d.ts +10 -0
  10. package/dist/controllers/local_config_persistence.d.ts +20 -0
  11. package/dist/controllers/navigation.d.ts +248 -0
  12. package/dist/controllers/registry.d.ts +96 -0
  13. package/dist/controllers/side_dialogs_controller.d.ts +67 -0
  14. package/dist/controllers/side_panel_controller.d.ts +97 -0
  15. package/dist/controllers/snackbar.d.ts +45 -0
  16. package/dist/index.d.ts +18 -0
  17. package/dist/index.es.js +154 -0
  18. package/dist/index.es.js.map +1 -0
  19. package/dist/react_component_ref.d.ts +43 -0
  20. package/dist/rebase_context.d.ts +68 -0
  21. package/dist/types/breadcrumbs.d.ts +15 -0
  22. package/dist/types/builders.d.ts +15 -0
  23. package/dist/types/collection_views.d.ts +105 -0
  24. package/dist/types/component_overrides.d.ts +196 -0
  25. package/dist/types/entity_actions.d.ts +112 -0
  26. package/dist/types/entity_display.d.ts +148 -0
  27. package/dist/types/entity_link_builder.d.ts +7 -0
  28. package/dist/types/entity_views.d.ts +115 -0
  29. package/dist/types/export_import.d.ts +21 -0
  30. package/dist/types/form_layout.d.ts +126 -0
  31. package/dist/types/formex.d.ts +40 -0
  32. package/dist/types/index.d.ts +18 -0
  33. package/dist/types/locales.d.ts +4 -0
  34. package/dist/types/modify_collections.d.ts +5 -0
  35. package/dist/types/plugins.d.ts +277 -0
  36. package/dist/types/property_config.d.ts +74 -0
  37. package/dist/types/property_options.d.ts +255 -0
  38. package/dist/types/slots.d.ts +279 -0
  39. package/dist/types/translations.d.ts +989 -0
  40. package/dist/types/user_management_delegate.d.ts +22 -0
  41. package/package.json +103 -0
  42. package/src/admin_collection.ts +775 -0
  43. package/src/augment.ts +79 -0
  44. package/src/collections.ts +312 -0
  45. package/src/controllers/analytics_controller.tsx +57 -0
  46. package/src/controllers/auth.ts +122 -0
  47. package/src/controllers/customization_controller.tsx +81 -0
  48. package/src/controllers/dialogs_controller.tsx +37 -0
  49. package/src/controllers/index.ts +10 -0
  50. package/src/controllers/local_config_persistence.tsx +22 -0
  51. package/src/controllers/navigation.ts +288 -0
  52. package/src/controllers/registry.ts +114 -0
  53. package/src/controllers/side_dialogs_controller.tsx +82 -0
  54. package/src/controllers/side_panel_controller.tsx +112 -0
  55. package/src/controllers/snackbar.ts +51 -0
  56. package/src/index.ts +20 -0
  57. package/src/react_component_ref.ts +52 -0
  58. package/src/rebase_context.ts +81 -0
  59. package/src/types/breadcrumbs.ts +16 -0
  60. package/src/types/builders.ts +18 -0
  61. package/src/types/collection_views.tsx +125 -0
  62. package/src/types/component_overrides.ts +244 -0
  63. package/src/types/entity_actions.tsx +134 -0
  64. package/src/types/entity_display.ts +182 -0
  65. package/src/types/entity_link_builder.ts +8 -0
  66. package/src/types/entity_views.tsx +135 -0
  67. package/src/types/export_import.ts +26 -0
  68. package/src/types/form_layout.ts +137 -0
  69. package/src/types/formex.ts +45 -0
  70. package/src/types/index.ts +18 -0
  71. package/src/types/locales.ts +81 -0
  72. package/src/types/modify_collections.tsx +6 -0
  73. package/src/types/plugins.tsx +346 -0
  74. package/src/types/property_config.tsx +97 -0
  75. package/src/types/property_options.ts +300 -0
  76. package/src/types/slots.tsx +334 -0
  77. package/src/types/translations.ts +1104 -0
  78. package/src/types/user_management_delegate.ts +23 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Per-property presentation options.
3
+ *
4
+ * These lived in `@rebasepro/types` next to the property types they belong to, which
5
+ * meant a BaaS install shipped `Field`, `Preview`, `columnWidth` and `hideFromCollection`
6
+ * in its type surface with nothing to render them. They are attached to the property
7
+ * types by `augment.ts` instead.
8
+ */
9
+ import type { ComponentRef, FilterValues, WhereFilterOp } from "@rebasepro/types";
10
+ import type { PropertySpan } from "./form_layout.js";
11
+ /**
12
+ * Interface including all common properties of an admin property.
13
+ * @group Entity properties
14
+ */
15
+ export interface AdminPropertyOptions<CustomProps = unknown> {
16
+ columnWidth?: number;
17
+ hideFromCollection?: boolean;
18
+ readOnly?: boolean;
19
+ disabled?: boolean | PropertyDisabledConfig;
20
+ /**
21
+ * How many of the form grid's {@link FORM_GRID_COLUMNS} columns this field
22
+ * occupies. Omit to let the layout derive one from the property type.
23
+ *
24
+ * Spans snap to a shared grid, so two fields line up whatever order they
25
+ * are declared in.
26
+ */
27
+ span?: PropertySpan;
28
+ customProps?: CustomProps;
29
+ Field?: ComponentRef<any>;
30
+ Preview?: ComponentRef<any>;
31
+ /**
32
+ * Narrow the filter operators offered for this property in collection
33
+ * filter UIs (table header filters and the Filters dialog).
34
+ *
35
+ * The final offered set is the **intersection** of the engine's
36
+ * capabilities, the property-type defaults, and this list — you can only
37
+ * *restrict*, never enable an operator the underlying engine cannot run.
38
+ *
39
+ * Pass an empty array to disable filtering on this property entirely.
40
+ *
41
+ * @example
42
+ * // Email column: exact match, contains, and null check only
43
+ * admin: { filterOperators: ["==", "ilike", "is-null"] }
44
+ */
45
+ filterOperators?: readonly WhereFilterOp[];
46
+ /**
47
+ * Replace the filter field rendered for this property in collection
48
+ * filter UIs. The component receives `FilterFieldBindingProps`
49
+ * (property, resolved `operators`, `value`, `setValue`, …).
50
+ *
51
+ * Takes precedence over the collection-level
52
+ * `components["Collection.FilterField"]` override and the built-in
53
+ * per-type filter fields.
54
+ */
55
+ Filter?: ComponentRef<any>;
56
+ }
57
+ /**
58
+ * @group Entity properties
59
+ */
60
+ export interface AdminStringOptions extends AdminPropertyOptions {
61
+ /**
62
+ * Is this string property long enough so it should be displayed in
63
+ * a multiple line field. Defaults to false. If set to true,
64
+ * the number of lines adapts to the content
65
+ */
66
+ multiline?: boolean;
67
+ /**
68
+ * Should this string property be displayed as a markdown field. If true,
69
+ * the field is rendered as a text editor that supports markdown highlight
70
+ * syntax. It also includes a preview of the result.
71
+ */
72
+ markdown?: boolean;
73
+ /**
74
+ * Should this string be rendered as a tag instead of just text.
75
+ */
76
+ previewAsTag?: boolean;
77
+ clearable?: boolean;
78
+ /**
79
+ * How to render a string that holds a URL: a link, or one of the supported
80
+ * media types for an inline preview.
81
+ *
82
+ * Only presentation. Whether the string *is* a URL is `url` on the property
83
+ * itself, which is what the OpenAPI contract is generated from.
84
+ */
85
+ urlPreview?: PreviewType;
86
+ }
87
+ /**
88
+ * How a number is written out for reading.
89
+ *
90
+ * A thin, explicit subset of `Intl.NumberFormatOptions`. Explicit is the whole
91
+ * point: nothing here is inferred. A collection that happens to carry a
92
+ * `currency` column alongside a `total` column has not told us that one formats
93
+ * the other — that is a relationship only the author knows, and guessing it
94
+ * would put a euro sign on the one number that was never money.
95
+ *
96
+ * Presentation only. It changes what {@link PropertyPreview} renders — the
97
+ * detail view, the table cell, a reference card — and never what the number
98
+ * input holds, because a formatted string is not a number you can type into.
99
+ */
100
+ export interface NumberFormatOptions {
101
+ /** Defaults to `"decimal"`. `"currency"` requires {@link currency}. */
102
+ style?: "decimal" | "currency" | "percent";
103
+ /**
104
+ * ISO 4217 code — `"EUR"`, `"USD"`. Setting it implies `style: "currency"`,
105
+ * so the common case is one key.
106
+ */
107
+ currency?: string;
108
+ /**
109
+ * BCP 47 tag. Defaults to the panel's locale, which is what makes the same
110
+ * amount read `1,234.50` for one user and `1.234,50` for another.
111
+ */
112
+ locale?: string;
113
+ minimumFractionDigits?: number;
114
+ maximumFractionDigits?: number;
115
+ /** `"compact"` renders `12000` as `12K`. Useful in narrow table columns. */
116
+ notation?: "standard" | "compact";
117
+ }
118
+ /**
119
+ * @group Entity properties
120
+ */
121
+ export interface AdminNumberOptions extends AdminPropertyOptions {
122
+ clearable?: boolean;
123
+ /**
124
+ * Write this number out as currency, a percentage, or with fixed decimals.
125
+ * Omit and the raw value renders, which stays the default: a number in the
126
+ * database is shown as the number in the database.
127
+ */
128
+ format?: NumberFormatOptions;
129
+ }
130
+ /**
131
+ * @group Entity properties
132
+ */
133
+ export interface AdminVectorOptions extends AdminPropertyOptions {
134
+ clearable?: boolean;
135
+ }
136
+ /**
137
+ * @group Entity properties
138
+ */
139
+ export interface AdminDateOptions extends AdminPropertyOptions {
140
+ /**
141
+ * Add an icon to clear the value and set it to `null`. Defaults to `false`
142
+ */
143
+ clearable?: boolean;
144
+ }
145
+ /**
146
+ * @group Entity properties
147
+ */
148
+ export interface AdminReferenceOptions extends AdminPropertyOptions {
149
+ previewProperties?: string[];
150
+ /**
151
+ * Offer only entities that pass this filter in the selection dialog.
152
+ * e.g. `fixedFilter: { age: [">=", 18] }`
153
+ */
154
+ fixedFilter?: FilterValues<string>;
155
+ /** Show the referenced entity's id in previews. Defaults to `true`. */
156
+ includeId?: boolean;
157
+ /** Show a link that opens the referenced entity. Defaults to `true`. */
158
+ includeEntityLink?: boolean;
159
+ }
160
+ /**
161
+ * @group Entity properties
162
+ */
163
+ export interface AdminRelationOptions extends AdminPropertyOptions {
164
+ previewProperties?: string[];
165
+ /**
166
+ * Which widget selects the related entity. Defaults to `select`.
167
+ */
168
+ widget?: "select" | "dialog";
169
+ /**
170
+ * Offer only entities that pass this filter in the selection widget.
171
+ * e.g. `fixedFilter: { age: [">=", 18] }`
172
+ */
173
+ fixedFilter?: FilterValues<string>;
174
+ /** Show the related entity's id in previews. Defaults to `true`. */
175
+ includeId?: boolean;
176
+ /** Show a link that opens the related entity. Defaults to `true`. */
177
+ includeEntityLink?: boolean;
178
+ /**
179
+ * Render a **many**-relation as a picker inside the entity form as well as
180
+ * the tab it already gets. Defaults to `false`.
181
+ *
182
+ * The entity view lists a many-relation's rows as a tab, which is the whole
183
+ * treatment: the child rows are a list, not a value the form holds. This
184
+ * flag exists for the project that wants the inline picker anyway — it is
185
+ * off by default because the two surfaces are redundant by construction.
186
+ *
187
+ * No effect on a to-one relation: a foreign key gets no tab, so its picker
188
+ * is always rendered.
189
+ */
190
+ renderInForm?: boolean;
191
+ }
192
+ /**
193
+ * @group Entity properties
194
+ */
195
+ export interface AdminArrayOptions extends AdminPropertyOptions {
196
+ expanded?: boolean;
197
+ minimalistView?: boolean;
198
+ /**
199
+ * Can the elements in this array be reordered by dragging. Defaults to
200
+ * `true`. No effect when the property is disabled.
201
+ */
202
+ sortable?: boolean;
203
+ /**
204
+ * Can elements be added to this array. Defaults to `true`. No effect when
205
+ * the property is disabled.
206
+ */
207
+ canAddElements?: boolean;
208
+ }
209
+ /**
210
+ * @group Entity properties
211
+ */
212
+ export interface AdminMapOptions extends AdminPropertyOptions {
213
+ expanded?: boolean;
214
+ minimalistView?: boolean;
215
+ spreadChildren?: boolean;
216
+ /**
217
+ * Which of the map's own properties are shown when it is rendered as a
218
+ * preview. Defaults to all of them, in `propertiesOrder`.
219
+ */
220
+ previewProperties?: string[];
221
+ }
222
+ /**
223
+ * @group Entity properties
224
+ */
225
+ export interface PropertyDisabledConfig {
226
+ /**
227
+ * Enable this flag if you would like to clear the value of the field
228
+ * when the corresponding property gets disabled.
229
+ *
230
+ * This is useful for keeping data consistency when you have conditional
231
+ * properties.
232
+ */
233
+ clearOnDisabled?: boolean;
234
+ /**
235
+ * Explanation of why this property is disabled (e.g. a different field
236
+ * needs to be enabled)
237
+ */
238
+ disabledMessage?: string;
239
+ /**
240
+ * Set this flag to true if you want to hide this field when disabled
241
+ */
242
+ hidden?: boolean;
243
+ }
244
+ /**
245
+ * Used for previewing urls if the download file is known
246
+ * @group Entity properties
247
+ */
248
+ export type PreviewType = "image" | "video" | "audio" | "file";
249
+ /**
250
+ * Core's list, re-exported through the same `satisfies` agreement check that
251
+ * {@link ADMIN_COLLECTION_KEYS} gets: core owns the data because the boot-time
252
+ * collection validator in `@rebasepro/server` needs it and may not import this
253
+ * package, and this clause is what stops the data from drifting off the types.
254
+ */
255
+ export declare const ADMIN_PROPERTY_KEYS: readonly ["canAddElements", "clearable", "columnWidth", "customProps", "disabled", "expanded", "Field", "Filter", "filterOperators", "fixedFilter", "hideFromCollection", "includeEntityLink", "includeId", "markdown", "minimalistView", "multiline", "Preview", "previewAsTag", "previewProperties", "readOnly", "sortable", "span", "spreadChildren", "urlPreview", "widget"];
@@ -0,0 +1,279 @@
1
+ import React from "react";
2
+ import type { CollectionActionsProps, EntityTableController, SelectionController } from "../collections.js";
3
+ import type { Entity } from "@rebasepro/types";
4
+ import type { PluginFormActionProps, PluginGenericProps, PluginHomePageActionsProps, PluginHomePageAdditionalCardsProps } from "./plugins.js";
5
+ import type { Property } from "@rebasepro/types";
6
+ import type { RebaseContext } from "../rebase_context.js";
7
+ import type { AdminCollection } from "@rebasepro/cms-types";
8
+ /**
9
+ * Registry mapping slot names to their component prop types.
10
+ * Each key represents a UI extension point in the admin.
11
+ * @group Plugins
12
+ */
13
+ export interface SlotRegistry {
14
+ "home.actions": PluginGenericProps;
15
+ "home.cards": PluginHomePageAdditionalCardsProps;
16
+ "home.children.start": PluginGenericProps;
17
+ "home.children.end": PluginGenericProps;
18
+ /** Compact widget rendered inline in a home page collection card. */
19
+ "home.card.widget": HomeCardWidgetSlotProps;
20
+ "home.collection.actions": PluginHomePageActionsProps;
21
+ /** Rendered below the logo in the sidebar drawer. */
22
+ "navigation.header": NavigationSlotProps;
23
+ /** Rendered above the collapse toggle at the bottom of the drawer. */
24
+ "navigation.footer": NavigationSlotProps;
25
+ "collection.actions": CollectionActionsProps;
26
+ "collection.actions.start": CollectionActionsProps;
27
+ "collection.header.action": CollectionHeaderActionProps;
28
+ "collection.add-column": CollectionAddColumnProps;
29
+ "collection.error": CollectionErrorProps;
30
+ /** Extra widgets rendered inside the collection toolbar row. */
31
+ "collection.toolbar": CollectionToolbarProps;
32
+ /** Custom empty-state component when a collection has no data. */
33
+ "collection.empty-state": CollectionEmptyStateProps;
34
+ /** Widgets rendered above the collection table. */
35
+ "collection.widgets": CollectionWidgetsSlotProps;
36
+ "form.actions": PluginFormActionProps;
37
+ "form.actions.top": PluginFormActionProps;
38
+ /** Rendered before the form title / field list. */
39
+ "form.before": PluginFormActionProps;
40
+ /** Rendered after the form field list. */
41
+ "form.after": PluginFormActionProps;
42
+ /** Per-row actions in entity tables (e.g. bulk actions, row context menus). */
43
+ "entity.row.actions": EntityRowActionsProps;
44
+ /** Inject UI before an individual form field. */
45
+ "entity.field.before": EntityFieldSlotProps;
46
+ /** Inject UI after an individual form field. */
47
+ "entity.field.after": EntityFieldSlotProps;
48
+ /** Custom filter sidebar for a collection. */
49
+ "collection.filter-panel": CollectionFilterPanelProps;
50
+ /** Widget rendered on the dashboard / home page. */
51
+ "dashboard.widget": DashboardWidgetProps;
52
+ /** Cross-collection search bar component. */
53
+ "global.search": GlobalSearchProps;
54
+ /** Top-level toolbar actions rendered in the shell toolbar area. */
55
+ "shell.toolbar": ShellToolbarProps;
56
+ "kanban.setup": KanbanSetupProps;
57
+ "kanban.add-column": KanbanAddColumnProps;
58
+ }
59
+ /**
60
+ * Valid slot names for UI extension points.
61
+ * @group Plugins
62
+ */
63
+ /**
64
+ * Slots this build declares but renders nowhere.
65
+ *
66
+ * Every name here appears in {@link SlotRegistry}, has a props interface, and
67
+ * is listed in the public slot reference alongside the ones that work — so a
68
+ * plugin author picks one off the table, registers a component, sees nothing,
69
+ * and has no way to tell whether the fault is theirs. Seven of twenty-nine were
70
+ * in that state.
71
+ *
72
+ * This is a statement of fact, not a wish list: `slot-render-sites.test.ts`
73
+ * derives the same set by scanning for render sites and fails when the two
74
+ * disagree. Implementing a slot therefore forces its removal from here, and
75
+ * declaring one without rendering it forces its addition — at which point
76
+ * `Rebase` warns anyone who registers for it, which is the whole point.
77
+ */
78
+ export declare const UNRENDERED_SLOTS: readonly ["collection.filter-panel", "dashboard.widget", "entity.field.after", "entity.field.before", "entity.row.actions", "global.search", "shell.toolbar"];
79
+ export type SlotName = keyof SlotRegistry;
80
+ /**
81
+ * A single UI component contribution to a named slot.
82
+ * @group Plugins
83
+ */
84
+ export interface SlotContribution<K extends SlotName = SlotName> {
85
+ /**
86
+ * Which slot to contribute to.
87
+ */
88
+ slot: K;
89
+ /**
90
+ * The component to render in the slot.
91
+ * Typed loosely so mixed-slot arrays work.
92
+ * Type safety is provided at the `useSlot` call site.
93
+ */
94
+ Component: React.ComponentType<any>;
95
+ /**
96
+ * Additional props to merge into the slot props before rendering.
97
+ */
98
+ props?: Record<string, unknown>;
99
+ /**
100
+ * Ordering hint. Lower values render first. Defaults to 50.
101
+ */
102
+ order?: number;
103
+ }
104
+ /**
105
+ * Props for `navigation.header` and `navigation.footer` slots.
106
+ * @group Plugins
107
+ */
108
+ export interface NavigationSlotProps {
109
+ drawerOpen: boolean;
110
+ drawerHovered: boolean;
111
+ context: RebaseContext;
112
+ }
113
+ /**
114
+ * Props for the `collection.toolbar` slot.
115
+ * @group Plugins
116
+ */
117
+ export interface CollectionToolbarProps {
118
+ path: string;
119
+ collection: AdminCollection;
120
+ parentCollectionSlugs: string[];
121
+ parentEntityIds: string[];
122
+ tableController: EntityTableController;
123
+ selectionController: SelectionController;
124
+ }
125
+ /**
126
+ * Props for the `collection.empty-state` slot.
127
+ * @group Plugins
128
+ */
129
+ export interface CollectionEmptyStateProps {
130
+ path: string;
131
+ collection: AdminCollection;
132
+ parentCollectionSlugs: string[];
133
+ parentEntityIds: string[];
134
+ canCreate: boolean;
135
+ onNewClick?: () => void;
136
+ }
137
+ /**
138
+ * Props for the `collection.header.action` slot.
139
+ * @group Plugins
140
+ */
141
+ export interface CollectionHeaderActionProps {
142
+ property: Property;
143
+ propertyKey: string;
144
+ path: string;
145
+ parentCollectionSlugs: string[];
146
+ parentEntityIds: string[];
147
+ onHover: boolean;
148
+ collection: AdminCollection;
149
+ tableController: EntityTableController;
150
+ }
151
+ /**
152
+ * Props for the `collection.add-column` slot.
153
+ * @group Plugins
154
+ */
155
+ export interface CollectionAddColumnProps {
156
+ path: string;
157
+ parentCollectionSlugs: string[];
158
+ parentEntityIds: string[];
159
+ collection: AdminCollection;
160
+ tableController: EntityTableController;
161
+ }
162
+ /**
163
+ * Props for the `collection.error` slot.
164
+ * @group Plugins
165
+ */
166
+ export interface CollectionErrorProps {
167
+ path: string;
168
+ collection: AdminCollection;
169
+ parentCollectionSlugs?: string[];
170
+ parentEntityIds?: string[];
171
+ error: Error;
172
+ }
173
+ /**
174
+ * Props for the `kanban.setup` slot.
175
+ * @group Plugins
176
+ */
177
+ export interface KanbanSetupProps {
178
+ collection: AdminCollection;
179
+ fullPath: string;
180
+ parentCollectionSlugs: string[];
181
+ parentEntityIds: string[];
182
+ }
183
+ /**
184
+ * Props for the `kanban.add-column` slot.
185
+ * @group Plugins
186
+ */
187
+ export interface KanbanAddColumnProps {
188
+ collection: AdminCollection;
189
+ fullPath: string;
190
+ parentCollectionSlugs: string[];
191
+ parentEntityIds: string[];
192
+ columnProperty: string;
193
+ }
194
+ /**
195
+ * Props for `entity.row.actions` slot.
196
+ * Rendered for each row in a entity collection table.
197
+ * @group Plugins
198
+ */
199
+ export interface EntityRowActionsProps {
200
+ entity: Entity;
201
+ entityId: string;
202
+ path: string;
203
+ collection: AdminCollection;
204
+ parentCollectionSlugs: string[];
205
+ parentEntityIds: string[];
206
+ selectionController: SelectionController;
207
+ context: RebaseContext;
208
+ }
209
+ /**
210
+ * Props for `entity.field.before` and `entity.field.after` slots.
211
+ * Rendered around individual form fields in the entity edit view.
212
+ * @group Plugins
213
+ */
214
+ export interface EntityFieldSlotProps {
215
+ propertyKey: string;
216
+ property: Property;
217
+ path: string;
218
+ entityId?: string | number;
219
+ collection: AdminCollection;
220
+ context: RebaseContext;
221
+ }
222
+ /**
223
+ * Props for `collection.filter-panel` slot.
224
+ * Custom filter sidebar rendered alongside the collection table.
225
+ * @group Plugins
226
+ */
227
+ export interface CollectionFilterPanelProps {
228
+ path: string;
229
+ collection: AdminCollection;
230
+ parentCollectionSlugs: string[];
231
+ parentEntityIds: string[];
232
+ tableController: EntityTableController;
233
+ context: RebaseContext;
234
+ }
235
+ /**
236
+ * Props for `dashboard.widget` slot.
237
+ * Widgets rendered on the home / dashboard page.
238
+ * @group Plugins
239
+ */
240
+ export interface DashboardWidgetProps {
241
+ context: RebaseContext;
242
+ }
243
+ /**
244
+ * Props for `global.search` slot.
245
+ * Cross-collection search bar rendered in the app shell.
246
+ * @group Plugins
247
+ */
248
+ export interface GlobalSearchProps {
249
+ context: RebaseContext;
250
+ }
251
+ /**
252
+ * Props for `shell.toolbar` slot.
253
+ * Actions rendered in the top-level toolbar / app bar area.
254
+ * @group Plugins
255
+ */
256
+ export interface ShellToolbarProps {
257
+ context: RebaseContext;
258
+ }
259
+ /**
260
+ * Props for `collection.widgets` slot.
261
+ * Widgets rendered above the collection table.
262
+ * @group Plugins
263
+ */
264
+ export interface CollectionWidgetsSlotProps {
265
+ path: string;
266
+ collection: AdminCollection;
267
+ parentCollectionSlugs: string[];
268
+ parentEntityIds: string[];
269
+ }
270
+ /**
271
+ * Props for `home.card.widget` slot.
272
+ * Compact widget rendered inline in a home page collection card.
273
+ * @group Plugins
274
+ */
275
+ export interface HomeCardWidgetSlotProps {
276
+ slug: string;
277
+ collection: AdminCollection;
278
+ context: RebaseContext;
279
+ }