@hed-hog/core 0.0.298 → 0.0.300

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 (123) hide show
  1. package/dist/dashboard/dashboard/dashboard.controller.d.ts +9 -0
  2. package/dist/dashboard/dashboard/dashboard.controller.d.ts.map +1 -1
  3. package/dist/dashboard/dashboard/dashboard.service.d.ts +9 -0
  4. package/dist/dashboard/dashboard/dashboard.service.d.ts.map +1 -1
  5. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +14 -1
  6. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts.map +1 -1
  7. package/dist/dashboard/dashboard-component/dashboard-component.controller.js +28 -3
  8. package/dist/dashboard/dashboard-component/dashboard-component.controller.js.map +1 -1
  9. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +22 -1
  10. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts.map +1 -1
  11. package/dist/dashboard/dashboard-component/dashboard-component.service.js +185 -35
  12. package/dist/dashboard/dashboard-component/dashboard-component.service.js.map +1 -1
  13. package/dist/dashboard/dashboard-component/dto/create.dto.d.ts +1 -0
  14. package/dist/dashboard/dashboard-component/dto/create.dto.d.ts.map +1 -1
  15. package/dist/dashboard/dashboard-component/dto/create.dto.js +5 -0
  16. package/dist/dashboard/dashboard-component/dto/create.dto.js.map +1 -1
  17. package/dist/dashboard/dashboard-component/dto/update.dto.d.ts +1 -0
  18. package/dist/dashboard/dashboard-component/dto/update.dto.d.ts.map +1 -1
  19. package/dist/dashboard/dashboard-component/dto/update.dto.js +5 -0
  20. package/dist/dashboard/dashboard-component/dto/update.dto.js.map +1 -1
  21. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +1 -0
  22. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts.map +1 -1
  23. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +1 -0
  24. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts.map +1 -1
  25. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +72 -1
  26. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts.map +1 -1
  27. package/dist/dashboard/dashboard-core/dashboard-core.controller.js +111 -0
  28. package/dist/dashboard/dashboard-core/dashboard-core.controller.js.map +1 -1
  29. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +76 -1
  30. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts.map +1 -1
  31. package/dist/dashboard/dashboard-core/dashboard-core.service.js +614 -23
  32. package/dist/dashboard/dashboard-core/dashboard-core.service.js.map +1 -1
  33. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +3 -0
  34. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts.map +1 -1
  35. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +3 -0
  36. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts.map +1 -1
  37. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +2 -0
  38. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts.map +1 -1
  39. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +2 -0
  40. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts.map +1 -1
  41. package/hedhog/data/dashboard.yaml +12 -6
  42. package/hedhog/data/dashboard_component_role.yaml +66 -0
  43. package/hedhog/data/dashboard_item.yaml +1 -1
  44. package/hedhog/data/dashboard_role.yaml +2 -8
  45. package/hedhog/data/route.yaml +84 -0
  46. package/hedhog/frontend/app/dashboard/[slug]/dashboard-content.tsx.ejs +457 -135
  47. package/hedhog/frontend/app/dashboard/[slug]/types.ts.ejs +3 -0
  48. package/hedhog/frontend/app/dashboard/[slug]/widget-renderer.tsx.ejs +365 -28
  49. package/hedhog/frontend/app/dashboard/components/add-widget-selector-dialog.tsx.ejs +376 -247
  50. package/hedhog/frontend/app/dashboard/components/draggable-grid.tsx.ejs +64 -18
  51. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +1389 -0
  52. package/hedhog/frontend/app/dashboard/dashboard.css.ejs +37 -0
  53. package/hedhog/frontend/app/dashboard/management/page.tsx.ejs +1 -1
  54. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +6 -6
  55. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +8 -8
  56. package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +3 -3
  57. package/hedhog/frontend/app/dashboard/page.tsx.ejs +3 -25
  58. package/hedhog/frontend/messages/en.json +115 -2
  59. package/hedhog/frontend/messages/pt.json +114 -1
  60. package/hedhog/frontend/public/dashboard-previews/.gitkeep +12 -0
  61. package/hedhog/frontend/public/dashboard-previews/account-security.png +0 -0
  62. package/hedhog/frontend/public/dashboard-previews/active-users-card.png +0 -0
  63. package/hedhog/frontend/public/dashboard-previews/activity-timeline.png +0 -0
  64. package/hedhog/frontend/public/dashboard-previews/cash-balance-kpi.png +0 -0
  65. package/hedhog/frontend/public/dashboard-previews/cash-flow-chart.png +0 -0
  66. package/hedhog/frontend/public/dashboard-previews/default-kpi.png +0 -0
  67. package/hedhog/frontend/public/dashboard-previews/email-notifications.png +0 -0
  68. package/hedhog/frontend/public/dashboard-previews/financial-alerts.png +0 -0
  69. package/hedhog/frontend/public/dashboard-previews/login-history-chart.png +0 -0
  70. package/hedhog/frontend/public/dashboard-previews/mail-sent-card.png +0 -0
  71. package/hedhog/frontend/public/dashboard-previews/mail-sent-chart.png +0 -0
  72. package/hedhog/frontend/public/dashboard-previews/menus-card.png +0 -0
  73. package/hedhog/frontend/public/dashboard-previews/payable-30d-kpi.png +0 -0
  74. package/hedhog/frontend/public/dashboard-previews/permissions-card.png +0 -0
  75. package/hedhog/frontend/public/dashboard-previews/permissions-chart.png +0 -0
  76. package/hedhog/frontend/public/dashboard-previews/profile-card.png +0 -0
  77. package/hedhog/frontend/public/dashboard-previews/receivable-30d-kpi.png +0 -0
  78. package/hedhog/frontend/public/dashboard-previews/routes-card.png +0 -0
  79. package/hedhog/frontend/public/dashboard-previews/session-activity-chart.png +0 -0
  80. package/hedhog/frontend/public/dashboard-previews/sessions-today-card.png +0 -0
  81. package/hedhog/frontend/public/dashboard-previews/stat-access-level.png +0 -0
  82. package/hedhog/frontend/public/dashboard-previews/stat-actions-today.png +0 -0
  83. package/hedhog/frontend/public/dashboard-previews/stat-consecutive-days.png +0 -0
  84. package/hedhog/frontend/public/dashboard-previews/stat-online-time.png +0 -0
  85. package/hedhog/frontend/public/dashboard-previews/upcoming-payable.png +0 -0
  86. package/hedhog/frontend/public/dashboard-previews/upcoming-receivable.png +0 -0
  87. package/hedhog/frontend/public/dashboard-previews/user-growth-chart.png +0 -0
  88. package/hedhog/frontend/public/dashboard-previews/user-roles.png +0 -0
  89. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/account-security.tsx.ejs +34 -30
  90. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/active-users-card.tsx.ejs +2 -2
  91. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/activity-timeline.tsx.ejs +1 -1
  92. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/email-notifications.tsx.ejs +1 -1
  93. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/locale-config.tsx.ejs +1 -1
  94. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/login-history-chart.tsx.ejs +1 -1
  95. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/mail-config.tsx.ejs +1 -1
  96. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/mail-sent-card.tsx.ejs +2 -2
  97. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/mail-sent-chart.tsx.ejs +1 -1
  98. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/menus-card.tsx.ejs +2 -2
  99. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/oauth-config.tsx.ejs +1 -1
  100. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/permissions-card.tsx.ejs +2 -2
  101. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/permissions-chart.tsx.ejs +1 -1
  102. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/profile-card.tsx.ejs +1 -1
  103. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/routes-card.tsx.ejs +2 -2
  104. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/session-activity-chart.tsx.ejs +1 -1
  105. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/sessions-today-card.tsx.ejs +2 -2
  106. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/stat-access-level.tsx.ejs +1 -1
  107. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/stat-actions-today.tsx.ejs +1 -1
  108. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/stat-consecutive-days.tsx.ejs +1 -1
  109. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/stat-online-time.tsx.ejs +1 -1
  110. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/storage-config.tsx.ejs +1 -1
  111. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/theme-config.tsx.ejs +1 -1
  112. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/user-growth-chart.tsx.ejs +1 -1
  113. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/user-roles.tsx.ejs +1 -1
  114. package/hedhog/frontend/{app/dashboard/components/widgets → widgets}/user-sessions.tsx.ejs +2 -2
  115. package/hedhog/table/dashboard.yaml +6 -0
  116. package/hedhog/table/dashboard_component.yaml +7 -0
  117. package/package.json +5 -5
  118. package/src/dashboard/dashboard-component/dashboard-component.controller.ts +51 -14
  119. package/src/dashboard/dashboard-component/dashboard-component.service.ts +254 -43
  120. package/src/dashboard/dashboard-component/dto/create.dto.ts +4 -0
  121. package/src/dashboard/dashboard-component/dto/update.dto.ts +4 -0
  122. package/src/dashboard/dashboard-core/dashboard-core.controller.ts +112 -1
  123. package/src/dashboard/dashboard-core/dashboard-core.service.ts +782 -24
