@agent-native/core 0.120.2 → 0.120.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/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +28 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/context-xray-local.ts +1 -1
- package/corpus/core/src/cli/index.ts +63 -18
- package/corpus/core/src/cli/skills.ts +5 -0
- package/corpus/core/src/cli/telemetry.ts +118 -1
- package/corpus/core/src/client/AgentPanel.tsx +10 -0
- package/corpus/core/src/client/CommandMenu.tsx +13 -1
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +39 -4
- package/corpus/core/src/client/analytics.ts +13 -0
- package/corpus/core/src/client/error-capture.ts +6 -1
- package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -5
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/corpus/core/src/client/navigation/index.ts +2 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +14 -32
- package/corpus/core/src/client/settings/ExtensionsSettingsContent.tsx +1 -1
- package/corpus/core/src/extensions/theme.ts +1 -1
- package/corpus/core/src/localization/default-messages.ts +2 -0
- package/corpus/core/src/server/core-routes-plugin.ts +10 -1
- package/corpus/core/src/server/framework-request-handler.ts +17 -26
- package/corpus/core/src/styles/agent-native.css +13 -0
- package/corpus/core/src/templates/chat/app/components/layout/Layout.tsx +3 -0
- package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +78 -45
- package/corpus/core/src/templates/chat/app/global.css +1 -1
- package/corpus/core/src/templates/default/app/global.css +1 -1
- package/corpus/core/src/tracking/error-capture.ts +151 -0
- package/corpus/core/src/tracking/index.ts +5 -0
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +1 -4
- package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/DateRangePicker.tsx +2 -2
- package/corpus/templates/analytics/app/components/dashboard/MetricCard.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +41 -9
- package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +1 -1
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +1 -1
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +28 -14
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +152 -124
- package/corpus/templates/analytics/app/global.css +5 -5
- package/corpus/templates/analytics/app/lib/dashboard-report-capture.ts +42 -0
- package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ChartTypePicker.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/DateRangePicker.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventRow.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +2 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +2 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +162 -51
- package/corpus/templates/analytics/app/root.tsx +28 -0
- package/corpus/templates/analytics/changelog/2026-07-24-analytics-charts-now-explain-slow-loads-and-offer-a-direct-r.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-24-daily-dashboard-emails-now-load-signed-reports-more-reliably.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-24-manage-agent-is-clearly-marked-as-a-link-to-its-dedicated-pa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +1 -1
- package/corpus/templates/analytics/server/db/schema.ts +5 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +21 -0
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +11 -0
- package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +54 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +235 -26
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +4 -1
- package/corpus/templates/analytics/server/plugins/db.ts +9 -0
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +1 -1
- package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +376 -0
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +14 -4
- package/corpus/templates/assets/app/components/layout/Layout.tsx +5 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +118 -74
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/assets/app/i18n-data.ts +10 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +99 -10
- package/corpus/templates/assets/app/routes/library.tsx +21 -198
- package/corpus/templates/assets/changelog/2026-07-21-unified-asset-preview-click-any-asset-to-open-one-preview-wi.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +3 -0
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +76 -43
- package/corpus/templates/brain/app/global.css +1 -1
- package/corpus/templates/brain/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +67 -52
- package/corpus/templates/calendar/app/global.css +1 -1
- package/corpus/templates/calendar/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +3 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +78 -45
- package/corpus/templates/chat/app/global.css +1 -1
- package/corpus/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +65 -31
- package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
- package/corpus/templates/clips/app/components/player/video-player.tsx +16 -1
- package/corpus/templates/clips/app/global.css +1 -1
- package/corpus/templates/clips/app/hooks/use-view-tracking.ts +55 -12
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +6 -5
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -7
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -5
- package/corpus/templates/clips/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/clips/server/plugins/db.ts +113 -68
- package/corpus/templates/content/actions/update-document.ts +145 -91
- package/corpus/templates/content/app/components/editor/CommentComposer.tsx +4 -1
- package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +366 -164
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +51 -28
- package/corpus/templates/content/app/components/editor/database/sidebar.tsx +19 -8
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +66 -42
- package/corpus/templates/content/app/global.css +1 -1
- package/corpus/templates/content/app/i18n-data.ts +15 -0
- package/corpus/templates/content/changelog/2026-07-23-shared-pages-now-keep-durable-content-visible-and-comment-th.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-comment-drafts-now-stay-open-when-saving-fails-and-long-live.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/design/actions/update-file.ts +85 -18
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +65 -30
- package/corpus/templates/design/app/entry.client.tsx +14 -1
- package/corpus/templates/design/app/global.css +1 -1
- package/corpus/templates/design/app/lib/design-save-outbox.ts +39 -0
- package/corpus/templates/design/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/design/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/dispatch/app/global.css +1 -1
- package/corpus/templates/dispatch/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +3 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +72 -37
- package/corpus/templates/forms/app/global.css +1 -1
- package/corpus/templates/forms/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-24-forms-sidebar-actions-now-keep-search-language-feedback-and-.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/macros/app/components/DailyProgress.tsx +5 -5
- package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
- package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
- package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +56 -29
- package/corpus/templates/macros/app/components/ui/button.tsx +1 -2
- package/corpus/templates/macros/app/components/ui/card.tsx +1 -1
- package/corpus/templates/macros/app/global.css +1 -1
- package/corpus/templates/macros/app/routes/_index.tsx +1 -1
- package/corpus/templates/macros/app/routes/analytics.tsx +4 -7
- package/corpus/templates/macros/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +125 -37
- package/corpus/templates/mail/app/global.css +1 -1
- package/corpus/templates/mail/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +90 -60
- package/corpus/templates/plan/app/global.css +1 -1
- package/corpus/templates/plan/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +69 -32
- package/corpus/templates/slides/app/global.css +1 -1
- package/corpus/templates/slides/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/templates/tasks/app/global.css +1 -1
- package/corpus/templates/tasks/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +14 -0
- package/corpus/toolkit/README.md +8 -1
- package/corpus/toolkit/agent-native.eject.json +1 -1
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/app-shell/index.ts +1 -0
- package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +48 -0
- package/corpus/toolkit/src/chat-history.css +52 -1
- package/corpus/toolkit/src/design-system/default-adapter.tsx +1 -1
- package/corpus/toolkit/src/editor/useCollabReconcile.ts +83 -15
- package/corpus/toolkit/src/ui/button.tsx +1 -2
- package/corpus/toolkit/src/ui/card.tsx +1 -1
- package/corpus/toolkit/src/ui/table.tsx +4 -11
- package/dist/cli/context-xray-local.js +1 -1
- package/dist/cli/context-xray-local.js.map +1 -1
- package/dist/cli/index.js +56 -17
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +5 -0
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/telemetry.d.ts +7 -0
- package/dist/cli/telemetry.d.ts.map +1 -1
- package/dist/cli/telemetry.js +91 -1
- package/dist/cli/telemetry.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +7 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +2 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +2 -0
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +12 -1
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts +4 -0
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +8 -4
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +7 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +8 -1
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +2 -2
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
- package/dist/client/navigation/index.d.ts +1 -1
- package/dist/client/navigation/index.d.ts.map +1 -1
- package/dist/client/navigation/index.js +1 -1
- package/dist/client/navigation/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +9 -13
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/settings/ExtensionsSettingsContent.js +1 -1
- package/dist/client/settings/ExtensionsSettingsContent.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/extensions/theme.js +1 -1
- package/dist/extensions/theme.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/localization/default-messages.d.ts +2 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +2 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/provider-api/actions/provider-api.d.ts +2 -2
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +8 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +17 -27
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/styles/agent-native.css +13 -0
- package/dist/templates/chat/app/components/layout/Layout.tsx +3 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +78 -45
- package/dist/templates/chat/app/global.css +1 -1
- package/dist/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/dist/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/dist/templates/default/app/global.css +1 -1
- package/dist/tracking/error-capture.d.ts +14 -0
- package/dist/tracking/error-capture.d.ts.map +1 -0
- package/dist/tracking/error-capture.js +113 -0
- package/dist/tracking/error-capture.js.map +1 -0
- package/dist/tracking/index.d.ts +1 -0
- package/dist/tracking/index.d.ts.map +1 -1
- package/dist/tracking/index.js +1 -0
- package/dist/tracking/index.js.map +1 -1
- package/package.json +2 -2
- package/src/cli/context-xray-local.ts +1 -1
- package/src/cli/index.ts +63 -18
- package/src/cli/skills.ts +5 -0
- package/src/cli/telemetry.ts +118 -1
- package/src/client/AgentPanel.tsx +10 -0
- package/src/client/CommandMenu.tsx +13 -1
- package/src/client/agent-page/AgentTabsPage.tsx +39 -4
- package/src/client/analytics.ts +13 -0
- package/src/client/error-capture.ts +6 -1
- package/src/client/extensions/ExtensionsListPage.tsx +12 -5
- package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/src/client/navigation/index.ts +2 -0
- package/src/client/org/OrgSwitcher.tsx +14 -32
- package/src/client/settings/ExtensionsSettingsContent.tsx +1 -1
- package/src/extensions/theme.ts +1 -1
- package/src/localization/default-messages.ts +2 -0
- package/src/server/core-routes-plugin.ts +10 -1
- package/src/server/framework-request-handler.ts +17 -26
- package/src/styles/agent-native.css +13 -0
- package/src/templates/chat/app/components/layout/Layout.tsx +3 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +78 -45
- package/src/templates/chat/app/global.css +1 -1
- package/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/src/templates/default/app/global.css +1 -1
- package/src/tracking/error-capture.ts +151 -0
- package/src/tracking/index.ts +5 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { appPath } from "@agent-native/core/client/api-path";
|
|
2
2
|
import { DevDatabaseLink } from "@agent-native/core/client/db-admin";
|
|
3
|
-
import { useT } from "@agent-native/core/client/i18n";
|
|
3
|
+
import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
|
|
4
|
+
import { openCommandMenu } from "@agent-native/core/client/navigation";
|
|
4
5
|
import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
5
6
|
import { FeedbackButton } from "@agent-native/core/client/ui";
|
|
7
|
+
import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
|
|
6
8
|
import {
|
|
7
9
|
IconPencil,
|
|
8
10
|
IconTemplate,
|
|
@@ -11,6 +13,7 @@ import {
|
|
|
11
13
|
IconSettings,
|
|
12
14
|
IconLayoutSidebarLeftCollapse,
|
|
13
15
|
IconLayoutSidebarLeftExpand,
|
|
16
|
+
IconSearch,
|
|
14
17
|
} from "@tabler/icons-react";
|
|
15
18
|
import { useEffect, useState } from "react";
|
|
16
19
|
import { Link, useLocation } from "react-router";
|
|
@@ -61,6 +64,59 @@ export function Sidebar() {
|
|
|
61
64
|
}
|
|
62
65
|
}, [collapsed]);
|
|
63
66
|
|
|
67
|
+
const collapseButton = (
|
|
68
|
+
<Tooltip delayDuration={0}>
|
|
69
|
+
<TooltipTrigger asChild>
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
onClick={() => setCollapsed((value) => !value)}
|
|
73
|
+
className="flex size-8 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
|
|
74
|
+
aria-label={
|
|
75
|
+
collapsed
|
|
76
|
+
? t("navigation.expandSidebar")
|
|
77
|
+
: t("navigation.collapseSidebar")
|
|
78
|
+
}
|
|
79
|
+
>
|
|
80
|
+
{collapsed ? (
|
|
81
|
+
<IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
|
|
82
|
+
) : (
|
|
83
|
+
<IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
|
|
84
|
+
)}
|
|
85
|
+
</button>
|
|
86
|
+
</TooltipTrigger>
|
|
87
|
+
<TooltipContent side="right">
|
|
88
|
+
{collapsed
|
|
89
|
+
? t("navigation.expandSidebar")
|
|
90
|
+
: t("navigation.collapseSidebar")}
|
|
91
|
+
</TooltipContent>
|
|
92
|
+
</Tooltip>
|
|
93
|
+
);
|
|
94
|
+
const searchButton = (
|
|
95
|
+
<Tooltip delayDuration={0}>
|
|
96
|
+
<TooltipTrigger asChild>
|
|
97
|
+
<button
|
|
98
|
+
type="button"
|
|
99
|
+
onClick={openCommandMenu}
|
|
100
|
+
className="flex size-8 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
|
|
101
|
+
aria-label={t("root.commandSearch")}
|
|
102
|
+
>
|
|
103
|
+
<IconSearch className="h-4 w-4" />
|
|
104
|
+
</button>
|
|
105
|
+
</TooltipTrigger>
|
|
106
|
+
<TooltipContent side="right">{t("root.commandSearch")}</TooltipContent>
|
|
107
|
+
</Tooltip>
|
|
108
|
+
);
|
|
109
|
+
const translateButton = (
|
|
110
|
+
<LanguagePicker variant="ghost-icon" label={t("settings.languageLabel")} />
|
|
111
|
+
);
|
|
112
|
+
const feedbackButton = (
|
|
113
|
+
<FeedbackButton
|
|
114
|
+
variant={collapsed ? "icon" : "sidebar"}
|
|
115
|
+
side="right"
|
|
116
|
+
className={collapsed ? "h-8 w-8" : "min-w-0"}
|
|
117
|
+
/>
|
|
118
|
+
);
|
|
119
|
+
|
|
64
120
|
return (
|
|
65
121
|
<aside
|
|
66
122
|
className={cn(
|
|
@@ -93,30 +149,6 @@ export function Sidebar() {
|
|
|
93
149
|
</span>
|
|
94
150
|
</div>
|
|
95
151
|
)}
|
|
96
|
-
<Tooltip delayDuration={0}>
|
|
97
|
-
<TooltipTrigger asChild>
|
|
98
|
-
<button
|
|
99
|
-
onClick={() => setCollapsed((c) => !c)}
|
|
100
|
-
className="flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
|
|
101
|
-
aria-label={
|
|
102
|
-
collapsed
|
|
103
|
-
? t("navigation.expandSidebar")
|
|
104
|
-
: t("navigation.collapseSidebar")
|
|
105
|
-
}
|
|
106
|
-
>
|
|
107
|
-
{collapsed ? (
|
|
108
|
-
<IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
|
|
109
|
-
) : (
|
|
110
|
-
<IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
|
|
111
|
-
)}
|
|
112
|
-
</button>
|
|
113
|
-
</TooltipTrigger>
|
|
114
|
-
<TooltipContent side="right">
|
|
115
|
-
{collapsed
|
|
116
|
-
? t("navigation.expandSidebar")
|
|
117
|
-
: t("navigation.collapseSidebar")}
|
|
118
|
-
</TooltipContent>
|
|
119
|
-
</Tooltip>
|
|
120
152
|
</div>
|
|
121
153
|
|
|
122
154
|
<div className="flex min-h-0 flex-1 flex-col overflow-y-auto">
|
|
@@ -202,17 +234,20 @@ export function Sidebar() {
|
|
|
202
234
|
<div className="px-3 py-2">
|
|
203
235
|
<OrgSwitcher reserveSpace />
|
|
204
236
|
</div>
|
|
205
|
-
|
|
206
237
|
<div className="px-3 py-2">
|
|
207
238
|
<DevDatabaseLink />
|
|
208
|
-
<
|
|
209
|
-
<FeedbackButton className="min-w-0 flex-1" />
|
|
210
|
-
<ThemeToggle className="h-8 w-8 shrink-0" />
|
|
211
|
-
</div>
|
|
239
|
+
<ThemeToggle className="h-8 w-8 shrink-0" />
|
|
212
240
|
</div>
|
|
213
241
|
</div>
|
|
214
242
|
)}
|
|
215
243
|
</div>
|
|
244
|
+
<SidebarFooterActions
|
|
245
|
+
collapsed={collapsed}
|
|
246
|
+
feedback={feedbackButton}
|
|
247
|
+
translate={translateButton}
|
|
248
|
+
search={searchButton}
|
|
249
|
+
collapse={collapseButton}
|
|
250
|
+
/>
|
|
216
251
|
</div>
|
|
217
252
|
</aside>
|
|
218
253
|
);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { captureException } from "@agent-native/core/client/analytics";
|
|
1
2
|
import { appBasePath } from "@agent-native/core/client/api-path";
|
|
2
3
|
import { hydrateRoot } from "react-dom/client";
|
|
3
4
|
import { HydratedRouter } from "react-router/dom";
|
|
@@ -16,4 +17,16 @@ if (context) {
|
|
|
16
17
|
context.basename = routerBasePath;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
hydrateRoot(document, <HydratedRouter
|
|
20
|
+
hydrateRoot(document, <HydratedRouter />, {
|
|
21
|
+
onRecoverableError(error, info) {
|
|
22
|
+
captureException(error, {
|
|
23
|
+
tags: {
|
|
24
|
+
source: "react-recoverable-error",
|
|
25
|
+
kind: "hydration",
|
|
26
|
+
},
|
|
27
|
+
extra: {
|
|
28
|
+
componentStack: info.componentStack?.slice(0, 2_000),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
});
|
|
@@ -37,6 +37,14 @@ export interface DrainDesignSaveOutboxResult {
|
|
|
37
37
|
* transient/conflict errors that SHOULD be retried.
|
|
38
38
|
*/
|
|
39
39
|
dropped: Array<{ entry: DesignSaveOutboxEntry; error: unknown }>;
|
|
40
|
+
/**
|
|
41
|
+
* Entries dropped because the server moved past their base version (a 409
|
|
42
|
+
* conflict). Distinct from `dropped`: the file still exists and nothing was
|
|
43
|
+
* lost to deletion, so the editor should rebase from the server rather than
|
|
44
|
+
* warn "changes discarded". Kept separate so a normal concurrent edit is
|
|
45
|
+
* never presented as a deleted file.
|
|
46
|
+
*/
|
|
47
|
+
rebased: Array<{ entry: DesignSaveOutboxEntry; error: unknown }>;
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
/**
|
|
@@ -58,6 +66,24 @@ export function isTerminalSaveError(error: unknown): boolean {
|
|
|
58
66
|
);
|
|
59
67
|
}
|
|
60
68
|
|
|
69
|
+
/**
|
|
70
|
+
* The server's update-file version conflict ("File changed since it was read…").
|
|
71
|
+
* Its frozen expectedVersionHash can never match on retry, so drop-and-rebase
|
|
72
|
+
* rather than loop forever. Matched by MESSAGE, not bare status 409, on purpose:
|
|
73
|
+
* the client-side "no known base version" / "changed elsewhere" 409 synthetics
|
|
74
|
+
* are intentionally retained by drainEntries, and the client-build-mismatch 409
|
|
75
|
+
* is a reload-then-retry.
|
|
76
|
+
*/
|
|
77
|
+
export function isConflictSaveError(error: unknown): boolean {
|
|
78
|
+
if (!error || typeof error !== "object") return false;
|
|
79
|
+
const candidate = error as { code?: unknown; message?: unknown };
|
|
80
|
+
if (candidate.code === "client_build_mismatch") return false;
|
|
81
|
+
return (
|
|
82
|
+
typeof candidate.message === "string" &&
|
|
83
|
+
/changed since it was read|re-read the file/i.test(candidate.message)
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
61
87
|
const DATABASE_NAME = "agent-native-design-save-outbox";
|
|
62
88
|
const DATABASE_VERSION = 2;
|
|
63
89
|
const ENTRY_STORE = "entries";
|
|
@@ -324,6 +350,7 @@ async function drainEntries(
|
|
|
324
350
|
saved: [],
|
|
325
351
|
failed: [],
|
|
326
352
|
dropped: [],
|
|
353
|
+
rebased: [],
|
|
327
354
|
};
|
|
328
355
|
for (const entry of await storage.list(designId, actorScope)) {
|
|
329
356
|
try {
|
|
@@ -374,6 +401,18 @@ async function drainEntries(
|
|
|
374
401
|
`[design-save-outbox] dropped unrecoverable save for ${entry.actionName} ${entry.resourceId} (file no longer exists)`,
|
|
375
402
|
);
|
|
376
403
|
}
|
|
404
|
+
} else if (isConflictSaveError(error)) {
|
|
405
|
+
// Base version superseded — retry is futile and replaying the stale
|
|
406
|
+
// snapshot would clobber newer content. Drop into `rebased` (NOT
|
|
407
|
+
// `dropped`) so the editor rebases from the server instead of warning
|
|
408
|
+
// that the file was discarded/deleted.
|
|
409
|
+
await storage.deleteIfRevision(entry);
|
|
410
|
+
result.rebased.push({ entry, error });
|
|
411
|
+
if (typeof console !== "undefined") {
|
|
412
|
+
console.warn(
|
|
413
|
+
`[design-save-outbox] rebased superseded save for ${entry.actionName} ${entry.resourceId} (server content moved on)`,
|
|
414
|
+
);
|
|
415
|
+
}
|
|
377
416
|
} else {
|
|
378
417
|
result.failed.push({ entry, error });
|
|
379
418
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentSidebar,
|
|
3
3
|
focusAgentChat,
|
|
4
|
+
isAgentChatHomeHandoffActive,
|
|
4
5
|
navigateWithAgentChatViewTransition,
|
|
5
6
|
useAgentChatHomeHandoff,
|
|
6
7
|
useAgentChatHomeHandoffLinks,
|
|
@@ -37,6 +38,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
37
38
|
activePath: location.pathname,
|
|
38
39
|
enabled: !isAskRoute,
|
|
39
40
|
});
|
|
41
|
+
const chatHomeHandoffPending = isAgentChatHomeHandoffActive("forms");
|
|
40
42
|
useAgentChatHomeHandoffLinks({
|
|
41
43
|
storageKey: "forms",
|
|
42
44
|
chatPath: "/ask",
|
|
@@ -90,6 +92,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
90
92
|
agentPageHref="/agent"
|
|
91
93
|
defaultOpen={false}
|
|
92
94
|
chatViewTransition
|
|
95
|
+
chatViewTransitionHandoff={chatHomeHandoffPending}
|
|
93
96
|
storageKey="forms"
|
|
94
97
|
browserTabId={TAB_ID}
|
|
95
98
|
openOnChatRunning={chatHomeHandoffActive}
|
|
@@ -5,9 +5,11 @@ import {
|
|
|
5
5
|
} from "@agent-native/core/client/agent-chat";
|
|
6
6
|
import { appPath } from "@agent-native/core/client/api-path";
|
|
7
7
|
import { DevDatabaseLink } from "@agent-native/core/client/db-admin";
|
|
8
|
-
import { useT } from "@agent-native/core/client/i18n";
|
|
8
|
+
import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
|
|
9
|
+
import { openCommandMenu } from "@agent-native/core/client/navigation";
|
|
9
10
|
import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
10
11
|
import { FeedbackButton } from "@agent-native/core/client/ui";
|
|
12
|
+
import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
|
|
11
13
|
import {
|
|
12
14
|
IconArrowUp,
|
|
13
15
|
IconPlus,
|
|
@@ -20,6 +22,7 @@ import {
|
|
|
20
22
|
IconForms,
|
|
21
23
|
IconLayoutSidebarLeftCollapse,
|
|
22
24
|
IconLayoutSidebarLeftExpand,
|
|
25
|
+
IconSearch,
|
|
23
26
|
} from "@tabler/icons-react";
|
|
24
27
|
import { useState, useRef, useEffect, type MouseEvent } from "react";
|
|
25
28
|
import { Link, useLocation, useNavigate } from "react-router";
|
|
@@ -70,6 +73,59 @@ export function Sidebar() {
|
|
|
70
73
|
});
|
|
71
74
|
const effectiveCollapsed = collapsed && !isMobile;
|
|
72
75
|
|
|
76
|
+
const collapseButton = (
|
|
77
|
+
<Tooltip>
|
|
78
|
+
<TooltipTrigger asChild>
|
|
79
|
+
<button
|
|
80
|
+
type="button"
|
|
81
|
+
onClick={() => setCollapsed((value) => !value)}
|
|
82
|
+
className="flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground"
|
|
83
|
+
aria-label={
|
|
84
|
+
effectiveCollapsed
|
|
85
|
+
? t("sidebar.expandSidebar")
|
|
86
|
+
: t("sidebar.collapseSidebar")
|
|
87
|
+
}
|
|
88
|
+
>
|
|
89
|
+
{effectiveCollapsed ? (
|
|
90
|
+
<IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
|
|
91
|
+
) : (
|
|
92
|
+
<IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
|
|
93
|
+
)}
|
|
94
|
+
</button>
|
|
95
|
+
</TooltipTrigger>
|
|
96
|
+
<TooltipContent side="right">
|
|
97
|
+
{effectiveCollapsed
|
|
98
|
+
? t("sidebar.expandSidebar")
|
|
99
|
+
: t("sidebar.collapseSidebar")}
|
|
100
|
+
</TooltipContent>
|
|
101
|
+
</Tooltip>
|
|
102
|
+
);
|
|
103
|
+
const searchButton = (
|
|
104
|
+
<Tooltip>
|
|
105
|
+
<TooltipTrigger asChild>
|
|
106
|
+
<button
|
|
107
|
+
type="button"
|
|
108
|
+
onClick={openCommandMenu}
|
|
109
|
+
className="flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground"
|
|
110
|
+
aria-label={t("root.searchForms")}
|
|
111
|
+
>
|
|
112
|
+
<IconSearch className="h-4 w-4" />
|
|
113
|
+
</button>
|
|
114
|
+
</TooltipTrigger>
|
|
115
|
+
<TooltipContent side="right">{t("root.searchForms")}</TooltipContent>
|
|
116
|
+
</Tooltip>
|
|
117
|
+
);
|
|
118
|
+
const translateButton = (
|
|
119
|
+
<LanguagePicker variant="ghost-icon" label={t("settings.languageLabel")} />
|
|
120
|
+
);
|
|
121
|
+
const feedbackButton = (
|
|
122
|
+
<FeedbackButton
|
|
123
|
+
variant={effectiveCollapsed ? "icon" : "sidebar"}
|
|
124
|
+
side="right"
|
|
125
|
+
className={effectiveCollapsed ? "size-8" : "min-w-0"}
|
|
126
|
+
/>
|
|
127
|
+
);
|
|
128
|
+
|
|
73
129
|
useEffect(() => {
|
|
74
130
|
if (popoverOpen) {
|
|
75
131
|
setPrompt("");
|
|
@@ -198,22 +254,6 @@ export function Sidebar() {
|
|
|
198
254
|
const sidebarContent = effectiveCollapsed ? (
|
|
199
255
|
<div className="agent-layout-left-drawer flex h-screen w-12 min-w-0 shrink-0 flex-col items-center overflow-hidden border-e border-border bg-sidebar py-2 transition-[width] duration-200 ease-out">
|
|
200
256
|
<TooltipProvider delayDuration={0}>
|
|
201
|
-
<Tooltip>
|
|
202
|
-
<TooltipTrigger asChild>
|
|
203
|
-
<button
|
|
204
|
-
type="button"
|
|
205
|
-
onClick={() => setCollapsed(false)}
|
|
206
|
-
className="forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg text-muted-foreground/55 transition-[background-color,box-shadow,color,transform] duration-150 ease-out hover:bg-accent/50 hover:text-muted-foreground active:scale-[0.96] motion-reduce:active:scale-100"
|
|
207
|
-
aria-label={t("sidebar.expandSidebar")}
|
|
208
|
-
>
|
|
209
|
-
<IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
|
|
210
|
-
</button>
|
|
211
|
-
</TooltipTrigger>
|
|
212
|
-
<TooltipContent side="right">
|
|
213
|
-
{t("sidebar.expandSidebar")}
|
|
214
|
-
</TooltipContent>
|
|
215
|
-
</Tooltip>
|
|
216
|
-
|
|
217
257
|
<nav className="mt-1 flex min-h-0 flex-1 flex-col items-center gap-1 overflow-y-auto">
|
|
218
258
|
<Tooltip>
|
|
219
259
|
<TooltipTrigger asChild>
|
|
@@ -318,6 +358,13 @@ export function Sidebar() {
|
|
|
318
358
|
</Tooltip>
|
|
319
359
|
</div>
|
|
320
360
|
</nav>
|
|
361
|
+
<SidebarFooterActions
|
|
362
|
+
collapsed
|
|
363
|
+
feedback={feedbackButton}
|
|
364
|
+
translate={translateButton}
|
|
365
|
+
search={searchButton}
|
|
366
|
+
collapse={collapseButton}
|
|
367
|
+
/>
|
|
321
368
|
</TooltipProvider>
|
|
322
369
|
</div>
|
|
323
370
|
) : (
|
|
@@ -368,24 +415,6 @@ export function Sidebar() {
|
|
|
368
415
|
<IconX size={18} />
|
|
369
416
|
</Button>
|
|
370
417
|
)}
|
|
371
|
-
{!isMobile && (
|
|
372
|
-
<Tooltip>
|
|
373
|
-
<TooltipTrigger asChild>
|
|
374
|
-
<Button
|
|
375
|
-
variant="ghost"
|
|
376
|
-
size="icon"
|
|
377
|
-
className="size-10 text-muted-foreground/55 transition-[background-color,box-shadow,color,transform] hover:bg-accent/50 hover:text-muted-foreground active:scale-[0.96] motion-reduce:active:scale-100"
|
|
378
|
-
onClick={() => setCollapsed(true)}
|
|
379
|
-
aria-label={t("sidebar.collapseSidebar")}
|
|
380
|
-
>
|
|
381
|
-
<IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
|
|
382
|
-
</Button>
|
|
383
|
-
</TooltipTrigger>
|
|
384
|
-
<TooltipContent side="right">
|
|
385
|
-
{t("sidebar.collapseSidebar")}
|
|
386
|
-
</TooltipContent>
|
|
387
|
-
</Tooltip>
|
|
388
|
-
)}
|
|
389
418
|
</div>
|
|
390
419
|
|
|
391
420
|
<ScrollArea className="min-h-0 min-w-0 flex-1">
|
|
@@ -469,10 +498,16 @@ export function Sidebar() {
|
|
|
469
498
|
<div className="shrink-0 space-y-2 px-3 py-2">
|
|
470
499
|
<OrgSwitcher />
|
|
471
500
|
<DevDatabaseLink />
|
|
472
|
-
<div className="flex
|
|
473
|
-
<FeedbackButton className="min-w-0 flex-1" />
|
|
501
|
+
<div className="flex justify-end">
|
|
474
502
|
<ThemeToggle className="h-9 w-9 shrink-0" />
|
|
475
503
|
</div>
|
|
504
|
+
<SidebarFooterActions
|
|
505
|
+
feedback={feedbackButton}
|
|
506
|
+
translate={translateButton}
|
|
507
|
+
search={searchButton}
|
|
508
|
+
collapse={collapseButton}
|
|
509
|
+
className="px-0 py-0"
|
|
510
|
+
/>
|
|
476
511
|
</div>
|
|
477
512
|
</div>
|
|
478
513
|
);
|
|
@@ -124,7 +124,7 @@ export function DailyProgress({
|
|
|
124
124
|
};
|
|
125
125
|
|
|
126
126
|
return (
|
|
127
|
-
<div className="relative overflow-hidden rounded-2xl
|
|
127
|
+
<div className="relative overflow-hidden rounded-2xl bg-card p-4 sm:p-5">
|
|
128
128
|
<div className="macros-summary-grid">
|
|
129
129
|
{/* Left Side */}
|
|
130
130
|
<div className="space-y-8 flex flex-col justify-center">
|
|
@@ -134,7 +134,7 @@ export function DailyProgress({
|
|
|
134
134
|
{t("daily.summary")}
|
|
135
135
|
</p>
|
|
136
136
|
</div>
|
|
137
|
-
<div className="px-3 py-1.5 rounded-full bg-muted/40
|
|
137
|
+
<div className="px-3 py-1.5 rounded-full bg-muted/40 flex items-center">
|
|
138
138
|
<span className="text-[10px] font-medium text-muted-foreground uppercase tracking-widest leading-none">
|
|
139
139
|
{t("daily.goalWithValue", { value: goalCalories })}
|
|
140
140
|
</span>
|
|
@@ -215,7 +215,7 @@ export function DailyProgress({
|
|
|
215
215
|
].map((m) => (
|
|
216
216
|
<div
|
|
217
217
|
key={m.label}
|
|
218
|
-
className="p-2.5 sm:p-3 rounded-xl bg-muted/30
|
|
218
|
+
className="p-2.5 sm:p-3 rounded-xl bg-muted/30"
|
|
219
219
|
>
|
|
220
220
|
<p className="text-[10px] uppercase tracking-wider text-muted-foreground mb-1">
|
|
221
221
|
{m.label}
|
|
@@ -230,14 +230,14 @@ export function DailyProgress({
|
|
|
230
230
|
</div>
|
|
231
231
|
|
|
232
232
|
{/* Right Side: Charts */}
|
|
233
|
-
<div className="macros-summary-chart
|
|
233
|
+
<div className="macros-summary-chart flex-col justify-center transition-all duration-300">
|
|
234
234
|
<Tabs
|
|
235
235
|
value={activeChart}
|
|
236
236
|
onValueChange={setActiveChart}
|
|
237
237
|
className="flex flex-col space-y-6"
|
|
238
238
|
>
|
|
239
239
|
<div className="flex items-center justify-between">
|
|
240
|
-
<TabsList className="bg-muted/40
|
|
240
|
+
<TabsList className="bg-muted/40 h-8">
|
|
241
241
|
<TabsTrigger
|
|
242
242
|
value="weight"
|
|
243
243
|
className="gap-2 text-[10px] uppercase tracking-wider h-6 px-3"
|
|
@@ -26,8 +26,8 @@ export function ExerciseCard({
|
|
|
26
26
|
}: ExerciseCardProps) {
|
|
27
27
|
const t = useT();
|
|
28
28
|
return (
|
|
29
|
-
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl
|
|
30
|
-
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-orange-500/10
|
|
29
|
+
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
30
|
+
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-orange-500/10">
|
|
31
31
|
<IconFlame className="h-4 w-4 text-orange-400" />
|
|
32
32
|
</div>
|
|
33
33
|
<div className="flex-1 min-w-0">
|
|
@@ -26,8 +26,8 @@ export function MealCard({
|
|
|
26
26
|
}: MealCardProps) {
|
|
27
27
|
const t = useT();
|
|
28
28
|
return (
|
|
29
|
-
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl
|
|
30
|
-
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-emerald-500/10
|
|
29
|
+
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
30
|
+
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-emerald-500/10">
|
|
31
31
|
<IconToolsKitchen2 className="h-4 w-4 text-emerald-400" />
|
|
32
32
|
</div>
|
|
33
33
|
<div className="flex-1 min-w-0">
|
|
@@ -40,8 +40,8 @@ export function WeightCard({
|
|
|
40
40
|
const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);
|
|
41
41
|
|
|
42
42
|
return (
|
|
43
|
-
<div className="group relative flex items-center gap-3 rounded-xl
|
|
44
|
-
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-blue-500/10
|
|
43
|
+
<div className="group relative flex items-center gap-3 rounded-xl bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
44
|
+
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-blue-500/10">
|
|
45
45
|
<IconScale className="h-4 w-4 text-blue-400" />
|
|
46
46
|
</div>
|
|
47
47
|
<div className="flex-1 min-w-0">
|