@llmnative/react 0.1.0 → 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 (181) hide show
  1. package/README.md +387 -364
  2. package/bin/cli.js +117 -98
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +21 -823
  5. package/dist/index.mjs +14246 -9296
  6. package/dist/style.css +1 -0
  7. package/dist/types/src/App.d.ts +72 -14
  8. package/dist/types/src/Config.d.ts +28 -5
  9. package/dist/types/src/Global.d.ts +2 -2
  10. package/dist/types/src/I18n.d.ts +185 -0
  11. package/dist/types/src/Theme.d.ts +153 -81
  12. package/dist/types/src/auth.d.ts +13 -1
  13. package/dist/types/src/components/Component.d.ts +13 -27
  14. package/dist/types/src/components/ErrorBoundary.d.ts +30 -0
  15. package/dist/types/src/components/blocks/Brand.d.ts +4 -4
  16. package/dist/types/src/components/blocks/Breadcrumbs.d.ts +50 -4
  17. package/dist/types/src/components/blocks/Carousel.d.ts +5 -5
  18. package/dist/types/src/components/blocks/Dropdown.d.ts +26 -20
  19. package/dist/types/src/components/blocks/ListCard.d.ts +31 -0
  20. package/dist/types/src/components/blocks/Menu.d.ts +13 -16
  21. package/dist/types/src/components/blocks/Notifications.d.ts +8 -3
  22. package/dist/types/src/components/blocks/ProviderSwitcher.d.ts +63 -0
  23. package/dist/types/src/components/blocks/Search.d.ts +2 -2
  24. package/dist/types/src/components/blocks/SideNav.d.ts +45 -0
  25. package/dist/types/src/components/blocks/ThemeSwitcher.d.ts +24 -0
  26. package/dist/types/src/components/blocks/Toolbar.d.ts +19 -0
  27. package/dist/types/src/components/index.d.ts +27 -6
  28. package/dist/types/src/components/types.d.ts +10 -3
  29. package/dist/types/src/components/ui/Alert.d.ts +16 -4
  30. package/dist/types/src/components/ui/Badge.d.ts +6 -5
  31. package/dist/types/src/components/ui/Buttons.d.ts +13 -12
  32. package/dist/types/src/components/ui/Card.d.ts +8 -7
  33. package/dist/types/src/components/ui/Code.d.ts +1 -1
  34. package/dist/types/src/components/ui/Gallery.d.ts +13 -14
  35. package/dist/types/src/components/ui/GridSystem.d.ts +1 -1
  36. package/dist/types/src/components/ui/Icon.d.ts +3 -1
  37. package/dist/types/src/components/ui/Image.d.ts +1 -1
  38. package/dist/types/src/components/ui/ImageAvatar.d.ts +1 -1
  39. package/dist/types/src/components/ui/Loader.d.ts +1 -1
  40. package/dist/types/src/components/ui/LocaleSwitcher.d.ts +14 -0
  41. package/dist/types/src/components/ui/Modal.d.ts +42 -15
  42. package/dist/types/src/components/ui/Pagination.d.ts +14 -3
  43. package/dist/types/src/components/ui/Percentage.d.ts +5 -5
  44. package/dist/types/src/components/ui/Repeat.d.ts +15 -6
  45. package/dist/types/src/components/ui/Tab.d.ts +29 -2
  46. package/dist/types/src/components/ui/TabDynamic.d.ts +4 -3
  47. package/dist/types/src/components/ui/Table.d.ts +15 -14
  48. package/dist/types/src/components/ui/fields/CodeEditor.d.ts +43 -0
  49. package/dist/types/src/components/ui/fields/ContextMenu.d.ts +38 -0
  50. package/dist/types/src/components/ui/fields/Crop.d.ts +4 -2
  51. package/dist/types/src/components/ui/fields/ImageField.d.ts +31 -0
  52. package/dist/types/src/components/ui/fields/Input.d.ts +43 -14
  53. package/dist/types/src/components/ui/fields/Prompt.d.ts +2 -31
  54. package/dist/types/src/components/ui/fields/RichText.d.ts +86 -0
  55. package/dist/types/src/components/ui/fields/Select.d.ts +13 -10
  56. package/dist/types/src/components/ui/fields/Upload.d.ts +37 -2
  57. package/dist/types/src/components/ui/fields/UploadCSV.d.ts +2 -0
  58. package/dist/types/src/components/ui/useRecordSelection.d.ts +1 -2
  59. package/dist/types/src/components/widgets/Form.d.ts +80 -43
  60. package/dist/types/src/components/widgets/ImageEditor.d.ts +4 -5
  61. package/dist/types/src/components/widgets/MarkdownReader.d.ts +4 -4
  62. package/dist/types/src/components/widgets/Prompt.d.ts +71 -23
  63. package/dist/types/src/components/widgets/TabDynamic.d.ts +4 -3
  64. package/dist/types/src/components/widgets/form-controller.d.ts +42 -0
  65. package/dist/types/src/components/widgets/grid-core/GridCore.d.ts +1 -1
  66. package/dist/types/src/components/widgets/grid-core/GridDB.d.ts +1 -1
  67. package/dist/types/src/components/widgets/grid-core/GridGalleryView.d.ts +1 -1
  68. package/dist/types/src/components/widgets/grid-core/GridTableView.d.ts +1 -1
  69. package/dist/types/src/components/widgets/grid-core/types.d.ts +77 -27
  70. package/dist/types/src/components/widgets/grid-core/useGridActions.d.ts +4 -8
  71. package/dist/types/src/components/widgets/grid-core/useGridColumns.d.ts +2 -2
  72. package/dist/types/src/components/widgets/grid-core/useGridDBRecords.d.ts +1 -2
  73. package/dist/types/src/components/widgets/grid-core/useGridPreparedRecords.d.ts +2 -2
  74. package/dist/types/src/components/widgets/grid-core/useGridSelection.d.ts +4 -5
  75. package/dist/types/src/components/widgets/grid-core/utils.d.ts +11 -3
  76. package/dist/types/src/conf/Prompt.d.ts +1 -1
  77. package/dist/types/src/conf/i18n/ar.d.ts +2 -0
  78. package/dist/types/src/conf/i18n/de.d.ts +2 -0
  79. package/dist/types/src/conf/i18n/en.d.ts +2 -0
  80. package/dist/types/src/conf/i18n/index.d.ts +6 -0
  81. package/dist/types/src/conf/i18n/it.d.ts +2 -0
  82. package/dist/types/src/conf/i18n/ru.d.ts +2 -0
  83. package/dist/types/src/conf/i18n/zh.d.ts +2 -0
  84. package/dist/types/src/constant.d.ts +1 -1
  85. package/dist/types/src/index.d.ts +38 -13
  86. package/dist/types/src/libs/converter.d.ts +4 -4
  87. package/dist/types/src/libs/editorHeight.d.ts +12 -0
  88. package/dist/types/src/libs/fetch.d.ts +4 -4
  89. package/dist/types/src/libs/imageBuilder.d.ts +63 -14
  90. package/dist/types/src/libs/imageVariants.d.ts +35 -0
  91. package/dist/types/src/libs/index.d.ts +1 -4
  92. package/dist/types/src/libs/promptUtils.d.ts +24 -0
  93. package/dist/types/src/libs/sanitizer.d.ts +2 -2
  94. package/dist/types/src/libs/utils.d.ts +9 -10
  95. package/dist/types/src/pages/index.d.ts +0 -2
  96. package/dist/types/src/providers/ProviderConfiguration.d.ts +6 -0
  97. package/dist/types/src/providers/ProviderRegistryContext.d.ts +51 -0
  98. package/dist/types/src/providers/ProviderSession.d.ts +68 -0
  99. package/dist/types/src/providers/ai/AIProvider.d.ts +57 -0
  100. package/dist/types/src/providers/ai/AIProviderContext.d.ts +13 -0
  101. package/dist/types/src/providers/ai/anthropic.d.ts +2 -0
  102. package/dist/types/src/providers/ai/deepseek.d.ts +1 -0
  103. package/dist/types/src/providers/ai/gemini.d.ts +2 -0
  104. package/dist/types/src/providers/ai/glm.d.ts +1 -0
  105. package/dist/types/src/providers/ai/index.d.ts +9 -134
  106. package/dist/types/src/providers/ai/mistral.d.ts +1 -0
  107. package/dist/types/src/providers/ai/openai.d.ts +1 -0
  108. package/dist/types/src/providers/ai/openaiCompatible.d.ts +17 -0
  109. package/dist/types/src/providers/ai/opencode.d.ts +2 -0
  110. package/dist/types/src/providers/ai/openrouter.d.ts +1 -0
  111. package/dist/types/src/providers/ai/shared.d.ts +46 -0
  112. package/dist/types/src/providers/api/ApiProvider.d.ts +43 -0
  113. package/dist/types/src/providers/api/direct.d.ts +14 -0
  114. package/dist/types/src/providers/api/firebase.d.ts +14 -0
  115. package/dist/types/src/providers/api/mock.d.ts +7 -0
  116. package/dist/types/src/providers/api/supabase.d.ts +14 -0
  117. package/dist/types/src/providers/auth/AuthProvider.d.ts +2 -2
  118. package/dist/types/src/providers/auth/firebase/FirebaseAuthProvider.d.ts +26 -0
  119. package/dist/types/src/providers/auth/google/GoogleAuth.d.ts +2 -2
  120. package/dist/types/src/providers/auth/supabase/SupabaseAuthProvider.d.ts +48 -0
  121. package/dist/types/src/providers/credentials/CredentialsProvider.d.ts +3 -0
  122. package/dist/types/src/providers/credentials/CredentialsProviderContext.d.ts +12 -0
  123. package/dist/types/src/providers/credentials/google/GoogleServiceAccountProvider.d.ts +8 -0
  124. package/dist/types/src/providers/data/DataProvider.d.ts +27 -1
  125. package/dist/types/src/providers/data/firebase.d.ts +5 -4
  126. package/dist/types/src/providers/data/firestore.d.ts +38 -0
  127. package/dist/types/src/providers/data/mock.d.ts +8 -1
  128. package/dist/types/src/providers/data/supabase.d.ts +36 -10
  129. package/dist/types/src/providers/firebase-init.d.ts +15 -4
  130. package/dist/types/src/providers/icon/PhosphorIconProvider.d.ts +1 -1
  131. package/dist/types/src/providers/manifest.d.ts +20 -14
  132. package/dist/types/src/providers/proxy/index.d.ts +7 -0
  133. package/dist/types/src/providers/proxy/vite.d.ts +3 -0
  134. package/dist/types/src/providers/scrape/index.d.ts +2 -1
  135. package/dist/types/src/providers/seo/google/keyword.d.ts +6 -1
  136. package/dist/types/src/providers/storage/StorageProvider.d.ts +155 -4
  137. package/dist/types/src/providers/storage/dropbox.d.ts +3 -3
  138. package/dist/types/src/providers/storage/firebase.d.ts +38 -7
  139. package/dist/types/src/providers/storage/supabase.d.ts +47 -7
  140. package/dist/types/src/providers/supabase-init.d.ts +35 -0
  141. package/dist/types/src/types/FormFields.d.ts +4 -2
  142. package/dist/types/src/types/FormSchema.d.ts +29 -0
  143. package/dist/types/themes/tokyo-night-light.d.ts +3 -0
  144. package/dist/types/themes/tokyo-night.d.ts +3 -0
  145. package/dist/types/themes/vscode-dark-plus.d.ts +3 -0
  146. package/dist/types/themes/vscode-light-plus.d.ts +3 -0
  147. package/dist/vite.js +1 -0
  148. package/dist/vite.mjs +54 -0
  149. package/package.json +45 -14
  150. package/scripts/cli/proxy-templates/cloudflare.ts +34 -0
  151. package/scripts/cli/proxy-templates/express.ts +77 -0
  152. package/scripts/cli/proxy-templates/nextjs-app.ts +42 -0
  153. package/scripts/cli/proxy-templates/nextjs-pages.ts +41 -0
  154. package/scripts/cli/proxy-templates/scaffold.json +33 -0
  155. package/scripts/cli/setup-devtools.js +155 -85
  156. package/scripts/cli/setup-project.js +618 -484
  157. package/themes/cyber.ts +469 -405
  158. package/themes/default.ts +469 -405
  159. package/themes/flat.ts +469 -405
  160. package/themes/tokyo-night-light.ts +38 -0
  161. package/themes/tokyo-night.ts +38 -0
  162. package/themes/vscode-dark-plus.ts +29 -0
  163. package/themes/vscode-light-plus.ts +29 -0
  164. package/dist/index.js.map +0 -1
  165. package/dist/index.mjs.map +0 -1
  166. package/dist/types/src/components/FormEnhancer.d.ts +0 -26
  167. package/dist/types/src/components/Template.d.ts +0 -18
  168. package/dist/types/src/components/ui/fields/AssistantAI.d.ts +0 -23
  169. package/dist/types/src/components/ui/fields/Command.d.ts +0 -15
  170. package/dist/types/src/components/ui/fields/ImageUrl.d.ts +0 -7
  171. package/dist/types/src/libs/cache.d.ts +0 -9
  172. package/dist/types/src/libs/database.d.ts +0 -3
  173. package/dist/types/src/libs/log.d.ts +0 -2
  174. package/dist/types/src/libs/seo.d.ts +0 -8
  175. package/dist/types/src/libs/storage.d.ts +0 -2
  176. package/dist/types/src/pages/Blog.d.ts +0 -3
  177. package/dist/types/src/pages/BlogPost.d.ts +0 -16
  178. package/dist/types/src/pages/Helper.d.ts +0 -8
  179. package/dist/types/src/providers/auth/google/apis/auth.d.ts +0 -4
  180. package/dist/types/src/types/Block.d.ts +0 -4
  181. package/dist/types/src/types/Section.d.ts +0 -4
