From 9a71f7e13e98ce550a687c999dbbffa169f3ccb1 Mon Sep 17 00:00:00 2001 From: "Dennis (via Claude+Gemma)" Date: Sat, 23 May 2026 09:33:49 +0200 Subject: [PATCH] =?UTF-8?q?feat(empty-state-illustrations):=20EmptyState-C?= =?UTF-8?q?omponent=20f=C3=BCr=20leere=20Listen=20[tsc:fail]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .phase31-state.json | 7 ++-- GENERATION_LOG.md | 18 ++++++++++ apps/web/src/components/EmptyState.tsx | 49 +++++++++++--------------- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/.phase31-state.json b/.phase31-state.json index 13e90bc..d8f89bf 100644 --- a/.phase31-state.json +++ b/.phase31-state.json @@ -1,5 +1,8 @@ { "completed_features": [], - "current_feature": "toast-undo-pattern", - "started_at": "2026-05-23T09:33:26.338003" + "current_feature": "empty-state-illustrations", + "started_at": "2026-05-23T09:33:26.338003", + "attempted_features": [ + "toast-undo-pattern" + ] } \ No newline at end of file diff --git a/GENERATION_LOG.md b/GENERATION_LOG.md index 41cb3a8..7ee6949 100644 --- a/GENERATION_LOG.md +++ b/GENERATION_LOG.md @@ -3500,3 +3500,21 @@ src/index.ts(27,25): error TS2769: No overload matches this call. Overload 1 of 3, '(plugin: FastifyPluginCallback<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>, opts?: FastifyRegisterOptions<...> | undefined): FastifyInstance<...> & PromiseLike<...>', gave the following error. Argument of type 'Promise' is not assignable to parameter of type 'FastifyPluginCallback<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>'. Type 'Promise' provides no match for the signature '(instance: FastifyInstance, +- `09:33:36` **INFO** Committed feature toast-undo-pattern +- `09:33:37` **INFO** Pushed: rc=0 + +## Phase-3 Feature: empty-state-illustrations (2026-05-23 09:33:37) + +- `09:33:37` **INFO** Description: EmptyState-Component für leere Listen +- `09:33:37` **INFO** Generating apps/web/src/components/EmptyState.tsx (EmptyState-Component. Props: icon (lucide-react component), title, des…) +- `09:33:47` **INFO** wrote 1045 chars in 10.2s (attempt 1) +- `09:33:47` **INFO** Running tsc --noEmit on api… +- `09:33:49` **WARN** tsc errors: +src/db/schema.ts(37,14): error TS7022: 'customers' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +src/db/schema.ts(45,59): error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +src/db/schema.ts(49,14): error TS7022: 'projects' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. +src/db/schema.ts(53,56): error TS7024: Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. +src/index.ts(27,25): error TS2769: No overload matches this call. + Overload 1 of 3, '(plugin: FastifyPluginCallback<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>, opts?: FastifyRegisterOptions<...> | undefined): FastifyInstance<...> & PromiseLike<...>', gave the following error. + Argument of type 'Promise' is not assignable to parameter of type 'FastifyPluginCallback<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>'. + Type 'Promise' provides no match for the signature '(instance: FastifyInstance, diff --git a/apps/web/src/components/EmptyState.tsx b/apps/web/src/components/EmptyState.tsx index 2e9d24a..2a4ff6c 100644 --- a/apps/web/src/components/EmptyState.tsx +++ b/apps/web/src/components/EmptyState.tsx @@ -1,47 +1,38 @@ import React from 'react'; -import { Inbox, FileQuestion, PackageOpen, SearchX } from 'lucide-react'; +import type { LucideIcon } from 'lucide-react'; interface EmptyStateProps { + icon: LucideIcon; title: string; description: string; - icon?: 'inbox' | 'file' | 'package' | 'search'; - action?: { - label: string; - onClick: () => void; - }; + actionLabel?: string; + onAction?: () => void; } -const IconMap = { - inbox: Inbox, - file: FileQuestion, - package: PackageOpen, - search: SearchX, -}; - -export default function EmptyState({ title, description, icon, action }: EmptyStateProps) { - const IconComponent = icon ? IconMap[icon] : null; - +export default function EmptyState({ + icon: Icon, + title, + description, + actionLabel, + onAction, +}: EmptyStateProps) { return ( -
-
- {IconComponent ? ( - - ) : ( - 📋 - )} +
+
+
-

+

{title}

-

+

{description}

- {action && ( + {actionLabel && onAction && ( )}