ding-react-admin 1.0.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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +3067 -0
  5. package/dist/src/app/AdminApp.d.ts +7 -0
  6. package/dist/src/app/AdminApp.d.ts.map +1 -0
  7. package/dist/src/components/AuthAlternateLink.d.ts +7 -0
  8. package/dist/src/components/AuthAlternateLink.d.ts.map +1 -0
  9. package/dist/src/components/DensitySwitch.d.ts +2 -0
  10. package/dist/src/components/DensitySwitch.d.ts.map +1 -0
  11. package/dist/src/components/ThemeSwitch.d.ts +2 -0
  12. package/dist/src/components/ThemeSwitch.d.ts.map +1 -0
  13. package/dist/src/components/ThemeToolbar.d.ts +2 -0
  14. package/dist/src/components/ThemeToolbar.d.ts.map +1 -0
  15. package/dist/src/components/index.d.ts +5 -0
  16. package/dist/src/components/index.d.ts.map +1 -0
  17. package/dist/src/context/AppThemeProvider.d.ts +13 -0
  18. package/dist/src/context/AppThemeProvider.d.ts.map +1 -0
  19. package/dist/src/context/AuthProvider.d.ts +18 -0
  20. package/dist/src/context/AuthProvider.d.ts.map +1 -0
  21. package/dist/src/context/DataProvider.d.ts +10 -0
  22. package/dist/src/context/DataProvider.d.ts.map +1 -0
  23. package/dist/src/context/PermissionsProvider.d.ts +18 -0
  24. package/dist/src/context/PermissionsProvider.d.ts.map +1 -0
  25. package/dist/src/crud/FilterBar.d.ts +6 -0
  26. package/dist/src/crud/FilterBar.d.ts.map +1 -0
  27. package/dist/src/crud/FormSteps.d.ts +20 -0
  28. package/dist/src/crud/FormSteps.d.ts.map +1 -0
  29. package/dist/src/crud/FormTabs.d.ts +13 -0
  30. package/dist/src/crud/FormTabs.d.ts.map +1 -0
  31. package/dist/src/crud/InlineFormSet.d.ts +29 -0
  32. package/dist/src/crud/InlineFormSet.d.ts.map +1 -0
  33. package/dist/src/crud/ListActionsBar.d.ts +15 -0
  34. package/dist/src/crud/ListActionsBar.d.ts.map +1 -0
  35. package/dist/src/crud/ResourceForm.d.ts +21 -0
  36. package/dist/src/crud/ResourceForm.d.ts.map +1 -0
  37. package/dist/src/crud/ResourceFormModal.d.ts +10 -0
  38. package/dist/src/crud/ResourceFormModal.d.ts.map +1 -0
  39. package/dist/src/crud/ResourceList.d.ts +38 -0
  40. package/dist/src/crud/ResourceList.d.ts.map +1 -0
  41. package/dist/src/crud/columns/BooleanColumn.d.ts +6 -0
  42. package/dist/src/crud/columns/BooleanColumn.d.ts.map +1 -0
  43. package/dist/src/crud/columns/CustomColumn.d.ts +9 -0
  44. package/dist/src/crud/columns/CustomColumn.d.ts.map +1 -0
  45. package/dist/src/crud/columns/DateColumn.d.ts +6 -0
  46. package/dist/src/crud/columns/DateColumn.d.ts.map +1 -0
  47. package/dist/src/crud/columns/NumberColumn.d.ts +6 -0
  48. package/dist/src/crud/columns/NumberColumn.d.ts.map +1 -0
  49. package/dist/src/crud/columns/ReferenceColumn.d.ts +6 -0
  50. package/dist/src/crud/columns/ReferenceColumn.d.ts.map +1 -0
  51. package/dist/src/crud/columns/ReferenceManyColumn.d.ts +6 -0
  52. package/dist/src/crud/columns/ReferenceManyColumn.d.ts.map +1 -0
  53. package/dist/src/crud/columns/TextColumn.d.ts +7 -0
  54. package/dist/src/crud/columns/TextColumn.d.ts.map +1 -0
  55. package/dist/src/crud/context/FilterContext.d.ts +17 -0
  56. package/dist/src/crud/context/FilterContext.d.ts.map +1 -0
  57. package/dist/src/crud/context/FormContext.d.ts +16 -0
  58. package/dist/src/crud/context/FormContext.d.ts.map +1 -0
  59. package/dist/src/crud/context/FormFieldsContext.d.ts +14 -0
  60. package/dist/src/crud/context/FormFieldsContext.d.ts.map +1 -0
  61. package/dist/src/crud/context/FormSectionContext.d.ts +7 -0
  62. package/dist/src/crud/context/FormSectionContext.d.ts.map +1 -0
  63. package/dist/src/crud/context/InlineFormContext.d.ts +16 -0
  64. package/dist/src/crud/context/InlineFormContext.d.ts.map +1 -0
  65. package/dist/src/crud/context/ListContext.d.ts +22 -0
  66. package/dist/src/crud/context/ListContext.d.ts.map +1 -0
  67. package/dist/src/crud/fields/BooleanField.d.ts +7 -0
  68. package/dist/src/crud/fields/BooleanField.d.ts.map +1 -0
  69. package/dist/src/crud/fields/DateField.d.ts +8 -0
  70. package/dist/src/crud/fields/DateField.d.ts.map +1 -0
  71. package/dist/src/crud/fields/FieldWrapper.d.ts +29 -0
  72. package/dist/src/crud/fields/FieldWrapper.d.ts.map +1 -0
  73. package/dist/src/crud/fields/NumberField.d.ts +12 -0
  74. package/dist/src/crud/fields/NumberField.d.ts.map +1 -0
  75. package/dist/src/crud/fields/PasswordField.d.ts +11 -0
  76. package/dist/src/crud/fields/PasswordField.d.ts.map +1 -0
  77. package/dist/src/crud/fields/ReferenceField.d.ts +18 -0
  78. package/dist/src/crud/fields/ReferenceField.d.ts.map +1 -0
  79. package/dist/src/crud/fields/ReferenceManyField.d.ts +9 -0
  80. package/dist/src/crud/fields/ReferenceManyField.d.ts.map +1 -0
  81. package/dist/src/crud/fields/SelectField.d.ts +10 -0
  82. package/dist/src/crud/fields/SelectField.d.ts.map +1 -0
  83. package/dist/src/crud/fields/TextField.d.ts +10 -0
  84. package/dist/src/crud/fields/TextField.d.ts.map +1 -0
  85. package/dist/src/crud/fields/useInlineOrFormField.d.ts +10 -0
  86. package/dist/src/crud/fields/useInlineOrFormField.d.ts.map +1 -0
  87. package/dist/src/crud/filters/BooleanFilter.d.ts +4 -0
  88. package/dist/src/crud/filters/BooleanFilter.d.ts.map +1 -0
  89. package/dist/src/crud/filters/DateFilter.d.ts +4 -0
  90. package/dist/src/crud/filters/DateFilter.d.ts.map +1 -0
  91. package/dist/src/crud/filters/NumberFilter.d.ts +4 -0
  92. package/dist/src/crud/filters/NumberFilter.d.ts.map +1 -0
  93. package/dist/src/crud/filters/ReferenceFilter.d.ts +13 -0
  94. package/dist/src/crud/filters/ReferenceFilter.d.ts.map +1 -0
  95. package/dist/src/crud/filters/SelectFilter.d.ts +7 -0
  96. package/dist/src/crud/filters/SelectFilter.d.ts.map +1 -0
  97. package/dist/src/crud/filters/TextFilter.d.ts +6 -0
  98. package/dist/src/crud/filters/TextFilter.d.ts.map +1 -0
  99. package/dist/src/crud/index.d.ts +44 -0
  100. package/dist/src/crud/index.d.ts.map +1 -0
  101. package/dist/src/crud/types.d.ts +99 -0
  102. package/dist/src/crud/types.d.ts.map +1 -0
  103. package/dist/src/crud/utils/formErrors.d.ts +9 -0
  104. package/dist/src/crud/utils/formErrors.d.ts.map +1 -0
  105. package/dist/src/crud/utils/formSectionErrors.d.ts +6 -0
  106. package/dist/src/crud/utils/formSectionErrors.d.ts.map +1 -0
  107. package/dist/src/crud/utils/getByPath.d.ts +3 -0
  108. package/dist/src/crud/utils/getByPath.d.ts.map +1 -0
  109. package/dist/src/crud/utils/inlineArrayName.d.ts +3 -0
  110. package/dist/src/crud/utils/inlineArrayName.d.ts.map +1 -0
  111. package/dist/src/crud/utils/pickBySources.d.ts +6 -0
  112. package/dist/src/crud/utils/pickBySources.d.ts.map +1 -0
  113. package/dist/src/crud/utils/setByPath.d.ts +3 -0
  114. package/dist/src/crud/utils/setByPath.d.ts.map +1 -0
  115. package/dist/src/crud/utils/sortQueryParam.d.ts +7 -0
  116. package/dist/src/crud/utils/sortQueryParam.d.ts.map +1 -0
  117. package/dist/src/crud/utils/useChoices.d.ts +10 -0
  118. package/dist/src/crud/utils/useChoices.d.ts.map +1 -0
  119. package/dist/src/crud/utils/useListQueryState.d.ts +22 -0
  120. package/dist/src/crud/utils/useListQueryState.d.ts.map +1 -0
  121. package/dist/src/data/createMemoryResourceHandlers.d.ts +23 -0
  122. package/dist/src/data/createMemoryResourceHandlers.d.ts.map +1 -0
  123. package/dist/src/data/createRestResourceHandlers.d.ts +22 -0
  124. package/dist/src/data/createRestResourceHandlers.d.ts.map +1 -0
  125. package/dist/src/data/dataProviderTypes.d.ts +67 -0
  126. package/dist/src/data/dataProviderTypes.d.ts.map +1 -0
  127. package/dist/src/data/dataUtils.test.d.ts +2 -0
  128. package/dist/src/data/dataUtils.test.d.ts.map +1 -0
  129. package/dist/src/data/inMemoryList.d.ts +12 -0
  130. package/dist/src/data/inMemoryList.d.ts.map +1 -0
  131. package/dist/src/data/parseFormErrorHelpers.d.ts +35 -0
  132. package/dist/src/data/parseFormErrorHelpers.d.ts.map +1 -0
  133. package/dist/src/data/parseFormErrorHelpers.test.d.ts +2 -0
  134. package/dist/src/data/parseFormErrorHelpers.test.d.ts.map +1 -0
  135. package/dist/src/data/resourceHandlers.d.ts +33 -0
  136. package/dist/src/data/resourceHandlers.d.ts.map +1 -0
  137. package/dist/src/data/sortHelpers.d.ts +17 -0
  138. package/dist/src/data/sortHelpers.d.ts.map +1 -0
  139. package/dist/src/index.d.ts +31 -0
  140. package/dist/src/index.d.ts.map +1 -0
  141. package/dist/src/layouts/AdminLayout.d.ts +3 -0
  142. package/dist/src/layouts/AdminLayout.d.ts.map +1 -0
  143. package/dist/src/layouts/AuthPageLayout.d.ts +11 -0
  144. package/dist/src/layouts/AuthPageLayout.d.ts.map +1 -0
  145. package/dist/src/pages/LoginPage.d.ts +3 -0
  146. package/dist/src/pages/LoginPage.d.ts.map +1 -0
  147. package/dist/src/pages/PlaceholderPage.d.ts +4 -0
  148. package/dist/src/pages/PlaceholderPage.d.ts.map +1 -0
  149. package/dist/src/permissions/resourcePermissions.d.ts +22 -0
  150. package/dist/src/permissions/resourcePermissions.d.ts.map +1 -0
  151. package/dist/src/router/createAdminRouter.d.ts +3 -0
  152. package/dist/src/router/createAdminRouter.d.ts.map +1 -0
  153. package/dist/src/router/guards.d.ts +20 -0
  154. package/dist/src/router/guards.d.ts.map +1 -0
  155. package/dist/src/router/routeAccess.d.ts +21 -0
  156. package/dist/src/router/routeAccess.d.ts.map +1 -0
  157. package/dist/src/types.d.ts +123 -0
  158. package/dist/src/types.d.ts.map +1 -0
  159. package/package.json +58 -0
  160. package/src/app/AdminApp.tsx +34 -0
  161. package/src/components/AuthAlternateLink.tsx +23 -0
  162. package/src/components/DensitySwitch.tsx +31 -0
  163. package/src/components/ThemeSwitch.tsx +28 -0
  164. package/src/components/ThemeToolbar.tsx +34 -0
  165. package/src/components/index.ts +4 -0
  166. package/src/context/AppThemeProvider.tsx +128 -0
  167. package/src/context/AuthProvider.tsx +77 -0
  168. package/src/context/DataProvider.tsx +30 -0
  169. package/src/context/PermissionsProvider.tsx +57 -0
  170. package/src/crud/FilterBar.tsx +36 -0
  171. package/src/crud/FormSteps.tsx +135 -0
  172. package/src/crud/FormTabs.tsx +126 -0
  173. package/src/crud/InlineFormSet.tsx +231 -0
  174. package/src/crud/ListActionsBar.tsx +106 -0
  175. package/src/crud/ResourceForm.tsx +281 -0
  176. package/src/crud/ResourceFormModal.tsx +121 -0
  177. package/src/crud/ResourceList.tsx +633 -0
  178. package/src/crud/columns/BooleanColumn.tsx +32 -0
  179. package/src/crud/columns/CustomColumn.tsx +33 -0
  180. package/src/crud/columns/DateColumn.tsx +28 -0
  181. package/src/crud/columns/NumberColumn.tsx +31 -0
  182. package/src/crud/columns/ReferenceColumn.tsx +85 -0
  183. package/src/crud/columns/ReferenceManyColumn.tsx +67 -0
  184. package/src/crud/columns/TextColumn.tsx +38 -0
  185. package/src/crud/context/FilterContext.tsx +71 -0
  186. package/src/crud/context/FormContext.tsx +39 -0
  187. package/src/crud/context/FormFieldsContext.tsx +76 -0
  188. package/src/crud/context/FormSectionContext.tsx +22 -0
  189. package/src/crud/context/InlineFormContext.tsx +71 -0
  190. package/src/crud/context/ListContext.tsx +93 -0
  191. package/src/crud/fields/BooleanField.tsx +32 -0
  192. package/src/crud/fields/DateField.tsx +47 -0
  193. package/src/crud/fields/FieldWrapper.tsx +109 -0
  194. package/src/crud/fields/NumberField.tsx +50 -0
  195. package/src/crud/fields/PasswordField.tsx +98 -0
  196. package/src/crud/fields/ReferenceField.tsx +191 -0
  197. package/src/crud/fields/ReferenceManyField.tsx +70 -0
  198. package/src/crud/fields/SelectField.tsx +42 -0
  199. package/src/crud/fields/TextField.tsx +44 -0
  200. package/src/crud/fields/useInlineOrFormField.tsx +91 -0
  201. package/src/crud/filters/BooleanFilter.tsx +38 -0
  202. package/src/crud/filters/DateFilter.tsx +35 -0
  203. package/src/crud/filters/NumberFilter.tsx +33 -0
  204. package/src/crud/filters/ReferenceFilter.tsx +173 -0
  205. package/src/crud/filters/SelectFilter.tsx +44 -0
  206. package/src/crud/filters/TextFilter.tsx +36 -0
  207. package/src/crud/index.ts +73 -0
  208. package/src/crud/types.ts +130 -0
  209. package/src/crud/utils/formErrors.ts +38 -0
  210. package/src/crud/utils/formSectionErrors.ts +85 -0
  211. package/src/crud/utils/getByPath.ts +13 -0
  212. package/src/crud/utils/inlineArrayName.ts +4 -0
  213. package/src/crud/utils/pickBySources.ts +24 -0
  214. package/src/crud/utils/setByPath.ts +18 -0
  215. package/src/crud/utils/sortQueryParam.ts +37 -0
  216. package/src/crud/utils/useChoices.ts +182 -0
  217. package/src/crud/utils/useListQueryState.ts +191 -0
  218. package/src/data/createMemoryResourceHandlers.ts +78 -0
  219. package/src/data/createRestResourceHandlers.ts +57 -0
  220. package/src/data/dataProviderTypes.ts +101 -0
  221. package/src/data/dataUtils.test.ts +108 -0
  222. package/src/data/inMemoryList.ts +97 -0
  223. package/src/data/parseFormErrorHelpers.test.ts +84 -0
  224. package/src/data/parseFormErrorHelpers.ts +224 -0
  225. package/src/data/resourceHandlers.ts +124 -0
  226. package/src/data/sortHelpers.ts +48 -0
  227. package/src/index.ts +182 -0
  228. package/src/layouts/AdminLayout.tsx +381 -0
  229. package/src/layouts/AuthPageLayout.tsx +81 -0
  230. package/src/pages/LoginPage.tsx +80 -0
  231. package/src/pages/PlaceholderPage.tsx +9 -0
  232. package/src/permissions/resourcePermissions.ts +47 -0
  233. package/src/router/createAdminRouter.tsx +64 -0
  234. package/src/router/guards.tsx +63 -0
  235. package/src/router/routeAccess.ts +89 -0
  236. package/src/types.ts +135 -0
  237. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,67 @@
