@attabot/complaint-app 1.0.3 → 1.0.4
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/README.md +159 -159
- package/dist/complaint-app.js +6130 -6130
- package/dist/complaint-app.umd.js +12 -12
- package/dist/index.d.ts +214 -211
- package/dist/style.css +1 -1
- package/package.json +65 -64
package/dist/index.d.ts
CHANGED
|
@@ -1,211 +1,214 @@
|
|
|
1
|
-
import type { ReactNode, CSSProperties, ChangeEvent, KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
-
import type { EnhancedStore } from '@reduxjs/toolkit';
|
|
3
|
-
|
|
4
|
-
export interface SystemItem {
|
|
5
|
-
id?: string | number;
|
|
6
|
-
title?: string;
|
|
7
|
-
name?: string;
|
|
8
|
-
status?: 'active' | 'inactive' | string;
|
|
9
|
-
statusLabel?: string;
|
|
10
|
-
description?: string;
|
|
11
|
-
descriptionHref?: string;
|
|
12
|
-
departments?: number;
|
|
13
|
-
workflows?: number;
|
|
14
|
-
fields?: number;
|
|
15
|
-
formsFilled?: number;
|
|
16
|
-
updatedOn?: string;
|
|
17
|
-
titleAsLink?: boolean;
|
|
18
|
-
[key: string]: unknown;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface ComplaintAppProps {
|
|
22
|
-
apiUrl?: string;
|
|
23
|
-
authToken?: string;
|
|
24
|
-
/** Optional isolated Redux store. When omitted, the package reuses a parent Provider, or creates its standalone store if none exists. */
|
|
25
|
-
store?: EnhancedStore;
|
|
26
|
-
basePath?: string;
|
|
27
|
-
/** Static theme file `{ light, dark }` or flat token overrides. */
|
|
28
|
-
theme?: ThemeFile | ThemeTokens;
|
|
29
|
-
/** Parent-controlled dark mode. */
|
|
30
|
-
darkMode?: boolean;
|
|
31
|
-
title?: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
systems?: SystemItem[];
|
|
34
|
-
systemsEndpoint?: string;
|
|
35
|
-
useDemoData?: boolean;
|
|
36
|
-
createLabel?: string;
|
|
37
|
-
onCreateForm?: () => void;
|
|
38
|
-
onConfigure?: (system: SystemItem) => void;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
export declare const
|
|
71
|
-
export declare const
|
|
72
|
-
export declare
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
export
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
export declare
|
|
96
|
-
export declare function
|
|
97
|
-
export declare
|
|
98
|
-
export declare const
|
|
99
|
-
export declare
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
export declare const
|
|
127
|
-
export declare const
|
|
128
|
-
export declare const
|
|
129
|
-
export declare const
|
|
130
|
-
export declare const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
export declare const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
export declare const
|
|
137
|
-
export declare const
|
|
138
|
-
export declare const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
|
|
1
|
+
import type { ReactNode, CSSProperties, ChangeEvent, KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
+
import type { EnhancedStore } from '@reduxjs/toolkit';
|
|
3
|
+
|
|
4
|
+
export interface SystemItem {
|
|
5
|
+
id?: string | number;
|
|
6
|
+
title?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
status?: 'active' | 'inactive' | string;
|
|
9
|
+
statusLabel?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
descriptionHref?: string;
|
|
12
|
+
departments?: number;
|
|
13
|
+
workflows?: number;
|
|
14
|
+
fields?: number;
|
|
15
|
+
formsFilled?: number;
|
|
16
|
+
updatedOn?: string;
|
|
17
|
+
titleAsLink?: boolean;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ComplaintAppProps {
|
|
22
|
+
apiUrl?: string;
|
|
23
|
+
authToken?: string;
|
|
24
|
+
/** Optional isolated Redux store. When omitted, the package reuses a parent Provider, or creates its standalone store if none exists. */
|
|
25
|
+
store?: EnhancedStore;
|
|
26
|
+
basePath?: string;
|
|
27
|
+
/** Static theme file `{ light, dark }` or flat token overrides. */
|
|
28
|
+
theme?: ThemeFile | ThemeTokens;
|
|
29
|
+
/** Parent-controlled dark mode. */
|
|
30
|
+
darkMode?: boolean;
|
|
31
|
+
title?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
systems?: SystemItem[];
|
|
34
|
+
systemsEndpoint?: string;
|
|
35
|
+
useDemoData?: boolean;
|
|
36
|
+
createLabel?: string;
|
|
37
|
+
onCreateForm?: () => void;
|
|
38
|
+
onConfigure?: (system: SystemItem) => void;
|
|
39
|
+
onOpen?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
40
|
+
onTitleClick?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
41
|
+
onDescriptionClick?: (payload: {
|
|
42
|
+
id?: string | number;
|
|
43
|
+
title?: string;
|
|
44
|
+
descriptionHref?: string;
|
|
45
|
+
}) => void;
|
|
46
|
+
onSearch?: (query: string) => void;
|
|
47
|
+
onPublish?: (payload: { systemId?: string; step?: number }) => void;
|
|
48
|
+
onStepChange?: (payload: {
|
|
49
|
+
systemId?: string;
|
|
50
|
+
step: number;
|
|
51
|
+
substep?: number;
|
|
52
|
+
}) => void;
|
|
53
|
+
children?: ReactNode;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface ThemeTokens {
|
|
57
|
+
mode?: 'light' | 'dark';
|
|
58
|
+
colors?: Record<string, string>;
|
|
59
|
+
radii?: Record<string, string>;
|
|
60
|
+
spacing?: Record<string, string>;
|
|
61
|
+
typography?: Record<string, string>;
|
|
62
|
+
shadow?: Record<string, string>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface ThemeFile {
|
|
66
|
+
light?: ThemeTokens;
|
|
67
|
+
dark?: ThemeTokens;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export declare const lightTheme: ThemeTokens;
|
|
71
|
+
export declare const darkTheme: ThemeTokens;
|
|
72
|
+
export declare const defaultThemeFile: ThemeFile;
|
|
73
|
+
export declare function ThemeProvider(props: {
|
|
74
|
+
theme?: ThemeFile | ThemeTokens;
|
|
75
|
+
darkMode?: boolean;
|
|
76
|
+
children: ReactNode;
|
|
77
|
+
}): JSX.Element;
|
|
78
|
+
export declare function useTheme(): {
|
|
79
|
+
darkMode: boolean;
|
|
80
|
+
mode: 'light' | 'dark';
|
|
81
|
+
theme: ThemeTokens;
|
|
82
|
+
themeFile: ThemeFile;
|
|
83
|
+
cssVars: Record<string, string>;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export interface ApiProviderProps {
|
|
87
|
+
children: ReactNode;
|
|
88
|
+
apiUrl?: string;
|
|
89
|
+
authToken?: string | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export declare const ComplaintApp: (props: ComplaintAppProps) => JSX.Element;
|
|
93
|
+
export default ComplaintApp;
|
|
94
|
+
|
|
95
|
+
export declare const ApiProvider: (props: ApiProviderProps) => JSX.Element;
|
|
96
|
+
export declare function setBaseUrl(url: string): void;
|
|
97
|
+
export declare function setAuthToken(token: string | null): void;
|
|
98
|
+
export declare const api: import('axios').AxiosInstance;
|
|
99
|
+
export declare const store: EnhancedStore;
|
|
100
|
+
export declare function createComplaintStore(preloadedState?: unknown): EnhancedStore;
|
|
101
|
+
|
|
102
|
+
export interface ComplaintResourceState<T = Record<string, unknown>> {
|
|
103
|
+
data: T[];
|
|
104
|
+
selected: T | null;
|
|
105
|
+
pagination: Record<string, unknown> | null;
|
|
106
|
+
isLoading: boolean;
|
|
107
|
+
isMutating: boolean;
|
|
108
|
+
error: string | null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface ComplaintReduxState {
|
|
112
|
+
complaintAppComplaint: {
|
|
113
|
+
types: ComplaintResourceState;
|
|
114
|
+
departments: ComplaintResourceState;
|
|
115
|
+
priorities: ComplaintResourceState;
|
|
116
|
+
workflows: ComplaintResourceState;
|
|
117
|
+
statuses: ComplaintResourceState;
|
|
118
|
+
departmentTree: Record<string, unknown>[];
|
|
119
|
+
workflowSteps: Record<string, unknown>;
|
|
120
|
+
isLoadingDepartmentTree: boolean;
|
|
121
|
+
isLoadingWorkflowSteps: boolean;
|
|
122
|
+
error: string | null;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export declare const COMPLAINT_ENDPOINTS: Readonly<Record<string, string>>;
|
|
127
|
+
export declare const complaintTypeActions: Record<string, unknown>;
|
|
128
|
+
export declare const complaintDepartmentActions: Record<string, unknown>;
|
|
129
|
+
export declare const complaintPriorityActions: Record<string, unknown>;
|
|
130
|
+
export declare const complaintWorkflowActions: Record<string, unknown>;
|
|
131
|
+
export declare const complaintStatusActions: Record<string, unknown>;
|
|
132
|
+
|
|
133
|
+
export declare const DEMO_SYSTEMS: SystemItem[];
|
|
134
|
+
export declare const DEFAULT_PAGE_DESCRIPTION: string;
|
|
135
|
+
|
|
136
|
+
export declare const colors: Record<string, string>;
|
|
137
|
+
export declare const radii: Record<string, string>;
|
|
138
|
+
export declare const spacing: Record<string, string>;
|
|
139
|
+
export declare const typography: Record<string, CSSProperties | string>;
|
|
140
|
+
|
|
141
|
+
export declare function Button(props: {
|
|
142
|
+
children?: ReactNode;
|
|
143
|
+
variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link';
|
|
144
|
+
size?: 'md' | 'sm' | 'lg';
|
|
145
|
+
startIcon?: ReactNode;
|
|
146
|
+
endIcon?: ReactNode;
|
|
147
|
+
className?: string;
|
|
148
|
+
type?: 'button' | 'submit' | 'reset';
|
|
149
|
+
disabled?: boolean;
|
|
150
|
+
onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
|
|
151
|
+
[key: string]: unknown;
|
|
152
|
+
}): JSX.Element;
|
|
153
|
+
|
|
154
|
+
export declare function Input(props: {
|
|
155
|
+
value?: string;
|
|
156
|
+
onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
157
|
+
onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
|
|
158
|
+
placeholder?: string;
|
|
159
|
+
type?: string;
|
|
160
|
+
icon?: ReactNode;
|
|
161
|
+
className?: string;
|
|
162
|
+
inputClassName?: string;
|
|
163
|
+
[key: string]: unknown;
|
|
164
|
+
}): JSX.Element;
|
|
165
|
+
|
|
166
|
+
export declare function StatusBadge(props: {
|
|
167
|
+
status?: string;
|
|
168
|
+
label?: string;
|
|
169
|
+
className?: string;
|
|
170
|
+
}): JSX.Element;
|
|
171
|
+
|
|
172
|
+
export declare function SearchBar(props: {
|
|
173
|
+
value?: string;
|
|
174
|
+
onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
175
|
+
onSearch?: (value?: string) => void;
|
|
176
|
+
placeholder?: string;
|
|
177
|
+
className?: string;
|
|
178
|
+
}): JSX.Element;
|
|
179
|
+
|
|
180
|
+
export declare function SystemCard(props: SystemItem & {
|
|
181
|
+
onConfigure?: (system: SystemItem) => void;
|
|
182
|
+
onOpen?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
183
|
+
onTitleClick?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
184
|
+
onDescriptionClick?: (payload: {
|
|
185
|
+
id?: string | number;
|
|
186
|
+
title?: string;
|
|
187
|
+
descriptionHref?: string;
|
|
188
|
+
}) => void;
|
|
189
|
+
className?: string;
|
|
190
|
+
}): JSX.Element;
|
|
191
|
+
|
|
192
|
+
export declare function PageHeader(props: {
|
|
193
|
+
title?: string;
|
|
194
|
+
description?: string;
|
|
195
|
+
actionLabel?: string;
|
|
196
|
+
onAction?: () => void;
|
|
197
|
+
className?: string;
|
|
198
|
+
}): JSX.Element;
|
|
199
|
+
|
|
200
|
+
export declare function SystemCardGrid(props: {
|
|
201
|
+
systems?: SystemItem[];
|
|
202
|
+
onConfigure?: (system: SystemItem) => void;
|
|
203
|
+
onOpen?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
204
|
+
onTitleClick?: (system: Pick<SystemItem, 'id' | 'title'>) => void;
|
|
205
|
+
onDescriptionClick?: (payload: {
|
|
206
|
+
id?: string | number;
|
|
207
|
+
title?: string;
|
|
208
|
+
descriptionHref?: string;
|
|
209
|
+
}) => void;
|
|
210
|
+
emptyMessage?: string;
|
|
211
|
+
className?: string;
|
|
212
|
+
}): JSX.Element;
|
|
213
|
+
|
|
214
|
+
export declare function ComplaintManagementPage(props: Omit<ComplaintAppProps, 'apiUrl' | 'authToken' | 'basePath' | 'children'>): JSX.Element;
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ca-root{--ca-primary: #2d64b8;--ca-primary-hover: #2557a3;--ca-text: #111827;--ca-text-secondary: #6b7280;--ca-text-muted: #9ca3af;--ca-border: #e5e7eb;--ca-border-light: #f3f4f6;--ca-bg: #f5f5f5;--ca-surface: #ffffff;--ca-white: #ffffff;--ca-on-primary: #ffffff;--ca-active-bg: #ecfdf5;--ca-active-border: #a7f3d0;--ca-active-text: #059669;--ca-inactive-bg: #f3f4f6;--ca-inactive-border: #d1d5db;--ca-inactive-text: #6b7280;--ca-link: #2d64b8;--ca-divider: #e5e7eb;--ca-accent-border: #c5d7f0;--ca-accent-bg: #eef4fb;--ca-step-done: #d6e4f7;--ca-success: #22c55e;--ca-danger: #ef4444;--ca-secondary-btn: #d1d5db;--ca-secondary-btn-hover: #c4c9d1;--ca-input-bg: #ffffff;--ca-table-head-bg: #eef4fb;--ca-sidebar-bg: #fafbfd;--ca-overlay: rgba(16, 24, 40, .06);--ca-radius-sm: 6px;--ca-radius-md: 8px;--ca-radius-lg: 12px;--ca-radius-xl: 16px;--ca-radius-pill: 999px;--ca-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ca-h1-size: 28px;--ca-h2-size: 16px;--ca-body-size: 14px;--ca-label-size: 13px;--ca-value-size: 22px;--ca-small-size: 13px;--ca-shadow-card: 0 1px 2px rgba(16, 24, 40, .04);--ca-shadow-settings: 0 1px 3px rgba(16, 24, 40, .06);box-sizing:border-box;width:100%;min-height:100%;margin:0;padding:24px 28px 40px;font-family:var(--ca-font);color:var(--ca-text);background:var(--ca-bg);color-scheme:light;transition:background-color .2s ease,color .2s ease}.ca-root--dark{color-scheme:dark}.ca-root *,.ca-root *:before,.ca-root *:after{box-sizing:border-box}.ca-h1{margin:0;font-size:var(--ca-h1-size);font-weight:700;line-height:1.3;color:var(--ca-text)}.ca-h2{margin:0;font-size:var(--ca-h2-size);font-weight:700;line-height:1.4;color:var(--ca-text)}.ca-h2--link{color:var(--ca-link);text-decoration:underline;text-underline-offset:3px;cursor:pointer;background:none;border:none;padding:0;font:inherit;font-size:16px;font-weight:700}.ca-h2--link:hover{color:var(--ca-primary-hover)}.ca-body{margin:0;font-size:var(--ca-body-size);font-weight:400;line-height:1.5;color:var(--ca-text-secondary)}.ca-label{margin:0;font-size:var(--ca-label-size);font-weight:600;line-height:1.4;color:var(--ca-text)}.ca-value{margin:0;font-size:var(--ca-value-size);font-weight:700;line-height:1.2;color:var(--ca-text)}.ca-small{margin:0;font-size:var(--ca-small-size);font-weight:400;line-height:1.4;color:var(--ca-text-secondary)}.ca-link{margin:0;font-size:14px;font-weight:400;line-height:1.5;color:var(--ca-link);text-decoration:underline;text-underline-offset:2px;cursor:pointer;background:none;border:none;padding:0;font-family:inherit}.ca-link:hover{color:var(--ca-primary-hover)}.ca-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;margin:0;padding:10px 18px;border:none;border-radius:var(--ca-radius-md);font-family:inherit;font-size:14px;font-weight:600;line-height:1.2;cursor:pointer;transition:background-color .15s ease,opacity .15s ease;white-space:nowrap}.ca-btn:disabled{opacity:.55;cursor:not-allowed}.ca-btn--primary{background:var(--ca-primary);color:var(--ca-on-primary, var(--ca-white))}.ca-btn--primary:hover:not(:disabled){background:var(--ca-primary-hover)}.ca-btn--secondary{background:var(--ca-secondary-btn);color:var(--ca-text)}.ca-btn--secondary:hover:not(:disabled){background:var(--ca-secondary-btn-hover)}.ca-btn--outline{background:var(--ca-white);color:var(--ca-primary);border:1px solid var(--ca-accent-border)}.ca-btn--outline:hover:not(:disabled){background:var(--ca-accent-bg)}.ca-btn--ghost{background:transparent;color:var(--ca-text);border:1px solid var(--ca-border)}.ca-btn--link{background:transparent;color:var(--ca-primary);padding:8px 10px;box-shadow:none}.ca-btn--link:hover:not(:disabled){text-decoration:underline}.ca-btn--sm{padding:8px 14px;font-size:13px}.ca-btn--lg{padding:12px 28px;font-size:15px}.ca-btn__icon{display:inline-flex;align-items:center;line-height:0}.ca-input-wrap{position:relative;display:flex;align-items:center;width:100%}.ca-input-wrap__icon{position:absolute;left:14px;display:flex;align-items:center;color:var(--ca-text-muted);pointer-events:none}.ca-input{width:100%;margin:0;padding:12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;transition:border-color .15s ease,box-shadow .15s ease}.ca-input--with-icon{padding-left:42px}.ca-input::placeholder{color:var(--ca-text-muted)}.ca-input:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-badge{display:inline-flex;align-items:center;padding:4px 12px;border:1px solid;border-radius:var(--ca-radius-sm);font-size:12px;font-weight:600;line-height:1.3;white-space:nowrap}.ca-badge--active{background:var(--ca-active-bg);border-color:var(--ca-active-border);color:var(--ca-active-text)}.ca-badge--inactive{background:var(--ca-inactive-bg);border-color:var(--ca-inactive-border);color:var(--ca-inactive-text)}.ca-divider{width:1px;align-self:stretch;background:var(--ca-divider);flex-shrink:0}.ca-data-point{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.ca-search{width:100%;margin:0 0 24px}.ca-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:28px}.ca-page-header__text{display:flex;flex-direction:column;gap:8px;max-width:720px;min-width:0}.ca-page-header__actions{flex-shrink:0;padding-top:4px}.ca-system-card{display:flex;flex-direction:column;gap:14px;padding:20px 22px;background:var(--ca-surface);border:1px solid var(--ca-border);border-radius:var(--ca-radius-lg);box-shadow:var(--ca-shadow-card)}.ca-system-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.ca-system-card__title-wrap{min-width:0;flex:1}.ca-system-card__stats{display:flex;align-items:stretch;gap:0;padding:4px 0 8px}.ca-system-card__stats>.ca-data-point{padding:0 16px}.ca-system-card__stats>.ca-data-point:first-child{padding-left:0}.ca-system-card__stats>.ca-data-point:last-child{padding-right:0}.ca-system-card__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:4px}.ca-system-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.ca-empty{grid-column:1 / -1;padding:48px 24px;text-align:center;color:var(--ca-text-secondary);background:var(--ca-surface);border:1px dashed var(--ca-border);border-radius:var(--ca-radius-lg)}.ca-loading{display:flex;align-items:center;justify-content:center;gap:10px;min-height:240px;color:var(--ca-text-secondary);font-size:14px}.ca-loading__spinner{width:22px;height:22px;border:2px solid var(--ca-border);border-top-color:var(--ca-primary);border-radius:50%;animation:ca-spin .7s linear infinite}@keyframes ca-spin{to{transform:rotate(360deg)}}@media(max-width:900px){.ca-system-grid{grid-template-columns:1fr}.ca-page-header{flex-direction:column;align-items:stretch}.ca-page-header__actions{align-self:flex-start}.ca-system-card__stats{flex-wrap:wrap;row-gap:16px}.ca-system-card__stats>.ca-data-point{flex:1 1 40%;padding:0 12px}.ca-divider{display:none}}@media(max-width:600px){.ca-root{padding:16px}.ca-h1{font-size:22px}.ca-system-card__footer{flex-direction:column;align-items:flex-start}}.ca-select{position:relative;width:100%}.ca-select__control{width:100%;appearance:none;margin:0;padding:12px 40px 12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;cursor:pointer}.ca-select__control:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-select__chevron{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--ca-text-muted);pointer-events:none;display:flex}.ca-textarea{width:100%;margin:0;padding:12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;resize:vertical;min-height:110px}.ca-textarea:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-textarea::placeholder{color:var(--ca-text-muted)}.ca-toggle{position:relative;width:44px;height:24px;padding:0;border:none;border-radius:var(--ca-radius-pill);background:var(--ca-secondary-btn);cursor:pointer;transition:background .15s ease;flex-shrink:0}.ca-toggle--on{background:var(--ca-success)}.ca-toggle__thumb{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:var(--ca-surface);box-shadow:0 1px 2px var(--ca-overlay);transition:transform .15s ease}.ca-toggle--on .ca-toggle__thumb{transform:translate(20px)}.ca-toggle-field{display:flex;align-items:center;gap:10px;padding-top:22px;flex-shrink:0}.ca-tag{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--ca-radius-sm);background:var(--ca-inactive-bg);border:1px solid var(--ca-border);font-size:13px;color:var(--ca-text)}.ca-tag__remove{display:inline-flex;align-items:center;justify-content:center;margin:0;padding:0;border:none;background:transparent;color:var(--ca-text-muted);cursor:pointer}.ca-tag-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.ca-chip{display:inline-flex;align-items:center;padding:8px 14px;border-radius:var(--ca-radius-md);border:1px solid var(--ca-border);background:var(--ca-white);font-family:inherit;font-size:13px;font-weight:500;color:var(--ca-text);cursor:pointer}.ca-chip:hover{border-color:var(--ca-primary);color:var(--ca-primary)}.ca-chip-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}.ca-radio{display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.ca-radio__input{position:absolute;opacity:0;pointer-events:none}.ca-radio__mark{width:18px;height:18px;border-radius:50%;border:2px solid var(--ca-border);background:var(--ca-surface);position:relative}.ca-radio__input:checked+.ca-radio__mark{border-color:var(--ca-primary)}.ca-radio__input:checked+.ca-radio__mark:after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--ca-primary)}.ca-field-label{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.ca-field-label__hint{font-size:12px;color:var(--ca-text-muted)}.ca-form-field,.ca-role-select{width:100%}.ca-stepper{display:flex;align-items:flex-start;justify-content:space-between;gap:0;width:100%;margin:28px 0 32px}.ca-stepper__item{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:72px;padding:0;border:none;background:transparent;cursor:pointer;font-family:inherit}.ca-stepper__item:disabled{cursor:default}.ca-stepper__circle{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--ca-inactive-bg);color:var(--ca-text);font-size:13px;font-weight:700}.ca-stepper__label{font-size:13px;font-weight:500;color:var(--ca-text);text-align:center;white-space:nowrap}.ca-stepper__item--active .ca-stepper__circle{background:var(--ca-primary);color:#fff}.ca-stepper__item--active .ca-stepper__label{color:var(--ca-primary);font-weight:700}.ca-stepper__item--done .ca-stepper__circle{background:var(--ca-step-done);color:var(--ca-primary)}.ca-stepper__item--done .ca-stepper__label{color:var(--ca-primary)}.ca-stepper__line{flex:1;height:2px;margin-top:15px;background:var(--ca-border);min-width:12px}.ca-stepper__line--active{background:var(--ca-primary)}.ca-stepper--sm{margin:0 0 24px}.ca-stepper--sm .ca-stepper__circle{width:26px;height:26px;font-size:12px}.ca-stepper--sm .ca-stepper__label{font-size:12px}.ca-stepper--sm .ca-stepper__line{margin-top:12px}.ca-settings-page{width:100%}.ca-settings-page__stepper{overflow-x:auto;padding-bottom:4px}.ca-settings-card{background:var(--ca-surface);border:1px solid var(--ca-accent-border);border-radius:var(--ca-radius-xl);box-shadow:var(--ca-shadow-settings);padding:22px 24px 28px}.ca-settings-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.ca-settings-card__heading{display:flex;align-items:flex-start;gap:12px}.ca-settings-card__desc{margin-top:4px}.ca-settings-card__divider{height:0;border:none;border-top:1px dashed var(--ca-accent-border);margin:18px 0 20px}.ca-settings-card__body{display:flex;flex-direction:column}.ca-settings-card__footer{display:flex;justify-content:center;margin-top:28px}.ca-step-section{padding-bottom:20px;margin-bottom:20px;border-bottom:1px dashed var(--ca-accent-border)}.ca-step-section--last{border-bottom:none;margin-bottom:0;padding-bottom:0}.ca-step-row{display:flex;align-items:flex-start;gap:16px}.ca-step-row__grow{flex:1;min-width:0}.ca-step-row--category{align-items:flex-start}.ca-back-link{display:inline-flex;margin-top:20px;padding:0;border:none;background:transparent;color:var(--ca-primary);font-family:inherit;font-size:14px;cursor:pointer}.ca-back-link:hover{text-decoration:underline}.ca-dept-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-dept-table__head,.ca-dept-table__row{display:grid;grid-template-columns:1.2fr 1.2fr 1.2fr auto;gap:12px;align-items:center;padding:12px 14px}.ca-dept-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600;color:var(--ca-text)}.ca-dept-table__row{border-top:1px solid var(--ca-border);background:var(--ca-surface)}.ca-input-with-action{position:relative}.ca-input-with-action .ca-input{padding-right:36px}.ca-input-with-action__btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;color:var(--ca-primary);cursor:pointer;padding:0}.ca-priority-add{margin-bottom:20px}.ca-priority-add__row{display:flex;gap:12px;align-items:center}.ca-priority-add__row .ca-input-wrap{flex:1}.ca-priority-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-priority-table__head,.ca-priority-table__row{display:grid;grid-template-columns:1.6fr 1fr 80px;gap:12px;align-items:center;padding:12px 14px}.ca-priority-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600}.ca-priority-table__row{border-top:1px solid var(--ca-border)}.ca-priority-table__name{display:flex;align-items:center;gap:10px}.ca-workflow{display:grid;grid-template-columns:260px 1fr;gap:20px;min-height:360px}.ca-workflow__sidebar{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;background:var(--ca-sidebar-bg)}.ca-workflow__sidebar-title{margin:0 0 4px;font-size:15px;font-weight:700}.ca-dept-tree{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.ca-dept-tree__children{list-style:none;margin:6px 0 0;padding:0 0 0 8px;display:flex;flex-direction:column;gap:6px}.ca-dept-tree__item{width:100%;text-align:left;padding:10px 12px;border:1px solid transparent;border-radius:8px;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:var(--ca-text);cursor:pointer}.ca-dept-tree__item--child{font-weight:500}.ca-dept-tree__item--active{background:var(--ca-accent-bg);border-color:var(--ca-primary);color:var(--ca-primary)}.ca-dept-tree__branch{margin-right:6px;color:var(--ca-text-muted)}.ca-workflow__main{border:1px solid var(--ca-accent-border);border-radius:12px;padding:18px 20px 24px}.ca-workflow__form{display:flex;flex-direction:column;gap:16px}.ca-workflow__placeholder{padding:24px 0}.ca-workflow__actions{display:flex;justify-content:center;margin-top:28px}.ca-form-fields{display:grid;grid-template-columns:260px 1fr;gap:20px}.ca-field-lib{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;background:var(--ca-sidebar-bg)}.ca-field-lib__title{margin:0 0 4px;font-size:15px;font-weight:700}.ca-field-lib__list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.ca-field-lib__item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid var(--ca-border);border-radius:8px;background:var(--ca-surface);font-family:inherit;font-size:13px;color:var(--ca-text);cursor:grab;text-align:left}.ca-field-lib__item:hover{border-color:var(--ca-primary)}.ca-field-lib__glyph{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:var(--ca-accent-bg);color:var(--ca-primary);font-size:12px;font-weight:700;flex-shrink:0}.ca-add-fields{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;margin-bottom:16px}.ca-add-fields__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.ca-add-fields__title{margin:0;font-size:15px;font-weight:700}.ca-fields-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-fields-table__head,.ca-fields-table__row{display:grid;grid-template-columns:1.4fr 1.2fr 90px 40px;gap:12px;align-items:center;padding:12px 14px}.ca-fields-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600}.ca-fields-table__row{border-top:1px solid var(--ca-border)}.ca-fields-table__name{display:flex;align-items:center;gap:10px}.ca-fields-table__empty{padding:24px;text-align:center}.ca-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;cursor:pointer;border-radius:6px}.ca-icon-btn:hover{background:var(--ca-inactive-bg)}.ca-review{display:flex;flex-direction:column;gap:0}.ca-review__block{padding:16px 0;border-bottom:1px dashed var(--ca-accent-border);display:flex;flex-direction:column;gap:8px}.ca-review__block--last{border-bottom:none}.ca-review__row{display:flex;align-items:center;gap:12px}@media(max-width:1000px){.ca-workflow,.ca-form-fields{grid-template-columns:1fr}.ca-stepper__label{font-size:11px;white-space:normal;max-width:72px}.ca-dept-table__head,.ca-dept-table__row,.ca-priority-table__head,.ca-priority-table__row,.ca-fields-table__head,.ca-fields-table__row{grid-template-columns:1fr}.ca-step-row{flex-direction:column}.ca-toggle-field{padding-top:0}}
|
|
1
|
+
.ca-root{--ca-primary: #2d64b8;--ca-primary-hover: #2557a3;--ca-text: #111827;--ca-text-secondary: #6b7280;--ca-text-muted: #9ca3af;--ca-border: #e5e7eb;--ca-border-light: #f3f4f6;--ca-bg: #f5f5f5;--ca-surface: #ffffff;--ca-white: #ffffff;--ca-on-primary: #ffffff;--ca-active-bg: #ecfdf5;--ca-active-border: #a7f3d0;--ca-active-text: #059669;--ca-inactive-bg: #f3f4f6;--ca-inactive-border: #d1d5db;--ca-inactive-text: #6b7280;--ca-link: #2d64b8;--ca-divider: #e5e7eb;--ca-accent-border: #c5d7f0;--ca-accent-bg: #eef4fb;--ca-step-done: #d6e4f7;--ca-success: #22c55e;--ca-danger: #ef4444;--ca-secondary-btn: #d1d5db;--ca-secondary-btn-hover: #c4c9d1;--ca-input-bg: #ffffff;--ca-table-head-bg: #eef4fb;--ca-sidebar-bg: #fafbfd;--ca-overlay: rgba(16, 24, 40, .06);--ca-radius-sm: 6px;--ca-radius-md: 8px;--ca-radius-lg: 12px;--ca-radius-xl: 16px;--ca-radius-pill: 999px;--ca-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ca-h1-size: 28px;--ca-h2-size: 16px;--ca-body-size: 14px;--ca-label-size: 13px;--ca-value-size: 22px;--ca-small-size: 13px;--ca-shadow-card: 0 1px 2px rgba(16, 24, 40, .04);--ca-shadow-settings: 0 1px 3px rgba(16, 24, 40, .06);box-sizing:border-box;width:100%;min-height:100%;margin:0;padding:24px 28px 40px;font-family:var(--ca-font);color:var(--ca-text);background:var(--ca-bg);color-scheme:light;transition:background-color .2s ease,color .2s ease}.ca-root--dark{color-scheme:dark}.ca-root *,.ca-root *:before,.ca-root *:after{box-sizing:border-box}.ca-h1{margin:0;font-size:var(--ca-h1-size);font-weight:700;line-height:1.3;color:var(--ca-text)}.ca-h2{margin:0;font-size:var(--ca-h2-size);font-weight:700;line-height:1.4;color:var(--ca-text)}.ca-h2--link{color:var(--ca-link);text-decoration:underline;text-underline-offset:3px;cursor:pointer;background:none;border:none;padding:0;font:inherit;font-size:16px;font-weight:700}.ca-h2--link:hover{color:var(--ca-primary-hover)}.ca-body{margin:0;font-size:var(--ca-body-size);font-weight:400;line-height:1.5;color:var(--ca-text-secondary)}.ca-label{margin:0;font-size:var(--ca-label-size);font-weight:600;line-height:1.4;color:var(--ca-text)}.ca-value{margin:0;font-size:var(--ca-value-size);font-weight:700;line-height:1.2;color:var(--ca-text)}.ca-small{margin:0;font-size:var(--ca-small-size);font-weight:400;line-height:1.4;color:var(--ca-text-secondary)}.ca-link{margin:0;font-size:14px;font-weight:400;line-height:1.5;color:var(--ca-link);text-decoration:underline;text-underline-offset:2px;cursor:pointer;background:none;border:none;padding:0;font-family:inherit}.ca-link:hover{color:var(--ca-primary-hover)}.ca-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;margin:0;padding:10px 18px;border:none;border-radius:var(--ca-radius-md);font-family:inherit;font-size:14px;font-weight:600;line-height:1.2;cursor:pointer;transition:background-color .15s ease,opacity .15s ease;white-space:nowrap}.ca-btn:disabled{opacity:.55;cursor:not-allowed}.ca-btn--primary{background:var(--ca-primary);color:var(--ca-on-primary, var(--ca-white))}.ca-btn--primary:hover:not(:disabled){background:var(--ca-primary-hover)}.ca-btn--secondary{background:var(--ca-secondary-btn);color:var(--ca-text)}.ca-btn--secondary:hover:not(:disabled){background:var(--ca-secondary-btn-hover)}.ca-btn--outline{background:var(--ca-white);color:var(--ca-primary);border:1px solid var(--ca-accent-border)}.ca-btn--outline:hover:not(:disabled){background:var(--ca-accent-bg)}.ca-btn--ghost{background:transparent;color:var(--ca-text);border:1px solid var(--ca-border)}.ca-btn--link{background:transparent;color:var(--ca-primary);padding:8px 10px;box-shadow:none}.ca-btn--link:hover:not(:disabled){text-decoration:underline}.ca-btn--sm{padding:8px 14px;font-size:13px}.ca-btn--lg{padding:12px 28px;font-size:15px}.ca-btn__icon{display:inline-flex;align-items:center;line-height:0}.ca-input-wrap{position:relative;display:flex;align-items:center;width:100%}.ca-input-wrap__icon{position:absolute;left:14px;display:flex;align-items:center;color:var(--ca-text-muted);pointer-events:none}.ca-input{width:100%;margin:0;padding:12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;transition:border-color .15s ease,box-shadow .15s ease}.ca-input--with-icon{padding-left:42px}.ca-input::placeholder{color:var(--ca-text-muted)}.ca-input:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-badge{display:inline-flex;align-items:center;padding:4px 12px;border:1px solid;border-radius:var(--ca-radius-sm);font-size:12px;font-weight:600;line-height:1.3;white-space:nowrap}.ca-badge--active{background:var(--ca-active-bg);border-color:var(--ca-active-border);color:var(--ca-active-text)}.ca-badge--inactive{background:var(--ca-inactive-bg);border-color:var(--ca-inactive-border);color:var(--ca-inactive-text)}.ca-divider{width:1px;align-self:stretch;background:var(--ca-divider);flex-shrink:0}.ca-data-point{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.ca-search{width:100%;margin:0 0 24px}.ca-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:28px}.ca-page-header__text{display:flex;flex-direction:column;gap:8px;max-width:720px;min-width:0}.ca-page-header__actions{flex-shrink:0;padding-top:4px}.ca-system-card{display:flex;flex-direction:column;gap:14px;padding:20px 22px;background:var(--ca-surface);border:1px solid var(--ca-border);border-radius:var(--ca-radius-lg);box-shadow:var(--ca-shadow-card)}.ca-system-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.ca-system-card__title-wrap{min-width:0;flex:1}.ca-system-card__stats{display:flex;align-items:stretch;gap:0;padding:4px 0 8px}.ca-system-card__stats>.ca-data-point{padding:0 16px}.ca-system-card__stats>.ca-data-point:first-child{padding-left:0}.ca-system-card__stats>.ca-data-point:last-child{padding-right:0}.ca-system-card__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:4px}.ca-system-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.ca-empty{grid-column:1 / -1;padding:48px 24px;text-align:center;color:var(--ca-text-secondary);background:var(--ca-surface);border:1px dashed var(--ca-border);border-radius:var(--ca-radius-lg)}.ca-loading{display:flex;align-items:center;justify-content:center;gap:10px;min-height:240px;color:var(--ca-text-secondary);font-size:14px}.ca-loading__spinner{width:22px;height:22px;border:2px solid var(--ca-border);border-top-color:var(--ca-primary);border-radius:50%;animation:ca-spin .7s linear infinite}@keyframes ca-spin{to{transform:rotate(360deg)}}@media(max-width:900px){.ca-system-grid{grid-template-columns:1fr}.ca-page-header{flex-direction:column;align-items:stretch}.ca-page-header__actions{align-self:flex-start}.ca-system-card__stats{flex-wrap:wrap;row-gap:16px}.ca-system-card__stats>.ca-data-point{flex:1 1 40%;padding:0 12px}.ca-divider{display:none}}@media(max-width:600px){.ca-root{padding:16px}.ca-h1{font-size:22px}.ca-system-card__footer{flex-direction:column;align-items:flex-start}}.ca-select{position:relative;width:100%}.ca-select__control{width:100%;appearance:none;margin:0;padding:12px 40px 12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;cursor:pointer}.ca-select__control:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-select__chevron{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--ca-text-muted);pointer-events:none;display:flex}.ca-textarea{width:100%;margin:0;padding:12px 14px;border:1px solid var(--ca-border);border-radius:var(--ca-radius-md);background:var(--ca-input-bg);font-family:inherit;font-size:var(--ca-body-size);color:var(--ca-text);outline:none;resize:vertical;min-height:110px}.ca-textarea:focus{border-color:var(--ca-primary);box-shadow:0 0 0 3px #2d64b81f}.ca-textarea::placeholder{color:var(--ca-text-muted)}.ca-toggle{position:relative;width:44px;height:24px;padding:0;border:none;border-radius:var(--ca-radius-pill);background:var(--ca-secondary-btn);cursor:pointer;transition:background .15s ease;flex-shrink:0}.ca-toggle--on{background:var(--ca-success)}.ca-toggle__thumb{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:var(--ca-surface);box-shadow:0 1px 2px var(--ca-overlay);transition:transform .15s ease}.ca-toggle--on .ca-toggle__thumb{transform:translate(20px)}.ca-toggle-field{display:flex;align-items:center;gap:10px;padding-top:22px;flex-shrink:0}.ca-tag{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--ca-radius-sm);background:var(--ca-inactive-bg);border:1px solid var(--ca-border);font-size:13px;color:var(--ca-text)}.ca-tag__remove{display:inline-flex;align-items:center;justify-content:center;margin:0;padding:0;border:none;background:transparent;color:var(--ca-text-muted);cursor:pointer}.ca-tag-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.ca-chip{display:inline-flex;align-items:center;padding:8px 14px;border-radius:var(--ca-radius-md);border:1px solid var(--ca-border);background:var(--ca-white);font-family:inherit;font-size:13px;font-weight:500;color:var(--ca-text);cursor:pointer}.ca-chip:hover{border-color:var(--ca-primary);color:var(--ca-primary)}.ca-chip-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}.ca-radio{display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.ca-radio__input{position:absolute;opacity:0;pointer-events:none}.ca-radio__mark{width:18px;height:18px;border-radius:50%;border:2px solid var(--ca-border);background:var(--ca-surface);position:relative}.ca-radio__input:checked+.ca-radio__mark{border-color:var(--ca-primary)}.ca-radio__input:checked+.ca-radio__mark:after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--ca-primary)}.ca-field-label{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.ca-field-label__hint{font-size:12px;color:var(--ca-text-muted)}.ca-form-field,.ca-role-select{width:100%}.ca-stepper{display:flex;align-items:flex-start;justify-content:space-between;gap:0;width:100%;margin:28px 0 32px}.ca-stepper__item{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:72px;padding:0;border:none;background:transparent;cursor:pointer;font-family:inherit}.ca-stepper__item:disabled{cursor:default}.ca-stepper__circle{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--ca-inactive-bg);color:var(--ca-text);font-size:13px;font-weight:700}.ca-stepper__label{font-size:13px;font-weight:500;color:var(--ca-text);text-align:center;white-space:nowrap}.ca-stepper__item--active .ca-stepper__circle{background:var(--ca-primary);color:#fff}.ca-stepper__item--active .ca-stepper__label{color:var(--ca-primary);font-weight:700}.ca-stepper__item--done .ca-stepper__circle{background:var(--ca-step-done);color:var(--ca-primary)}.ca-stepper__item--done .ca-stepper__label{color:var(--ca-primary)}.ca-stepper__line{flex:1;height:2px;margin-top:15px;background:var(--ca-border);min-width:12px}.ca-stepper__line--active{background:var(--ca-primary)}.ca-stepper--sm{margin:0 0 24px}.ca-stepper--sm .ca-stepper__circle{width:26px;height:26px;font-size:12px}.ca-stepper--sm .ca-stepper__label{font-size:12px}.ca-stepper--sm .ca-stepper__line{margin-top:12px}.ca-settings-page{width:100%}.ca-settings-page__stepper{overflow-x:auto;padding-bottom:4px}.ca-settings-card{background:var(--ca-surface);border:1px solid var(--ca-accent-border);border-radius:var(--ca-radius-xl);box-shadow:var(--ca-shadow-settings);padding:22px 24px 28px}.ca-settings-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.ca-settings-card__heading{display:flex;align-items:flex-start;gap:12px}.ca-settings-card__desc{margin-top:4px}.ca-settings-card__divider{height:0;border:none;border-top:1px dashed var(--ca-accent-border);margin:18px 0 20px}.ca-settings-card__body{display:flex;flex-direction:column}.ca-settings-card__footer{display:flex;justify-content:center;margin-top:28px}.ca-step-section{padding-bottom:20px;margin-bottom:20px;border-bottom:1px dashed var(--ca-accent-border)}.ca-step-section--last{border-bottom:none;margin-bottom:0;padding-bottom:0}.ca-step-row{display:flex;align-items:flex-start;gap:16px}.ca-step-row__grow{flex:1;min-width:0}.ca-step-row--category{align-items:flex-start}.ca-back-link{display:inline-flex;margin-top:20px;padding:0;border:none;background:transparent;color:var(--ca-primary);font-family:inherit;font-size:14px;cursor:pointer}.ca-back-link:hover{text-decoration:underline}.ca-dept-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-dept-table__head,.ca-dept-table__row{display:grid;grid-template-columns:1.2fr 1.2fr 1.2fr auto;gap:12px;align-items:center;padding:12px 14px}.ca-dept-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600;color:var(--ca-text)}.ca-dept-table__row{border-top:1px solid var(--ca-border);background:var(--ca-surface)}.ca-input-with-action{position:relative}.ca-input-with-action .ca-input{padding-right:36px}.ca-input-with-action__btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;color:var(--ca-primary);cursor:pointer;padding:0}.ca-priority-add{margin-bottom:20px}.ca-priority-add__row{display:flex;gap:12px;align-items:center}.ca-priority-add__row .ca-input-wrap{flex:1}.ca-priority-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-priority-table__head,.ca-priority-table__row{display:grid;grid-template-columns:1.6fr 1fr 80px;gap:12px;align-items:center;padding:12px 14px}.ca-priority-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600}.ca-priority-table__row{border-top:1px solid var(--ca-border)}.ca-priority-table__name{display:flex;align-items:center;gap:10px}.ca-workflow{display:grid;grid-template-columns:260px 1fr;gap:20px;min-height:360px}.ca-workflow__sidebar{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;background:var(--ca-sidebar-bg)}.ca-workflow__sidebar-title{margin:0 0 4px;font-size:15px;font-weight:700}.ca-dept-tree{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.ca-dept-tree__children{list-style:none;margin:6px 0 0;padding:0 0 0 8px;display:flex;flex-direction:column;gap:6px}.ca-dept-tree__item{width:100%;text-align:left;padding:10px 12px;border:1px solid transparent;border-radius:8px;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:var(--ca-text);cursor:pointer}.ca-dept-tree__item--child{font-weight:500}.ca-dept-tree__item--active{background:var(--ca-accent-bg);border-color:var(--ca-primary);color:var(--ca-primary)}.ca-dept-tree__branch{margin-right:6px;color:var(--ca-text-muted)}.ca-workflow__main{border:1px solid var(--ca-accent-border);border-radius:12px;padding:18px 20px 24px}.ca-workflow__form{display:flex;flex-direction:column;gap:16px}.ca-workflow__placeholder{padding:24px 0}.ca-workflow__actions{display:flex;justify-content:center;margin-top:28px}.ca-form-fields{display:grid;grid-template-columns:260px 1fr;gap:20px}.ca-field-lib{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;background:var(--ca-sidebar-bg)}.ca-field-lib__title{margin:0 0 4px;font-size:15px;font-weight:700}.ca-field-lib__list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.ca-field-lib__item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid var(--ca-border);border-radius:8px;background:var(--ca-surface);font-family:inherit;font-size:13px;color:var(--ca-text);cursor:grab;text-align:left}.ca-field-lib__item:hover{border-color:var(--ca-primary)}.ca-field-lib__glyph{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:var(--ca-accent-bg);color:var(--ca-primary);font-size:12px;font-weight:700;flex-shrink:0}.ca-add-fields{border:1px solid var(--ca-accent-border);border-radius:12px;padding:16px;margin-bottom:16px}.ca-add-fields__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.ca-add-fields__title{margin:0;font-size:15px;font-weight:700}.ca-fields-table{border:1px solid var(--ca-accent-border);border-radius:12px;overflow:hidden}.ca-fields-table__head,.ca-fields-table__row{display:grid;grid-template-columns:1.4fr 1.2fr 90px 40px;gap:12px;align-items:center;padding:12px 14px}.ca-fields-table__head{background:var(--ca-table-head-bg);font-size:13px;font-weight:600}.ca-fields-table__row{border-top:1px solid var(--ca-border)}.ca-fields-table__name{display:flex;align-items:center;gap:10px}.ca-fields-table__empty{padding:24px;text-align:center}.ca-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;cursor:pointer;border-radius:6px}.ca-icon-btn:hover{background:var(--ca-inactive-bg)}.ca-review{display:flex;flex-direction:column;gap:0}.ca-review__block{padding:16px 0;border-bottom:1px dashed var(--ca-accent-border);display:flex;flex-direction:column;gap:8px}.ca-review__block--last{border-bottom:none}.ca-review__row{display:flex;align-items:center;gap:12px}@media(max-width:1000px){.ca-workflow,.ca-form-fields{grid-template-columns:1fr}.ca-stepper__label{font-size:11px;white-space:normal;max-width:72px}.ca-dept-table__head,.ca-dept-table__row,.ca-priority-table__head,.ca-priority-table__row,.ca-fields-table__head,.ca-fields-table__row{grid-template-columns:1fr}.ca-step-row{flex-direction:column}.ca-toggle-field{padding-top:0}}
|
package/package.json
CHANGED
|
@@ -1,64 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@attabot/complaint-app",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Complaint Management UI package — atomic React components that run on the parent app's auth and API",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/complaint-app.umd.js",
|
|
7
|
-
"module": "./dist/complaint-app.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"import": "./dist/complaint-app.js",
|
|
13
|
-
"require": "./dist/complaint-app.umd.js"
|
|
14
|
-
},
|
|
15
|
-
"./style.css": "./dist/style.css"
|
|
16
|
-
},
|
|
17
|
-
"files": [
|
|
18
|
-
"dist",
|
|
19
|
-
"README.md"
|
|
20
|
-
],
|
|
21
|
-
"scripts": {
|
|
22
|
-
"dev": "vite",
|
|
23
|
-
"build": "vite build",
|
|
24
|
-
"lint": "eslint .",
|
|
25
|
-
"preview": "vite preview"
|
|
26
|
-
},
|
|
27
|
-
"keywords": [
|
|
28
|
-
"react",
|
|
29
|
-
"complaint",
|
|
30
|
-
"component",
|
|
31
|
-
"library",
|
|
32
|
-
"atomic-design"
|
|
33
|
-
],
|
|
34
|
-
"author": "",
|
|
35
|
-
"license": "MIT",
|
|
36
|
-
"peerDependencies": {
|
|
37
|
-
"@reduxjs/toolkit": ">=1.9",
|
|
38
|
-
"react": "^18.0.0 || ^19.0.0",
|
|
39
|
-
"react-dom": "^18.0.0 || ^19.0.0",
|
|
40
|
-
"react-redux": ">=8"
|
|
41
|
-
},
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"axios": "^1.13.2",
|
|
44
|
-
"js-cookie": "^3.0.5",
|
|
45
|
-
"react
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"@eslint/js": "^9.39.1",
|
|
50
|
-
"@
|
|
51
|
-
"@types/react
|
|
52
|
-
"@
|
|
53
|
-
"
|
|
54
|
-
"eslint
|
|
55
|
-
"eslint-plugin-react-
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"react
|
|
60
|
-
"react-
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@attabot/complaint-app",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "Complaint Management UI package — atomic React components that run on the parent app's auth and API",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/complaint-app.umd.js",
|
|
7
|
+
"module": "./dist/complaint-app.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/complaint-app.js",
|
|
13
|
+
"require": "./dist/complaint-app.umd.js"
|
|
14
|
+
},
|
|
15
|
+
"./style.css": "./dist/style.css"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"dev": "vite",
|
|
23
|
+
"build": "vite build",
|
|
24
|
+
"lint": "eslint .",
|
|
25
|
+
"preview": "vite preview"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"react",
|
|
29
|
+
"complaint",
|
|
30
|
+
"component",
|
|
31
|
+
"library",
|
|
32
|
+
"atomic-design"
|
|
33
|
+
],
|
|
34
|
+
"author": "",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@reduxjs/toolkit": ">=1.9",
|
|
38
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
39
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
40
|
+
"react-redux": ">=8"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"axios": "^1.13.2",
|
|
44
|
+
"js-cookie": "^3.0.5",
|
|
45
|
+
"lucide-react": "^1.32.0",
|
|
46
|
+
"react-router-dom": "^6.30.2"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@eslint/js": "^9.39.1",
|
|
50
|
+
"@reduxjs/toolkit": "^2.8.2",
|
|
51
|
+
"@types/react": "^19.2.5",
|
|
52
|
+
"@types/react-dom": "^19.2.3",
|
|
53
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
54
|
+
"eslint": "^9.39.1",
|
|
55
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
56
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
57
|
+
"globals": "^16.5.0",
|
|
58
|
+
"prettier": "^3.7.4",
|
|
59
|
+
"react": "^19.0.0",
|
|
60
|
+
"react-dom": "^19.0.0",
|
|
61
|
+
"react-redux": "^9.2.0",
|
|
62
|
+
"typescript": "^7.0.2",
|
|
63
|
+
"vite": "^7.2.4"
|
|
64
|
+
}
|
|
65
|
+
}
|