@rebasepro/app 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +4 -1
  2. package/dist/components/index.d.ts +0 -3
  3. package/dist/contexts/AuthControllerContext.d.ts +2 -1
  4. package/dist/contexts/CustomizationControllerContext.d.ts +2 -1
  5. package/dist/contexts/DialogsProvider.d.ts +2 -1
  6. package/dist/contexts/RebaseDataContext.d.ts +10 -1
  7. package/dist/contexts/StorageSourceContext.d.ts +11 -1
  8. package/dist/core/RebaseProps.d.ts +2 -12
  9. package/dist/debug/index.d.ts +19 -0
  10. package/dist/debug.js +3631 -0
  11. package/dist/hooks/data/delete.d.ts +16 -7
  12. package/dist/hooks/data/save.d.ts +18 -4
  13. package/dist/hooks/index.d.ts +1 -0
  14. package/dist/hooks/useAdminModeController.d.ts +5 -4
  15. package/dist/hooks/useNavigationGroupLabel.d.ts +17 -0
  16. package/dist/hooks/useStudioBridge.d.ts +33 -0
  17. package/dist/index.es.js +2599 -6980
  18. package/dist/index.es.js.map +1 -1
  19. package/dist/vitePlugin.d.ts +22 -0
  20. package/dist/vitePlugin.js +40 -1
  21. package/package.json +42 -31
  22. package/src/auth/api.ts +0 -134
  23. package/src/auth/index.ts +0 -26
  24. package/src/auth/types.ts +0 -115
  25. package/src/auth/useRebaseAuthController.ts +0 -345
  26. package/src/collections/collection_view_config.ts +0 -76
  27. package/src/collections/entity-display-cache.ts +0 -195
  28. package/src/collections/entity-display.ts +0 -77
  29. package/src/collections/entity_image_preview.ts +0 -61
  30. package/src/collections/filter-operator-resolution.ts +0 -119
  31. package/src/collections/form-layout.ts +0 -394
  32. package/src/collections/index.ts +0 -13
  33. package/src/collections/navigation_from_path.ts +0 -123
  34. package/src/collections/navigation_utils.ts +0 -171
  35. package/src/collections/parent_references_from_path.ts +0 -59
  36. package/src/collections/property-path.ts +0 -30
  37. package/src/collections/property_presentation.ts +0 -264
  38. package/src/collections/summary-property.ts +0 -114
  39. package/src/collections/title-property.ts +0 -312
  40. package/src/components/AIIcon.tsx +0 -47
  41. package/src/components/AuthSimulationMenu.tsx +0 -0
  42. package/src/components/ConfirmationDialog.tsx +0 -48
  43. package/src/components/Debug/UIReferenceView.tsx +0 -1053
  44. package/src/components/Debug/UIStyleGuide.tsx +0 -159
  45. package/src/components/Debug/collection-views/CardViewDemo.tsx +0 -87
  46. package/src/components/Debug/collection-views/CollectionTableDemo.tsx +0 -107
  47. package/src/components/Debug/collection-views/KanbanBoardDemo.tsx +0 -89
  48. package/src/components/Debug/collection-views/index.ts +0 -3
  49. package/src/components/Debug/collection-views/sample_data.ts +0 -44
  50. package/src/components/Debug/crm-dashboard/CalendarWidget.tsx +0 -387
  51. package/src/components/Debug/crm-dashboard/CrmDashboardDemo.tsx +0 -1100
  52. package/src/components/Debug/crm-dashboard/DashboardMetrics.tsx +0 -131
  53. package/src/components/Debug/crm-dashboard/PipelineOverview.tsx +0 -288
  54. package/src/components/Debug/crm-dashboard/RecentActivity.tsx +0 -213
  55. package/src/components/Debug/crm-dashboard/TaskFilters.tsx +0 -182
  56. package/src/components/Debug/crm-dashboard/TaskTable.tsx +0 -425
  57. package/src/components/Debug/crm-dashboard/TasksView.tsx +0 -234
  58. package/src/components/ErrorTooltip.tsx +0 -12
  59. package/src/components/ErrorView.tsx +0 -94
  60. package/src/components/LanguageToggle.tsx +0 -59
  61. package/src/components/LoginView/LoginView.tsx +0 -1235
  62. package/src/components/LoginView/index.ts +0 -2
  63. package/src/components/LoginView/oauth-redirect-flow.ts +0 -184
  64. package/src/components/NotFoundPage.tsx +0 -27
  65. package/src/components/RebaseAuth.tsx +0 -27
  66. package/src/components/RebaseLogo.tsx +0 -88
  67. package/src/components/SchemaDriftBanner.tsx +0 -102
  68. package/src/components/UnsavedChangesDialog.tsx +0 -46
  69. package/src/components/UserDisplay.tsx +0 -54
  70. package/src/components/UserSelectPopover.tsx +0 -399
  71. package/src/components/UserSettingsView.tsx +0 -318
  72. package/src/components/common/index.ts +0 -6
  73. package/src/components/common/table_height.tsx +0 -21
  74. package/src/components/common/types.tsx +0 -66
  75. package/src/components/common/useColumnsIds.tsx +0 -261
  76. package/src/components/common/useDataTableController.tsx +0 -571
  77. package/src/components/common/useDebouncedData.ts +0 -49
  78. package/src/components/common/useScrollRestoration.tsx +0 -68
  79. package/src/components/index.tsx +0 -26
  80. package/src/contexts/AdminModeController.tsx +0 -11
  81. package/src/contexts/AnalyticsContext.tsx +0 -4
  82. package/src/contexts/AuthControllerContext.tsx +0 -4
  83. package/src/contexts/CollectionResolverContext.tsx +0 -24
  84. package/src/contexts/CollectionScopeContext.tsx +0 -68
  85. package/src/contexts/ComponentOverrideContext.tsx +0 -81
  86. package/src/contexts/CustomizationControllerContext.tsx +0 -4
  87. package/src/contexts/DataDriverContext.tsx +0 -4
  88. package/src/contexts/DataSourcesContext.tsx +0 -36
  89. package/src/contexts/DatabaseAdminContext.tsx +0 -4
  90. package/src/contexts/DialogsProvider.tsx +0 -56
  91. package/src/contexts/EffectiveRoleController.tsx +0 -12
  92. package/src/contexts/ModeController.tsx +0 -11
  93. package/src/contexts/RebaseClientInstanceContext.tsx +0 -7
  94. package/src/contexts/RebaseDataContext.tsx +0 -4
  95. package/src/contexts/SnackbarProvider.tsx +0 -15
  96. package/src/contexts/StorageSourceContext.tsx +0 -4
  97. package/src/contexts/StorageSourcesContext.tsx +0 -30
  98. package/src/contexts/UserConfigurationPersistenceContext.tsx +0 -4
  99. package/src/contexts/index.ts +0 -18
  100. package/src/core/PluginLifecycleManager.tsx +0 -96
  101. package/src/core/PluginProviderStack.tsx +0 -40
  102. package/src/core/Rebase.tsx +0 -488
  103. package/src/core/RebaseProps.tsx +0 -333
  104. package/src/core/RebaseRouter.tsx +0 -18
  105. package/src/core/RebaseRoutes.tsx +0 -24
  106. package/src/core/index.tsx +0 -5
  107. package/src/hooks/ApiConfigContext.tsx +0 -83
  108. package/src/hooks/data/collectionQuery.ts +0 -55
  109. package/src/hooks/data/delete.ts +0 -56
  110. package/src/hooks/data/save.ts +0 -78
  111. package/src/hooks/data/useCollection.tsx +0 -183
  112. package/src/hooks/data/useData.tsx +0 -18
  113. package/src/hooks/data/useDataOrder.ts +0 -26
  114. package/src/hooks/data/useFetch.tsx +0 -156
  115. package/src/hooks/data/useRelationSelector.tsx +0 -280
  116. package/src/hooks/index.tsx +0 -45
  117. package/src/hooks/useAdminModeController.tsx +0 -23
  118. package/src/hooks/useAnalyticsController.tsx +0 -8
  119. package/src/hooks/useAuthController.tsx +0 -15
  120. package/src/hooks/useAuthSubscription.ts +0 -130
  121. package/src/hooks/useBackendStorageSource.ts +0 -295
  122. package/src/hooks/useBridgeRegistration.tsx +0 -32
  123. package/src/hooks/useBrowserTitleAndIcon.tsx +0 -23
  124. package/src/hooks/useBuildAdminModeController.tsx +0 -29
  125. package/src/hooks/useBuildEffectiveRoleController.tsx +0 -30
  126. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +0 -83
  127. package/src/hooks/useBuildModeController.tsx +0 -73
  128. package/src/hooks/useClipboard.tsx +0 -158
  129. package/src/hooks/useCollapsedGroups.ts +0 -116
  130. package/src/hooks/useComponentOverride.tsx +0 -59
  131. package/src/hooks/useCustomizationController.tsx +0 -14
  132. package/src/hooks/useDialogsController.tsx +0 -15
  133. package/src/hooks/useEffectiveRoleController.tsx +0 -10
  134. package/src/hooks/useLargeLayout.tsx +0 -65
  135. package/src/hooks/useModeController.tsx +0 -23
  136. package/src/hooks/useNavigationBlocker.tsx +0 -108
  137. package/src/hooks/usePermissions.ts +0 -45
  138. package/src/hooks/useRebaseClient.tsx +0 -10
  139. package/src/hooks/useRebaseContext.tsx +0 -84
  140. package/src/hooks/useRebaseRegistry.tsx +0 -91
  141. package/src/hooks/useResolvedComponent.tsx +0 -195
  142. package/src/hooks/useSlot.tsx +0 -64
  143. package/src/hooks/useSnackbarController.tsx +0 -80
  144. package/src/hooks/useStorageSource.tsx +0 -11
  145. package/src/hooks/useStudioBridge.tsx +0 -258
  146. package/src/hooks/useTranslation.ts +0 -38
  147. package/src/hooks/useUnsavedChangesDialog.tsx +0 -67
  148. package/src/hooks/useUserConfigurationPersistence.tsx +0 -11
  149. package/src/i18n/RebaseI18nProvider.tsx +0 -159
  150. package/src/index.ts +0 -32
  151. package/src/internal/common.tsx +0 -28
  152. package/src/internal/useRestoreScroll.tsx +0 -69
  153. package/src/locales/de.ts +0 -941
  154. package/src/locales/en.ts +0 -1021
  155. package/src/locales/es.ts +0 -962
  156. package/src/locales/fr.ts +0 -941
  157. package/src/locales/hi.ts +0 -941
  158. package/src/locales/it.ts +0 -941
  159. package/src/locales/pt.ts +0 -949
  160. package/src/util/constants.ts +0 -7
  161. package/src/util/createFormexStub.tsx +0 -66
  162. package/src/util/entity_cache.ts +0 -242
  163. package/src/util/enums.ts +0 -34
  164. package/src/util/icon_list.ts +0 -22
  165. package/src/util/icons.tsx +0 -129
  166. package/src/util/index.ts +0 -13
  167. package/src/util/local_storage.ts +0 -66
  168. package/src/util/previews.ts +0 -127
  169. package/src/util/useStorageUploadController.tsx +0 -354
  170. package/src/vitePlugin.ts +0 -215
  171. /package/dist/{components/Debug → debug}/UIReferenceView.d.ts +0 -0
  172. /package/dist/{components/Debug → debug}/UIStyleGuide.d.ts +0 -0
  173. /package/dist/{components/Debug → debug}/collection-views/CardViewDemo.d.ts +0 -0
  174. /package/dist/{components/Debug → debug}/collection-views/CollectionTableDemo.d.ts +0 -0
  175. /package/dist/{components/Debug → debug}/collection-views/KanbanBoardDemo.d.ts +0 -0
  176. /package/dist/{components/Debug → debug}/collection-views/index.d.ts +0 -0
  177. /package/dist/{components/Debug → debug}/collection-views/sample_data.d.ts +0 -0
  178. /package/dist/{components/Debug → debug}/crm-dashboard/CalendarWidget.d.ts +0 -0
  179. /package/dist/{components/Debug → debug}/crm-dashboard/CrmDashboardDemo.d.ts +0 -0
  180. /package/dist/{components/Debug → debug}/crm-dashboard/DashboardMetrics.d.ts +0 -0
  181. /package/dist/{components/Debug → debug}/crm-dashboard/PipelineOverview.d.ts +0 -0
  182. /package/dist/{components/Debug → debug}/crm-dashboard/RecentActivity.d.ts +0 -0
  183. /package/dist/{components/Debug → debug}/crm-dashboard/TaskFilters.d.ts +0 -0
  184. /package/dist/{components/Debug → debug}/crm-dashboard/TaskTable.d.ts +0 -0
  185. /package/dist/{components/Debug → debug}/crm-dashboard/TasksView.d.ts +0 -0
