@omnifyjp/shell 0.1.1

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 (63) hide show
  1. package/README.md +476 -0
  2. package/dist/chunk-6JYWZJEY.js +123 -0
  3. package/dist/chunk-6JYWZJEY.js.map +1 -0
  4. package/dist/chunk-ACCHC3AM.js +57 -0
  5. package/dist/chunk-ACCHC3AM.js.map +1 -0
  6. package/dist/chunk-EJEVW4RO.js +49 -0
  7. package/dist/chunk-EJEVW4RO.js.map +1 -0
  8. package/dist/chunk-OHORC3F5.js +72 -0
  9. package/dist/chunk-OHORC3F5.js.map +1 -0
  10. package/dist/chunk-OMIE3Z5N.js +661 -0
  11. package/dist/chunk-OMIE3Z5N.js.map +1 -0
  12. package/dist/chunk-OYE3TXTK.js +37 -0
  13. package/dist/chunk-OYE3TXTK.js.map +1 -0
  14. package/dist/chunk-Q3QWQG6P.js +91 -0
  15. package/dist/chunk-Q3QWQG6P.js.map +1 -0
  16. package/dist/chunk-QNCYBLHC.js +189 -0
  17. package/dist/chunk-QNCYBLHC.js.map +1 -0
  18. package/dist/chunk-SHHZRZMM.js +83 -0
  19. package/dist/chunk-SHHZRZMM.js.map +1 -0
  20. package/dist/chunk-WCRLQ5M5.js +235 -0
  21. package/dist/chunk-WCRLQ5M5.js.map +1 -0
  22. package/dist/chunk-YVUVYTVZ.js +224 -0
  23. package/dist/chunk-YVUVYTVZ.js.map +1 -0
  24. package/dist/components/AppShell.d.ts +27 -0
  25. package/dist/components/AppShell.js +11 -0
  26. package/dist/components/AppShell.js.map +1 -0
  27. package/dist/components/Header.d.ts +11 -0
  28. package/dist/components/Header.js +6 -0
  29. package/dist/components/Header.js.map +1 -0
  30. package/dist/components/OrganizationSelector.d.ts +8 -0
  31. package/dist/components/OrganizationSelector.js +4 -0
  32. package/dist/components/OrganizationSelector.js.map +1 -0
  33. package/dist/components/OrganizationSetupModal.d.ts +5 -0
  34. package/dist/components/OrganizationSetupModal.js +4 -0
  35. package/dist/components/OrganizationSetupModal.js.map +1 -0
  36. package/dist/components/PageContainer.d.ts +105 -0
  37. package/dist/components/PageContainer.js +3 -0
  38. package/dist/components/PageContainer.js.map +1 -0
  39. package/dist/components/ServiceMenu.d.ts +11 -0
  40. package/dist/components/ServiceMenu.js +3 -0
  41. package/dist/components/ServiceMenu.js.map +1 -0
  42. package/dist/components/Sidebar.d.ts +11 -0
  43. package/dist/components/Sidebar.js +5 -0
  44. package/dist/components/Sidebar.js.map +1 -0
  45. package/dist/contexts/OrganizationContext.d.ts +26 -0
  46. package/dist/contexts/OrganizationContext.js +3 -0
  47. package/dist/contexts/OrganizationContext.js.map +1 -0
  48. package/dist/contexts/ThemeContext.d.ts +14 -0
  49. package/dist/contexts/ThemeContext.js +3 -0
  50. package/dist/contexts/ThemeContext.js.map +1 -0
  51. package/dist/hooks/useDateFormat.d.ts +28 -0
  52. package/dist/hooks/useDateFormat.js +4 -0
  53. package/dist/hooks/useDateFormat.js.map +1 -0
  54. package/dist/i18n.d.ts +38 -0
  55. package/dist/i18n.js +3 -0
  56. package/dist/i18n.js.map +1 -0
  57. package/dist/index.d.ts +17 -0
  58. package/dist/index.js +13 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/types.d.ts +89 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +63 -0