1
+ /** Resource primary key as accepted by `DataProvider` methods. */
2
+ export type Identifier = string | number;
3
+ export type SortOrder = "ASC" | "DESC";
4
+ export type SortSpec = {
5
+ field: string;
6
+ order: SortOrder;
7
+ };
8
+ export type PaginationParams = {
9
+ page: number;
10
+ perPage: number;
11
+ };
12
+ export type GetListParams = {
13
+ pagination?: PaginationParams;
14
+ /** Single or multi-column sort. */
15
+ sort?: SortSpec | SortSpec[];
16
+ /** Filter values; arrays mean "match any of" for that field. */
17
+ filter?: Record<string, unknown>;
18
+ };
19
+ export type GetListResult<RecordType extends Record<string, unknown>> = {
20
+ data: RecordType[];
21
+ total: number;
22
+ };
23
+ export type GetOneResult<RecordType extends Record<string, unknown>> = {
24
+ data: RecordType;
25
+ };
26
+ export type CreateResult<RecordType extends Record<string, unknown>> = {
27
+ data: RecordType;
28
+ };
29
+ export type UpdateParams<RecordType extends Record<string, unknown>> = {
30
+ id: Identifier;
31
+ data: Partial<RecordType>;
32
+ };
33
+ export type UpdateResult<RecordType extends Record<string, unknown>> = {
34
+ data: RecordType;
35
+ };
36
+ export type DeleteResult<RecordType extends Record<string, unknown>> = {
37
+ data: RecordType | null;
38
+ };
39
+ export type FormMutation = "create" | "update";
40
+ export type ParseFormErrorContext = {
41
+ resource: string;
42
+ mutation: FormMutation;
43
+ /** Set when saving an inline row — prefix field paths for that row. */
44
+ inlineArrayName?: string;
45
+ rowIndex?: number;
46
+ };
47
+ /** Field paths match react-hook-form `name` (form `source` or inline `arrayName.index.source`). */
48
+ export type FormValidationErrors = {
49
+ fields?: Record<string, string | string[]>;
50
+ /** Errors not tied to a single field (e.g. non_field_errors). */
51
+ global?: string | string[];
52
+ };
53
+ export type ParseFormError = (error: unknown, context: ParseFormErrorContext) => FormValidationErrors | null | undefined;
54
+ /**
55
+ * Small, framework-agnostic data layer (react-admin–style names).
56
+ * Implement with REST, GraphQL, or an in-memory mock.
57
+ */
58
+ export type DataProvider<RecordType extends Record<string, unknown> = Record<string, unknown>> = {
59
+ getList: (resource: string, params: GetListParams) => Promise<GetListResult<RecordType>>;
60
+ getOne: (resource: string, id: Identifier) => Promise<GetOneResult<RecordType>>;
61
+ create: (resource: string, data: Partial<RecordType>) => Promise<CreateResult<RecordType>>;
62
+ update: (resource: string, params: UpdateParams<RecordType>) => Promise<UpdateResult<RecordType>>;
63
+ delete: (resource: string, id: Identifier) => Promise<DeleteResult<RecordType>>;
64
+ /** Map API validation errors to form field paths. Optional. */
65
+ parseFormError?: ParseFormError;
66
+ };
67
+ //# sourceMappingURL=dataProviderTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataProviderTypes.d.ts","sourceRoot":"","sources":["../../../src/data/dataProviderTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dataUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataUtils.test.d.ts","sourceRoot":"","sources":["../../../src/data/dataUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { GetListParams, Identifier } from './dataProviderTypes';
2
+ export declare function rowIdMatches(rowId: string | number, id: Identifier): boolean;
3
+ export declare function getById<T extends {
4
+ id: string | number;
5
+ }>(rows: T[], id: Identifier): T;
6
+ export declare function filterRows<T extends Record<string, unknown>>(rows: T[], filter?: Record<string, unknown>): T[];
7
+ /** Apply CRUD list filters, sort, and pagination to an in-memory row array. */
8
+ export declare function applyInMemoryListParams<T extends Record<string, unknown>>(rows: T[], params: GetListParams): {
9
+ data: T[];
10
+ total: number;
11
+ };
12
+ //# sourceMappingURL=inMemoryList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemoryList.d.ts","sourceRoot":"","sources":["../../../src/data/inMemoryList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAC;AAE/E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,EAAE,EAAE,UAAU,GACb,OAAO,CAET;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACvD,IAAI,EAAE,CAAC,EAAE,EACT,EAAE,EAAE,UAAU,GACb,CAAC,CAIH;AA6CD,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,CAAC,EAAE,CAKL;AAUD,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAa9B"}
@@ -0,0 +1,35 @@
1
+ import { FormValidationErrors, ParseFormErrorContext } from './dataProviderTypes';
2
+ export declare function asStringMessages(value: unknown): string[];
3
+ /** Read JSON from `throw { body }` or axios-style `{ response: { data } }`. */
4
+ export declare function getErrorBody(error: unknown): Record<string, unknown> | null;
5
+ export declare function applyInlineFieldPaths(fields: Record<string, string | string[]>, ctx: ParseFormErrorContext): Record<string, string | string[]>;
6
+ export declare function finalizeFormErrors(fields: Record<string, string | string[]>, global: string[], ctx: ParseFormErrorContext): FormValidationErrors;
7
+ /**
8
+ * Django REST framework validation body:
9
+ * `{ "email": ["Invalid"], "non_field_errors": ["…"] }`
10
+ */
11
+ export declare function parseDjangoDRFFormErrors(error: unknown, ctx: ParseFormErrorContext): FormValidationErrors | null;
12
+ export type DotNetFormErrorOptions = {
13
+ /** Map API property names to form `source` paths. */
14
+ fieldMap?: Record<string, string>;
15
+ /** `Email` → `email`. Default true. */
16
+ camelCase?: boolean;
17
+ /** Include `title` / `message` in global toasts. Default false (often generic). */
18
+ includeSummary?: boolean;
19
+ };
20
+ /**
21
+ * ASP.NET Core `ValidationProblemDetails`:
22
+ * `{ "errors": { "Email": ["The Email field is required."] } }`
23
+ */
24
+ export declare function parseDotNetFormErrors(error: unknown, ctx: ParseFormErrorContext, options?: DotNetFormErrorOptions): FormValidationErrors | null;
25
+ export type NodeFormErrorOptions = {
26
+ fieldMap?: Record<string, string>;
27
+ };
28
+ /**
29
+ * Common Node / Express shapes:
30
+ * - `{ errors: { email: ["Invalid"] } }`
31
+ * - `{ errors: [{ path: "email", msg: "Invalid" }] }` (express-validator)
32
+ * - `{ details: [{ message: "…", path: ["email"] }] }` (Joi)
33
+ */
34
+ export declare function parseNodeFormErrors(error: unknown, ctx: ParseFormErrorContext, options?: NodeFormErrorOptions): FormValidationErrors | null;
35
+ //# sourceMappingURL=parseFormErrorHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseFormErrorHelpers.d.ts","sourceRoot":"","sources":["../../../src/data/parseFormErrorHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAOzD;AAMD,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAc3E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACzC,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAQnC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACzC,MAAM,EAAE,MAAM,EAAE,EAChB,GAAG,EAAE,qBAAqB,GACzB,oBAAoB,CAMtB;AAID;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,qBAAqB,GACzB,oBAAoB,GAAG,IAAI,CAkB7B;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,qBAAqB,EAC1B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,oBAAoB,GAAG,IAAI,CA0B7B;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,qBAAqB,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,oBAAoB,GAAG,IAAI,CAyD7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parseFormErrorHelpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseFormErrorHelpers.test.d.ts","sourceRoot":"","sources":["../../../src/data/parseFormErrorHelpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { PermissionsChecker } from '../context/PermissionsProvider';
2
+ import { ResourcePermissions } from '../permissions/resourcePermissions';
3
+ import { CreateResult, DataProvider, DeleteResult, GetListParams, GetListResult, GetOneResult, Identifier, ParseFormError, UpdateParams, UpdateResult } from './dataProviderTypes';
4
+ export type ResourceAction = "list" | "read" | "add" | "change" | "delete";
5
+ /** @deprecated Use per-resource `permissions` with `can` in combineResourceHandlers options. */
6
+ export type ResourceGuard = (resource: string, action: ResourceAction) => void;
7
+ /** CRUD handlers for a single resource (no resource name on each method). */
8
+ export type ResourceHandlers<RecordType extends Record<string, unknown> = Record<string, unknown>> = {
9
+ getList: (params: GetListParams) => Promise<GetListResult<RecordType>>;
10
+ getOne: (id: Identifier) => Promise<GetOneResult<RecordType>>;
11
+ create: (data: Partial<RecordType>) => Promise<CreateResult<RecordType>>;
12
+ update: (params: UpdateParams<RecordType>) => Promise<UpdateResult<RecordType>>;
13
+ delete: (id: Identifier) => Promise<DeleteResult<RecordType>>;
14
+ };
15
+ export type ResourceHandlerEntry = ResourceHandlers | {
16
+ handlers: ResourceHandlers;
17
+ permissions?: ResourcePermissions;
18
+ };
19
+ export type ResourceHandlerMap = Record<string, ResourceHandlerEntry>;
20
+ export type CombineResourceHandlersOptions = {
21
+ /** Permission checker from PermissionsProvider wiring. */
22
+ can?: PermissionsChecker;
23
+ /** @deprecated Use per-resource `permissions` entries instead. */
24
+ guard?: ResourceGuard;
25
+ /** Wired to `ResourceForm` / `ResourceFormModal` save error handling. */
26
+ parseFormError?: ParseFormError;
27
+ };
28
+ /**
29
+ * Compose per-entity handlers into a react-admin-style `DataProvider`.
30
+ * Map an OpenAPI / tRPC / REST client in each entity module, then register here.
31
+ */
32
+ export declare function combineResourceHandlers(handlers: ResourceHandlerMap, options?: CombineResourceHandlersOptions): DataProvider;
33
+ //# sourceMappingURL=resourceHandlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceHandlers.d.ts","sourceRoot":"","sources":["../../../src/data/resourceHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3E,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,IAAI,CAAC;AAEV,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,CAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAClE;IACF,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,CACN,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,KAC7B,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB;IACE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAEtE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,0DAA0D;IAC1D,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,kEAAkE;IAClE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,yEAAyE;IACzE,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAqBF;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,CAAC,EAAE,8BAA8B,GACvC,YAAY,CA0Cd"}
@@ -0,0 +1,17 @@
1
+ import { SortSpec } from './dataProviderTypes';
2
+ /**
3
+ * Django REST Framework `ordering` query param.
4
+ * ASC → `username`; DESC → `-username`; multi → `username,-date_joined`.
5
+ */
6
+ export declare function toDjangoRestOrdering(sort?: SortSpec | SortSpec[]): string | undefined;
7
+ /**
8
+ * OData `$orderby` query param.
9
+ * ASC → `username asc`; DESC → `username desc`.
10
+ */
11
+ export declare function toODataOrderBy(sort?: SortSpec | SortSpec[]): string | undefined;
12
+ /**
13
+ * Common JSON:API `sort` query param.
14
+ * ASC → `username`; DESC → `-username`.
15
+ */
16
+ export declare function toJsonApiSort(sort?: SortSpec | SortSpec[]): string | undefined;
17
+ //# sourceMappingURL=sortHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortHelpers.d.ts","sourceRoot":"","sources":["../../../src/data/sortHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAOpD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAC3B,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAC3B,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAC3B,MAAM,GAAG,SAAS,CAMpB"}
@@ -0,0 +1,31 @@
1
+ export { AdminApp } from './app/AdminApp';
2
+ export { AdminLayout } from './layouts/AdminLayout';
3
+ export { AuthProvider, createSessionStorageAuthAdapter, useAuth, type AuthProviderProps, } from './context/AuthProvider';
4
+ export { DataProvider, useDataProvider, type DataProviderProps, } from './context/DataProvider';
5
+ export { PermissionsProvider, createPermissionsChecker, useCan, usePermissions, type PermissionsProviderProps, } from './context/PermissionsProvider';
6
+ export { AppThemeProvider, useThemeMode, } from './context/AppThemeProvider';
7
+ export type { CreateResult, DataProvider as DataProviderContract, DeleteResult, GetListParams, GetListResult, GetOneResult, Identifier, PaginationParams, SortOrder, SortSpec, UpdateParams, UpdateResult, FormMutation, FormValidationErrors, ParseFormError, ParseFormErrorContext, } from './data/dataProviderTypes';
8
+ export { combineResourceHandlers } from './data/resourceHandlers';
9
+ export { parseDjangoDRFFormErrors, parseDotNetFormErrors, parseNodeFormErrors, getErrorBody, applyInlineFieldPaths, asStringMessages, finalizeFormErrors, } from './data/parseFormErrorHelpers';
10
+ export type { DotNetFormErrorOptions, NodeFormErrorOptions, } from './data/parseFormErrorHelpers';
11
+ export { createMemoryResourceHandlers } from './data/createMemoryResourceHandlers';
12
+ export { createRestResourceHandlers } from './data/createRestResourceHandlers';
13
+ export type { RestResourceHandlersConfig } from './data/createRestResourceHandlers';
14
+ export { toDjangoRestOrdering, toODataOrderBy, toJsonApiSort, } from './data/sortHelpers';
15
+ export { applyInMemoryListParams, filterRows, getById as getRowById, } from './data/inMemoryList';
16
+ export type { CombineResourceHandlersOptions, ResourceAction, ResourceGuard, ResourceHandlerEntry, ResourceHandlerMap, ResourceHandlers, } from './data/resourceHandlers';
17
+ export type { ResourcePermissions } from './permissions/resourcePermissions';
18
+ export { filterNavByPermission } from './permissions/resourcePermissions';
19
+ export type { MemoryResourceHandlersConfig } from './data/createMemoryResourceHandlers';
20
+ export type { PermissionsChecker } from './context/PermissionsProvider';
21
+ export { LoginPage } from './pages/LoginPage';
22
+ export { PlaceholderPage } from './pages/PlaceholderPage';
23
+ export { AuthPageLayout } from './layouts/AuthPageLayout';
24
+ export { AuthAlternateLink, DensitySwitch, ThemeSwitch, ThemeToolbar, } from './components';
25
+ export { Guard, GuestOnly, Protected, RequirePermission } from './router/guards';
26
+ export { createAdminRouter } from './router/createAdminRouter';
27
+ export { deriveAuthPaths, getRouteAccess, partitionAdminRoutes, } from './router/routeAccess';
28
+ export type { AdminAppProps, AdminLayoutProps, AdminRouteChild, AppThemeProviderProps, AuthAdapter, LoginCredentials, AuthRedirects, CreateAdminRouterOptions, AuthAlternateLinkProps, AuthPageLayoutProps, LoginPageProps, NavItem, RouteAccess, ThemeDensity, ThemeMode, } from './types';
29
+ export { ResourceList, FilterBar, ResourceForm, ResourceFormModal, InlineFormSet, FormTabs, FormTab, FormSteps, FormStep, saveInlineRows, loadInlineRows, TextField, NumberField, BooleanField, DateField, SelectField, PasswordField, ReferenceField, ReferenceManyField, TextColumn, NumberColumn, BooleanColumn, DateColumn, ReferenceColumn, ReferenceManyColumn, CustomColumn, TextFilter, NumberFilter, BooleanFilter, DateFilter, SelectFilter, ReferenceFilter, ReferenceManyFilter, useListQueryState, useChoices, getByPath, pickBySources, inlineArrayName, useResourceListContext, useRegisterFormSource, } from './crud';
30
+ export type { ResourceFormProps, ResourceFormInlineConfig, ResourceFormModalProps, InlineFormSetProps, FormTabsProps, FormTabProps, FormStepsProps, FormStepProps, SaveInlineOptions, InlineFormSetLayout, ResourceListProps, BaseSourceProps, ChoiceOption, ChoicesLoader, ReferenceProps, DisplayProps, EditMode, FieldRules, ResourceListBuiltInActions, ResourceListBulkAction, ResourceListBulkActionHelpers, ResourceListRowActionsHelpers, ListQueryState, ListQueryActions, } from './crud';
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AdminLayoutProps } from '../types';
2
+ export declare function AdminLayout({ navItems, brand, collapsedBrand, mobileDrawerTitle, headerExtras, userMenuItems, onUserMenuClick, loginPath, siderCollapsedStorageKey, }: AdminLayoutProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=AdminLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AdminLayout.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,UAAU,CAAC;AAyG1D,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAe,EACf,cAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,SAAoB,EACpB,wBAA4C,GAC7C,EAAE,gBAAgB,2CAiPlB"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ export type AuthPageLayoutProps = {
3
+ children: ReactNode;
4
+ /** Brand mark centered above the card. */
5
+ brand?: ReactNode;
6
+ /** Row below the card (e.g. link to register or login). */
7
+ footer?: ReactNode;
8
+ showThemeToolbar?: boolean;
9
+ };
10
+ export declare function AuthPageLayout({ children, brand, footer, showThemeToolbar, }: AuthPageLayoutProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=AuthPageLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthPageLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AuthPageLayout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,MAAM,EACN,gBAAuB,GACxB,EAAE,mBAAmB,2CA8DrB"}
@@ -0,0 +1,3 @@
1
+ import { LoginPageProps } from '../types';
2
+ export declare function LoginPage({ title, description, logo, brand, extraFields, showThemeToolbar, afterLoginPath, alternateAuth, footer, }: LoginPageProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=LoginPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginPage.d.ts","sourceRoot":"","sources":["../../../src/pages/LoginPage.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAgB,SAAS,CAAC,EACxB,KAAiB,EACjB,WAA0D,EAC1D,IAAI,EACJ,KAAK,EACL,WAAW,EACX,gBAAuB,EACvB,cAAoB,EACpB,aAAa,EACb,MAAM,GACP,EAAE,cAAc,2CA8DhB"}
@@ -0,0 +1,4 @@
1
+ export declare function PlaceholderPage({ title }: {
2
+ title: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=PlaceholderPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaceholderPage.d.ts","sourceRoot":"","sources":["../../../src/pages/PlaceholderPage.tsx"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAM3D"}
@@ -0,0 +1,22 @@
1
+ import { PermissionsChecker } from '../context/PermissionsProvider';
2
+ /** Opaque permission strings per CRUD action (values come from your backend). */
3
+ export type ResourcePermissions = {
4
+ /** List page, nav, route guard */
5
+ list?: string;
6
+ /** getOne — falls back to `list` when omitted */
7
+ read?: string;
8
+ /** New button, create modal, POST */
9
+ add?: string;
10
+ /** Edit / Quick edit, PATCH/PUT */
11
+ change?: string;
12
+ /** Row delete, bulk delete */
13
+ delete?: string;
14
+ };
15
+ export type ResourcePermissionSlot = keyof ResourcePermissions;
16
+ /** When `permissions` is omitted, allow. When provided, missing slot → deny. */
17
+ export declare function checkResourcePermission(can: PermissionsChecker, permissions: ResourcePermissions | undefined, slot: ResourcePermissionSlot): boolean;
18
+ export declare function filterNavByPermission<T extends {
19
+ permission?: string;
20
+ children?: T[];
21
+ }>(items: T[], can: PermissionsChecker): T[];
22
+ //# sourceMappingURL=resourcePermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourcePermissions.d.ts","sourceRoot":"","sources":["../../../src/permissions/resourcePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,GAAG;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,mBAAmB,CAAC;AAE/D,gFAAgF;AAChF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,EACvB,WAAW,EAAE,mBAAmB,GAAG,SAAS,EAC5C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAMT;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,EACrF,KAAK,EAAE,CAAC,EAAE,EACV,GAAG,EAAE,kBAAkB,GACtB,CAAC,EAAE,CAYL"}
@@ -0,0 +1,3 @@
1
+ import { CreateAdminRouterOptions } from '../types';
2
+ export declare function createAdminRouter({ navItems, children, layoutProps, redirects, }: CreateAdminRouterOptions): import('react-router').DataRouter;
3
+ //# sourceMappingURL=createAdminRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAdminRouter.d.ts","sourceRoot":"","sources":["../../../src/router/createAdminRouter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AASzD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE,wBAAwB,qCA+C1B"}
@@ -0,0 +1,20 @@
1
+ import { ReactElement } from 'react';
2
+ export declare function Guard({ when, redirect, children, }: {
3
+ when: boolean;
4
+ redirect: string;
5
+ children: ReactElement;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function Protected({ children, redirectTo, }: {
8
+ children: ReactElement;
9
+ redirectTo?: string;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare function GuestOnly({ children, redirectTo, }: {
12
+ children: ReactElement;
13
+ redirectTo?: string;
14
+ }): import("react/jsx-runtime").JSX.Element;
15
+ export declare function RequirePermission({ permission, redirect, children, }: {
16
+ permission: string;
17
+ redirect: string;
18
+ children: ReactElement;
19
+ }): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/router/guards.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAK1C,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;CACxB,2CAEA;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,UAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,2CAOA;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,UAAgB,GACjB,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,2CAOA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;CACxB,2CAOA"}
@@ -0,0 +1,21 @@
1
+ import { RouteObject } from 'react-router-dom';
2
+ import { AdminRouteChild, AuthRedirects, RouteAccess } from '../types';
3
+ export declare function getRouteAccess(route: AdminRouteChild): RouteAccess;
4
+ export declare function partitionAdminRoutes(routes: AdminRouteChild[]): {
5
+ guest: AdminRouteChild[];
6
+ public: AdminRouteChild[];
7
+ protected: AdminRouteChild[];
8
+ };
9
+ /** React Router path segment for a top-level route (`/login` → `login`). */
10
+ export declare function toRouterSegment(path: string): string;
11
+ export declare function toAbsolutePath(path: string): string;
12
+ /**
13
+ * Resolve redirect targets from declared routes and optional overrides.
14
+ * Throws when protected or guest routes exist but paths cannot be determined.
15
+ */
16
+ export declare function deriveAuthPaths(routes: AdminRouteChild[], redirects?: AuthRedirects): {
17
+ loginPath: string;
18
+ homePath: string;
19
+ };
20
+ export declare function toProtectedRouteObject(route: AdminRouteChild): RouteObject;
21
+ //# sourceMappingURL=routeAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeAccess.d.ts","sourceRoot":"","sources":["../../../src/router/routeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAElE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE;;;;EAa7D;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EAAE,EACzB,SAAS,CAAC,EAAE,aAAa,GACxB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA2CzC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAK1E"}
@@ -0,0 +1,123 @@
1
+ import { MenuProps } from 'antd';
2
+ import { ReactElement, ReactNode } from 'react';
3
+ export type ThemeMode = "light" | "dark" | "system";
4
+ export type ThemeDensity = "comfortable" | "compact";
5
+ /**
6
+ * Sidebar / app-hub navigation row. Maps to Ant Design `Menu` items.
7
+ *
8
+ * - **`children`** — nested submenu; parent rows should use a `path` that you **do not** navigate to as a leaf (for example `/catalog`), unless you define that route.
9
+ * - **`label`** — string or any React node (badges, extra markup).
10
+ * - **`Icon`** — optional; omit on group-only rows if you prefer text-only labels.
11
+ */
12
+ export type NavItem = {
13
+ /** Menu item key and `navigate()` target for leaf items (pathname). Parents use this as submenu key. */
14
+ path: string;
15
+ label: ReactNode;
16
+ Icon?: React.ComponentType;
17
+ /** Hide this item when the user lacks this permission string. */
18
+ permission?: string;
19
+ children?: NavItem[];
20
+ };
21
+ /** Credentials passed from login forms to `AuthAdapter.login` and `useAuth().login`. */
22
+ export type LoginCredentials = {
23
+ username: string;
24
+ password: string;
25
+ [key: string]: unknown;
26
+ };
27
+ /** Pluggable login/logout/token backend (e.g. sessionStorage, your REST API). */
28
+ export type AuthAdapter = {
29
+ login: (credentials: LoginCredentials) => Promise<void>;
30
+ logout: () => void;
31
+ /** Synchronous read of session (e.g. token). Used after mount and after login/logout. */
32
+ getToken: () => string | null;
33
+ };
34
+ /** How a route participates in auth when using `AdminApp` / `createAdminRouter`. */
35
+ export type RouteAccess =
36
+ /** Inside `AdminLayout`; requires a session. Default. */
37
+ "protected"
38
+ /** Top-level; no session required (signup, forgot-password, etc.). */
39
+ | "public"
40
+ /** Top-level; only for guests (`GuestOnly`). Use for login. */
41
+ | "guest";
42
+ export type AuthRedirects = {
43
+ /** Where unauthenticated users are sent. Required with protected routes unless a guest route is declared. */
44
+ unauthenticated?: string;
45
+ /** After login and when visiting guest routes while authenticated. Required with guest routes unless a protected route is declared. */
46
+ afterLogin?: string;
47
+ };
48
+ export type AppThemeProviderProps = {
49
+ children: ReactNode;
50
+ /** localStorage key for theme mode. Default `ding-react-admin-theme-mode`. */
51
+ modeStorageKey?: string;
52
+ /** localStorage key for density. Default `ding-react-admin-theme-density`. */
53
+ densityStorageKey?: string;
54
+ };
55
+ export type AdminLayoutProps = {
56
+ navItems: NavItem[];
57
+ /** Shown in sider header when expanded; drawer title on mobile. */
58
+ brand?: ReactNode;
59
+ /** Shown in sider header when collapsed. */
60
+ collapsedBrand?: ReactNode;
61
+ /** Optional drawer title override (defaults to `brand`). */
62
+ mobileDrawerTitle?: ReactNode;
63
+ headerExtras?: ReactNode;
64
+ /** Full menu items for the account dropdown. If omitted, a default “Log out” item is used. */
65
+ userMenuItems?: MenuProps["items"];
66
+ onUserMenuClick?: MenuProps["onClick"];
67
+ /** Where to send the user after logout. Default `/login`. */
68
+ loginPath?: string;
69
+ /** localStorage key for sider collapsed state. Default `ding-react-admin-sider-collapsed`. */
70
+ siderCollapsedStorageKey?: string;
71
+ };
72
+ export type { AuthPageLayoutProps } from './layouts/AuthPageLayout';
73
+ export type { AuthAlternateLinkProps } from './components/AuthAlternateLink';
74
+ export type LoginPageProps = {
75
+ title?: ReactNode;
76
+ description?: ReactNode;
77
+ /** @deprecated Use `brand` — shown above the card, not in the card header. */
78
+ logo?: ReactNode;
79
+ /** Brand mark centered above the card. */
80
+ brand?: ReactNode;
81
+ /** Extra form items rendered before the submit button. */
82
+ extraFields?: ReactNode;
83
+ showThemeToolbar?: boolean;
84
+ /** Navigate here after successful login. Default `/`. */
85
+ afterLoginPath?: string;
86
+ /** Row below the card linking to registration (or another auth flow). */
87
+ alternateAuth?: {
88
+ prompt?: string;
89
+ linkText: string;
90
+ to: string;
91
+ };
92
+ /** Custom footer below the card; overrides `alternateAuth` when set. */
93
+ footer?: ReactNode;
94
+ };
95
+ type AdminRouteChildBase = {
96
+ element: ReactElement;
97
+ /** Default `protected`. See [docs/routing.md](../docs/routing.md). */
98
+ access?: RouteAccess;
99
+ };
100
+ /** Route list for `AdminApp` / `createAdminRouter`. */
101
+ export type AdminRouteChild = (AdminRouteChildBase & {
102
+ index: true;
103
+ path?: undefined;
104
+ }) | (AdminRouteChildBase & {
105
+ path: string;
106
+ index?: undefined;
107
+ });
108
+ export type CreateAdminRouterOptions = {
109
+ navItems: NavItem[];
110
+ /** App routes; split by `access` into guest, public, and protected segments. */
111
+ children: AdminRouteChild[];
112
+ layoutProps?: Partial<AdminLayoutProps>;
113
+ redirects?: AuthRedirects;
114
+ };
115
+ export type AdminAppProps = {
116
+ navItems: NavItem[];
117
+ routes: AdminRouteChild[];
118
+ /** Override login / post-login redirect paths when they cannot be inferred from routes. */
119
+ authRedirects?: AuthRedirects;
120
+ layoutProps?: Partial<AdminLayoutProps>;
121
+ theme?: Partial<Pick<AppThemeProviderProps, "modeStorageKey" | "densityStorageKey">>;
122
+ };
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,wGAAwG;IACxG,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,yFAAyF;IACzF,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,WAAW;AACrB,yDAAyD;AACvD,WAAW;AACb,sEAAsE;GACpE,QAAQ;AACV,+DAA+D;GAC7D,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG;IAC1B,6GAA6G;IAC7G,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uIAAuI;IACvI,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,sEAAsE;IACtE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,eAAe,GACvB,CAAC,mBAAmB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,GACzD,CAAC,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAEhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gFAAgF;IAChF,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,2FAA2F;IAC3F,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,CACb,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,CACpE,CAAC;CACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "ding-react-admin",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "description": "Composable admin shell (Ant Design + React Router): quick-start AdminApp or build your own layout.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/Muhammadinaam/ding-react-admin.git"
10
+ },
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "src"
23
+ ],
24
+ "scripts": {
25
+ "build": "vite build && node -e \"require('fs').writeFileSync('dist/index.d.ts','export * from \\\"./src/index\\\";\\n')\"",
26
+ "dev:example": "yarn --cwd examples/playground dev",
27
+ "build:example": "yarn --cwd examples/playground build",
28
+ "build:example:gh-pages": "yarn --cwd examples/playground build:gh-pages",
29
+ "test": "vitest run",
30
+ "prepublishOnly": "yarn build"
31
+ },
32
+ "peerDependencies": {
33
+ "@ant-design/icons": ">=6",
34
+ "antd": ">=6",
35
+ "dayjs": ">=1",
36
+ "react": ">=18",
37
+ "react-dom": ">=18",
38
+ "react-hook-form": ">=7",
39
+ "react-router-dom": ">=6"
40
+ },
41
+ "devDependencies": {
42
+ "@ant-design/icons": "^6.0.0",
43
+ "@types/react": "^19.2.14",
44
+ "@types/react-dom": "^19.2.3",
45
+ "@vitejs/plugin-react": "^6.0.1",
46
+ "antd": "^6.0.0",
47
+ "dayjs": "^1.11.13",
48
+ "react": "^19.2.5",
49
+ "react-dom": "^19.2.5",
50
+ "react-hook-form": "^7.56.4",
51
+ "react-router-dom": "^7.14.2",
52
+ "typescript": "~6.0.2",
53
+ "vite": "^8.0.9",
54
+ "vite-plugin-dts": "^4.5.4",
55
+ "vitest": "^3.2.4"
56
+ },
57
+ "dependencies": {}
58
+ }
@@ -0,0 +1,34 @@
1
+ import { useMemo } from "react";
2
+ import { RouterProvider } from "react-router-dom";
3
+ import { AppThemeProvider } from "../context/AppThemeProvider";
4
+ import { createAdminRouter } from "../router/createAdminRouter";
5
+ import type { AdminAppProps } from "../types";
6
+
7
+ /**
8
+ * Declarative admin shell: theme, router, and layout from your route list.
9
+ * Wrap in `<AuthProvider adapter={...}>` — auth is not configured on this component.
10
+ */
11
+ export function AdminApp({
12
+ navItems,
13
+ routes,
14
+ authRedirects,
15
+ layoutProps,
16
+ theme: themeKeys,
17
+ }: AdminAppProps) {
18
+ const router = useMemo(
19
+ () =>
20
+ createAdminRouter({
21
+ navItems,
22
+ children: routes,
23
+ layoutProps,
24
+ redirects: authRedirects,
25
+ }),
26
+ [navItems, routes, layoutProps, authRedirects],
27
+ );
28
+
29
+ return (
30
+ <AppThemeProvider {...themeKeys}>
31
+ <RouterProvider router={router} />
32
+ </AppThemeProvider>
33
+ );
34
+ }