@@ -1,234 +0,0 @@
1
- import React, { useState, useMemo, useCallback } from "react";
2
- import { TaskFilters } from "./TaskFilters";
3
- import { TaskTable } from "./TaskTable";
4
-
5
- /* ── Types ──────────────────────────────────────────────────── */
6
-
7
- interface TaskEntity {
8
- id: string;
9
- values: {
10
- title: string;
11
- status: string;
12
- resolution: string | null;
13
- dueDate: string | null;
14
- stageId: string | null;
15
- description: string | null;
16
- notes: string | null;
17
- clientId: string | null;
18
- client?: { name?: string } | null;
19
- priority?: string | null;
20
- createdAt: string | null;
21
- };
22
- }
23
-
24
- type QuickFilter = "all" | "overdue";
25
-
26
- const PENDING_PAGE_SIZE = 50;
27
-
28
- function isDueDateOverdue(dateStr: string | null): boolean {
29
- if (!dateStr) return false;
30
- const d = new Date(dateStr);
31
- if (isNaN(d.getTime())) return false;
32
- const now = new Date();
33
- const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
34
- return d < today;
35
- }
36
-
37
- export interface TasksViewProps {
38
- loading: boolean;
39
- tasks: TaskEntity[];
40
- togglingIds: Set<string>;
41
- onToggleTask: (taskId: string, currentStatus: string) => void;
42
- onOpenTask: (taskId: string) => void;
43
- onOpenClient: (clientId: string) => void;
44
- clientsMap: Map<string, { name: string; picture?: string }>;
45
- pipelineStages: any[];
46
- recentlyToggledIds: Set<string>;
47
- completedTasks: TaskEntity[];
48
- completedLoaded: boolean;
49
- loadingCompleted: boolean;
50
- completedHasMore: boolean;
51
- onExpandCompleted: () => void;
52
- onLoadMoreCompleted: () => void;
53
- }
54
-
55
- /* ── Component ──────────────────────────────────────────────── */
56
-
57
- export function TasksView({
58
- loading,
59
- tasks,
60
- togglingIds,
61
- onToggleTask,
62
- onOpenTask,
63
- onOpenClient,
64
- clientsMap,
65
- pipelineStages,
66
- recentlyToggledIds,
67
- completedTasks,
68
- completedLoaded,
69
- loadingCompleted,
70
- completedHasMore,
71
- onExpandCompleted,
72
- onLoadMoreCompleted
73
- }: TasksViewProps) {
74
- const stageLabels: Record<string, string> = useMemo(
75
- () => Object.fromEntries(
76
- pipelineStages.map(s => [s.values?.stageKey, s.values?.label])
77
- ),
78
- [pipelineStages]
79
- );
80
-
81
- const stageFilterOrder: string[] = useMemo(
82
- () => pipelineStages.map(s => s.values?.stageKey).filter(Boolean),
83
- [pipelineStages]
84
- );
85
-
86
- // ── Filtering state ──
87
- const [quickFilter, setQuickFilter] = useState<QuickFilter>("all");
88
- const [stageFilter, setStageFilter] = useState<string | null>(null);
89
- const [clientFilter, setClientFilter] = useState<string | null>(null);
90
- const [searchText, setSearchText] = useState<string>("");
91
- const [visiblePendingCount, setVisiblePendingCount] = useState(PENDING_PAGE_SIZE);
92
-
93
- /* ── Derived data ── */
94
- const overdueTasks = useMemo(
95
- () => tasks.filter(t =>
96
- t.values?.status === "pending" &&
97
- !recentlyToggledIds.has(t.id) &&
98
- isDueDateOverdue(t.values?.dueDate)
99
- ),
100
- [tasks, recentlyToggledIds]
101
- );
102
-
103
- // Unique client IDs in current pending tasks
104
- const activeClientIds = useMemo(() => {
105
- const ids = new Set<string>();
106
- tasks.forEach(t => {
107
- if (t.values?.clientId) ids.add(t.values.clientId);
108
- });
109
- return Array.from(ids).sort((a, b) => {
110
- const na = clientsMap.get(a)?.name || "";
111
- const nb = clientsMap.get(b)?.name || "";
112
- return na.localeCompare(nb);
113
- });
114
- }, [tasks, clientsMap]);
115
-
116
- // Stage counts for badge display
117
- const stageCounts = useMemo(() => {
118
- const counts: Record<string, number> = {};
119
- tasks.forEach(t => {
120
- if (t.values?.status === "pending" && t.values?.stageId) {
121
- counts[t.values.stageId] = (counts[t.values.stageId] || 0) + 1;
122
- }
123
- });
124
- return counts;
125
- }, [tasks]);
126
-
127
- // Apply filters to pending tasks
128
- const filteredPendingTasks = useMemo(() => {
129
- let filtered = tasks.filter(t =>
130
- t.values?.status === "pending" ||
131
- (t.values?.status === "completed" && recentlyToggledIds.has(t.id))
132
- );
133
-
134
- if (quickFilter === "overdue") {
135
- filtered = filtered.filter(t =>
136
- isDueDateOverdue(t.values?.dueDate) ||
137
- recentlyToggledIds.has(t.id)
138
- );
139
- }
140
-
141
- if (stageFilter) {
142
- filtered = filtered.filter(t =>
143
- t.values?.stageId === stageFilter ||
144
- recentlyToggledIds.has(t.id)
145
- );
146
- }
147
-
148
- if (clientFilter) {
149
- filtered = filtered.filter(t =>
150
- t.values?.clientId === clientFilter ||
151
- recentlyToggledIds.has(t.id)
152
- );
153
- }
154
-
155
- if (searchText.trim()) {
156
- const q = searchText.trim().toLowerCase();
157
- filtered = filtered.filter(t => {
158
- const title = (t.values?.title || "").toLowerCase();
159
- const desc = (t.values?.description || "").toLowerCase();
160
- const clientName = t.values?.clientId
161
- ? (clientsMap.get(t.values.clientId)?.name || "").toLowerCase()
162
- : "";
163
- return title.includes(q) || desc.includes(q) || clientName.includes(q);
164
- });
165
- }
166
-
167
- return filtered;
168
- }, [tasks, recentlyToggledIds, quickFilter, stageFilter, clientFilter, searchText, clientsMap]);
169
-
170
- const visiblePendingTasks = useMemo(() =>
171
- filteredPendingTasks.slice(0, visiblePendingCount),
172
- [filteredPendingTasks, visiblePendingCount]
173
- );
174
- const hasMorePending = filteredPendingTasks.length > visiblePendingCount;
175
- const pendingCount = filteredPendingTasks.length;
176
-
177
- const handleClearAllFilters = useCallback(() => {
178
- setQuickFilter("all");
179
- setStageFilter(null);
180
- setClientFilter(null);
181
- setSearchText("");
182
- }, []);
183
-
184
- const hasActiveFilter = quickFilter !== "all" || stageFilter !== null || clientFilter !== null || searchText !== "";
185
-
186
- return (
187
- <div className="flex flex-col h-full bg-white dark:bg-surface-900">
188
- <div className="flex flex-col gap-4 overflow-y-auto flex-1">
189
- <TaskFilters
190
- quickFilter={quickFilter}
191
- onQuickFilterChange={setQuickFilter}
192
- stageFilter={stageFilter}
193
- onStageFilterChange={setStageFilter}
194
- clientFilter={clientFilter}
195
- onClientFilterChange={setClientFilter}
196
- searchText={searchText}
197
- onSearchTextChange={setSearchText}
198
- hasActiveFilter={hasActiveFilter}
199
- onClearAllFilters={handleClearAllFilters}
200
- overdueTasks={overdueTasks}
201
- pendingTasks={tasks.filter(t => t.values?.status === "pending" && !recentlyToggledIds.has(t.id))}
202
- stageLabels={stageLabels}
203
- stageFilterOrder={stageFilterOrder}
204
- stageCounts={stageCounts}
205
- activeClientIds={activeClientIds}
206
- clientsMap={clientsMap}
207
- />
208
-
209
- <TaskTable
210
- tasks={tasks}
211
- loading={loading}
212
- pendingTasks={filteredPendingTasks}
213
- visiblePendingTasks={visiblePendingTasks}
214
- hasMorePending={hasMorePending}
215
- onLoadMorePending={() => setVisiblePendingCount(prev => prev + PENDING_PAGE_SIZE)}
216
- pendingCount={pendingCount}
217
- togglingIds={togglingIds}
218
- onToggleTask={onToggleTask}
219
- onOpenTask={onOpenTask}
220
- onOpenClient={onOpenClient}
221
- clientsMap={clientsMap}
222
- stageLabels={stageLabels}
223
- recentlyToggledIds={recentlyToggledIds}
224
- completedTasks={completedTasks}
225
- completedLoaded={completedLoaded}
226
- loadingCompleted={loadingCompleted}
227
- completedHasMore={completedHasMore}
228
- onExpandCompleted={onExpandCompleted}
229
- onLoadMoreCompleted={onLoadMoreCompleted}
230
- />
231
- </div>
232
- </div>
233
- );
234
- }
@@ -1,12 +0,0 @@
1
- import React from "react";
2
- import { Tooltip, TooltipProps } from "@rebasepro/ui";
3
-
4
- export function ErrorTooltip(props: TooltipProps) {
5
- return (
6
- <Tooltip {...props}
7
- className={props.className}
8
- tooltipClassName={"text-red-500! bg-red-50"}>
9
- {props.children}
10
- </Tooltip>
11
- );
12
- }
@@ -1,94 +0,0 @@
1
- import React from "react";
2
- import { ErrorTooltip } from "./ErrorTooltip";
3
- import { AlertTriangleIcon, Button, Typography, iconSize } from "@rebasepro/ui";
4
-
5
- /**
6
- * @group Components
7
- */
8
- export interface ErrorViewProps {
9
- title?: string;
10
- error: Error | React.ReactElement | string,
11
- tooltip?: string,
12
- onRetry?: () => void;
13
- }
14
-
15
- /**
16
- * Generic error view. Displayed for example when an unexpected value comes
17
- * from the driver in a collection view.
18
- * @param title
19
- * @param error
20
- * @param tooltip
21
- * @param onRetry
22
-
23
- * @group Components
24
- */
25
- export function ErrorView({
26
- title,
27
- error,
28
- tooltip,
29
- onRetry
30
- }: ErrorViewProps): React.ReactElement {
31
- const message = error instanceof Error ? error.message : error;
32
- // Extract error code from ApiError instances (e.g. PG error codes like "42P01")
33
- const errorCode = error instanceof Error && "code" in error
34
- ? (error as Error & { code?: string }).code
35
- : undefined;
36
-
37
- const body = (
38
- <div className="flex flex-col m-2">
39
- <div className="flex items-start gap-2.5">
40
- <AlertTriangleIcon
41
- size={iconSize.smallest}
42
- className="shrink-0 text-red-500 dark:text-red-400 mt-0.5"
43
- />
44
- <div className="flex-1 min-w-0">
45
- {title && (
46
- <Typography
47
- variant="body2"
48
- color="primary"
49
- className="font-semibold mb-0.5"
50
- >
51
- {title}
52
- </Typography>
53
- )}
54
- <Typography
55
- variant="body2"
56
- color="secondary"
57
- className="leading-relaxed"
58
- >
59
- {message}
60
- </Typography>
61
- {errorCode && (
62
- <span
63
- className="inline-block mt-1 px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-200 dark:bg-surface-700 text-text-secondary"
64
- >
65
- {errorCode}
66
- </span>
67
- )}
68
- {onRetry && (
69
- <div className="mt-3">
70
- <Button
71
- variant="outlined"
72
- color="neutral"
73
- size="small"
74
- onClick={onRetry}
75
- className="font-semibold"
76
- >
77
- Try again
78
- </Button>
79
- </div>
80
- )}
81
- </div>
82
- </div>
83
- </div>
84
- );
85
-
86
- if (tooltip) {
87
- return (
88
- <ErrorTooltip title={tooltip}>
89
- {body}
90
- </ErrorTooltip>
91
- );
92
- }
93
- return body;
94
- }
@@ -1,59 +0,0 @@
1
- import React from "react";
2
- import { CheckIcon, IconButton, iconSize, LanguagesIcon, Menu, MenuItem, Typography } from "@rebasepro/ui";
3
- import { useTranslation } from "../hooks";
4
-
5
- export function LanguageToggle() {
6
- const { i18n } = useTranslation();
7
-
8
- return (
9
- <Menu
10
- trigger={<IconButton
11
- color="inherit"
12
- aria-label="Change language">
13
- <LanguagesIcon size={iconSize.small}/>
14
- </IconButton>}>
15
- <MenuItem onClick={() => i18n.changeLanguage("en")}>
16
- <div className="flex w-full items-center justify-between gap-4">
17
- <Typography variant="body2" className={i18n.language === "en" ? "font-semibold" : ""}>English</Typography>
18
- {i18n.language === "en" && <CheckIcon size={iconSize.small}/>}
19
- </div>
20
- </MenuItem>
21
- <MenuItem onClick={() => i18n.changeLanguage("es")}>
22
- <div className="flex w-full items-center justify-between gap-4">
23
- <Typography variant="body2" className={i18n.language === "es" ? "font-semibold" : ""}>Español</Typography>
24
- {i18n.language === "es" && <CheckIcon size={iconSize.small}/>}
25
- </div>
26
- </MenuItem>
27
- <MenuItem onClick={() => i18n.changeLanguage("de")}>
28
- <div className="flex w-full items-center justify-between gap-4">
29
- <Typography variant="body2" className={i18n.language === "de" ? "font-semibold" : ""}>Deutsch</Typography>
30
- {i18n.language === "de" && <CheckIcon size={iconSize.small}/>}
31
- </div>
32
- </MenuItem>
33
- <MenuItem onClick={() => i18n.changeLanguage("fr")}>
34
- <div className="flex w-full items-center justify-between gap-4">
35
- <Typography variant="body2" className={i18n.language === "fr" ? "font-semibold" : ""}>Français</Typography>
36
- {i18n.language === "fr" && <CheckIcon size={iconSize.small}/>}
37
- </div>
38
- </MenuItem>
39
- <MenuItem onClick={() => i18n.changeLanguage("it")}>
40
- <div className="flex w-full items-center justify-between gap-4">
41
- <Typography variant="body2" className={i18n.language === "it" ? "font-semibold" : ""}>Italiano</Typography>
42
- {i18n.language === "it" && <CheckIcon size={iconSize.small}/>}
43
- </div>
44
- </MenuItem>
45
- <MenuItem onClick={() => i18n.changeLanguage("hi")}>
46
- <div className="flex w-full items-center justify-between gap-4">
47
- <Typography variant="body2" className={i18n.language === "hi" ? "font-semibold" : ""}>हिन्दी</Typography>
48
- {i18n.language === "hi" && <CheckIcon size={iconSize.small}/>}
49
- </div>
50
- </MenuItem>
51
- <MenuItem onClick={() => i18n.changeLanguage("pt")}>
52
- <div className="flex w-full items-center justify-between gap-4">
53
- <Typography variant="body2" className={i18n.language === "pt" ? "font-semibold" : ""}>Português</Typography>
54
- {i18n.language === "pt" && <CheckIcon size={iconSize.small}/>}
55
- </div>
56
- </MenuItem>
57
- </Menu>
58
- );
59
- }