@@ -0,0 +1,661 @@
1
+ import i18n from 'i18next';
2
+ export { default as i18n } from 'i18next';
3
+ import { initReactI18next } from 'react-i18next';
4
+
5
+ // src/i18n.ts
6
+
7
+ // src/locales/en.json
8
+ var en_default = {
9
+ common: {
10
+ save: "Save changes",
11
+ cancel: "Cancel",
12
+ delete: "Delete",
13
+ edit: "Edit",
14
+ copy: "Copy",
15
+ search: "Search",
16
+ filter: "Filter",
17
+ close: "Close",
18
+ back: "Back",
19
+ next: "Next",
20
+ complete: "Complete",
21
+ create: "Create",
22
+ send: "Send",
23
+ today: "Today",
24
+ yesterday: "Yesterday",
25
+ viewAll: "View all",
26
+ notFound: "Not found",
27
+ noData: "No data",
28
+ loading: "Loading...",
29
+ progress: "Progress",
30
+ members: "members",
31
+ tasks: "tasks",
32
+ completed: "completed",
33
+ days: "days",
34
+ download: "Download",
35
+ details: "Details",
36
+ preview: "Preview",
37
+ assignToMe: "Assign to me"
38
+ },
39
+ sidebar: {
40
+ projects: "Projects",
41
+ documents: "Documents",
42
+ settings: "Settings",
43
+ recentProjects: "Recent Projects",
44
+ allProjects: "All Projects",
45
+ searchProject: "Search project...",
46
+ backToList: "Back to list",
47
+ collapse: "Collapse",
48
+ expandSidebar: "Expand sidebar",
49
+ collapseSidebar: "Collapse sidebar"
50
+ },
51
+ header: {
52
+ searchPlaceholder: "Search tasks, projects...",
53
+ services: "Services",
54
+ notifications: "Notifications",
55
+ viewAllNotifications: "View all notifications",
56
+ myAccount: "My Account",
57
+ profile: "Profile",
58
+ logout: "Log out",
59
+ searchServices: "Search services...",
60
+ noServiceFound: "No service found"
61
+ },
62
+ myTasks: {
63
+ title: "My Tasks",
64
+ count: "{{count}} tasks",
65
+ noTasks: "No tasks assigned"
66
+ },
67
+ status: {
68
+ backlog: "Backlog",
69
+ todo: "To Do",
70
+ inProgress: "In Progress",
71
+ review: "Review",
72
+ done: "Done"
73
+ },
74
+ priority: {
75
+ low: "Low",
76
+ medium: "Medium",
77
+ high: "High",
78
+ urgent: "Urgent"
79
+ },
80
+ service: {
81
+ hr: "Human Resources (HR)",
82
+ employeeManagement: "Employee Management",
83
+ attendance: "Attendance",
84
+ training: "Training",
85
+ recruitment: "Recruitment",
86
+ accounting: "Accounting & Finance",
87
+ accountingLabel: "Accounting",
88
+ invoice: "Invoices",
89
+ cashFund: "Cash Fund",
90
+ financialReport: "Financial Reports",
91
+ sales: "Sales & Commerce",
92
+ pos: "Point of Sale (POS)",
93
+ payment: "Payments",
94
+ crm: "CRM",
95
+ marketing: "Marketing",
96
+ operations: "Operations",
97
+ warehouse: "Warehouse & Inventory",
98
+ shipping: "Shipping",
99
+ facilityManagement: "Facility Management",
100
+ maintenance: "Maintenance",
101
+ support: "Support & Others",
102
+ helpdesk: "Helpdesk",
103
+ reportBI: "Reports & BI",
104
+ systemSettings: "System Settings"
105
+ },
106
+ notification: {
107
+ assignedTask: "assigned a task to you",
108
+ commentedTask: "commented on a task",
109
+ completedTask: "completed a task",
110
+ minutesAgo: "{{count}} minutes ago",
111
+ hoursAgo: "{{count}} hours ago",
112
+ daysAgo: "{{count}} days ago"
113
+ },
114
+ org: {
115
+ noOrgSelected: "No organization selected",
116
+ noBranchSelected: "No branch selected",
117
+ selectOrg: "Select Organization",
118
+ selectBranch: "Select Branch",
119
+ selectOrgDesc: "Please select the organization you want to work with.",
120
+ selectBranchDesc: "Select a branch to continue.",
121
+ orgStep: "Organization",
122
+ branchStep: "Branch",
123
+ branchCount: "{{count}} branches",
124
+ selectedOrg: "Selected organization",
125
+ searchBranch: "Search branches...",
126
+ noBranchFound: "No branches found"
127
+ },
128
+ settings: {
129
+ title: "Settings",
130
+ subtitle: "Manage your account and system preferences",
131
+ profileTab: "Profile",
132
+ notificationsTab: "Notifications",
133
+ securityTab: "Security",
134
+ preferencesTab: "Preferences",
135
+ personalInfo: "Personal Information",
136
+ personalInfoDesc: "Update your profile and avatar",
137
+ changePhoto: "Change photo",
138
+ photoHint: "JPG, PNG or GIF. Max 2MB",
139
+ firstName: "First name",
140
+ lastName: "Last name",
141
+ email: "Email",
142
+ phone: "Phone number",
143
+ bio: "Bio",
144
+ bioPlaceholder: "Write a few lines about yourself...",
145
+ saveSuccess: "Settings saved successfully!",
146
+ emailNotifications: "Email Notifications",
147
+ emailNotificationsDesc: "Manage email notifications",
148
+ receiveEmailNotif: "Receive email notifications",
149
+ receiveEmailNotifDesc: "Get emails about important activities",
150
+ taskUpdates: "Task updates",
151
+ taskUpdatesDesc: "Notify when tasks are assigned or updated",
152
+ newComments: "New comments",
153
+ newCommentsDesc: "Notify when someone comments on your tasks",
154
+ pushNotifications: "Push Notifications",
155
+ pushNotificationsDesc: "Manage browser notifications",
156
+ enablePush: "Enable push notifications",
157
+ enablePushDesc: "Show desktop notifications",
158
+ changePassword: "Change Password",
159
+ changePasswordDesc: "Update your password to secure your account",
160
+ currentPassword: "Current password",
161
+ newPassword: "New password",
162
+ confirmPassword: "Confirm new password",
163
+ updatePassword: "Update password",
164
+ passwordUpdated: "Password updated successfully!",
165
+ twoFactor: "Two-Factor Authentication",
166
+ twoFactorDesc: "Enhance account security with two-factor authentication",
167
+ enable2FA: "Enable 2FA",
168
+ enable2FADesc: "Require verification code on login",
169
+ appearance: "Appearance",
170
+ appearanceDesc: "Customize the interface to your preference",
171
+ theme: "Theme",
172
+ themeLight: "Light",
173
+ themeDark: "Dark",
174
+ themeSystem: "System",
175
+ language: "Language",
176
+ timezone: "Timezone"
177
+ },
178
+ login: {
179
+ subtitle: "Efficient project management",
180
+ title: "Sign in",
181
+ emailLabel: "Email",
182
+ passwordLabel: "Password",
183
+ forgotPassword: "Forgot password?",
184
+ forgotPasswordMsg: "Password reset feature coming soon",
185
+ passwordPlaceholder: "Enter password",
186
+ rememberMe: "Remember me",
187
+ loggingIn: "Signing in...",
188
+ loginButton: "Sign in",
189
+ emptyFieldsError: "Please enter both email and password",
190
+ success: "Signed in successfully!",
191
+ demoPassword: "Password: anything"
192
+ },
193
+ notFound: {
194
+ title: "Page not found",
195
+ description: "Sorry, the page you are looking for does not exist or has been moved.",
196
+ goBack: "Go back",
197
+ goHome: "Go home"
198
+ },
199
+ datePicker: {
200
+ selectDate: "Select date",
201
+ selectDateRange: "Select date range"
202
+ }
203
+ };
204
+
205
+ // src/locales/vi.json
206
+ var vi_default = {
207
+ common: {
208
+ save: "L\u01B0u thay \u0111\u1ED5i",
209
+ cancel: "H\u1EE7y",
210
+ delete: "X\xF3a",
211
+ edit: "Ch\u1EC9nh s\u1EEDa",
212
+ copy: "Sao ch\xE9p",
213
+ search: "T\xECm ki\u1EBFm",
214
+ filter: "B\u1ED9 l\u1ECDc",
215
+ close: "\u0110\xF3ng",
216
+ back: "Quay l\u1EA1i",
217
+ next: "Ti\u1EBFp theo",
218
+ complete: "Ho\xE0n th\xE0nh",
219
+ create: "T\u1EA1o",
220
+ send: "G\u1EEDi",
221
+ today: "H\xF4m nay",
222
+ yesterday: "H\xF4m qua",
223
+ viewAll: "Xem t\u1EA5t c\u1EA3",
224
+ notFound: "Kh\xF4ng t\xECm th\u1EA5y",
225
+ noData: "Kh\xF4ng c\xF3 d\u1EEF li\u1EC7u",
226
+ loading: "\u0110ang t\u1EA3i...",
227
+ progress: "Ti\u1EBFn \u0111\u1ED9",
228
+ members: "th\xE0nh vi\xEAn",
229
+ tasks: "tasks",
230
+ completed: "ho\xE0n th\xE0nh",
231
+ days: "ng\xE0y",
232
+ download: "T\u1EA3i xu\u1ED1ng",
233
+ details: "Chi ti\u1EBFt",
234
+ preview: "Xem tr\u01B0\u1EDBc",
235
+ assignToMe: "G\xE1n cho t\xF4i"
236
+ },
237
+ sidebar: {
238
+ projects: "D\u1EF1 \xE1n",
239
+ documents: "T\xE0i li\u1EC7u",
240
+ settings: "C\xE0i \u0111\u1EB7t",
241
+ recentProjects: "D\u1EF1 \xE1n g\u1EA7n \u0111\xE2y",
242
+ allProjects: "T\u1EA5t c\u1EA3 d\u1EF1 \xE1n",
243
+ searchProject: "T\xECm d\u1EF1 \xE1n...",
244
+ backToList: "Quay l\u1EA1i danh s\xE1ch",
245
+ collapse: "Thu g\u1ECDn",
246
+ expandSidebar: "M\u1EDF r\u1ED9ng sidebar",
247
+ collapseSidebar: "Thu g\u1ECDn sidebar"
248
+ },
249
+ header: {
250
+ searchPlaceholder: "T\xECm ki\u1EBFm task, d\u1EF1 \xE1n...",
251
+ services: "D\u1ECBch v\u1EE5",
252
+ notifications: "Th\xF4ng b\xE1o",
253
+ viewAllNotifications: "Xem t\u1EA5t c\u1EA3 th\xF4ng b\xE1o",
254
+ myAccount: "T\xE0i kho\u1EA3n c\u1EE7a t\xF4i",
255
+ profile: "H\u1ED3 s\u01A1",
256
+ logout: "\u0110\u0103ng xu\u1EA5t",
257
+ searchServices: "T\xECm d\u1ECBch v\u1EE5...",
258
+ noServiceFound: "Kh\xF4ng t\xECm th\u1EA5y d\u1ECBch v\u1EE5"
259
+ },
260
+ myTasks: {
261
+ title: "Task c\u1EE7a t\xF4i",
262
+ count: "{{count}} task",
263
+ noTasks: "Kh\xF4ng c\xF3 task n\xE0o \u0111\u01B0\u1EE3c giao"
264
+ },
265
+ status: {
266
+ backlog: "Backlog",
267
+ todo: "C\u1EA7n l\xE0m",
268
+ inProgress: "\u0110ang l\xE0m",
269
+ review: "Review",
270
+ done: "Ho\xE0n th\xE0nh"
271
+ },
272
+ priority: {
273
+ low: "Low",
274
+ medium: "Medium",
275
+ high: "High",
276
+ urgent: "Urgent"
277
+ },
278
+ service: {
279
+ hr: "Nh\xE2n s\u1EF1 (HR)",
280
+ employeeManagement: "Qu\u1EA3n l\xFD nh\xE2n vi\xEAn",
281
+ attendance: "Ch\u1EA5m c\xF4ng",
282
+ training: "\u0110\xE0o t\u1EA1o",
283
+ recruitment: "Tuy\u1EC3n d\u1EE5ng",
284
+ accounting: "K\u1EBF to\xE1n & T\xE0i ch\xEDnh",
285
+ accountingLabel: "K\u1EBF to\xE1n",
286
+ invoice: "H\xF3a \u0111\u01A1n",
287
+ cashFund: "Qu\u1EF9 ti\u1EC1n m\u1EB7t",
288
+ financialReport: "B\xE1o c\xE1o t\xE0i ch\xEDnh",
289
+ sales: "Kinh doanh & B\xE1n h\xE0ng",
290
+ pos: "B\xE1n h\xE0ng (POS)",
291
+ payment: "Thanh to\xE1n",
292
+ crm: "CRM",
293
+ marketing: "Marketing",
294
+ operations: "V\u1EADn h\xE0nh",
295
+ warehouse: "Kho & T\u1ED3n kho",
296
+ shipping: "V\u1EADn chuy\u1EC3n",
297
+ facilityManagement: "Qu\u1EA3n l\xFD c\u01A1 s\u1EDF",
298
+ maintenance: "B\u1EA3o tr\xEC",
299
+ support: "H\u1ED7 tr\u1EE3 & Kh\xE1c",
300
+ helpdesk: "Helpdesk",
301
+ reportBI: "B\xE1o c\xE1o & BI",
302
+ systemSettings: "C\xE0i \u0111\u1EB7t h\u1EC7 th\u1ED1ng"
303
+ },
304
+ notification: {
305
+ assignedTask: "\u0111\xE3 giao task cho b\u1EA1n",
306
+ commentedTask: "\u0111\xE3 comment trong task",
307
+ completedTask: "\u0111\xE3 ho\xE0n th\xE0nh task",
308
+ minutesAgo: "{{count}} ph\xFAt tr\u01B0\u1EDBc",
309
+ hoursAgo: "{{count}} gi\u1EDD tr\u01B0\u1EDBc",
310
+ daysAgo: "{{count}} ng\xE0y tr\u01B0\u1EDBc"
311
+ },
312
+ org: {
313
+ noOrgSelected: "Ch\u01B0a ch\u1ECDn t\u1ED5 ch\u1EE9c",
314
+ noBranchSelected: "Ch\u01B0a ch\u1ECDn chi nh\xE1nh",
315
+ selectOrg: "Ch\u1ECDn T\u1ED5 ch\u1EE9c",
316
+ selectBranch: "Ch\u1ECDn Chi nh\xE1nh",
317
+ selectOrgDesc: "Vui l\xF2ng ch\u1ECDn t\u1ED5 ch\u1EE9c b\u1EA1n mu\u1ED1n l\xE0m vi\u1EC7c.",
318
+ selectBranchDesc: "Ch\u1ECDn chi nh\xE1nh c\u1EE7a t\u1ED5 ch\u1EE9c \u0111\u1EC3 ti\u1EBFp t\u1EE5c.",
319
+ orgStep: "T\u1ED5 ch\u1EE9c",
320
+ branchStep: "Chi nh\xE1nh",
321
+ branchCount: "{{count}} chi nh\xE1nh",
322
+ selectedOrg: "T\u1ED5 ch\u1EE9c \u0111\xE3 ch\u1ECDn",
323
+ searchBranch: "T\xECm chi nh\xE1nh...",
324
+ noBranchFound: "Kh\xF4ng t\xECm th\u1EA5y chi nh\xE1nh"
325
+ },
326
+ settings: {
327
+ title: "C\xE0i \u0111\u1EB7t",
328
+ subtitle: "Qu\u1EA3n l\xFD th\xF4ng tin t\xE0i kho\u1EA3n v\xE0 t\xF9y ch\u1EC9nh h\u1EC7 th\u1ED1ng",
329
+ profileTab: "H\u1ED3 s\u01A1",
330
+ notificationsTab: "Th\xF4ng b\xE1o",
331
+ securityTab: "B\u1EA3o m\u1EADt",
332
+ preferencesTab: "T\xF9y ch\u1EC9nh",
333
+ personalInfo: "Th\xF4ng tin c\xE1 nh\xE2n",
334
+ personalInfoDesc: "C\u1EADp nh\u1EADt th\xF4ng tin h\u1ED3 s\u01A1 v\xE0 \u1EA3nh \u0111\u1EA1i di\u1EC7n c\u1EE7a b\u1EA1n",
335
+ changePhoto: "Thay \u0111\u1ED5i \u1EA3nh",
336
+ photoHint: "JPG, PNG ho\u1EB7c GIF. T\u1ED1i \u0111a 2MB",
337
+ firstName: "H\u1ECD",
338
+ lastName: "T\xEAn",
339
+ email: "Email",
340
+ phone: "S\u1ED1 \u0111i\u1EC7n tho\u1EA1i",
341
+ bio: "Gi\u1EDBi thi\u1EC7u",
342
+ bioPlaceholder: "Vi\u1EBFt v\xE0i d\xF2ng v\u1EC1 b\u1EA3n th\xE2n...",
343
+ saveSuccess: "C\xE0i \u0111\u1EB7t \u0111\xE3 \u0111\u01B0\u1EE3c l\u01B0u th\xE0nh c\xF4ng!",
344
+ emailNotifications: "Th\xF4ng b\xE1o Email",
345
+ emailNotificationsDesc: "Qu\u1EA3n l\xFD th\xF4ng b\xE1o g\u1EEDi \u0111\u1EBFn email c\u1EE7a b\u1EA1n",
346
+ receiveEmailNotif: "Nh\u1EADn th\xF4ng b\xE1o email",
347
+ receiveEmailNotifDesc: "Nh\u1EADn email v\u1EC1 c\xE1c ho\u1EA1t \u0111\u1ED9ng quan tr\u1ECDng",
348
+ taskUpdates: "C\u1EADp nh\u1EADt task",
349
+ taskUpdatesDesc: "Th\xF4ng b\xE1o khi c\xF3 task m\u1EDBi \u0111\u01B0\u1EE3c giao ho\u1EB7c c\u1EADp nh\u1EADt",
350
+ newComments: "B\xECnh lu\u1EADn m\u1EDBi",
351
+ newCommentsDesc: "Th\xF4ng b\xE1o khi c\xF3 ng\u01B0\u1EDDi b\xECnh lu\u1EADn trong task c\u1EE7a b\u1EA1n",
352
+ pushNotifications: "Th\xF4ng b\xE1o Push",
353
+ pushNotificationsDesc: "Qu\u1EA3n l\xFD th\xF4ng b\xE1o hi\u1EC3n th\u1ECB tr\xEAn tr\xECnh duy\u1EC7t",
354
+ enablePush: "B\u1EADt th\xF4ng b\xE1o push",
355
+ enablePushDesc: "Hi\u1EC3n th\u1ECB th\xF4ng b\xE1o tr\xEAn desktop",
356
+ changePassword: "\u0110\u1ED5i m\u1EADt kh\u1EA9u",
357
+ changePasswordDesc: "C\u1EADp nh\u1EADt m\u1EADt kh\u1EA9u \u0111\u1EC3 b\u1EA3o v\u1EC7 t\xE0i kho\u1EA3n c\u1EE7a b\u1EA1n",
358
+ currentPassword: "M\u1EADt kh\u1EA9u hi\u1EC7n t\u1EA1i",
359
+ newPassword: "M\u1EADt kh\u1EA9u m\u1EDBi",
360
+ confirmPassword: "X\xE1c nh\u1EADn m\u1EADt kh\u1EA9u m\u1EDBi",
361
+ updatePassword: "C\u1EADp nh\u1EADt m\u1EADt kh\u1EA9u",
362
+ passwordUpdated: "M\u1EADt kh\u1EA9u \u0111\xE3 \u0111\u01B0\u1EE3c c\u1EADp nh\u1EADt!",
363
+ twoFactor: "X\xE1c th\u1EF1c hai y\u1EBFu t\u1ED1",
364
+ twoFactorDesc: "T\u0103ng c\u01B0\u1EDDng b\u1EA3o m\u1EADt t\xE0i kho\u1EA3n v\u1EDBi x\xE1c th\u1EF1c hai y\u1EBFu t\u1ED1",
365
+ enable2FA: "B\u1EADt x\xE1c th\u1EF1c 2FA",
366
+ enable2FADesc: "Y\xEAu c\u1EA7u m\xE3 x\xE1c th\u1EF1c khi \u0111\u0103ng nh\u1EADp",
367
+ appearance: "Giao di\u1EC7n",
368
+ appearanceDesc: "T\xF9y ch\u1EC9nh giao di\u1EC7n theo s\u1EDF th\xEDch c\u1EE7a b\u1EA1n",
369
+ theme: "Ch\u1EE7 \u0111\u1EC1",
370
+ themeLight: "S\xE1ng",
371
+ themeDark: "T\u1ED1i",
372
+ themeSystem: "Theo h\u1EC7 th\u1ED1ng",
373
+ language: "Ng\xF4n ng\u1EEF",
374
+ timezone: "M\xFAi gi\u1EDD"
375
+ },
376
+ login: {
377
+ subtitle: "Qu\u1EA3n l\xFD d\u1EF1 \xE1n hi\u1EC7u qu\u1EA3",
378
+ title: "\u0110\u0103ng nh\u1EADp",
379
+ emailLabel: "Email",
380
+ passwordLabel: "M\u1EADt kh\u1EA9u",
381
+ forgotPassword: "Qu\xEAn m\u1EADt kh\u1EA9u?",
382
+ forgotPasswordMsg: "T\xEDnh n\u0103ng \u0111\u1EB7t l\u1EA1i m\u1EADt kh\u1EA9u s\u1EBD \u0111\u01B0\u1EE3c tri\u1EC3n khai sau",
383
+ passwordPlaceholder: "Nh\u1EADp m\u1EADt kh\u1EA9u",
384
+ rememberMe: "Ghi nh\u1EDB \u0111\u0103ng nh\u1EADp",
385
+ loggingIn: "\u0110ang \u0111\u0103ng nh\u1EADp...",
386
+ loginButton: "\u0110\u0103ng nh\u1EADp",
387
+ emptyFieldsError: "Vui l\xF2ng nh\u1EADp \u0111\u1EA7y \u0111\u1EE7 email v\xE0 m\u1EADt kh\u1EA9u",
388
+ success: "\u0110\u0103ng nh\u1EADp th\xE0nh c\xF4ng!",
389
+ demoPassword: "Password: b\u1EA5t k\u1EF3"
390
+ },
391
+ notFound: {
392
+ title: "Kh\xF4ng t\xECm th\u1EA5y trang",
393
+ description: "Xin l\u1ED7i, trang b\u1EA1n \u0111ang t\xECm ki\u1EBFm kh\xF4ng t\u1ED3n t\u1EA1i ho\u1EB7c \u0111\xE3 \u0111\u01B0\u1EE3c di chuy\u1EC3n.",
394
+ goBack: "Quay l\u1EA1i",
395
+ goHome: "V\u1EC1 trang ch\u1EE7"
396
+ },
397
+ datePicker: {
398
+ selectDate: "Ch\u1ECDn ng\xE0y",
399
+ selectDateRange: "Ch\u1ECDn kho\u1EA3ng ng\xE0y"
400
+ }
401
+ };
402
+
403
+ // src/locales/ja.json
404
+ var ja_default = {
405
+ common: {
406
+ save: "\u5909\u66F4\u3092\u4FDD\u5B58",
407
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
408
+ delete: "\u524A\u9664",
409
+ edit: "\u7DE8\u96C6",
410
+ copy: "\u30B3\u30D4\u30FC",
411
+ search: "\u691C\u7D22",
412
+ filter: "\u30D5\u30A3\u30EB\u30BF\u30FC",
413
+ close: "\u9589\u3058\u308B",
414
+ back: "\u623B\u308B",
415
+ next: "\u6B21\u3078",
416
+ complete: "\u5B8C\u4E86",
417
+ create: "\u4F5C\u6210",
418
+ send: "\u9001\u4FE1",
419
+ today: "\u4ECA\u65E5",
420
+ yesterday: "\u6628\u65E5",
421
+ viewAll: "\u3059\u3079\u3066\u8868\u793A",
422
+ notFound: "\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
423
+ noData: "\u30C7\u30FC\u30BF\u306A\u3057",
424
+ loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D...",
425
+ progress: "\u9032\u6357",
426
+ members: "\u30E1\u30F3\u30D0\u30FC",
427
+ tasks: "\u30BF\u30B9\u30AF",
428
+ completed: "\u5B8C\u4E86",
429
+ days: "\u65E5",
430
+ download: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
431
+ details: "\u8A73\u7D30",
432
+ preview: "\u30D7\u30EC\u30D3\u30E5\u30FC",
433
+ assignToMe: "\u81EA\u5206\u306B\u5272\u308A\u5F53\u3066"
434
+ },
435
+ sidebar: {
436
+ projects: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
437
+ documents: "\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8",
438
+ settings: "\u8A2D\u5B9A",
439
+ recentProjects: "\u6700\u8FD1\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
440
+ allProjects: "\u3059\u3079\u3066\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
441
+ searchProject: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u691C\u7D22...",
442
+ backToList: "\u30EA\u30B9\u30C8\u306B\u623B\u308B",
443
+ collapse: "\u6298\u308A\u305F\u305F\u3080",
444
+ expandSidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u5C55\u958B",
445
+ collapseSidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u6298\u308A\u305F\u305F\u3080"
446
+ },
447
+ header: {
448
+ searchPlaceholder: "\u30BF\u30B9\u30AF\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u691C\u7D22...",
449
+ services: "\u30B5\u30FC\u30D3\u30B9",
450
+ notifications: "\u901A\u77E5",
451
+ viewAllNotifications: "\u3059\u3079\u3066\u306E\u901A\u77E5\u3092\u8868\u793A",
452
+ myAccount: "\u30DE\u30A4\u30A2\u30AB\u30A6\u30F3\u30C8",
453
+ profile: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",
454
+ logout: "\u30ED\u30B0\u30A2\u30A6\u30C8",
455
+ searchServices: "\u30B5\u30FC\u30D3\u30B9\u3092\u691C\u7D22...",
456
+ noServiceFound: "\u30B5\u30FC\u30D3\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"
457
+ },
458
+ myTasks: {
459
+ title: "\u30DE\u30A4\u30BF\u30B9\u30AF",
460
+ count: "{{count}} \u30BF\u30B9\u30AF",
461
+ noTasks: "\u5272\u308A\u5F53\u3066\u3089\u308C\u305F\u30BF\u30B9\u30AF\u306F\u3042\u308A\u307E\u305B\u3093"
462
+ },
463
+ status: {
464
+ backlog: "\u30D0\u30C3\u30AF\u30ED\u30B0",
465
+ todo: "\u672A\u7740\u624B",
466
+ inProgress: "\u9032\u884C\u4E2D",
467
+ review: "\u30EC\u30D3\u30E5\u30FC",
468
+ done: "\u5B8C\u4E86"
469
+ },
470
+ priority: {
471
+ low: "\u4F4E",
472
+ medium: "\u4E2D",
473
+ high: "\u9AD8",
474
+ urgent: "\u7DCA\u6025"
475
+ },
476
+ service: {
477
+ hr: "\u4EBA\u4E8B (HR)",
478
+ employeeManagement: "\u5F93\u696D\u54E1\u7BA1\u7406",
479
+ attendance: "\u52E4\u6020\u7BA1\u7406",
480
+ training: "\u7814\u4FEE",
481
+ recruitment: "\u63A1\u7528",
482
+ accounting: "\u4F1A\u8A08\u30FB\u8CA1\u52D9",
483
+ accountingLabel: "\u4F1A\u8A08",
484
+ invoice: "\u8ACB\u6C42\u66F8",
485
+ cashFund: "\u73FE\u91D1\u7BA1\u7406",
486
+ financialReport: "\u8CA1\u52D9\u30EC\u30DD\u30FC\u30C8",
487
+ sales: "\u55B6\u696D\u30FB\u8CA9\u58F2",
488
+ pos: "POS\u8CA9\u58F2",
489
+ payment: "\u6C7A\u6E08",
490
+ crm: "CRM",
491
+ marketing: "\u30DE\u30FC\u30B1\u30C6\u30A3\u30F3\u30B0",
492
+ operations: "\u30AA\u30DA\u30EC\u30FC\u30B7\u30E7\u30F3",
493
+ warehouse: "\u5009\u5EAB\u30FB\u5728\u5EAB",
494
+ shipping: "\u914D\u9001",
495
+ facilityManagement: "\u65BD\u8A2D\u7BA1\u7406",
496
+ maintenance: "\u30E1\u30F3\u30C6\u30CA\u30F3\u30B9",
497
+ support: "\u30B5\u30DD\u30FC\u30C8\u30FB\u305D\u306E\u4ED6",
498
+ helpdesk: "\u30D8\u30EB\u30D7\u30C7\u30B9\u30AF",
499
+ reportBI: "\u30EC\u30DD\u30FC\u30C8 & BI",
500
+ systemSettings: "\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A"
501
+ },
502
+ notification: {
503
+ assignedTask: "\u30BF\u30B9\u30AF\u3092\u5272\u308A\u5F53\u3066\u307E\u3057\u305F",
504
+ commentedTask: "\u30BF\u30B9\u30AF\u306B\u30B3\u30E1\u30F3\u30C8\u3057\u307E\u3057\u305F",
505
+ completedTask: "\u30BF\u30B9\u30AF\u3092\u5B8C\u4E86\u3057\u307E\u3057\u305F",
506
+ minutesAgo: "{{count}}\u5206\u524D",
507
+ hoursAgo: "{{count}}\u6642\u9593\u524D",
508
+ daysAgo: "{{count}}\u65E5\u524D"
509
+ },
510
+ org: {
511
+ noOrgSelected: "\u7D44\u7E54\u304C\u672A\u9078\u629E",
512
+ noBranchSelected: "\u652F\u5E97\u304C\u672A\u9078\u629E",
513
+ selectOrg: "\u7D44\u7E54\u3092\u9078\u629E",
514
+ selectBranch: "\u652F\u5E97\u3092\u9078\u629E",
515
+ selectOrgDesc: "\u4F5C\u696D\u3059\u308B\u7D44\u7E54\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
516
+ selectBranchDesc: "\u7D9A\u884C\u3059\u308B\u652F\u5E97\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
517
+ orgStep: "\u7D44\u7E54",
518
+ branchStep: "\u652F\u5E97",
519
+ branchCount: "{{count}} \u652F\u5E97",
520
+ selectedOrg: "\u9078\u629E\u3055\u308C\u305F\u7D44\u7E54",
521
+ searchBranch: "\u652F\u5E97\u3092\u691C\u7D22...",
522
+ noBranchFound: "\u652F\u5E97\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"
523
+ },
524
+ settings: {
525
+ title: "\u8A2D\u5B9A",
526
+ subtitle: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3068\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A\u306E\u7BA1\u7406",
527
+ profileTab: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",
528
+ notificationsTab: "\u901A\u77E5",
529
+ securityTab: "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
530
+ preferencesTab: "\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA",
531
+ personalInfo: "\u500B\u4EBA\u60C5\u5831",
532
+ personalInfoDesc: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3068\u30A2\u30D0\u30BF\u30FC\u3092\u66F4\u65B0",
533
+ changePhoto: "\u5199\u771F\u3092\u5909\u66F4",
534
+ photoHint: "JPG\u3001PNG\u3001GIF\u3002\u6700\u59272MB",
535
+ firstName: "\u59D3",
536
+ lastName: "\u540D",
537
+ email: "\u30E1\u30FC\u30EB",
538
+ phone: "\u96FB\u8A71\u756A\u53F7",
539
+ bio: "\u81EA\u5DF1\u7D39\u4ECB",
540
+ bioPlaceholder: "\u81EA\u5DF1\u7D39\u4ECB\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044...",
541
+ saveSuccess: "\u8A2D\u5B9A\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\uFF01",
542
+ emailNotifications: "\u30E1\u30FC\u30EB\u901A\u77E5",
543
+ emailNotificationsDesc: "\u30E1\u30FC\u30EB\u901A\u77E5\u306E\u7BA1\u7406",
544
+ receiveEmailNotif: "\u30E1\u30FC\u30EB\u901A\u77E5\u3092\u53D7\u4FE1",
545
+ receiveEmailNotifDesc: "\u91CD\u8981\u306A\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u306E\u30E1\u30FC\u30EB\u3092\u53D7\u4FE1",
546
+ taskUpdates: "\u30BF\u30B9\u30AF\u66F4\u65B0",
547
+ taskUpdatesDesc: "\u30BF\u30B9\u30AF\u306E\u5272\u308A\u5F53\u3066\u3084\u66F4\u65B0\u6642\u306B\u901A\u77E5",
548
+ newComments: "\u65B0\u3057\u3044\u30B3\u30E1\u30F3\u30C8",
549
+ newCommentsDesc: "\u30BF\u30B9\u30AF\u306B\u30B3\u30E1\u30F3\u30C8\u304C\u3042\u3063\u305F\u6642\u306B\u901A\u77E5",
550
+ pushNotifications: "\u30D7\u30C3\u30B7\u30E5\u901A\u77E5",
551
+ pushNotificationsDesc: "\u30D6\u30E9\u30A6\u30B6\u901A\u77E5\u306E\u7BA1\u7406",
552
+ enablePush: "\u30D7\u30C3\u30B7\u30E5\u901A\u77E5\u3092\u6709\u52B9\u5316",
553
+ enablePushDesc: "\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u901A\u77E5\u3092\u8868\u793A",
554
+ changePassword: "\u30D1\u30B9\u30EF\u30FC\u30C9\u5909\u66F4",
555
+ changePasswordDesc: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4FDD\u8B77\u3059\u308B\u305F\u3081\u306B\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F4\u65B0",
556
+ currentPassword: "\u73FE\u5728\u306E\u30D1\u30B9\u30EF\u30FC\u30C9",
557
+ newPassword: "\u65B0\u3057\u3044\u30D1\u30B9\u30EF\u30FC\u30C9",
558
+ confirmPassword: "\u65B0\u3057\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u78BA\u8A8D",
559
+ updatePassword: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F4\u65B0",
560
+ passwordUpdated: "\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F\uFF01",
561
+ twoFactor: "\u4E8C\u8981\u7D20\u8A8D\u8A3C",
562
+ twoFactorDesc: "\u4E8C\u8981\u7D20\u8A8D\u8A3C\u3067\u30A2\u30AB\u30A6\u30F3\u30C8\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u3092\u5F37\u5316",
563
+ enable2FA: "2FA\u3092\u6709\u52B9\u5316",
564
+ enable2FADesc: "\u30ED\u30B0\u30A4\u30F3\u6642\u306B\u8A8D\u8A3C\u30B3\u30FC\u30C9\u3092\u8981\u6C42",
565
+ appearance: "\u5916\u89B3",
566
+ appearanceDesc: "\u304A\u597D\u307F\u306B\u5408\u308F\u305B\u3066\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA",
567
+ theme: "\u30C6\u30FC\u30DE",
568
+ themeLight: "\u30E9\u30A4\u30C8",
569
+ themeDark: "\u30C0\u30FC\u30AF",
570
+ themeSystem: "\u30B7\u30B9\u30C6\u30E0",
571
+ language: "\u8A00\u8A9E",
572
+ timezone: "\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3"
573
+ },
574
+ login: {
575
+ subtitle: "\u52B9\u7387\u7684\u306A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406",
576
+ title: "\u30ED\u30B0\u30A4\u30F3",
577
+ emailLabel: "\u30E1\u30FC\u30EB",
578
+ passwordLabel: "\u30D1\u30B9\u30EF\u30FC\u30C9",
579
+ forgotPassword: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5FD8\u308C\u305F\uFF1F",
580
+ forgotPasswordMsg: "\u30D1\u30B9\u30EF\u30FC\u30C9\u30EA\u30BB\u30C3\u30C8\u6A5F\u80FD\u306F\u8FD1\u65E5\u516C\u958B\u4E88\u5B9A",
581
+ passwordPlaceholder: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B",
582
+ rememberMe: "\u30ED\u30B0\u30A4\u30F3\u3092\u8A18\u61B6",
583
+ loggingIn: "\u30ED\u30B0\u30A4\u30F3\u4E2D...",
584
+ loginButton: "\u30ED\u30B0\u30A4\u30F3",
585
+ emptyFieldsError: "\u30E1\u30FC\u30EB\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
586
+ success: "\u30ED\u30B0\u30A4\u30F3\u306B\u6210\u529F\u3057\u307E\u3057\u305F\uFF01",
587
+ demoPassword: "Password: \u4EFB\u610F"
588
+ },
589
+ notFound: {
590
+ title: "\u30DA\u30FC\u30B8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
591
+ description: "\u7533\u3057\u8A33\u3042\u308A\u307E\u305B\u3093\u304C\u3001\u304A\u63A2\u3057\u306E\u30DA\u30FC\u30B8\u306F\u5B58\u5728\u3057\u306A\u3044\u304B\u3001\u79FB\u52D5\u3055\u308C\u307E\u3057\u305F\u3002",
592
+ goBack: "\u623B\u308B",
593
+ goHome: "\u30DB\u30FC\u30E0\u3078"
594
+ },
595
+ datePicker: {
596
+ selectDate: "\u65E5\u4ED8\u3092\u9078\u629E",
597
+ selectDateRange: "\u671F\u9593\u3092\u9078\u629E"
598
+ }
599
+ };
600
+
601
+ // src/i18n.ts
602
+ var languageNames = {
603
+ vi: "Ti\u1EBFng Vi\u1EC7t",
604
+ en: "English",
605
+ ja: "\u65E5\u672C\u8A9E"
606
+ };
607
+ function loadSavedLanguage() {
608
+ if (typeof window === "undefined") return "vi";
609
+ const saved = localStorage.getItem("omnify_language");
610
+ if (saved === "vi" || saved === "en" || saved === "ja") return saved;
611
+ return "vi";
612
+ }
613
+ i18n.use(initReactI18next).init({
614
+ resources: {
615
+ en: { shell: en_default },
616
+ vi: { shell: vi_default },
617
+ ja: { shell: ja_default }
618
+ },
619
+ lng: loadSavedLanguage(),
620
+ fallbackLng: "vi",
621
+ defaultNS: "shell",
622
+ fallbackNS: "shell",
623
+ ns: ["shell"],
624
+ interpolation: {
625
+ escapeValue: false
626
+ // React already escapes
627
+ }
628
+ });
629
+ function initOmnifyI18n(options = {}) {
630
+ const { namespaces, overrides } = options;
631
+ if (namespaces) {
632
+ for (const [ns, langs] of Object.entries(namespaces)) {
633
+ for (const [lang, resources] of Object.entries(langs)) {
634
+ i18n.addResourceBundle(lang, ns, resources, true, true);
635
+ }
636
+ }
637
+ }
638
+ if (overrides) {
639
+ for (const [lang, keys] of Object.entries(overrides)) {
640
+ const nested = {};
641
+ for (const [flatKey, value] of Object.entries(keys)) {
642
+ const parts = flatKey.split(".");
643
+ if (parts.length === 2) {
644
+ const [section, key] = parts;
645
+ if (!nested[section]) nested[section] = {};
646
+ nested[section][key] = value;
647
+ }
648
+ }
649
+ i18n.addResourceBundle(lang, "shell", nested, true, true);
650
+ }
651
+ }
652
+ }
653
+ function changeLanguage(lang) {
654
+ localStorage.setItem("omnify_language", lang);
655
+ return i18n.changeLanguage(lang);
656
+ }
657
+ var i18n_default = i18n;
658
+
659
+ export { changeLanguage, i18n_default, initOmnifyI18n, languageNames };
660
+ //# sourceMappingURL=chunk-OMIE3Z5N.js.map
661
+ //# sourceMappingURL=chunk-OMIE3Z5N.js.map