@framework-m/desk 0.4.2
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.
- package/LICENSE +202 -0
- package/README.md +153 -0
- package/dist/auth.d.ts +11 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/authConfig.d.ts +42 -0
- package/dist/authConfig.d.ts.map +1 -0
- package/dist/components/CommandPalette.d.ts +49 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +2 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/feedback/AlertBanner.d.ts +8 -0
- package/dist/components/feedback/AlertBanner.d.ts.map +1 -0
- package/dist/components/feedback/ConfirmDialog.d.ts +13 -0
- package/dist/components/feedback/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/feedback/index.d.ts +5 -0
- package/dist/components/feedback/index.d.ts.map +1 -0
- package/dist/components/form/AutoForm.d.ts +61 -0
- package/dist/components/form/AutoForm.d.ts.map +1 -0
- package/dist/components/form/LinkWidget.d.ts +20 -0
- package/dist/components/form/LinkWidget.d.ts.map +1 -0
- package/dist/components/form/index.d.ts +10 -0
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/templates.d.ts +58 -0
- package/dist/components/form/templates.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +2 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/table/AutoTable.d.ts +47 -0
- package/dist/components/table/AutoTable.d.ts.map +1 -0
- package/dist/components/table/BulkActionsBar.d.ts +40 -0
- package/dist/components/table/BulkActionsBar.d.ts.map +1 -0
- package/dist/components/table/EditableCell.d.ts +54 -0
- package/dist/components/table/EditableCell.d.ts.map +1 -0
- package/dist/components/table/index.d.ts +12 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/workflow/StateBadge.d.ts +29 -0
- package/dist/components/workflow/StateBadge.d.ts.map +1 -0
- package/dist/components/workflow/WorkflowActions.d.ts +37 -0
- package/dist/components/workflow/WorkflowActions.d.ts.map +1 -0
- package/dist/components/workflow/index.d.ts +10 -0
- package/dist/components/workflow/index.d.ts.map +1 -0
- package/dist/config/i18n.d.ts +3 -0
- package/dist/config/i18n.d.ts.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/registry.d.ts +75 -0
- package/dist/config/registry.d.ts.map +1 -0
- package/dist/config/types.d.ts +130 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/useConfig.d.ts +18 -0
- package/dist/config/useConfig.d.ts.map +1 -0
- package/dist/constants.d.ts +35 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/data.d.ts +6 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +21 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/types.d.ts +113 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/useBulkActions.d.ts +82 -0
- package/dist/hooks/useBulkActions.d.ts.map +1 -0
- package/dist/hooks/useCommandPalette.d.ts +33 -0
- package/dist/hooks/useCommandPalette.d.ts.map +1 -0
- package/dist/hooks/useDocTypeMeta.d.ts +48 -0
- package/dist/hooks/useDocTypeMeta.d.ts.map +1 -0
- package/dist/hooks/useDocTypes.d.ts +66 -0
- package/dist/hooks/useDocTypes.d.ts.map +1 -0
- package/dist/hooks/useInlineEdit.d.ts +64 -0
- package/dist/hooks/useInlineEdit.d.ts.map +1 -0
- package/dist/hooks/useTranslation.d.ts +36 -0
- package/dist/hooks/useTranslation.d.ts.map +1 -0
- package/dist/hooks/useUIMeta.d.ts +111 -0
- package/dist/hooks/useUIMeta.d.ts.map +1 -0
- package/dist/hooks/useWorkflowActions.d.ts +75 -0
- package/dist/hooks/useWorkflowActions.d.ts.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5302 -0
- package/dist/index.js.map +1 -0
- package/dist/live.d.ts +21 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/pages/FormView.d.ts +40 -0
- package/dist/pages/FormView.d.ts.map +1 -0
- package/dist/pages/ListView.d.ts +39 -0
- package/dist/pages/ListView.d.ts.map +1 -0
- package/dist/pages/LoginPage.d.ts +32 -0
- package/dist/pages/LoginPage.d.ts.map +1 -0
- package/dist/plugins/Slot.d.ts +27 -0
- package/dist/plugins/Slot.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +14 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/registry.d.ts +104 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/types.d.ts +130 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/views/CalendarView.d.ts +14 -0
- package/dist/views/CalendarView.d.ts.map +1 -0
- package/dist/views/GanttView.d.ts +14 -0
- package/dist/views/GanttView.d.ts.map +1 -0
- package/dist/views/KanbanView.d.ts +16 -0
- package/dist/views/KanbanView.d.ts.map +1 -0
- package/dist/views/TreeView.d.ts +15 -0
- package/dist/views/TreeView.d.ts.map +1 -0
- package/dist/views/index.d.ts +17 -0
- package/dist/views/index.d.ts.map +1 -0
- package/dist/views/registry.d.ts +32 -0
- package/dist/views/registry.d.ts.map +1 -0
- package/dist/views/types.d.ts +97 -0
- package/dist/views/types.d.ts.map +1 -0
- package/dist/workspace/WorkspaceSection.d.ts +16 -0
- package/dist/workspace/WorkspaceSection.d.ts.map +1 -0
- package/dist/workspace/index.d.ts +12 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/types.d.ts +95 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/useWorkspaces.d.ts +38 -0
- package/dist/workspace/useWorkspaces.d.ts.map +1 -0
- package/package.json +89 -0
package/dist/data.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAMV,YAAY,EASb,MAAM,iBAAiB,CAAC;AA8MzB;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAsLpC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Hooks for Framework M
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all hooks for convenient importing.
|
|
5
|
+
*/
|
|
6
|
+
export { useDocTypeMeta, usePrefetchDocTypeMeta } from './useDocTypeMeta';
|
|
7
|
+
export type { UseDocTypeMetaResult } from './useDocTypeMeta';
|
|
8
|
+
export { useDocTypes } from './useDocTypes';
|
|
9
|
+
export { useWorkflowActions } from './useWorkflowActions';
|
|
10
|
+
export type { UseWorkflowActionsResult, WorkflowAction, WorkflowState } from './useWorkflowActions';
|
|
11
|
+
export { useInlineEdit } from './useInlineEdit';
|
|
12
|
+
export type { UseInlineEditOptions, UseInlineEditReturn, EditingCell } from './useInlineEdit';
|
|
13
|
+
export { useBulkActions } from './useBulkActions';
|
|
14
|
+
export type { UseBulkActionsOptions, UseBulkActionsReturn, BulkItem } from './useBulkActions';
|
|
15
|
+
export { useCommandPalette } from './useCommandPalette';
|
|
16
|
+
export type { UseCommandPaletteReturn } from './useCommandPalette';
|
|
17
|
+
export { useTranslation } from './useTranslation';
|
|
18
|
+
export { useUIMeta } from './useUIMeta';
|
|
19
|
+
export type { UIMeta, FormMeta, FormSection, FormTab, ListMeta, ListColumn, KanbanConfig, TreeConfig, CalendarConfig, AdditionalViews, UseUIMetaResult, } from './useUIMeta';
|
|
20
|
+
export type { DocTypeMeta, DocTypeSchema, DocTypePermissions, LayoutConfig, WorkflowConfig, FieldSchema, JSONSchemaProperty, LayoutSection, WorkflowState as WorkflowStateConfig, WorkflowTransition, } from './types';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,MAAM,EACN,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,aAAa,IAAI,mBAAmB,EACpC,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocType Metadata Types
|
|
3
|
+
*
|
|
4
|
+
* Types for metadata returned from /api/meta/{doctype}
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Field definition from DocType schema
|
|
8
|
+
*/
|
|
9
|
+
export interface FieldSchema {
|
|
10
|
+
name: string;
|
|
11
|
+
fieldtype: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
required?: boolean;
|
|
14
|
+
read_only?: boolean;
|
|
15
|
+
hidden?: boolean;
|
|
16
|
+
default?: unknown;
|
|
17
|
+
options?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* JSON Schema representation of a DocType
|
|
22
|
+
*/
|
|
23
|
+
export interface DocTypeSchema {
|
|
24
|
+
$schema?: string;
|
|
25
|
+
type: "object";
|
|
26
|
+
title: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
properties: Record<string, JSONSchemaProperty>;
|
|
29
|
+
required?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* JSON Schema property definition
|
|
33
|
+
*/
|
|
34
|
+
export interface JSONSchemaProperty {
|
|
35
|
+
type: string | string[];
|
|
36
|
+
title?: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
enum?: string[];
|
|
39
|
+
format?: string;
|
|
40
|
+
default?: unknown;
|
|
41
|
+
"x-fieldtype"?: string;
|
|
42
|
+
"x-options"?: string;
|
|
43
|
+
"x-read-only"?: boolean;
|
|
44
|
+
"x-hidden"?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Layout configuration for form rendering
|
|
48
|
+
*/
|
|
49
|
+
export interface LayoutConfig {
|
|
50
|
+
sections?: LayoutSection[];
|
|
51
|
+
columns?: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Section within a form layout
|
|
55
|
+
*/
|
|
56
|
+
export interface LayoutSection {
|
|
57
|
+
label?: string;
|
|
58
|
+
collapsible?: boolean;
|
|
59
|
+
collapsed?: boolean;
|
|
60
|
+
fields: string[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Permissions for the current user on this DocType
|
|
64
|
+
*/
|
|
65
|
+
export interface DocTypePermissions {
|
|
66
|
+
read: boolean;
|
|
67
|
+
write: boolean;
|
|
68
|
+
create: boolean;
|
|
69
|
+
delete: boolean;
|
|
70
|
+
submit?: boolean;
|
|
71
|
+
cancel?: boolean;
|
|
72
|
+
amend?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Workflow configuration if DocType has workflow
|
|
76
|
+
*/
|
|
77
|
+
export interface WorkflowConfig {
|
|
78
|
+
name: string;
|
|
79
|
+
states: WorkflowState[];
|
|
80
|
+
transitions: WorkflowTransition[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Workflow state definition
|
|
84
|
+
*/
|
|
85
|
+
export interface WorkflowState {
|
|
86
|
+
name: string;
|
|
87
|
+
doc_status?: number;
|
|
88
|
+
allow_edit?: string[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Workflow transition definition
|
|
92
|
+
*/
|
|
93
|
+
export interface WorkflowTransition {
|
|
94
|
+
action: string;
|
|
95
|
+
from_state: string;
|
|
96
|
+
to_state: string;
|
|
97
|
+
allowed_roles?: string[];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Complete metadata for a DocType
|
|
101
|
+
*/
|
|
102
|
+
export interface DocTypeMeta {
|
|
103
|
+
doctype: string;
|
|
104
|
+
schema: DocTypeSchema;
|
|
105
|
+
layout?: LayoutConfig;
|
|
106
|
+
permissions: DocTypePermissions;
|
|
107
|
+
workflow?: WorkflowConfig;
|
|
108
|
+
is_submittable?: boolean;
|
|
109
|
+
is_child_table?: boolean;
|
|
110
|
+
title_field?: string;
|
|
111
|
+
search_fields?: string[];
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useBulkActions Hook
|
|
3
|
+
*
|
|
4
|
+
* Hook for managing bulk operations on table rows.
|
|
5
|
+
* Per checklist 5.3: Bulk Operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Row item type
|
|
9
|
+
*/
|
|
10
|
+
export interface BulkItem {
|
|
11
|
+
id: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Hook options
|
|
16
|
+
*/
|
|
17
|
+
export interface UseBulkActionsOptions<T extends BulkItem = BulkItem> {
|
|
18
|
+
/** Resource/DocType name */
|
|
19
|
+
resource: string;
|
|
20
|
+
/** All available items */
|
|
21
|
+
items: T[];
|
|
22
|
+
/** Callback after successful bulk action */
|
|
23
|
+
onSuccess?: () => void;
|
|
24
|
+
/** Callback on error */
|
|
25
|
+
onError?: (error: Error) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Hook return type
|
|
29
|
+
*/
|
|
30
|
+
export interface UseBulkActionsReturn<T extends BulkItem = BulkItem> {
|
|
31
|
+
/** Selected row IDs */
|
|
32
|
+
selectedIds: Set<string>;
|
|
33
|
+
/** Selected items */
|
|
34
|
+
selectedItems: T[];
|
|
35
|
+
/** Number of selected items */
|
|
36
|
+
selectedCount: number;
|
|
37
|
+
/** Whether all items are selected */
|
|
38
|
+
isAllSelected: boolean;
|
|
39
|
+
/** Whether some items are selected */
|
|
40
|
+
isSomeSelected: boolean;
|
|
41
|
+
/** Select a single row */
|
|
42
|
+
selectRow: (id: string) => void;
|
|
43
|
+
/** Deselect a single row */
|
|
44
|
+
deselectRow: (id: string) => void;
|
|
45
|
+
/** Toggle a single row */
|
|
46
|
+
toggleRow: (id: string) => void;
|
|
47
|
+
/** Select all rows */
|
|
48
|
+
selectAll: () => void;
|
|
49
|
+
/** Deselect all rows */
|
|
50
|
+
deselectAll: () => void;
|
|
51
|
+
/** Toggle all rows */
|
|
52
|
+
toggleAll: () => void;
|
|
53
|
+
/** Check if a row is selected */
|
|
54
|
+
isSelected: (id: string) => boolean;
|
|
55
|
+
/** Bulk delete selected rows */
|
|
56
|
+
bulkDelete: () => Promise<void>;
|
|
57
|
+
/** Bulk update selected rows */
|
|
58
|
+
bulkUpdate: (values: Record<string, unknown>) => Promise<void>;
|
|
59
|
+
/** Export selected rows as JSON */
|
|
60
|
+
exportAsJson: () => void;
|
|
61
|
+
/** Export selected rows as CSV */
|
|
62
|
+
exportAsCsv: (fields: string[]) => void;
|
|
63
|
+
/** Whether bulk action is in progress */
|
|
64
|
+
isLoading: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* useBulkActions Hook
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* const {
|
|
72
|
+
* selectedIds, toggleRow, toggleAll, isAllSelected,
|
|
73
|
+
* bulkDelete, bulkUpdate, exportAsCsv
|
|
74
|
+
* } = useBulkActions({
|
|
75
|
+
* resource: "Customer",
|
|
76
|
+
* items: data,
|
|
77
|
+
* onSuccess: () => refetch(),
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function useBulkActions<T extends BulkItem = BulkItem>({ resource, items, onSuccess, onError, }: UseBulkActionsOptions<T>): UseBulkActionsReturn<T>;
|
|
82
|
+
//# sourceMappingURL=useBulkActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBulkActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useBulkActions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAClE,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACjE,uBAAuB;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,qBAAqB;IACrB,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,sCAAsC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,0BAA0B;IAC1B,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4BAA4B;IAC5B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,0BAA0B;IAC1B,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,sBAAsB;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,wBAAwB;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,sBAAsB;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,iCAAiC;IACjC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,gCAAgC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gCAAgC;IAChC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,mCAAmC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,kCAAkC;IAClC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,EAC5D,QAAQ,EACR,KAAK,EACL,SAAS,EACT,OAAO,GACR,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAwKpD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useCommandPalette Hook
|
|
3
|
+
*
|
|
4
|
+
* Hook for managing global command palette state and keyboard shortcut.
|
|
5
|
+
* Per checklist 6.5: Global Command Palette.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Hook return type
|
|
9
|
+
*/
|
|
10
|
+
export interface UseCommandPaletteReturn {
|
|
11
|
+
/** Whether palette is open */
|
|
12
|
+
isOpen: boolean;
|
|
13
|
+
/** Open the palette */
|
|
14
|
+
open: () => void;
|
|
15
|
+
/** Close the palette */
|
|
16
|
+
close: () => void;
|
|
17
|
+
/** Toggle the palette */
|
|
18
|
+
toggle: () => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* useCommandPalette Hook
|
|
22
|
+
*
|
|
23
|
+
* Listens for Ctrl+K (or Cmd+K on Mac) to toggle command palette.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const { isOpen, close } = useCommandPalette();
|
|
28
|
+
*
|
|
29
|
+
* return <CommandPalette open={isOpen} onClose={close} />;
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function useCommandPalette(): UseCommandPaletteReturn;
|
|
33
|
+
//# sourceMappingURL=useCommandPalette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCommandPalette.d.ts","sourceRoot":"","sources":["../../src/hooks/useCommandPalette.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,8BAA8B;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wBAAwB;IACxB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,yBAAyB;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CA2B3D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { DocTypeMeta, DocTypeSchema, DocTypePermissions, LayoutConfig, WorkflowConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Return type for useDocTypeMeta hook
|
|
4
|
+
*/
|
|
5
|
+
export interface UseDocTypeMetaResult {
|
|
6
|
+
/** JSON Schema for the DocType */
|
|
7
|
+
schema: DocTypeSchema | undefined;
|
|
8
|
+
/** Layout configuration for form rendering */
|
|
9
|
+
layout: LayoutConfig | undefined;
|
|
10
|
+
/** Permissions for current user */
|
|
11
|
+
permissions: DocTypePermissions | undefined;
|
|
12
|
+
/** Workflow configuration if applicable */
|
|
13
|
+
workflow: WorkflowConfig | undefined;
|
|
14
|
+
/** Full metadata object */
|
|
15
|
+
meta: DocTypeMeta | undefined;
|
|
16
|
+
/** Loading state */
|
|
17
|
+
isLoading: boolean;
|
|
18
|
+
/** Error if fetch failed */
|
|
19
|
+
error: Error | null;
|
|
20
|
+
/** Refetch function */
|
|
21
|
+
refetch: () => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Hook to fetch and cache DocType metadata
|
|
25
|
+
*
|
|
26
|
+
* @param doctype - Name of the DocType to fetch metadata for
|
|
27
|
+
* @returns Metadata including schema, layout, permissions, and workflow
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* const { schema, layout, permissions, workflow } = useDocTypeMeta("Todo");
|
|
32
|
+
*
|
|
33
|
+
* if (isLoading) return <Spinner />;
|
|
34
|
+
* if (!permissions?.read) return <AccessDenied />;
|
|
35
|
+
*
|
|
36
|
+
* return <AutoForm schema={schema} layout={layout} />;
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function useDocTypeMeta(doctype: string): UseDocTypeMetaResult;
|
|
40
|
+
/**
|
|
41
|
+
* Hook to prefetch DocType metadata
|
|
42
|
+
*
|
|
43
|
+
* Useful for preloading metadata before navigation
|
|
44
|
+
*/
|
|
45
|
+
export declare function usePrefetchDocTypeMeta(): {
|
|
46
|
+
prefetch: (doctype: string) => void;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=useDocTypeMeta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocTypeMeta.d.ts","sourceRoot":"","sources":["../../src/hooks/useDocTypeMeta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AA8BjB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,8CAA8C;IAC9C,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,mCAAmC;IACnC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC5C,2CAA2C;IAC3C,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,2BAA2B;IAC3B,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CA0BpE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB;wBASd,MAAM;EAQ7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useDocTypes Hook
|
|
3
|
+
*
|
|
4
|
+
* Fetches DocTypes from the backend API and converts them to Refine resources.
|
|
5
|
+
* Used to dynamically populate the sidebar with available DocTypes.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* DocType metadata from API
|
|
9
|
+
*/
|
|
10
|
+
export interface DocTypeMeta {
|
|
11
|
+
name: string;
|
|
12
|
+
module: string;
|
|
13
|
+
label: string;
|
|
14
|
+
is_child_table: boolean;
|
|
15
|
+
api_resource: boolean;
|
|
16
|
+
show_in_desk: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Refine resource configuration
|
|
20
|
+
*/
|
|
21
|
+
export interface RefineResource {
|
|
22
|
+
name: string;
|
|
23
|
+
list?: string;
|
|
24
|
+
create?: string;
|
|
25
|
+
edit?: string;
|
|
26
|
+
show?: string;
|
|
27
|
+
meta?: {
|
|
28
|
+
label?: string;
|
|
29
|
+
canDelete?: boolean;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Hook return type
|
|
34
|
+
*/
|
|
35
|
+
export interface UseDocTypesResult {
|
|
36
|
+
/** Array of DocType metadata */
|
|
37
|
+
doctypes: DocTypeMeta[];
|
|
38
|
+
/** Array of Refine resources for dynamic routing */
|
|
39
|
+
resources: RefineResource[];
|
|
40
|
+
/** Loading state */
|
|
41
|
+
isLoading: boolean;
|
|
42
|
+
/** Error state */
|
|
43
|
+
error: Error | null;
|
|
44
|
+
/** Refetch function */
|
|
45
|
+
refetch: () => Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fetch DocTypes from Backend API
|
|
49
|
+
*
|
|
50
|
+
* Fetches all registered DocTypes from /api/meta/doctypes and converts
|
|
51
|
+
* them to Refine resource format for use in the application.
|
|
52
|
+
*
|
|
53
|
+
* @returns Object containing doctypes, resources, loading state, and error
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* const { resources, isLoading, error } = useDocTypes();
|
|
58
|
+
*
|
|
59
|
+
* if (isLoading) return <Spinner />;
|
|
60
|
+
*
|
|
61
|
+
* return <Refine resources={resources}>...</Refine>;
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function useDocTypes(): UseDocTypesResult;
|
|
65
|
+
export default useDocTypes;
|
|
66
|
+
//# sourceMappingURL=useDocTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocTypes.d.ts","sourceRoot":"","sources":["../../src/hooks/useDocTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oDAAoD;IACpD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CAoD/C;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useInlineEdit Hook
|
|
3
|
+
*
|
|
4
|
+
* Hook for managing inline edit state in tables.
|
|
5
|
+
* Per checklist 5.2: Inline Editing.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Cell being edited
|
|
9
|
+
*/
|
|
10
|
+
export interface EditingCell {
|
|
11
|
+
rowId: string;
|
|
12
|
+
field: string;
|
|
13
|
+
originalValue: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Hook options
|
|
17
|
+
*/
|
|
18
|
+
export interface UseInlineEditOptions {
|
|
19
|
+
/** Resource/DocType name */
|
|
20
|
+
resource: string;
|
|
21
|
+
/** Callback after successful save */
|
|
22
|
+
onSaveSuccess?: () => void;
|
|
23
|
+
/** Callback on error */
|
|
24
|
+
onError?: (error: Error) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hook return type
|
|
28
|
+
*/
|
|
29
|
+
export interface UseInlineEditReturn {
|
|
30
|
+
/** Currently editing cell */
|
|
31
|
+
editingCell: EditingCell | null;
|
|
32
|
+
/** Start editing a cell */
|
|
33
|
+
startEdit: (rowId: string, field: string, value: unknown) => void;
|
|
34
|
+
/** Cancel current edit */
|
|
35
|
+
cancelEdit: () => void;
|
|
36
|
+
/** Save current edit */
|
|
37
|
+
saveEdit: (value: unknown) => Promise<void>;
|
|
38
|
+
/** Check if a cell is being edited */
|
|
39
|
+
isEditing: (rowId: string, field: string) => boolean;
|
|
40
|
+
/** Whether save is in progress */
|
|
41
|
+
isSaving: boolean;
|
|
42
|
+
/** Current error */
|
|
43
|
+
error: string | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* useInlineEdit Hook
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* const { editingCell, startEdit, saveEdit, isEditing, isSaving } = useInlineEdit({
|
|
51
|
+
* resource: "Customer",
|
|
52
|
+
* onSaveSuccess: () => refetch(),
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* // In table cell
|
|
56
|
+
* {isEditing(row.id, "name") ? (
|
|
57
|
+
* <input onBlur={(e) => saveEdit(e.target.value)} />
|
|
58
|
+
* ) : (
|
|
59
|
+
* <div onClick={() => startEdit(row.id, "name", row.name)}>{row.name}</div>
|
|
60
|
+
* )}
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function useInlineEdit({ resource, onSaveSuccess, onError, }: UseInlineEditOptions): UseInlineEditReturn;
|
|
64
|
+
//# sourceMappingURL=useInlineEdit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInlineEdit.d.ts","sourceRoot":"","sources":["../../src/hooks/useInlineEdit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,2BAA2B;IAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,0BAA0B;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,wBAAwB;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sCAAsC;IACtC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAO,GACR,EAAE,oBAAoB,GAAG,mBAAmB,CAiE5C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return type for useTranslation hook
|
|
3
|
+
*/
|
|
4
|
+
export interface UseTranslationResult {
|
|
5
|
+
/** Translate a key with optional interpolation values */
|
|
6
|
+
t: (key: string, options?: Record<string, unknown>) => string;
|
|
7
|
+
/** Current language code (e.g., "en", "hi", "ta") */
|
|
8
|
+
language: string;
|
|
9
|
+
/** Change the current language */
|
|
10
|
+
changeLanguage: (lng: string) => Promise<void>;
|
|
11
|
+
/** Available languages */
|
|
12
|
+
languages: readonly string[];
|
|
13
|
+
/** Whether translations are ready/loaded */
|
|
14
|
+
ready: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Custom hook wrapper for react-i18next's useTranslation.
|
|
18
|
+
*
|
|
19
|
+
* Provides translation functions with app-specific defaults and utilities.
|
|
20
|
+
*
|
|
21
|
+
* @param namespace - Translation namespace (default: "common")
|
|
22
|
+
* @returns Translation functions and state
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* const { t } = useTranslation();
|
|
27
|
+
*
|
|
28
|
+
* // Basic translation
|
|
29
|
+
* <h1>{t("Welcome")}</h1>
|
|
30
|
+
*
|
|
31
|
+
* // With interpolation
|
|
32
|
+
* <p>{t("Hello, {{name}}!", { name: "John" })}</p>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function useTranslation(namespace?: string): UseTranslationResult;
|
|
36
|
+
//# sourceMappingURL=useTranslation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranslation.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC9D,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,0BAA0B;IAC1B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,4CAA4C;IAC5C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,SAAS,SAAW,GAAG,oBAAoB,CAUzE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UIMeta — Unified UI Metadata hook for Framework M.
|
|
3
|
+
*
|
|
4
|
+
* Fetches and caches the UIMeta for a DocType from the backend API.
|
|
5
|
+
* UIMeta is a single object that encapsulates form layout, list columns,
|
|
6
|
+
* and additional view configurations (Kanban, Tree, Calendar) — replacing
|
|
7
|
+
* the old FormMeta/ListMeta split.
|
|
8
|
+
*
|
|
9
|
+
* Defined in line with Phase 14 (ADR: Unified UIMeta Structure, Phase 14 §6.1):
|
|
10
|
+
* - `form`: Layout sections and tabs for the form view.
|
|
11
|
+
* - `list`: Columns, sorting, and row-level styling for the list view.
|
|
12
|
+
* - `additional_views`: Kanban, Tree, Calendar configurations.
|
|
13
|
+
* - Plugin adapters can extend UIMeta with custom namespaces (e.g., WMSMeta).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const { uiMeta, isLoading } = useUIMeta("SalesInvoice");
|
|
18
|
+
* if (uiMeta?.list?.columns) { ... }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
/** A single form section with a label and ordered field names. */
|
|
22
|
+
export interface FormSection {
|
|
23
|
+
label: string;
|
|
24
|
+
fields: string[];
|
|
25
|
+
collapsible?: boolean;
|
|
26
|
+
columns?: 1 | 2 | 3;
|
|
27
|
+
}
|
|
28
|
+
/** A tab containing multiple form sections. */
|
|
29
|
+
export interface FormTab {
|
|
30
|
+
label: string;
|
|
31
|
+
sections: FormSection[];
|
|
32
|
+
}
|
|
33
|
+
/** Form view configuration: tabs and/or flat sections. */
|
|
34
|
+
export interface FormMeta {
|
|
35
|
+
tabs?: FormTab[];
|
|
36
|
+
sections?: FormSection[];
|
|
37
|
+
}
|
|
38
|
+
/** A single column in the list view. */
|
|
39
|
+
export interface ListColumn {
|
|
40
|
+
field: string;
|
|
41
|
+
label?: string;
|
|
42
|
+
width?: number | string;
|
|
43
|
+
sortable?: boolean;
|
|
44
|
+
visible?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** List view configuration: columns, default sort, row styling. */
|
|
47
|
+
export interface ListMeta {
|
|
48
|
+
columns: ListColumn[];
|
|
49
|
+
defaultSort?: {
|
|
50
|
+
field: string;
|
|
51
|
+
direction: "asc" | "desc";
|
|
52
|
+
};
|
|
53
|
+
/** JMESPath expression for row color (e.g. "status == 'Overdue'") */
|
|
54
|
+
rowColorExpr?: string;
|
|
55
|
+
rowColorValue?: string;
|
|
56
|
+
}
|
|
57
|
+
/** Kanban column definition. */
|
|
58
|
+
export interface KanbanConfig {
|
|
59
|
+
groupByField: string;
|
|
60
|
+
cardTitleField: string;
|
|
61
|
+
cardSubtitleField?: string;
|
|
62
|
+
swimlaneField?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Tree view definition. */
|
|
65
|
+
export interface TreeConfig {
|
|
66
|
+
parentField: string;
|
|
67
|
+
labelField: string;
|
|
68
|
+
orderField?: string;
|
|
69
|
+
}
|
|
70
|
+
/** Calendar view definition. */
|
|
71
|
+
export interface CalendarConfig {
|
|
72
|
+
startField: string;
|
|
73
|
+
endField?: string;
|
|
74
|
+
titleField: string;
|
|
75
|
+
colorField?: string;
|
|
76
|
+
}
|
|
77
|
+
/** Additional (non-standard) views registered by plugins. */
|
|
78
|
+
export interface AdditionalViews {
|
|
79
|
+
kanban?: KanbanConfig;
|
|
80
|
+
tree?: TreeConfig;
|
|
81
|
+
calendar?: CalendarConfig;
|
|
82
|
+
/** Custom plugin-registered view namespaces (e.g. WMSMeta, MobileMeta) */
|
|
83
|
+
[key: string]: unknown;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Unified UI Metadata structure.
|
|
87
|
+
*
|
|
88
|
+
* A single object that all frontend views read from, replacing FormMeta/ListMeta.
|
|
89
|
+
* The `/api/meta/:doctype` endpoint returns this as `ui_meta`.
|
|
90
|
+
*/
|
|
91
|
+
export interface UIMeta {
|
|
92
|
+
doctype: string;
|
|
93
|
+
form?: FormMeta;
|
|
94
|
+
list?: ListMeta;
|
|
95
|
+
additional_views?: AdditionalViews;
|
|
96
|
+
}
|
|
97
|
+
export interface UseUIMetaResult {
|
|
98
|
+
uiMeta: UIMeta | null;
|
|
99
|
+
isLoading: boolean;
|
|
100
|
+
error: string | null;
|
|
101
|
+
refetch: () => void;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Hook to fetch and cache UIMeta for a given DocType.
|
|
105
|
+
*
|
|
106
|
+
* Reads from `/api/meta/:doctype` (Backend Meta endpoint).
|
|
107
|
+
* Falls back to a minimal UIMeta on error.
|
|
108
|
+
* Plugin adapters may extend the `additional_views` namespace.
|
|
109
|
+
*/
|
|
110
|
+
export declare function useUIMeta(doctype: string, baseUrl?: string, uiContext?: string): UseUIMetaResult;
|
|
111
|
+
//# sourceMappingURL=useUIMeta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUIMeta.d.ts","sourceRoot":"","sources":["../../src/hooks/useUIMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,0DAA0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;IAC3D,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,0EAA0E;IAC1E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,gBAAgB,CAAC,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAgBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,eAAe,CA8CjB"}
|