@@ -1,3 +1,40 @@
1
+ .dashboard-tabs-list .dashboard-tab-trigger {
2
+ position: relative;
3
+ border: none !important;
4
+ border-bottom: 0 !important;
5
+ box-shadow: none !important;
6
+ border-radius: 8px 8px 0 0 !important;
7
+ transition:
8
+ background-color 160ms ease,
9
+ color 160ms ease,
10
+ box-shadow 160ms ease;
11
+ }
12
+
13
+ .dashboard-tabs-list .dashboard-tab-trigger.dashboard-tab-trigger-inactive {
14
+ background: transparent !important;
15
+ color: hsl(var(--muted-foreground) / 0.6) !important;
16
+ }
17
+
18
+ .dashboard-tabs-list
19
+ .dashboard-tab-trigger.dashboard-tab-trigger-inactive:hover {
20
+ background: hsl(var(--background) / 0.5) !important;
21
+ color: hsl(var(--foreground) / 0.8) !important;
22
+ }
23
+
24
+ .dashboard-tabs-list .dashboard-tab-trigger.dashboard-tab-trigger-active,
25
+ .dashboard-tabs-list
26
+ .dashboard-tab-trigger.dashboard-tab-trigger-active[data-state='active'] {
27
+ z-index: 10;
28
+ background: hsl(var(--background)) !important;
29
+ color: hsl(var(--primary)) !important;
30
+ border: none !important;
31
+ box-shadow: none !important;
32
+ }
33
+
34
+ .dashboard-tabs-list .dashboard-tab-trigger.dashboard-tab-trigger-active svg {
35
+ color: hsl(var(--primary)) !important;
36
+ }
37
+
1
38
  .dashboard-grid.react-grid-layout {
2
39
  position: relative;
3
40
  transition: height 200ms ease;
@@ -16,7 +16,7 @@ export default function Page() {
16
16
  <div className="flex flex-col h-screen px-4">
17
17
  <PageHeader
18
18
  breadcrumbs={[
19
- { label: 'Home', href: '/' },
19
+ { label: t('homeBreadcrumb'), href: '/' },
20
20
  { label: t('description') },
21
21
  ]}
22
22
  title={t('title')}
@@ -278,7 +278,7 @@ export function ComponentsTab() {
278
278
  setOpen(true);
279
279
  } catch (error) {
280
280
  console.error('Erro ao carregar componente:', error);
281
- toast.error('Erro ao carregar componente');
281
+ toast.error(t('loadComponentError'));
282
282
  }
283
283
  };
284
284
 
@@ -323,7 +323,7 @@ export function ComponentsTab() {
323
323
  refetch();
324
324
  } catch (error) {
325
325
  console.error('Erro ao salvar componente:', error);
326
- toast.error('Erro ao salvar componente');
326
+ toast.error(t('saveComponentError'));
327
327
  }
328
328
  };
