diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.js index f38e51436..6786c9186 100644 --- a/apps/web/eslint.config.js +++ b/apps/web/eslint.config.js @@ -191,6 +191,7 @@ export default [js.configs.recommended, { 'object-shorthand': 'error', 'prefer-template': 'error', 'no-unused-vars': 'off', // Handled by @typescript-eslint/no-unused-vars + 'no-undef': 'off', // TypeScript handles this; no-undef doesn't understand TS types (JSX, etc.) 'no-useless-escape': 'error', 'no-prototype-builtins': 'warn', diff --git a/apps/web/index.html b/apps/web/index.html index 643c3db3e..e063419ae 100644 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -7,13 +7,9 @@ Veza - Plateforme de streaming musical - - - - - + + + diff --git a/apps/web/public/fonts/Inter-Variable.woff2 b/apps/web/public/fonts/Inter-Variable.woff2 new file mode 100644 index 000000000..891fc5cc5 Binary files /dev/null and b/apps/web/public/fonts/Inter-Variable.woff2 differ diff --git a/apps/web/public/fonts/JetBrainsMono-Regular.woff2 b/apps/web/public/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 000000000..66c54672c Binary files /dev/null and b/apps/web/public/fonts/JetBrainsMono-Regular.woff2 differ diff --git a/apps/web/public/fonts/SpaceGrotesk-Bold.woff2 b/apps/web/public/fonts/SpaceGrotesk-Bold.woff2 new file mode 100644 index 000000000..6878537da Binary files /dev/null and b/apps/web/public/fonts/SpaceGrotesk-Bold.woff2 differ diff --git a/apps/web/public/mockServiceWorker.js b/apps/web/public/mockServiceWorker.js index 461e2600e..228de2a59 100644 --- a/apps/web/public/mockServiceWorker.js +++ b/apps/web/public/mockServiceWorker.js @@ -1,4 +1,4 @@ -/* eslint-disable */ + /* tslint:disable */ /** diff --git a/apps/web/src/components/AdvancedFilters.tsx b/apps/web/src/components/AdvancedFilters.tsx index ac668c8a1..737a018bb 100644 --- a/apps/web/src/components/AdvancedFilters.tsx +++ b/apps/web/src/components/AdvancedFilters.tsx @@ -134,7 +134,7 @@ export function AdvancedFilters({ open={isOpen} onOpenChange={handleToggle} defaultOpen={defaultOpen} - triggerClassName="p-2 rounded-lg border border-border bg-background/50 hover:bg-background transition-colors" + triggerClassName="p-2 rounded-lg shadow-[0_0_8px_rgba(26,26,30,0.05)] bg-background/50 hover:bg-background transition-colors" contentClassName={cn('pt-3', contentClassName)} >
{children}
diff --git a/apps/web/src/components/BulkModeBanner.tsx b/apps/web/src/components/BulkModeBanner.tsx index 780384072..df1c48787 100644 --- a/apps/web/src/components/BulkModeBanner.tsx +++ b/apps/web/src/components/BulkModeBanner.tsx @@ -70,7 +70,7 @@ export function BulkModeBanner({ aria-live="polite" aria-atomic="true" className={cn( - 'w-full bg-muted/10 border-b border-border/30 text-muted-foreground', + 'w-full bg-muted/10 shadow-[0_2px_6px_-2px_rgba(26,26,30,0.08)] text-muted-foreground', 'px-4 py-4 flex items-center justify-between gap-4', 'transition-all duration-[var(--sumi-duration-normal)]', className, diff --git a/apps/web/src/components/ErrorBoundary.stories.tsx b/apps/web/src/components/ErrorBoundary.stories.tsx index 73fbea560..431c510fe 100644 --- a/apps/web/src/components/ErrorBoundary.stories.tsx +++ b/apps/web/src/components/ErrorBoundary.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import React from 'react'; import { ErrorBoundary } from './ErrorBoundary'; diff --git a/apps/web/src/components/OfflineIndicator.stories.tsx b/apps/web/src/components/OfflineIndicator.stories.tsx index 6fd4454f9..bd5e3e7ab 100644 --- a/apps/web/src/components/OfflineIndicator.stories.tsx +++ b/apps/web/src/components/OfflineIndicator.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { WifiOff, Loader2, List } from 'lucide-react'; // Since OfflineIndicator has complex hook dependencies, we create visual representations diff --git a/apps/web/src/components/OfflineIndicator.tsx b/apps/web/src/components/OfflineIndicator.tsx index 9401149b0..358baa654 100644 --- a/apps/web/src/components/OfflineIndicator.tsx +++ b/apps/web/src/components/OfflineIndicator.tsx @@ -100,7 +100,7 @@ export function OfflineIndicator() { if (!isOnline || hasNetworkError) { return ( <> -
+
Mode hors ligne @@ -141,7 +141,7 @@ export function OfflineIndicator() { if (isProcessing && queueSize > 0 && shouldShowSyncBar) { return ( <> -
+
Synchronisation en cours diff --git a/apps/web/src/components/OfflineQueueManager.tsx b/apps/web/src/components/OfflineQueueManager.tsx index 06e4bae5c..b87768da9 100644 --- a/apps/web/src/components/OfflineQueueManager.tsx +++ b/apps/web/src/components/OfflineQueueManager.tsx @@ -118,7 +118,7 @@ export function OfflineQueueManager({ >
{/* Queue Summary */} -
+
@@ -151,7 +151,7 @@ export function OfflineQueueManager({ {queue.map((request) => (
@@ -213,7 +213,7 @@ export function OfflineQueueManager({ {/* Info Message */} {queue.length > 0 && ( -
+

Queued requests will be automatically processed when you're back online. You can remove individual requests or clear the entire diff --git a/apps/web/src/components/admin/AdminAuditLogsView.stories.tsx b/apps/web/src/components/admin/AdminAuditLogsView.stories.tsx index 521b0e853..87eee9a53 100644 --- a/apps/web/src/components/admin/AdminAuditLogsView.stories.tsx +++ b/apps/web/src/components/admin/AdminAuditLogsView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { AdminAuditLogsView } from './AdminAuditLogsView'; /** diff --git a/apps/web/src/components/admin/AdminDashboardView.stories.tsx b/apps/web/src/components/admin/AdminDashboardView.stories.tsx index db1d69272..fc5439d0f 100644 --- a/apps/web/src/components/admin/AdminDashboardView.stories.tsx +++ b/apps/web/src/components/admin/AdminDashboardView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { AdminDashboardView } from './AdminDashboardView'; import { AdminDashboardSkeleton } from './admin-dashboard-view'; import { ToastProvider } from '../../components/feedback/ToastProvider'; diff --git a/apps/web/src/components/admin/AdminModerationView.stories.tsx b/apps/web/src/components/admin/AdminModerationView.stories.tsx index 743c03224..03a0dd7ec 100644 --- a/apps/web/src/components/admin/AdminModerationView.stories.tsx +++ b/apps/web/src/components/admin/AdminModerationView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { http, HttpResponse } from 'msw'; import { AdminModerationView } from './AdminModerationView'; import { ToastProvider } from '../../components/feedback/ToastProvider'; diff --git a/apps/web/src/components/admin/AdminModerationView.tsx b/apps/web/src/components/admin/AdminModerationView.tsx index e05a27d32..3b22cc12f 100644 --- a/apps/web/src/components/admin/AdminModerationView.tsx +++ b/apps/web/src/components/admin/AdminModerationView.tsx @@ -198,7 +198,7 @@ export const AdminModerationView: React.FC = () => { { label: 'Pending Appeals', value: stats.pending_appeals, color: 'text-blue-400' }, { label: 'Pending Fingerprints', value: stats.pending_fingerprints, color: 'text-purple-400' }, ].map((stat) => ( -

+
{stat.value}
{stat.label}
@@ -350,7 +350,7 @@ function QueuePanel({ {new Date(item.created_at).toLocaleString()}
-
+

{item.reason}

diff --git a/apps/web/src/components/admin/AdminPlatformView.tsx b/apps/web/src/components/admin/AdminPlatformView.tsx index 3cdf166be..32ba5a9bd 100644 --- a/apps/web/src/components/admin/AdminPlatformView.tsx +++ b/apps/web/src/components/admin/AdminPlatformView.tsx @@ -443,7 +443,7 @@ function PaymentsPanel({ payments }: { payments: PaymentOverview }) {
{cards.map((card) => ( -
+
{card.label}
{card.value}
diff --git a/apps/web/src/components/admin/AdminSettingsView.stories.tsx b/apps/web/src/components/admin/AdminSettingsView.stories.tsx index b9bd2adde..0936a416c 100644 --- a/apps/web/src/components/admin/AdminSettingsView.stories.tsx +++ b/apps/web/src/components/admin/AdminSettingsView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { http, HttpResponse } from 'msw'; import { AdminSettingsView } from './AdminSettingsView'; diff --git a/apps/web/src/components/admin/AdminSettingsView.tsx b/apps/web/src/components/admin/AdminSettingsView.tsx index 5facce4f0..76185ac17 100644 --- a/apps/web/src/components/admin/AdminSettingsView.tsx +++ b/apps/web/src/components/admin/AdminSettingsView.tsx @@ -178,7 +178,7 @@ export const AdminSettingsView: React.FC = () => { {featureFlags.map((flag) => (
{flag.name} @@ -267,7 +267,7 @@ export const AdminSettingsView: React.FC = () => { {announcements.map((a) => (
{a.title} diff --git a/apps/web/src/components/admin/AdminTransfersView.stories.tsx b/apps/web/src/components/admin/AdminTransfersView.stories.tsx index 260daff4d..5d73ad2d2 100644 --- a/apps/web/src/components/admin/AdminTransfersView.stories.tsx +++ b/apps/web/src/components/admin/AdminTransfersView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { http, HttpResponse } from 'msw'; import { AdminTransfersView } from './AdminTransfersView'; diff --git a/apps/web/src/components/admin/AdminUsersView.stories.tsx b/apps/web/src/components/admin/AdminUsersView.stories.tsx index 291640151..312e25717 100644 --- a/apps/web/src/components/admin/AdminUsersView.stories.tsx +++ b/apps/web/src/components/admin/AdminUsersView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { AdminUsersView } from './AdminUsersView'; /** diff --git a/apps/web/src/components/admin/AdminUsersView.tsx b/apps/web/src/components/admin/AdminUsersView.tsx index 4a4fcaf27..a5f0a6ecf 100644 --- a/apps/web/src/components/admin/AdminUsersView.tsx +++ b/apps/web/src/components/admin/AdminUsersView.tsx @@ -72,7 +72,7 @@ export const AdminUsersView: React.FC = () => {
- +
= ({ className="fixed inset-0 z-10" onClick={() => setShowMenu(false)} >
-
+
-
+

Suspend User @@ -71,7 +71,7 @@ export const BanUserModal: React.FC = ({ />

-
+
diff --git a/apps/web/src/components/analytics/TrackAnalyticsView.stories.tsx b/apps/web/src/components/analytics/TrackAnalyticsView.stories.tsx index 65cba99dd..84fe848fe 100644 --- a/apps/web/src/components/analytics/TrackAnalyticsView.stories.tsx +++ b/apps/web/src/components/analytics/TrackAnalyticsView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { TrackAnalyticsView } from './TrackAnalyticsView'; const meta: Meta = { diff --git a/apps/web/src/components/commerce/CartItem.stories.tsx b/apps/web/src/components/commerce/CartItem.stories.tsx index cd8f9ab6f..a36598d4d 100644 --- a/apps/web/src/components/commerce/CartItem.stories.tsx +++ b/apps/web/src/components/commerce/CartItem.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { CartItem } from './CartItem'; import { fn } from 'storybook/test'; import type { CartItem as CartItemType } from '@/stores/cartStore'; diff --git a/apps/web/src/components/commerce/CartItem.tsx b/apps/web/src/components/commerce/CartItem.tsx index 9b0dad490..f542222e3 100644 --- a/apps/web/src/components/commerce/CartItem.tsx +++ b/apps/web/src/components/commerce/CartItem.tsx @@ -21,7 +21,7 @@ export const CartItem: React.FC = ({ item, onRemove }) => { return ( {/* Thumbnail */}
@@ -37,10 +37,10 @@ export const CartItem: React.FC = ({ item, onRemove }) => {

{product.title}

{product.author}

- + {licenseName} License - + {product.type}
diff --git a/apps/web/src/components/commerce/OrderSummary.stories.tsx b/apps/web/src/components/commerce/OrderSummary.stories.tsx index 812609ee0..ab4fcd518 100644 --- a/apps/web/src/components/commerce/OrderSummary.stories.tsx +++ b/apps/web/src/components/commerce/OrderSummary.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { OrderSummary } from './OrderSummary'; const meta: Meta = { diff --git a/apps/web/src/components/commerce/WishlistView.stories.tsx b/apps/web/src/components/commerce/WishlistView.stories.tsx index 36e32b180..7428cee00 100644 --- a/apps/web/src/components/commerce/WishlistView.stories.tsx +++ b/apps/web/src/components/commerce/WishlistView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { WishlistView } from './WishlistView'; import { ToastProvider } from '../../components/feedback/ToastProvider'; diff --git a/apps/web/src/components/commerce/WishlistView.tsx b/apps/web/src/components/commerce/WishlistView.tsx index d068df718..fda4b06d8 100644 --- a/apps/web/src/components/commerce/WishlistView.tsx +++ b/apps/web/src/components/commerce/WishlistView.tsx @@ -172,7 +172,7 @@ export const WishlistView: React.FC = () => {
diff --git a/apps/web/src/components/commerce/modals/PromoCodeModal.stories.tsx b/apps/web/src/components/commerce/modals/PromoCodeModal.stories.tsx index 844997328..4475f0662 100644 --- a/apps/web/src/components/commerce/modals/PromoCodeModal.stories.tsx +++ b/apps/web/src/components/commerce/modals/PromoCodeModal.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { http, HttpResponse } from 'msw'; import { PromoCodeModal } from './PromoCodeModal'; diff --git a/apps/web/src/components/commerce/modals/PromoCodeModal.tsx b/apps/web/src/components/commerce/modals/PromoCodeModal.tsx index fcea5f0bd..832afa798 100644 --- a/apps/web/src/components/commerce/modals/PromoCodeModal.tsx +++ b/apps/web/src/components/commerce/modals/PromoCodeModal.tsx @@ -55,7 +55,7 @@ export const PromoCodeModal: React.FC = ({ className="absolute inset-0 bg-background/90 backdrop-blur-sm" onClick={onClose} >
-
+

Add Promo Code diff --git a/apps/web/src/components/commerce/modals/RefundRequestModal.tsx b/apps/web/src/components/commerce/modals/RefundRequestModal.tsx index 5c7c6b5e7..da557fb7d 100644 --- a/apps/web/src/components/commerce/modals/RefundRequestModal.tsx +++ b/apps/web/src/components/commerce/modals/RefundRequestModal.tsx @@ -41,7 +41,7 @@ export const RefundRequestModal: React.FC = ({ className="absolute inset-0 bg-background/90 backdrop-blur-sm" onClick={onClose} >

-
+

Request Refund @@ -86,7 +86,7 @@ export const RefundRequestModal: React.FC = ({ />

-
+
Upload Evidence (Optional) diff --git a/apps/web/src/components/dashboard/ActivityGraph.stories.tsx b/apps/web/src/components/dashboard/ActivityGraph.stories.tsx index 380f50a0a..011adc404 100644 --- a/apps/web/src/components/dashboard/ActivityGraph.stories.tsx +++ b/apps/web/src/components/dashboard/ActivityGraph.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { ActivityGraph } from './ActivityGraph'; const meta = { diff --git a/apps/web/src/components/dashboard/ActivityGraph.tsx b/apps/web/src/components/dashboard/ActivityGraph.tsx index 306aa9faa..24537e547 100644 --- a/apps/web/src/components/dashboard/ActivityGraph.tsx +++ b/apps/web/src/components/dashboard/ActivityGraph.tsx @@ -120,12 +120,12 @@ export function ActivityGraph() { isHovered ? "opacity-100 translate-y-0" : "opacity-0 translate-y-2" )} > -
+
{point.value} écoutes
{point.label}
{/* Triangle du tooltip */} -
+
{/* Label Axe X (tous les 3 ou 5 points selon densité) */} diff --git a/apps/web/src/components/dashboard/StatCard.stories.tsx b/apps/web/src/components/dashboard/StatCard.stories.tsx index 220f7722f..43f5a31a3 100644 --- a/apps/web/src/components/dashboard/StatCard.stories.tsx +++ b/apps/web/src/components/dashboard/StatCard.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { StatCard } from './StatCard'; import { Music, Users, DollarSign } from 'lucide-react'; diff --git a/apps/web/src/components/dashboard/TrackList.stories.tsx b/apps/web/src/components/dashboard/TrackList.stories.tsx index d69ccb424..7c7c59806 100644 --- a/apps/web/src/components/dashboard/TrackList.stories.tsx +++ b/apps/web/src/components/dashboard/TrackList.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { TrackList } from './TrackList'; const meta = { diff --git a/apps/web/src/components/dashboard/TrackList.tsx b/apps/web/src/components/dashboard/TrackList.tsx index 47e32a80d..6dc9e4c99 100644 --- a/apps/web/src/components/dashboard/TrackList.tsx +++ b/apps/web/src/components/dashboard/TrackList.tsx @@ -67,7 +67,7 @@ export const TrackList: React.FC = () => { {[1, 2, 3, 4, 5].map((i) => (
))}
@@ -93,7 +93,7 @@ export const TrackList: React.FC = () => { if (tracks.length === 0) { return ( -
+

No tracks trending right now.

diff --git a/apps/web/src/components/data/Table.stories.tsx b/apps/web/src/components/data/Table.stories.tsx index e77ff0303..02e9eaabb 100644 --- a/apps/web/src/components/data/Table.stories.tsx +++ b/apps/web/src/components/data/Table.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { Table, type TableColumn } from './Table'; type SampleRow = { id: string; name: string; age: number; email: string }; diff --git a/apps/web/src/components/data/Timeline.test.tsx b/apps/web/src/components/data/Timeline.test.tsx index c5eed26c7..2a4c8c6a3 100644 --- a/apps/web/src/components/data/Timeline.test.tsx +++ b/apps/web/src/components/data/Timeline.test.tsx @@ -247,6 +247,7 @@ describe('Timeline Component', () => { }); // Helper function pour formater les dates (copie de l'utilitaire) +// Must use 'fr-FR' locale to match the component's formatDate from @/utils/date function formatDate( date: Date | string, format: 'short' | 'long' | 'relative' = 'short', @@ -259,7 +260,7 @@ function formatDate( switch (format) { case 'short': - return d.toLocaleDateString(); + return d.toLocaleDateString('fr-FR'); case 'long': return d.toLocaleDateString('fr-FR', { year: 'numeric', @@ -271,6 +272,6 @@ function formatDate( case 'relative': return 'relative'; default: - return d.toLocaleDateString(); + return d.toLocaleDateString('fr-FR'); } } diff --git a/apps/web/src/components/data/table/Table.tsx b/apps/web/src/components/data/table/Table.tsx index 659eb33fe..f2a0effca 100644 --- a/apps/web/src/components/data/table/Table.tsx +++ b/apps/web/src/components/data/table/Table.tsx @@ -50,7 +50,7 @@ export function Table>({ return (
-
+
= { diff --git a/apps/web/src/components/developer/APIPlaygroundView.tsx b/apps/web/src/components/developer/APIPlaygroundView.tsx index 685fcdb4d..e022d3cb5 100644 --- a/apps/web/src/components/developer/APIPlaygroundView.tsx +++ b/apps/web/src/components/developer/APIPlaygroundView.tsx @@ -129,7 +129,7 @@ export const APIPlaygroundView: React.FC = () => { )} -
+
{response ? ( <>
diff --git a/apps/web/src/components/developer/DeveloperDashboardView.stories.tsx b/apps/web/src/components/developer/DeveloperDashboardView.stories.tsx
index 0fac7fcd2..89592ddfc 100644
--- a/apps/web/src/components/developer/DeveloperDashboardView.stories.tsx
+++ b/apps/web/src/components/developer/DeveloperDashboardView.stories.tsx
@@ -1,4 +1,4 @@
-import type { Meta, StoryObj } from '@storybook/react';
+import type { Meta, StoryObj } from '@storybook/react-vite';
 import { DeveloperDashboardView } from './DeveloperDashboardView';
 import { ToastProvider } from '../../components/feedback/ToastProvider';
 
diff --git a/apps/web/src/components/developer/DeveloperDashboardView.tsx b/apps/web/src/components/developer/DeveloperDashboardView.tsx
index 7a531763e..0448002d6 100644
--- a/apps/web/src/components/developer/DeveloperDashboardView.tsx
+++ b/apps/web/src/components/developer/DeveloperDashboardView.tsx
@@ -120,7 +120,7 @@ export const DeveloperDashboardView: React.FC = () => {
               {keys.map((k) => (
                 
{k.name}
diff --git a/apps/web/src/components/developer/WebhooksView.stories.tsx b/apps/web/src/components/developer/WebhooksView.stories.tsx index 52bf1f7ce..3ce0438e8 100644 --- a/apps/web/src/components/developer/WebhooksView.stories.tsx +++ b/apps/web/src/components/developer/WebhooksView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { WebhooksView } from './WebhooksView'; const meta: Meta = { diff --git a/apps/web/src/components/developer/modals/CreateAPIKeyModal.stories.tsx b/apps/web/src/components/developer/modals/CreateAPIKeyModal.stories.tsx index f471320cf..d47ef1b2a 100644 --- a/apps/web/src/components/developer/modals/CreateAPIKeyModal.stories.tsx +++ b/apps/web/src/components/developer/modals/CreateAPIKeyModal.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { CreateAPIKeyModal } from './CreateAPIKeyModal'; import { fn } from 'storybook/test'; diff --git a/apps/web/src/components/developer/modals/CreateAPIKeyModal.tsx b/apps/web/src/components/developer/modals/CreateAPIKeyModal.tsx index ef85ff347..a8866dd39 100644 --- a/apps/web/src/components/developer/modals/CreateAPIKeyModal.tsx +++ b/apps/web/src/components/developer/modals/CreateAPIKeyModal.tsx @@ -111,7 +111,7 @@ export const CreateAPIKeyModal: React.FC = ({ className="absolute inset-0 bg-background/90 backdrop-blur-md" onClick={step === 1 ? onClose : undefined} >
-
+
{/* Header - Fixed */}

@@ -208,7 +208,7 @@ export const CreateAPIKeyModal: React.FC = ({

-
+
setShowAll(true)} - className="text-[10px] text-muted-foreground/50 hover:text-foreground text-center tracking-[0.1em] font-heading py-1 px-3 rounded-md bg-muted/30 border border-border/30 mx-auto w-fit block cursor-pointer transition-colors" + className="text-[10px] text-muted-foreground/50 hover:text-foreground text-center tracking-[0.1em] font-heading py-1 px-3 rounded-md bg-muted/30 shadow-[0_0_8px_rgba(26,26,30,0.05)] mx-auto w-fit block cursor-pointer transition-colors" style={{ fontWeight: 300 }} > +{remaining} more diff --git a/apps/web/src/components/feedback/Toast.stories.tsx b/apps/web/src/components/feedback/Toast.stories.tsx index bf991fe85..6b5166199 100644 --- a/apps/web/src/components/feedback/Toast.stories.tsx +++ b/apps/web/src/components/feedback/Toast.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; import { ToastComponent } from './Toast'; diff --git a/apps/web/src/components/filters/FilterBar.stories.tsx b/apps/web/src/components/filters/FilterBar.stories.tsx index 6a3244f93..47057ae29 100644 --- a/apps/web/src/components/filters/FilterBar.stories.tsx +++ b/apps/web/src/components/filters/FilterBar.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { FilterBar } from './FilterBar'; const mockFilters = { diff --git a/apps/web/src/components/forms/FormBuilder.stories.tsx b/apps/web/src/components/forms/FormBuilder.stories.tsx index 633b18962..641d0142f 100644 --- a/apps/web/src/components/forms/FormBuilder.stories.tsx +++ b/apps/web/src/components/forms/FormBuilder.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { FormBuilder, type FormField } from './FormBuilder'; const sampleFields: FormField[] = [ diff --git a/apps/web/src/components/icons/SumiIcon.tsx b/apps/web/src/components/icons/SumiIcon.tsx new file mode 100644 index 000000000..0df1b8230 --- /dev/null +++ b/apps/web/src/components/icons/SumiIcon.tsx @@ -0,0 +1,35 @@ +import type { LucideIcon } from 'lucide-react'; +import type { ComponentType, SVGProps } from 'react'; + +import { cn } from '@/lib/utils'; + +type SumiIconProps = { + /** Hand-drawn Sumi SVG component (priority) */ + sumi?: ComponentType>; + /** Lucide fallback icon */ + fallback: LucideIcon; + size?: number; + className?: string; +}; + +/** + * SumiIcon — wrapper that renders hand-drawn calligraphic SVG icons + * when available, falling back to Lucide icons otherwise. + * + * Place hand-drawn SVGs in ./sumi/ as React components: + * export default (props: SVGProps) => {...} + */ +export function SumiIcon({ sumi: SumiSvg, fallback: Fallback, size = 24, className }: SumiIconProps) { + if (SumiSvg) { + return ( +
diff --git a/apps/web/src/components/inventory/EquipmentCard.stories.tsx b/apps/web/src/components/inventory/EquipmentCard.stories.tsx index 7ccbc08c8..db1789f61 100644 --- a/apps/web/src/components/inventory/EquipmentCard.stories.tsx +++ b/apps/web/src/components/inventory/EquipmentCard.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; import { EquipmentCard } from './EquipmentCard'; import { GearItem } from '../../types'; diff --git a/apps/web/src/components/inventory/EquipmentDetailView.stories.tsx b/apps/web/src/components/inventory/EquipmentDetailView.stories.tsx index 8b869986f..c9ee9a51d 100644 --- a/apps/web/src/components/inventory/EquipmentDetailView.stories.tsx +++ b/apps/web/src/components/inventory/EquipmentDetailView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { EquipmentDetailView, EquipmentDetailViewSkeleton } from './equipment-detail-view'; import { ToastProvider } from '@/components/feedback/ToastProvider'; diff --git a/apps/web/src/components/inventory/InventoryView.stories.tsx b/apps/web/src/components/inventory/InventoryView.stories.tsx index 196c777bf..dfdde2856 100644 --- a/apps/web/src/components/inventory/InventoryView.stories.tsx +++ b/apps/web/src/components/inventory/InventoryView.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; import { InventoryView } from './InventoryView'; import { ToastProvider } from '@/components/feedback/ToastProvider'; diff --git a/apps/web/src/components/inventory/InventoryView.tsx b/apps/web/src/components/inventory/InventoryView.tsx index 7449e9f43..fe504f747 100644 --- a/apps/web/src/components/inventory/InventoryView.tsx +++ b/apps/web/src/components/inventory/InventoryView.tsx @@ -79,7 +79,7 @@ export const InventoryView: React.FC = ({ onNavigate }) => {
{/* Filters */} -
+
= ({ onNavigate }) => {
-
+
-
+
diff --git a/apps/web/src/components/seller/modals/FlashSaleModal.stories.tsx b/apps/web/src/components/seller/modals/FlashSaleModal.stories.tsx index 237a03d03..00623432d 100644 --- a/apps/web/src/components/seller/modals/FlashSaleModal.stories.tsx +++ b/apps/web/src/components/seller/modals/FlashSaleModal.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; import { FlashSaleModal } from './FlashSaleModal'; import { ToastProvider } from '@/components/feedback/ToastProvider'; diff --git a/apps/web/src/components/seller/modals/FlashSaleModal.tsx b/apps/web/src/components/seller/modals/FlashSaleModal.tsx index 54d585557..e3a13f369 100644 --- a/apps/web/src/components/seller/modals/FlashSaleModal.tsx +++ b/apps/web/src/components/seller/modals/FlashSaleModal.tsx @@ -41,7 +41,7 @@ export const FlashSaleModal: React.FC = ({ className="absolute inset-0 bg-background/90 backdrop-blur-sm" onClick={onClose} >
-
+

Start Flash Sale @@ -130,7 +130,7 @@ export const FlashSaleModal: React.FC = ({

-
+
{products.map((product) => (
= ({ className="absolute inset-0 bg-background/90 backdrop-blur-sm" onClick={onClose} >
-
+

Change Email Address

-
+
@@ -52,7 +52,7 @@ export function AccountSettingsIdentityCard({
-
+
High Contrast
@@ -185,8 +185,8 @@ export const AppearanceSettingsView: React.FC = () => { setDensity(opt.id); } }} - className={`flex items-center gap-4 p-4 rounded-lg border cursor-pointer transition-all ${ - density === opt.id ? 'bg-primary/10 border-primary' : 'bg-card border-border hover:bg-muted/50' + className={`flex items-center gap-4 p-4 rounded-lg cursor-pointer transition-all ${ + density === opt.id ? 'bg-primary/10 border-2 border-primary' : 'bg-card shadow-[0_0_8px_rgba(26,26,30,0.05)] hover:bg-muted/50' }`} >
{ aria-label="Font size" />
The quick brown fox jumps over the lazy dog. @@ -271,7 +271,7 @@ export const AppearanceSettingsView: React.FC = () => { Layout
setShowSidebar(!showSidebar)} >
diff --git a/apps/web/src/components/settings/backups/BackupsView.tsx b/apps/web/src/components/settings/backups/BackupsView.tsx index d47cc813e..02d395b4b 100644 --- a/apps/web/src/components/settings/backups/BackupsView.tsx +++ b/apps/web/src/components/settings/backups/BackupsView.tsx @@ -95,7 +95,7 @@ export const BackupsView: React.FC = () => { {backups.map((backup) => (
{
) : (
-
+
{url}
Host
-
+
Every 15 mins
Sync Frequency
-
+
Encrypted
Status
@@ -146,7 +146,7 @@ export const CloudIntegrationView: React.FC = () => { {['Projects', 'Samples', 'Presets'].map((type) => ( {type} diff --git a/apps/web/src/components/settings/data/DataExportModal.tsx b/apps/web/src/components/settings/data/DataExportModal.tsx index cd1a17dce..a01c5f991 100644 --- a/apps/web/src/components/settings/data/DataExportModal.tsx +++ b/apps/web/src/components/settings/data/DataExportModal.tsx @@ -37,7 +37,7 @@ export const DataExportModal: React.FC = ({ className="absolute inset-0 bg-background/90 backdrop-blur-sm" onClick={onClose} >
-
+

Request Data Export @@ -74,7 +74,7 @@ export const DataExportModal: React.FC = ({ Include Data
-