@@ -1,31 +1,79 @@
1
1
  import React from 'react';
2
- import { AIFetchConfig } from '../../providers/ai';
3
2
  import { PromptVariables } from '../../conf/Prompt';
3
+ import { type AIProviderAdapter, type AIRequestOptions, type AIAttachment } from '../../providers/ai/AIProvider';
4
4
  import { FormFieldProps } from './Form';
5
5
  export declare enum PromptMode {
6
- EDITOR = "editor",
7
- LIVE = "live"
6
+ EDIT = "edit",
7
+ RUN = "run"
8
8
  }
9
- type PromptOptions = AIFetchConfig & {
9
+ export type PromptCommand = {
10
+ name: string;
11
+ description?: string;
12
+ icon?: string;
13
+ handler?: (currentValue: string) => string | Promise<string>;
14
+ };
15
+ export type PromptAction = {
16
+ key: string;
17
+ icon: string;
18
+ label?: string;
19
+ content?: React.ReactNode;
20
+ };
21
+ export type PromptStatusItem = 'tokensIn' | 'tokensOut' | 'contextPercent' | 'model' | 'duration' | {
22
+ key: string;
23
+ render: (stats: PromptRunStats) => React.ReactNode;
24
+ };
25
+ export type PromptRunStats = {
26
+ tokensIn: number;
27
+ tokensOut: number;
28
+ contextPercent: number | null;
29
+ model: string;
30
+ durationMs: number;
31
+ estimatedCost: number | null;
32
+ };
33
+ type PromptOptions = AIRequestOptions & {
10
34
  value: string;
11
35
  };
12
- type OnRunPrompt = (prompt: string, config: AIFetchConfig, data?: PromptVariables) => Promise<string>;
13
- export interface PromptProps extends FormFieldProps {
14
- mode?: PromptMode;
36
+ type OnRunPrompt = (prompt: string, options: AIRequestOptions, data?: PromptVariables) => Promise<string>;
37
+ type PromptDefaultValue = {
38
+ value?: string;
39
+ enabled?: boolean;
40
+ role?: string;
41
+ language?: string;
42
+ voice?: string;
43
+ style?: string;
44
+ model?: string;
45
+ temperature?: number;
46
+ };
47
+ type RenderPlainFallback = (props: Omit<FormFieldProps, "defaultValue">) => React.ReactNode;
48
+ type RenderAIUnavailable = (props: {
49
+ mode: PromptMode;
50
+ providerId?: string | null;
51
+ reason?: string;
52
+ configured: boolean;
53
+ }) => React.ReactNode;
54
+ type PromptSharedProps = FormFieldProps & {
55
+ minHeight?: number;
56
+ maxHeight?: number;
57
+ defaultValue?: PromptDefaultValue;
58
+ renderAIUnavailable?: RenderAIUnavailable;
59
+ variables?: PromptVariables;
60
+ };
61
+ type PromptEditProps = PromptSharedProps & {
62
+ mode?: PromptMode.EDIT;
63
+ };
64
+ type PromptRunProps = PromptSharedProps & {
65
+ mode: PromptMode.RUN;
15
66
  onRunPrompt?: OnRunPrompt;
16
- renderPromptDisabled?: (props: Omit<FormFieldProps, "defaultValue">) => React.ReactNode;
17
- rows?: number;
18
- defaultValue?: {
19
- value?: string;
20
- enabled?: boolean;
21
- role?: string;
22
- language?: string;
23
- voice?: string;
24
- style?: string;
25
- model?: string;
26
- temperature?: number;
27
- };
28
- }
29
- export declare const Prompt: ({ mode, onRunPrompt, renderPromptDisabled, ...props }: PromptProps) => React.JSX.Element;
30
- export declare const runPrompt: (options: PromptOptions, data?: PromptVariables, onRunPrompt?: OnRunPrompt) => Promise<string>;
31
- export {};
67
+ renderFallback?: RenderPlainFallback;
68
+ commands?: PromptCommand[];
69
+ attachments?: boolean;
70
+ actions?: PromptAction[];
71
+ statusItems?: PromptStatusItem[];
72
+ };
73
+ export type PromptProps = PromptEditProps | PromptRunProps;
74
+ export declare const Prompt: ({ mode, ...props }: PromptProps) => React.JSX.Element;
75
+ export declare const runPrompt: (options: PromptOptions, data?: PromptVariables, onRunPrompt?: OnRunPrompt, provider?: AIProviderAdapter, attachments?: AIAttachment[], messages?: {
76
+ noProvider?: string;
77
+ noResponse?: string;
78
+ }) => Promise<string>;
79
+ export default Prompt;
@@ -1,13 +1,14 @@
1
1
  import React from 'react';
2
2
  import { TabPosition } from '../ui/Tab';
3
3
  import { FieldOnChange } from './Form';
4
+ import { RecordProps } from '../../providers/data/DataProvider';
4
5
  interface TabDynamicProps {
5
- children: React.ReactNode | ((record: any) => React.ReactNode);
6
+ children: React.ReactNode | ((record: RecordProps) => React.ReactNode);
6
7
  name: string;
7
8
  onChange?: FieldOnChange;
8
- onAdd?: (value: any[]) => void;
9
+ onAdd?: (value: RecordProps[]) => void;
9
10
  onRemove?: (index: number) => void;
10
- value?: any[];
11
+ value?: RecordProps[];
11
12
  label?: string;
12
13
  min?: number;
13
14
  max?: number;
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import type { RecordProps } from '../../providers/data/DataProvider';
3
+ export type FormDraftStatus = 'restore' | 'restored' | null;
4
+ export type FormActionEvent = {
5
+ preventDefault?: () => void;
6
+ };
7
+ export type FormControllerState = {
8
+ record?: RecordProps;
9
+ isNewRecord: boolean;
10
+ isDirty: boolean;
11
+ canSave: boolean;
12
+ canDelete: boolean;
13
+ isSaving: boolean;
14
+ isDeleting: boolean;
15
+ saveDisabled: boolean;
16
+ deleteDisabled: boolean;
17
+ hasDraft: boolean;
18
+ draftStatus: FormDraftStatus;
19
+ errors: Record<string, string>;
20
+ hasErrors: boolean;
21
+ };
22
+ export type FormControllerActions = {
23
+ save: (event?: FormActionEvent) => Promise<boolean>;
24
+ delete: (event?: FormActionEvent) => Promise<boolean>;
25
+ reset: () => void;
26
+ restoreDraft: () => void;
27
+ discardDraft: () => void;
28
+ };
29
+ export type FormController = FormControllerState & FormControllerActions;
30
+ type FormControllerStore = {
31
+ bindActions: (actions: Partial<FormControllerActions>) => void;
32
+ getControllerSnapshot: () => FormController;
33
+ getState: () => FormControllerState;
34
+ setState: (nextState: Partial<FormControllerState>) => void;
35
+ subscribe: (listener: () => void) => () => void;
36
+ };
37
+ export declare function getFormControllerStore(controller: FormController): FormControllerStore;
38
+ export declare function resetFormController(controller: FormController): void;
39
+ export declare const FormControllerContext: React.Context<FormController | null>;
40
+ export declare function useFormController(controller?: FormController): FormController;
41
+ export declare function useFormActions(): FormController;
42
+ export {};
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import { type RecordProps } from "../../../providers/data/DataProvider";
3
3
  import { type GridCoreProps } from "./types";
4
- declare function GridCore<TRecord extends RecordProps>({ records, recordId, sourcePath, columns, actions, form, routeSync, header, footer, layout, sticky, wrapClass, loading, title, sortable, pagination, selection, selectedKeys, defaultSelectedKeys, onSelectionChange, onClickRow, reorderable, onReorder, groupBy, onSave, onDelete, onAfterAction, createRecordKey, audit, transformRecords, }: GridCoreProps<TRecord>): React.JSX.Element;
4
+ declare function GridCore<TRecord extends RecordProps>({ records, recordId, sourcePath, columns, actions, form, editDeepLink, header, footer, view, sticky, wrapperClassName, loading, title, before, after, sortable, pagination, selection, onRowClick, reorderable, onReorder, groupBy, onSave, onDelete, onComplete, audit, onLoad, }: GridCoreProps<TRecord>): React.JSX.Element;
5
5
  export default GridCore;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import { type RecordProps } from "../../../providers/data/DataProvider";
3
3
  import { type GridDBProps } from "./types";
4
- declare function GridDB<TRecord extends RecordProps = RecordProps>({ path, where, order, fieldMap, onLoad, recordId, ...rest }: GridDBProps<TRecord>): React.JSX.Element;
4
+ declare function GridDB<TRecord extends RecordProps = RecordProps>({ path, fromUrl, where, order, fieldMap, recordId, ...rest }: GridDBProps<TRecord>): React.JSX.Element;
5
5
  export default GridDB;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import { type RecordProps } from "../../../providers/data/DataProvider";
3
3
  import { type GridGalleryViewProps } from "./types";
4
- declare function GridGalleryView<TRecord extends RecordProps>({ records, recordId, sortable, pagination, selection, selectedKeys, onSelectionChange, onClickRow, groupBy, wrapClass, }: GridGalleryViewProps<TRecord>): React.JSX.Element;
4
+ declare function GridGalleryView<TRecord extends RecordProps>({ records, recordId, sortable, pagination, selection, selectedKeys, onSelectionChange, onRowClick, groupBy, wrapperClassName, before, after, }: GridGalleryViewProps<TRecord>): React.JSX.Element;
5
5
  export default GridGalleryView;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import { type RecordProps } from "../../../providers/data/DataProvider";
3
3
  import { type GridTableViewProps } from "./types";
4
- declare function GridTableView<TRecord extends RecordProps>({ records, recordId, columns, runAction, sortable, pagination, selection, selectedKeys, onSelectionChange, onClickRow, reorderable, onReorder, activeKey, wrapClass, }: GridTableViewProps<TRecord>): React.JSX.Element;
4
+ declare function GridTableView<TRecord extends RecordProps>({ records, recordId, columns, runAction, sortable, pagination, selection, selectedKeys, onSelectionChange, onRowClick, reorderable, onReorder, activeKey, groupBy, wrapperClassName, before, after, }: GridTableViewProps<TRecord>): React.JSX.Element;
5
5
  export default GridTableView;
@@ -14,11 +14,21 @@ export type GridCellContext<TRecord> = {
14
14
  rowIndex: number;
15
15
  runAction: (actionKey: string) => void;
16
16
  };
17
+ /**
18
+ * Column definition for `<Grid>` / `<Table>`.
19
+ * `render` accepts a built-in format string ("date", "badge", …) or a custom
20
+ * render function that receives the full cell context.
21
+ */
17
22
  export type GridColumn<TRecord> = {
23
+ /** Record field to read. Accepts dot-notation strings for nested fields. */
18
24
  key: keyof TRecord | string;
25
+ /** Column header label. */
19
26
  label: string;
27
+ /** Enable click-to-sort on this column. */
20
28
  sortable?: boolean;
29
+ /** Extra CSS classes on the `<td>` / cell wrapper. */
21
30
  className?: string;
31
+ /** Built-in format name or custom render function. */
22
32
  render?: GridFormat | ((ctx: GridCellContext<TRecord>) => React.ReactNode);
23
33
  };
24
34
  export type GridSelectionState<TRecord> = {
@@ -28,6 +38,11 @@ export type GridSelectionState<TRecord> = {
28
38
  clear: () => void;
29
39
  };
30
40
  export type GridSelectionChangeHandler<TRecord> = (selection: GridSelectionState<TRecord>) => void;
41
+ export type GridSelectionConfig<TRecord> = {
42
+ mode: "single" | "multiple";
43
+ defaultKeys?: string[];
44
+ onChange?: GridSelectionChangeHandler<TRecord>;
45
+ };
31
46
  export type GridReorderMeta<TRecord> = {
32
47
  fromIndex: number;
33
48
  toIndex: number;
@@ -60,7 +75,7 @@ export type GridModalAction<TRecord> = {
60
75
  title?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
61
76
  size?: "sm" | "md" | "lg" | "xl" | "fullscreen";
62
77
  position?: "center" | "top" | "left" | "right" | "bottom";
63
- buttonFullscreen?: boolean;
78
+ allowFullscreen?: boolean;
64
79
  header?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
65
80
  body?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
66
81
  footer?: React.ReactNode | false | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
@@ -98,7 +113,7 @@ export type GridDeleteAction<TRecord> = {
98
113
  title?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
99
114
  size?: "sm" | "md" | "lg" | "xl" | "fullscreen";
100
115
  position?: "center" | "top" | "left" | "right" | "bottom";
101
- buttonFullscreen?: boolean;
116
+ allowFullscreen?: boolean;
102
117
  header?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
103
118
  body?: React.ReactNode | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
104
119
  footer?: React.ReactNode | false | ((ctx: GridModalActionContext<TRecord>) => React.ReactNode);
@@ -134,44 +149,69 @@ export type GridAfterActionArgs<TRecord> = {
134
149
  action: "create" | "update" | "delete";
135
150
  };
136
151
  export type GridAfterActionHandler<TRecord> = (args: GridAfterActionArgs<TRecord>) => Promise<boolean>;
137
- export type GridRouteSync = {
138
- edit?: boolean;
139
- };
152
+ /** Visual / layout props for `<Grid>`. */
140
153
  export type GridPresentation = {
141
- layout?: GridLayout;
154
+ /** Display mode: `"table"` (default) or `"gallery"` card layout. */
155
+ view?: GridLayout;
156
+ /** Stick the header (`"top"`) or footer (`"bottom"`) while scrolling. */
142
157
  sticky?: GridSticky;
143
- wrapClass?: string;
158
+ /** CSS classes on the outermost wrapper element. */
159
+ wrapperClassName?: string;
160
+ /** Show a loading skeleton instead of rows. */
144
161
  loading?: boolean;
162
+ /** Title rendered in the Grid header area. */
145
163
  title?: React.ReactNode;
164
+ /** Content rendered before the Grid. */
165
+ before?: React.ReactNode;
166
+ /** Content rendered after the Grid. */
167
+ after?: React.ReactNode;
146
168
  };
169
+ /** Interaction / behaviour props for `<Grid>`. */
147
170
  export type GridBehavior<TRecord> = {
171
+ /** Enable global sorting. Pass an `OrderConfig` to set a default sort. */
148
172
  sortable?: boolean | OrderConfig;
173
+ /** Pagination config. `{ limit: 20 }` is the common form. */
149
174
  pagination?: PaginationParams;
150
- selection?: GridSelectionMode;
151
- selectedKeys?: string[];
152
- defaultSelectedKeys?: string[];
153
- onSelectionChange?: GridSelectionChangeHandler<TRecord>;
154
- onClickRow?: (record: TRecord) => void;
175
+ /** Row selection: `false` (off), `"single"`, `"multiple"`, or a full `GridSelectionConfig`. */
176
+ selection?: false | "single" | "multiple" | GridSelectionConfig<TRecord>;
177
+ /** Called when the user clicks a row (outside an action button). */
178
+ onRowClick?: (record: TRecord) => void;
179
+ /** Allow drag-and-drop row reordering. */
155
180
  reorderable?: boolean;
181
+ /** Called after a drag reorder with the new record order and move metadata. */
156
182
  onReorder?: GridReorderHandler<TRecord>;
183
+ /** Group rows by a field or array of fields. */
157
184
  groupBy?: keyof TRecord | string | Array<keyof TRecord | string>;
158
185
  };
186
+ /** Data-mutation hooks for `<Grid>`. */
159
187
  export type GridPersistence<TRecord> = {
188
+ /** Called before saving a record. Return a custom storage path or `undefined`. */
160
189
  onSave?: GridMutationSaveHandler<TRecord>;
190
+ /** Called before deleting a record. Return a path override or `undefined`. */
161
191
  onDelete?: GridMutationDeleteHandler<TRecord>;
162
- onAfterAction?: GridAfterActionHandler<TRecord>;
163
- createRecordKey?: (record: TRecord) => string;
192
+ /** Called after create/update/delete. Return `false` to suppress default navigation. */
193
+ onComplete?: GridAfterActionHandler<TRecord>;
194
+ /** Automatically write `createdAt` / `updatedAt` timestamps on every mutation. */
164
195
  audit?: boolean;
165
196
  };
166
- export type GridTransform<TRecord> = {
167
- transformRecords?: (records: TRecord[]) => TRecord[] | Promise<TRecord[]>;
168
- };
169
- export type GridBaseProps<TRecord> = GridPresentation & GridBehavior<TRecord> & GridPersistence<TRecord> & GridTransform<TRecord> & {
197
+ /**
198
+ * Full prop surface shared by all `<Grid>` variants.
199
+ * Combines presentation, behaviour, and persistence with a few top-level hooks.
200
+ */
201
+ export type GridBaseProps<TRecord> = GridPresentation & GridBehavior<TRecord> & GridPersistence<TRecord> & {
202
+ /** Transform the record array after loading (filter, sort, enrich). */
203
+ onLoad?: (records: TRecord[]) => TRecord[] | Promise<TRecord[]>;
204
+ /** Column definitions. Omit to auto-generate from record keys. */
170
205
  columns?: GridColumn<TRecord>[];
206
+ /** Enable built-in `"add"/"edit"/"delete"` shortcuts, or provide custom `GridAction` objects. */
171
207
  actions?: GridActions<TRecord>;
208
+ /** Form element or factory rendered inside the add/edit modal. */
172
209
  form?: React.ReactElement | ((ctx: GridFormContext<TRecord>) => React.ReactNode);
173
- routeSync?: GridRouteSync;
210
+ /** Sync the edit modal state to the URL hash (enables direct links). */
211
+ editDeepLink?: boolean;
212
+ /** Content rendered in the Grid header bar. Receives selection context. */
174
213
  header?: React.ReactNode | ((ctx: GridHeaderContext<TRecord>) => React.ReactNode);
214
+ /** Content rendered in the Grid footer bar. Receives selection context. */
175
215
  footer?: React.ReactNode | ((ctx: GridFooterContext<TRecord>) => React.ReactNode);
176
216
  };
177
217
  export type GridCoreProps<TRecord extends RecordProps> = GridBaseProps<TRecord> & {
@@ -183,12 +223,17 @@ export type GridArrayProps<TRecord extends RecordProps> = GridBaseProps<TRecord>
183
223
  records: TRecord[];
184
224
  recordId: GridRecordKey<TRecord>;
185
225
  };
186
- export type GridDBQuery = Pick<DatabaseOptions, "where" | "order" | "fieldMap" | "onLoad">;
187
- export type GridDBPath = string | "fromUrl";
188
- export type GridDBProps<TRecord extends RecordProps = RecordProps> = GridBaseProps<TRecord> & GridDBQuery & {
226
+ export type GridDBQuery = Pick<DatabaseOptions, "where" | "order" | "fieldMap">;
227
+ export type GridDBPath = string;
228
+ export type GridDBProps<TRecord extends RecordProps = RecordProps> = GridBaseProps<TRecord> & GridDBQuery & ({
229
+ fromUrl: true;
230
+ path?: never;
231
+ recordId?: GridRecordKey<TRecord>;
232
+ } | {
233
+ fromUrl?: false;
189
234
  path: GridDBPath;
190
235
  recordId?: GridRecordKey<TRecord>;
191
- };
236
+ });
192
237
  export type GridGatewayArrayProps<TRecord extends RecordProps> = GridArrayProps<TRecord> & {
193
238
  path?: never;
194
239
  };
@@ -206,11 +251,14 @@ export type GridTableViewProps<TRecord extends RecordProps> = {
206
251
  selection?: GridSelectionMode;
207
252
  selectedKeys?: string[];
208
253
  onSelectionChange?: GridSelectionChangeHandler<TRecord>;
209
- onClickRow?: (record: TRecord) => void;
254
+ onRowClick?: (record: TRecord) => void;
210
255
  reorderable?: boolean;
211
256
  onReorder?: GridReorderHandler<TRecord>;
212
257
  activeKey?: string | null;
213
- wrapClass?: string;
258
+ groupBy?: keyof TRecord | string | Array<keyof TRecord | string>;
259
+ wrapperClassName?: string;
260
+ before?: React.ReactNode;
261
+ after?: React.ReactNode;
214
262
  };
215
263
  export type GridGalleryViewProps<TRecord extends RecordProps> = {
216
264
  records: TRecord[];
@@ -220,8 +268,10 @@ export type GridGalleryViewProps<TRecord extends RecordProps> = {
220
268
  selection?: GridSelectionMode;
221
269
  selectedKeys?: string[];
222
270
  onSelectionChange?: GridSelectionChangeHandler<TRecord>;
223
- onClickRow?: (record: TRecord) => void;
271
+ onRowClick?: (record: TRecord) => void;
224
272
  groupBy?: keyof TRecord | string | Array<keyof TRecord | string>;
225
- wrapClass?: string;
273
+ wrapperClassName?: string;
274
+ before?: React.ReactNode;
275
+ after?: React.ReactNode;
226
276
  };
227
277
  export {};
@@ -1,5 +1,4 @@
1
1
  import React from "react";
2
- import { type FormRef } from "../Form";
3
2
  import { type DataProviderAdapter, type RecordProps } from "../../../providers/data/DataProvider";
4
3
  import { type GridAction, type GridActionContext, type GridActions, type GridFormContext, type GridModalActionContext, type GridRecordKey } from "./types";
5
4
  export type GridActiveAction<TRecord extends RecordProps> = {
@@ -9,9 +8,7 @@ export type GridActiveAction<TRecord extends RecordProps> = {
9
8
  type UseGridActionsArgs<TRecord extends RecordProps> = {
10
9
  actions?: GridActions<TRecord>;
11
10
  form?: React.ReactElement | ((ctx: GridFormContext<TRecord>) => React.ReactNode);
12
- routeSync?: {
13
- edit?: boolean;
14
- };
11
+ editDeepLink?: boolean;
15
12
  preparedRecords: TRecord[];
16
13
  recordId: GridRecordKey<TRecord>;
17
14
  sourcePath?: string;
@@ -24,14 +21,13 @@ type UseGridActionsArgs<TRecord extends RecordProps> = {
24
21
  onDelete?: (args: {
25
22
  record?: TRecord;
26
23
  }) => Promise<string | undefined>;
27
- onAfterAction?: (args: {
24
+ onComplete?: (args: {
28
25
  record?: TRecord;
29
26
  action: "create" | "update" | "delete";
30
27
  }) => Promise<boolean>;
31
- createRecordKey?: (record: TRecord) => string;
32
28
  audit?: boolean;
33
29
  };
34
- declare function useGridActions<TRecord extends RecordProps>({ actions, form, routeSync, preparedRecords, recordId, sourcePath, db, onSave, onDelete, onAfterAction, createRecordKey, audit, }: UseGridActionsArgs<TRecord>): {
30
+ declare function useGridActions<TRecord extends RecordProps>({ actions, form, editDeepLink, preparedRecords, recordId, sourcePath, db, onSave, onDelete, onComplete, audit, }: UseGridActionsArgs<TRecord>): {
35
31
  normalizedActions: Record<string, GridAction<TRecord>>;
36
32
  activeAction: GridActiveAction<TRecord> | null;
37
33
  activeActionConfig: GridAction<TRecord> | undefined;
@@ -43,7 +39,7 @@ declare function useGridActions<TRecord extends RecordProps>({ actions, form, ro
43
39
  getActionContext: (actionKey: string, record?: TRecord) => GridActionContext<TRecord>;
44
40
  getModalActionContext: (actionKey: string, record?: TRecord) => GridModalActionContext<TRecord>;
45
41
  getRecordKey: (record: TRecord) => string;
46
- formRef: React.MutableRefObject<FormRef | undefined>;
42
+ formController: import("../form-controller").FormController;
47
43
  gridHashId: string;
48
44
  };
49
45
  export default useGridActions;
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import { type RecordProps } from "../../../providers/data/DataProvider";
3
- import { type GridColumn } from "./types";
3
+ import { type GridColumn, type GridFormContext } from "./types";
4
4
  type UseGridColumnsArgs<TRecord extends RecordProps> = {
5
5
  columns?: GridColumn<TRecord>[];
6
6
  records: TRecord[];
7
- form?: React.ReactElement | ((ctx: any) => React.ReactNode);
7
+ form?: React.ReactElement | ((ctx: GridFormContext<TRecord>) => React.ReactNode);
8
8
  };
9
9
  declare function useGridColumns<TRecord extends RecordProps>({ columns, records, form, }: UseGridColumnsArgs<TRecord>): GridColumn<TRecord>[];
10
10
  export default useGridColumns;
@@ -4,7 +4,6 @@ type UseGridDBRecordsArgs = {
4
4
  where?: DatabaseOptions["where"];
5
5
  order?: DatabaseOptions["order"];
6
6
  fieldMap?: DatabaseOptions["fieldMap"];
7
- onLoad?: DatabaseOptions["onLoad"];
8
7
  };
9
- declare function useGridDBRecords<TRecord extends RecordProps>({ path, where, order, fieldMap, onLoad, }: UseGridDBRecordsArgs): TRecord[];
8
+ declare function useGridDBRecords<TRecord extends RecordProps>({ path, where, order, fieldMap, }: UseGridDBRecordsArgs): TRecord[];
10
9
  export default useGridDBRecords;
@@ -1,9 +1,9 @@
1
1
  import { type RecordProps } from "../../../providers/data/DataProvider";
2
2
  type UseGridPreparedRecordsArgs<TRecord extends RecordProps> = {
3
3
  records: TRecord[];
4
- transformRecords?: (records: TRecord[]) => TRecord[] | Promise<TRecord[]>;
4
+ onLoad?: (records: TRecord[]) => TRecord[] | Promise<TRecord[]>;
5
5
  };
6
- declare function useGridPreparedRecords<TRecord extends RecordProps>({ records, transformRecords, }: UseGridPreparedRecordsArgs<TRecord>): {
6
+ declare function useGridPreparedRecords<TRecord extends RecordProps>({ records, onLoad, }: UseGridPreparedRecordsArgs<TRecord>): {
7
7
  preparedRecords: TRecord[];
8
8
  loading: boolean;
9
9
  };
@@ -1,11 +1,10 @@
1
1
  import { type RecordProps } from "../../../providers/data/DataProvider";
2
- import { type GridSelectionState } from "./types";
2
+ import { type GridSelectionConfig, type GridSelectionState } from "./types";
3
3
  type UseGridSelectionArgs<TRecord extends RecordProps> = {
4
- selectedKeys?: string[];
5
- defaultSelectedKeys?: string[];
6
- onSelectionChange?: (selection: GridSelectionState<TRecord>) => void;
4
+ selection?: false | "single" | "multiple" | GridSelectionConfig<TRecord>;
7
5
  };
8
- declare function useGridSelection<TRecord extends RecordProps>({ selectedKeys, defaultSelectedKeys, onSelectionChange, }: UseGridSelectionArgs<TRecord>): {
6
+ declare function useGridSelection<TRecord extends RecordProps>({ selection, }: UseGridSelectionArgs<TRecord>): {
7
+ mode: false | "multiple" | "single";
9
8
  activeSelectionKeys: string[];
10
9
  selectionState: GridSelectionState<TRecord>;
11
10
  handleSelectionChange: (nextSelection: GridSelectionState<TRecord>) => void;
@@ -1,14 +1,22 @@
1
1
  import React from "react";
2
2
  import { type OrderConfig } from "../../../libs/order";
3
3
  import { type RecordProps } from "../../../providers/data/DataProvider";
4
- import { type GridAction, type GridActions, type GridColumn, type GridRecordKey } from "./types";
4
+ import { type GridAction, type GridActions, type GridCellContext, type GridColumn, type GridFormat, type GridFormContext, type GridRecordKey } from "./types";
5
5
  export declare const isExternalUrl: (value: string) => boolean;
6
6
  export declare const sanitizeHashPart: (value: string) => string;
7
7
  export declare const getRecordKeyResolver: <TRecord extends RecordProps>(recordId: GridRecordKey<TRecord>) => (record: TRecord) => string;
8
+ export declare const formatGridValue: (format: GridFormat | undefined, value: unknown) => React.ReactNode;
9
+ export declare const renderGridCellValue: <TRecord extends RecordProps>(column: GridColumn<TRecord>, context: GridCellContext<TRecord>) => React.ReactNode;
8
10
  export declare const buildDisplayRecords: <TRecord extends RecordProps>(records: TRecord[], columns: GridColumn<TRecord>[], runAction: (actionKey: string, record?: TRecord) => void) => TRecord[];
9
- export declare const inferColumns: <TRecord extends RecordProps>(columns: GridColumn<TRecord>[] | undefined, records: TRecord[], form: React.ReactElement | ((ctx: any) => React.ReactNode) | undefined) => GridColumn<TRecord>[];
11
+ export declare const inferColumns: <TRecord extends RecordProps>(columns: GridColumn<TRecord>[] | undefined, records: TRecord[], form: React.ReactElement | ((ctx: GridFormContext<TRecord>) => React.ReactNode) | undefined) => GridColumn<TRecord>[];
10
12
  export declare const normalizeActions: <TRecord extends RecordProps>(actions: GridActions<TRecord> | undefined, hasForm: boolean) => Record<string, GridAction<TRecord>>;
11
13
  export declare const isActionVisible: <TRecord extends RecordProps>(action: GridAction<TRecord> | undefined, record?: TRecord) => boolean;
12
14
  export declare const isActionDisabled: <TRecord extends RecordProps>(action: GridAction<TRecord> | undefined, record?: TRecord) => boolean;
13
- export declare const getActionLabel: (actionKey: string, action: GridAction<any> | undefined) => string;
15
+ export declare const getActionLabel: (actionKey: string, action: {
16
+ label?: string;
17
+ } | undefined, labels?: {
18
+ add?: string;
19
+ edit?: string;
20
+ delete?: string;
21
+ }) => string;
14
22
  export declare const resolveInitialOrder: (sortable: boolean | OrderConfig | undefined) => OrderConfig | undefined;
@@ -64,7 +64,7 @@ export declare const setPrompt: (prompt: string, configVariables: {
64
64
  limit?: string;
65
65
  }, userInput: string) => string;
66
66
  export interface PromptVariables {
67
- [key: string]: any;
67
+ [key: string]: unknown;
68
68
  }
69
69
  export declare class Prompt {
70
70
  static getRoles(): string[];
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const ar: I18nDict;
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const de: I18nDict;
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const en: I18nDict;
@@ -0,0 +1,6 @@
1
+ export { en } from './en';
2
+ export { it } from './it';
3
+ export { de } from './de';
4
+ export { ru } from './ru';
5
+ export { zh } from './zh';
6
+ export { ar } from './ar';
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const it: I18nDict;
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const ru: I18nDict;
@@ -0,0 +1,2 @@
1
+ import type { I18nDict } from '../../I18n';
2
+ export declare const zh: I18nDict;
@@ -8,7 +8,7 @@ export declare const FIREBASE_BUCKET_SCRAPE = "scrape";
8
8
  export declare const SEP = "/";
9
9
  export declare const DOT = ".";
10
10
  export declare const DEFAULT_LANG = "it";
11
- export declare const consoleLog: (...args: any[]) => void;
11
+ export declare const consoleLog: (...args: unknown[]) => void;
12
12
  export interface PageRawBase {
13
13
  path: string;
14
14
  strategy: string;