329
329
 
@@ -345,7 +345,7 @@ export function ComponentsTab() {
345
345
  refetch();
346
346
  } catch (error) {
347
347
  console.error('Erro ao excluir componente:', error);
348
- toast.error('Erro ao excluir componente');
348
+ toast.error(t('deleteComponentError'));
349
349
  } finally {
350
350
  setDeleteDialogOpen(false);
351
351
  setComponentToDelete(null);
@@ -476,7 +476,7 @@ export function ComponentsTab() {
476
476
  <Label htmlFor="slug">{t('slug')}</Label>
477
477
  <Input
478
478
  id="slug"
479
- placeholder="total-users"
479
+ placeholder={t('componentSlugPlaceholder')}
480
480
  value={selectedComponent.slug || ''}
481
481
  onChange={(e) =>
482
482
  setSelectedComponent({
@@ -491,7 +491,7 @@ export function ComponentsTab() {
491
491
  <Label htmlFor="name">{t('name')}</Label>
492
492
  <Input
493
493
  id="name"
494
- placeholder="Total de Usuários"
494
+ placeholder={t('componentNamePlaceholder')}
495
495
  value={
496
496
  selectedComponent.locale?.[selectedLocale]?.name || ''
497
497
  }
@@ -701,7 +701,7 @@ export function ComponentsTab() {
701
701
 
702
702
  <div className="flex items-center gap-2 mb-4">
703
703
  <Input
704
- placeholder={`${t('searchPlaceholder') || 'Buscar'}...`}
704
+ placeholder={t('searchPlaceholder')}
705
705
  value={searchQuery}
706
706
  onChange={(e) => {
707
707
  setSearchQuery(e.target.value);
@@ -231,7 +231,7 @@ export function DashboardsTab() {
231
231
  setOpen(true);
232
232
  } catch (error) {
233
233
  console.error('Erro ao carregar dashboard:', error);
234
- toast.error('Erro ao carregar dashboard');
234
+ toast.error(t('loadDashboardError'));
235
235
  }
236
236
  };
237
237
 
@@ -265,7 +265,7 @@ export function DashboardsTab() {
265
265
  refetch();
266
266
  } catch (error) {
267
267
  console.error('Erro ao salvar dashboard:', error);
268
- toast.error('Erro ao salvar dashboard');
268
+ toast.error(t('saveDashboardError'));
269
269
  }
270
270
  };
271
271
 
@@ -282,11 +282,11 @@ export function DashboardsTab() {
282
282
  url: `/dashboard/${dashboardToDelete}`,
283
283
  method: 'DELETE',
284
284
  });
285
- toast.success(t('dashboardUpdated'));
285
+ toast.success(t('dashboardDeleted'));
286
286
  refetch();
287
287
  } catch (error) {
288
288
  console.error('Erro ao excluir dashboard:', error);
289
- toast.error('Erro ao excluir dashboard');
289
+ toast.error(t('deleteDashboardError'));
290
290
  } finally {
291
291
  setDeleteDialogOpen(false);
292
292
  setDashboardToDelete(null);
@@ -419,7 +419,7 @@ export function DashboardsTab() {
419
419
  <Label htmlFor="slug">{t('slug')}</Label>
420
420
  <Input
421
421
  id="slug"
422
- placeholder="admin-dashboard"
422
+ placeholder={t('dashboardSlugPlaceholder')}
423
423
  value={selectedDashboard.slug || ''}
424
424
  onChange={(e) =>
425
425
  setSelectedDashboard({
@@ -433,7 +433,7 @@ export function DashboardsTab() {
433
433
  <Label htmlFor="name">{t('name')}</Label>
434
434
  <Input
435
435
  id="name"
436
- placeholder="Dashboard Admin"
436
+ placeholder={t('dashboardNamePlaceholder')}
437
437
  value={
438
438
  selectedDashboard.locale?.[selectedLocale]?.name || ''
439
439
  }
@@ -462,7 +462,7 @@ export function DashboardsTab() {
462
462
 
463
463
  <div className="flex items-center gap-2 mb-4">
464
464
  <Input
465
- placeholder={`${t('searchPlaceholder') || 'Buscar'}...`}
465
+ placeholder={t('searchPlaceholder')}
466
466
  value={searchQuery}
467
467
  onChange={(e) => {
468
468
  setSearchQuery(e.target.value);
@@ -476,7 +476,7 @@ export function DashboardsTab() {
476
476
  <Table>
477
477
  <TableHeader>
478
478
  <TableRow>
479
- <TableHead>ID</TableHead>
479
+ <TableHead>{t('id')}</TableHead>
480
480
  <TableHead>{t('slug')}</TableHead>
481
481
  <TableHead>{t('name')}</TableHead>
482
482
  <TableHead>{t('role')}</TableHead>
@@ -207,7 +207,7 @@ export function ItemsTab() {
207
207
  refetch();
208
208
  } catch (error) {
209
209
  console.error('Erro ao adicionar item:', error);
210
- toast.error('Erro ao adicionar item');
210
+ toast.error(t('addItemError'));
211
211
  }
212
212
  };
213
213
 
@@ -228,7 +228,7 @@ export function ItemsTab() {
228
228
  refetch();
229
229
  } catch (error) {
230
230
  console.error('Erro ao excluir item:', error);
231
- toast.error('Erro ao excluir item');
231
+ toast.error(t('deleteItemError'));
232
232
  } finally {
233
233
  setDeleteDialogOpen(false);
234
234
  setItemToDelete(null);
@@ -457,7 +457,7 @@ export function ItemsTab() {
457
457
  <Table>
458
458
  <TableHeader>
459
459
  <TableRow>
460
- <TableHead>ID</TableHead>
460
+ <TableHead>{t('id')}</TableHead>
461
461
  <TableHead>{t('dashboard')}</TableHead>
462
462
  <TableHead>{t('component')}</TableHead>
463
463
  <TableHead className="w-[100px]">{t('actions')}</TableHead>
@@ -1,29 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { Dashboard } from '@hed-hog/api-types';
4
- import { useApp, useQuery } from '@hed-hog/next-app-provider';
5
- import { useRouter } from 'next/navigation';
6
- import { useEffect } from 'react';
3
+ import { DashboardHomeTabs } from './dashboard-home-tabs';
7
4
 
8
- export default function DashboardRedirectPage() {
9
- const router = useRouter();
10
- const { request, currentLocaleCode } = useApp();
11
-
12
- const { data: dashboardData, isLoading } = useQuery<Dashboard | null>({
13
- queryKey: ['dashboard-home-redirect', currentLocaleCode],
14
- queryFn: async () => {
15
- const response = await request<Dashboard>({
16
- url: '/dashboard-core/home',
17
- });
18
- return response.data ?? null;
19
- },
20
- });
21
-
22
- useEffect(() => {
23
- if (isLoading) return;
24
-
25
- router.replace(`/core/dashboard/${dashboardData?.slug ?? 'default'}`);
26
- }, [dashboardData?.slug, isLoading, router]);
27
-
28
- return null;
5
+ export default function DashboardPage() {
6
+ return <DashboardHomeTabs />;
29
7
  }
@@ -904,13 +904,95 @@
904
904
  "AddWidgetDialog": {
905
905
  "title": "Select Dashboard Components",
906
906
  "description": "Choose the components you want to display on your dashboard.",
907
+ "selectedOfTotal": "{selected} selected of {total}",
908
+ "search": "Search",
909
+ "searchPlaceholder": "Type the widget name, slug, or module",
910
+ "module": "Module",
911
+ "moduleFilterLabel": "Filter by module",
912
+ "allModules": "All modules",
907
913
  "noComponentsAvailable": "No components available at the moment.",
908
914
  "dimensions": "Dimensions",
909
915
  "resizable": "Resizable",
910
916
  "fixedSize": "Fixed size",
917
+ "select": "Select",
918
+ "selected": "Selected",
911
919
  "cancel": "Cancel",
912
920
  "add": "Add"
913
921
  },
922
+ "DashboardHomeTabs": {
923
+ "share": "Share",
924
+ "newDashboard": "New dashboard",
925
+ "pageTitle": "Dashboards",
926
+ "pageDescription": "Use compact tabs to switch between dashboards, create new views, and share them with other people who can edit the layout and widgets.",
927
+ "enterDashboardName": "Enter a name for the dashboard.",
928
+ "enterValidLucideIcon": "Enter a valid Lucide icon.",
929
+ "dashboardCreated": "Dashboard created successfully.",
930
+ "createDashboardError": "Could not create the dashboard.",
931
+ "setAsHomeSuccess": "Dashboard set as home.",
932
+ "updateHomeError": "Could not update the home dashboard.",
933
+ "dashboardRenamed": "Dashboard renamed successfully.",
934
+ "renameDashboardError": "Could not rename the dashboard.",
935
+ "dashboardIconUpdated": "Dashboard icon updated successfully.",
936
+ "updateDashboardIconError": "Could not update the dashboard icon.",
937
+ "tabRemoved": "The tab was removed from your home.",
938
+ "removeTabError": "Could not remove the tab.",
939
+ "dashboardShared": "Dashboard shared successfully.",
940
+ "shareDashboardError": "Could not share the dashboard.",
941
+ "shareRemoved": "Sharing removed.",
942
+ "revokeShareError": "Could not remove the sharing.",
943
+ "addWidgets": "Add widgets",
944
+ "setAsHome": "Set as home",
945
+ "rename": "Rename",
946
+ "changeIcon": "Change icon",
947
+ "delete": "Delete",
948
+ "emptyTitle": "No dashboards available.",
949
+ "emptyDescription": "Create the first tab to start organizing your home.",
950
+ "createToStart": "Create a dashboard to get started.",
951
+ "newDashboardTitle": "New dashboard",
952
+ "newDashboardDescription": "Create a new custom tab for your home. The slug will be generated automatically.",
953
+ "dashboardTemplateLabel": "Start from",
954
+ "templateSelectedBadge": "Template",
955
+ "blankDashboardBadge": "Blank",
956
+ "blankDashboardTitle": "Blank dashboard",
957
+ "blankDashboardDescription": "Start with an empty layout and add widgets manually.",
958
+ "templateWidgetCount": "{count} widgets",
959
+ "noTemplatesAvailable": "No templates are available for your roles right now.",
960
+ "dashboardNameLabel": "Dashboard name",
961
+ "dashboardNamePlaceholder": "E.g. Sales, Operations, KPIs",
962
+ "dashboardIconLabel": "Dashboard icon",
963
+ "dashboardIconPlaceholder": "E.g. layout-dashboard, chart-line, wallet",
964
+ "invalidIconName": "The entered name does not match a Lucide icon.",
965
+ "selectIconHint": "When you select an option below, the name will be filled in automatically.",
966
+ "iconSuggestions": "Icon suggestions",
967
+ "createDashboard": "Create dashboard",
968
+ "changeDashboardIconTitle": "Change dashboard icon",
969
+ "changeDashboardIconDescription": "Choose a Lucide option or type the icon name using the site pattern, such as layout-dashboard.",
970
+ "iconNameLabel": "Icon name",
971
+ "iconNamePlaceholder": "E.g. layout-dashboard, briefcase, users",
972
+ "noCustomIcon": "No custom icon",
973
+ "dashboardLabel": "Dashboard",
974
+ "suggestions": "Suggestions",
975
+ "saveIcon": "Save icon",
976
+ "shareDashboardTitle": "Share {name}",
977
+ "shareDashboardDescription": "Shared users can edit the layout and widgets of this dashboard.",
978
+ "searchUser": "Search user",
979
+ "searchUserPlaceholder": "Type a name or email",
980
+ "usersWithAccess": "With access",
981
+ "usersWithAccessDescription": "People who can already open and edit this dashboard.",
982
+ "noSharedUsers": "There are no shared users yet.",
983
+ "you": "You",
984
+ "home": "Home",
985
+ "noPublicEmail": "No public email",
986
+ "addPeople": "Add people",
987
+ "addPeopleDescription": "Share with users who do not have access yet.",
988
+ "noUsersToShare": "No users found to share.",
989
+ "add": "Add",
990
+ "cancel": "Cancel",
991
+ "removeTabTitle": "Remove this tab from your home?",
992
+ "removeTabDescription": "The “{name}” tab will be removed only from your list.",
993
+ "removeTabDescriptionFallback": "This action only removes the tab from your list.",
994
+ "removeTab": "Remove tab"
995
+ },
914
996
  "DashboardMenu": {
915
997
  "addWidgets": "Add Widgets",
916
998
  "switchDashboard": "Switch Dashboard",
@@ -1118,6 +1200,23 @@
1118
1200
  "notSet": "Not set"
1119
1201
  }
1120
1202
  },
1203
+ "WidgetRenderer": {
1204
+ "saveWidgetPreview": "Save widget preview",
1205
+ "generatingWidgetScreenshot": "Generating widget screenshot",
1206
+ "generateWidgetScreenshot": "Generate widget screenshot",
1207
+ "generateScreenshotError": "Could not generate the widget screenshot.",
1208
+ "generateAgainToDownload": "Generate the screenshot again to download the image.",
1209
+ "generateAgainToShare": "Generate the screenshot again to share the image.",
1210
+ "shareNotSupported": "Sharing is not supported in this browser.",
1211
+ "shareText": "Widget screenshot {name}",
1212
+ "shareImageError": "Could not share the image.",
1213
+ "screenshotTitle": "Widget screenshot",
1214
+ "screenshotDescription": "Share or download the generated image for this component.",
1215
+ "screenshotAlt": "Widget screenshot {name}",
1216
+ "sharing": "Sharing...",
1217
+ "share": "Share",
1218
+ "downloadImage": "Download image"
1219
+ },
1121
1220
  "HomePage": {
1122
1221
  "buildingYourApplication": "Building Your Application",
1123
1222
  "dataFetching": "Data Fetching"
@@ -1242,7 +1341,7 @@
1242
1341
  "manageDashboards": "Manage system dashboards",
1243
1342
  "selectDashboardRequired": "Select a dashboard",
1244
1343
  "selectComponentRequired": "Select a component",
1245
- "manageComponentsRoles": "Manage access permissions to components",
1344
+ "manageComponentRoles": "Manage access permissions to components",
1246
1345
  "addRole": "Add Permission",
1247
1346
  "selectRole": "Select a permission",
1248
1347
  "selectRoleRequired": "Select a permission",
@@ -1256,7 +1355,21 @@
1256
1355
  "errorDeletingRole": "Error deleting permission",
1257
1356
  "dashboardRolesTab": "Dashboard Permissions",
1258
1357
  "manageDashboardRoles": "Manage access permissions to dashboards",
1259
- "selectDashboardAndRole": "Select the dashboard and permission"
1358
+ "selectDashboardAndRole": "Select the dashboard and permission",
1359
+ "homeBreadcrumb": "Home",
1360
+ "id": "ID",
1361
+ "loadDashboardError": "Error loading dashboard",
1362
+ "saveDashboardError": "Error saving dashboard",
1363
+ "deleteDashboardError": "Error deleting dashboard",
1364
+ "dashboardSlugPlaceholder": "admin-dashboard",
1365
+ "dashboardNamePlaceholder": "Admin Dashboard",
1366
+ "loadComponentError": "Error loading component",
1367
+ "saveComponentError": "Error saving component",
1368
+ "deleteComponentError": "Error deleting component",
1369
+ "componentSlugPlaceholder": "total-users",
1370
+ "componentNamePlaceholder": "Total Users",
1371
+ "addItemError": "Error adding item",
1372
+ "deleteItemError": "Error deleting item"
1260
1373
  },
1261
1374
  "ForbiddenDialog": {
1262
1375
  "title": "Access Denied",
@@ -907,13 +907,95 @@
907
907
  "AddWidgetDialog": {
908
908
  "title": "Selecionar Componentes do Dashboard",
909
909
  "description": "Escolha os componentes que deseja exibir no seu dashboard.",
910
+ "selectedOfTotal": "{selected} selecionados de {total}",
911
+ "search": "Buscar",
912
+ "searchPlaceholder": "Digite o nome, slug ou módulo do widget",
913
+ "module": "Módulo",
914
+ "moduleFilterLabel": "Filtrar por módulo",
915
+ "allModules": "Todos os módulos",
910
916
  "noComponentsAvailable": "Nenhum componente disponível no momento.",
911
917
  "dimensions": "Dimensões",
912
918
  "resizable": "Redimensionável",
913
919
  "fixedSize": "Tamanho fixo",
920
+ "select": "Selecionar",
921
+ "selected": "Selecionado",
914
922
  "cancel": "Cancelar",
915
923
  "add": "Adicionar"
916
924
  },
925
+ "DashboardHomeTabs": {
926
+ "share": "Compartilhar",
927
+ "newDashboard": "Novo dashboard",
928
+ "pageTitle": "Dashboards",
929
+ "pageDescription": "Use abas compactas para alternar entre dashboards, criar novas visões e compartilhar com outras pessoas que podem editar layout e widgets.",
930
+ "enterDashboardName": "Informe um nome para o dashboard.",
931
+ "enterValidLucideIcon": "Informe um ícone válido do Lucide.",
932
+ "dashboardCreated": "Dashboard criado com sucesso.",
933
+ "createDashboardError": "Não foi possível criar o dashboard.",
934
+ "setAsHomeSuccess": "Dashboard definido como home.",
935
+ "updateHomeError": "Não foi possível atualizar a home.",
936
+ "dashboardRenamed": "Dashboard renomeado com sucesso.",
937
+ "renameDashboardError": "Não foi possível renomear o dashboard.",
938
+ "dashboardIconUpdated": "Ícone do dashboard atualizado com sucesso.",
939
+ "updateDashboardIconError": "Não foi possível atualizar o ícone do dashboard.",
940
+ "tabRemoved": "A aba foi removida da sua home.",
941
+ "removeTabError": "Não foi possível remover a aba.",
942
+ "dashboardShared": "Dashboard compartilhado com sucesso.",
943
+ "shareDashboardError": "Não foi possível compartilhar o dashboard.",
944
+ "shareRemoved": "Compartilhamento removido.",
945
+ "revokeShareError": "Não foi possível remover o compartilhamento.",
946
+ "addWidgets": "Adicionar widgets",
947
+ "setAsHome": "Definir como home",
948
+ "rename": "Renomear",
949
+ "changeIcon": "Trocar ícone",
950
+ "delete": "Excluir",
951
+ "emptyTitle": "Nenhum dashboard disponível.",
952
+ "emptyDescription": "Crie a primeira aba para começar a organizar sua home.",
953
+ "createToStart": "Crie um dashboard para começar.",
954
+ "newDashboardTitle": "Novo dashboard",
955
+ "newDashboardDescription": "Crie uma nova aba personalizada para sua home. O slug será gerado automaticamente.",
956
+ "dashboardTemplateLabel": "Começar de",
957
+ "templateSelectedBadge": "Template",
958
+ "blankDashboardBadge": "Em branco",
959
+ "blankDashboardTitle": "Dashboard em branco",
960
+ "blankDashboardDescription": "Comece com um layout vazio e adicione os widgets manualmente.",
961
+ "templateWidgetCount": "{count} widgets",
962
+ "noTemplatesAvailable": "Nenhum template está disponível para os seus perfis no momento.",
963
+ "dashboardNameLabel": "Nome do dashboard",
964
+ "dashboardNamePlaceholder": "Ex.: Comercial, Operações, Indicadores",
965
+ "dashboardIconLabel": "Ícone do dashboard",
966
+ "dashboardIconPlaceholder": "Ex.: layout-dashboard, chart-line, wallet",
967
+ "invalidIconName": "O nome informado não corresponde a um ícone do Lucide.",
968
+ "selectIconHint": "Ao selecionar uma opção abaixo, o nome será preenchido automaticamente.",
969
+ "iconSuggestions": "Sugestões de ícones",
970
+ "createDashboard": "Criar dashboard",
971
+ "changeDashboardIconTitle": "Trocar ícone do dashboard",
972
+ "changeDashboardIconDescription": "Escolha uma opção do Lucide ou digite o nome do ícone no padrão do site, como layout-dashboard.",
973
+ "iconNameLabel": "Nome do ícone",
974
+ "iconNamePlaceholder": "Ex.: layout-dashboard, briefcase, users",
975
+ "noCustomIcon": "Sem ícone personalizado",
976
+ "dashboardLabel": "Dashboard",
977
+ "suggestions": "Sugestões",
978
+ "saveIcon": "Salvar ícone",
979
+ "shareDashboardTitle": "Compartilhar {name}",
980
+ "shareDashboardDescription": "Usuários compartilhados podem editar o layout e os widgets deste dashboard.",
981
+ "searchUser": "Buscar usuário",
982
+ "searchUserPlaceholder": "Digite um nome ou e-mail",
983
+ "usersWithAccess": "Com acesso",
984
+ "usersWithAccessDescription": "Quem já pode abrir e editar este dashboard.",
985
+ "noSharedUsers": "Ainda não há usuários compartilhados.",
986
+ "you": "Você",
987
+ "home": "Home",
988
+ "noPublicEmail": "Sem e-mail público",
989
+ "addPeople": "Adicionar pessoas",
990
+ "addPeopleDescription": "Compartilhe com usuários que ainda não possuem acesso.",
991
+ "noUsersToShare": "Nenhum usuário encontrado para compartilhar.",
992
+ "add": "Adicionar",
993
+ "cancel": "Cancelar",
994
+ "removeTabTitle": "Remover aba da sua home?",
995
+ "removeTabDescription": "A aba “{name}” será removida apenas da sua lista.",
996
+ "removeTabDescriptionFallback": "Essa ação remove a aba apenas da sua lista.",
997
+ "removeTab": "Remover aba"
998
+ },
917
999
  "DashboardMenu": {
918
1000
  "addWidgets": "Adicionar Widgets",
919
1001
  "switchDashboard": "Trocar Dashboard",
@@ -1123,6 +1205,23 @@
1123
1205
  "notSet": "Não definido"
1124
1206
  }
1125
1207
  },
1208
+ "WidgetRenderer": {
1209
+ "saveWidgetPreview": "Salvar preview do widget",
1210
+ "generatingWidgetScreenshot": "Gerando print do widget",
1211
+ "generateWidgetScreenshot": "Gerar print do widget",
1212
+ "generateScreenshotError": "Não foi possível gerar o print do widget.",
1213
+ "generateAgainToDownload": "Gere o print novamente para baixar a imagem.",
1214
+ "generateAgainToShare": "Gere o print novamente para compartilhar a imagem.",
1215
+ "shareNotSupported": "O compartilhamento não é suportado neste navegador.",
1216
+ "shareText": "Print do widget {name}",
1217
+ "shareImageError": "Não foi possível compartilhar a imagem.",
1218
+ "screenshotTitle": "Print do widget",
1219
+ "screenshotDescription": "Compartilhe ou baixe a imagem gerada deste componente.",
1220
+ "screenshotAlt": "Print do widget {name}",
1221
+ "sharing": "Compartilhando...",
1222
+ "share": "Compartilhar",
1223
+ "downloadImage": "Baixar imagem"
1224
+ },
1126
1225
  "HomePage": {
1127
1226
  "buildingYourApplication": "Construindo Sua Aplicação",
1128
1227
  "dataFetching": "Busca de Dados"
@@ -1261,7 +1360,21 @@
1261
1360
  "errorDeletingRole": "Erro ao excluir permissão",
1262
1361
  "dashboardRolesTab": "Permissões de Dashboard",
1263
1362
  "manageDashboardRoles": "Gerencie as permissões de acesso aos dashboards",
1264
- "selectDashboardAndRole": "Selecione o dashboard e a permissão"
1363
+ "selectDashboardAndRole": "Selecione o dashboard e a permissão",
1364
+ "homeBreadcrumb": "Home",
1365
+ "id": "ID",
1366
+ "loadDashboardError": "Erro ao carregar dashboard",
1367
+ "saveDashboardError": "Erro ao salvar dashboard",
1368
+ "deleteDashboardError": "Erro ao excluir dashboard",
1369
+ "dashboardSlugPlaceholder": "admin-dashboard",
1370
+ "dashboardNamePlaceholder": "Dashboard Admin",
1371
+ "loadComponentError": "Erro ao carregar componente",
1372
+ "saveComponentError": "Erro ao salvar componente",
1373
+ "deleteComponentError": "Erro ao excluir componente",
1374
+ "componentSlugPlaceholder": "total-users",
1375
+ "componentNamePlaceholder": "Total de Usuários",
1376
+ "addItemError": "Erro ao adicionar item",
1377
+ "deleteItemError": "Erro ao excluir item"
1265
1378
  },
1266
1379
  "DashboardComponent": {
1267
1380
  "title": "Componentes do Dashboard",
@@ -0,0 +1,12 @@
1
+ # Dashboard Widget Previews
2
+ #
3
+ # Place one .webp file per dashboard component, named exactly by the component slug.
4
+ # Example: active-users-card.webp, user-sessions.webp
5
+ #
6
+ # These files are copied by `hedhog add` / `hedhog dev apply` to:
7
+ # apps/admin/public/libraries/core/dashboard-previews/<slug>.webp
8
+ #
9
+ # The admin selector loads them as:
10
+ # /libraries/core/dashboard-previews/<slug>.webp
11
+ #
12
+ # If a file is missing, the selector card falls back gracefully (image hidden).