Vldszn/2025 07 24 migrate to tailwind 4 and tailwind eslint plugin#125
Vldszn/2025 07 24 migrate to tailwind 4 and tailwind eslint plugin#125
Conversation
|
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
WalkthroughThis update introduces comprehensive changes to the project's styling infrastructure and codebase. It migrates Tailwind CSS configuration from a TypeScript config file to a global CSS file, updates dependencies and linting configurations for Tailwind v4 compatibility, and systematically refactors all JSX className assignments to use multiline template literals. Minor adjustments to shadow, focus, and utility classes are made for consistency. No functional logic is altered. Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant Tailwind as Tailwind CSS
participant App as Application Components
participant GlobalCSS as src/globals.css
Dev->>Tailwind: Remove tailwind.config.ts
Dev->>GlobalCSS: Add comprehensive global CSS with custom properties, themes, and utilities
Dev->>App: Refactor all className strings to multiline template literals
App->>GlobalCSS: Import and use global CSS for all styling and theming
App->>Tailwind: Use Tailwind classes via global CSS, no direct config
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Actionable comments posted: 16
🔭 Outside diff range comments (3)
src/app/(app)/components/invoice-pdf-download-multiple-languages.tsx (1)
93-97: Slash inzipFileNamewill break downloads on Windows.You correctly normalised
invoiceNumberFormatted, but the zip filename still uses the rawinvoiceNumber, so"2024/07"becomes an invalid path part.- const zipFileName = `invoice-${invoiceNumber}-${languages}-archive.zip`; + const zipFileName = `invoice-${invoiceNumberFormatted}-${languages}-archive.zip`;src/components/seller-dialog.tsx (1)
1-4: Missing"use client"directive – this component will break in RSC mode
SellerDialogmakes heavy use ofuseState,useEffect,localStorage, etc.
Without the"use client"pragma Next.js will treat the file as a Server Component and compilation will fail at runtime.+/* eslint-disable @next/next/no-document-import-in-page */ +'use client'; import { Button } from "@/components/ui/button";src/app/(app)/components/invoice-form/sections/invoice-items.tsx (1)
120-139: Absolute delete-button container can overflow on small screensUsing
-top-10 -right-3may push the button outside the scrollable viewport on mobile. Consider using an inset inside the fieldset header (top-2 right-2) or wrapping the fieldset inrelativepadding.
♻️ Duplicate comments (1)
src/components/ui/money-input.tsx (1)
118-120: Same invalidring-3utility as flagged earlierThis instance has the same issue described in the Textarea component. Please replace or extend the Tailwind config.
🧹 Nitpick comments (19)
src/globals.css (2)
78-115: Consider consolidating duplicate theme definitions.There appear to be two
@themeblocks with overlapping variable definitions. The first@theme inlineblock (lines 78-115) and the second@themeblock (lines 126-171) both define radius and color variables.Consider consolidating these into a single
@themeblock to avoid redundancy:-@theme inline { - --color-background: var(--background); - /* ... other color mappings ... */ - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); - /* ... other mappings ... */ -} @theme { --color-background: var(--background); --color-foreground: var(--foreground); /* ... all mappings consolidated here ... */ --radius-lg: var(--radius); --radius-md: calc(var(--radius) - 2px); --radius-sm: calc(var(--radius) - 4px); --animate-accordion-down: accordion-down 0.2s ease-out; --animate-accordion-up: accordion-up 0.2s ease-out; --animate-heartbeat: heartbeat 3s ease-in-out infinite 25s; /* keyframes stay the same */ }Also applies to: 126-171
200-202: Consider making font family more flexible.The hardcoded Arial font family might be too restrictive. Consider using a more flexible font stack or CSS custom property.
body { - font-family: Arial, Helvetica, sans-serif; + font-family: var(--font-sans, system-ui, -apple-system, sans-serif); }Or define it as a custom property in the
:rootselector for better customization.src/app/(app)/components/invoice-pdf-download-multiple-languages.tsx (1)
114-115: Remove stale commented prop.
variant="inverted"looks obsolete after the MultiSelect refactor. Commented code adds noise and tends to rot—delete it unless it will be re-enabled imminently.- // variant="inverted".vscode/settings.json (1)
2-8: Consider switchingeslintfix-on-save from “explicit” to “always”.
"source.fixAll.eslint": "explicit"requires the user to manually pick the quick-fix command instead of running automatically on every save.
For teams that expect lint errors to be fixed automatically on save (the common convention), change the value to"always".- "source.fixAll.eslint": "explicit" + "source.fixAll.eslint": "always"This prevents “why didn’t my classes get re-ordered?” confusion and aligns with the zero-friction DX you’re setting up with Tailwind-aware linting.
src/components/ui/alert-dialog.tsx (1)
115-118: Minor: follow existingcnstyle for single-line literals.For consistency with the rest of the file (e.g.
AlertDialogTitle) wrap these shorter class lists as plain strings:- className={cn(` - text-sm text-slate-500 - dark:text-slate-400 - `, className)} + className={cn("text-sm text-slate-500 dark:text-slate-400", className)}Same for
mt-2 sm:mt-0block below.Also applies to: 146-148
src/app/changelog/layout.tsx (2)
149-172: Avoid the extradiv.containerwrapper – Tailwind already scopes width.The
headernow contains:<div class="container h-auto px-3 py-2 ..."> <div class="flex h-full ...">
containeralready applies horizontal padding, so the outerpx-3duplicates padding and shrinks the layout at small breakpoints.- <div className={` - container h-auto px-3 py-2 - sm:h-16 sm:py-0 - `}> + <div className={` + container h-auto py-2 + sm:h-16 sm:py-0 + `}>Keeps spacing identical while avoiding double-padding.
192-195: Prefer semantic size utilities over manual padding duplication.
BlackGoToAppButtonacceptsclassName– the component already setspx-3 sm:px-8.
Passing the same values from the parent couples layout too tightly; leave it empty unless you want to override defaults.- <BlackGoToAppButton className={` - px-3 - sm:px-8 - `}> + <BlackGoToAppButton>src/components/ui/disclosure.tsx (2)
97-100: Reuse the sharedcnutil for consistency & plugin support.Using a raw template literal here bypasses
twMergeand the Tailwind ESLint rule configured to watchcn().
Switch to:- className={` - ml-auto size-6 shrink-0 rounded-full p-1 transition-all duration-200 - hover:bg-gray-200 - `} + className={cn( + "ml-auto size-6 shrink-0 rounded-full p-1 transition-all duration-200", + "hover:bg-gray-200" + )}This keeps class-deduplication consistent and silences
no-unregistered-classes.
133-136: Samecn()/ linting point applies to panel padding.- className={` - pt-2 pr-4 pb-4 pl-0 - [&:has([data-slot=disclosure-group])_&]:px-11 - `} + className={cn( + "pt-2 pr-4 pb-4 pl-0", + "[&:has([data-slot=disclosure-group])_&]:px-11" + )}Maintains merge safety and linter compatibility.
src/components/go-to-app-button-cta.tsx (1)
27-30: Micro-nit: drop template literal for a single stringThe
ArrowRighticon only receives two classes. Wrapping them in a multiline template literal adds six bytes and an extra parsing step with no readability gain.-<ArrowRight className={` - mr-2 h-5 w-5 transition-transform - group-hover:scale-110 -`} /> +<ArrowRight className="mr-2 h-5 w-5 transition-transform group-hover:scale-110" />src/components/ui/label.tsx (1)
15-20: Order violation flagged by ESLint Tailwind plugin
text-xs font-medium text-balance …breaks the enforced class-order rule (typography classes should follow layout/display). Either:
- Re-order to satisfy
better-tailwindcss/enforce-consistent-class-order, or- Downgrade the rule severity for this file if you deliberately keep logical grouping.
Keeps the CI green and avoids noisy diffs later.
src/components/ui/tooltip.tsx (1)
48-50: Class string inside template literal contains redundant back-ticksUnlike the big block above, this is a single-line literal; a normal string is clearer.
-<TooltipPrimitive.Arrow - className={`my-px border-slate-200 fill-white drop-shadow-[0_1px_0_hsl(var(--border))]`} /> +<TooltipPrimitive.Arrow className="my-px border-slate-200 fill-white drop-shadow-[0_1px_0_hsl(var(--border))]" />src/app/(app)/components/invoice-form/sections/seller-information.tsx (1)
166-171: Factor out duplicated switch classesThe identical five-line template literal is repeated four times. Extracting it into a
const switchBase = \...`` keeps the file DRY and guarantees all toggles stay visually consistent after future tweaks.- className={` - h-5 w-8 - [&_span]:size-4 - data-[state=checked]:[&_span]:translate-x-3 - data-[state=checked]:[&_span]:rtl:-translate-x-3 - `} + className={switchBase}Small refactor, big maintenance win.
Also applies to: 274-279, 351-356, 429-434
src/components/subscribe-input.tsx (2)
70-71: Class-order rule still fails – runeslint --fix
better-tailwindcss/enforce-consistent-class-orderexpectsanimate-infirst, then effect utilities, then duration.
Runningeslint --fixwill auto-sort; keeping the rule green avoids CI noise.
105-107: Nit: avoid anonymous template literals for one-linerThe icon wrapper only contains positioning & color — a plain string keeps the file smaller:
-<Mail className={` - absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground -`} /> +<Mail className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />src/app/[locale]/about/page.tsx (1)
176-181: Header container classes duplicated across files – extract constant
container h-auto px-3 py-2 sm:h-16 sm:py-0appears in multiple pages; exporting aSiteHeaderorheaderBaseconstant keeps the design system single-source.src/app/(app)/components/invoice-form/sections/invoice-items.tsx (1)
72-77: Switch base classes repeated 11× – factor out for maintainabilityThe five-line template literal defining size & transform is copy-pasted for every
Switch. Move it to:const switchBase = "h-5 w-8 [&_span]:size-4 data-[state=checked]:[&_span]:translate-x-3 data-[state=checked]:[&_span]:rtl:-translate-x-3";and then
className={switchBase}– easier to tweak later.src/components/ui/command.tsx (1)
130-134: Minor: back-ticks insidecnreduce tree-shake
cn(\… `, className)` allocates a new template literal on every render. For static strings prefer a plain string to keep memory pressure lower:-className={cn(` - -mx-1 h-px bg-slate-200 - dark:bg-slate-800 -`, className)} +className={cn("-mx-1 h-px bg-slate-200 dark:bg-slate-800", className)}src/components/seller-management.tsx (1)
419-423: Trim excess whitespace in multi-line template literalIndentation inside the template string is emitted as literal spaces, producing class names with leading spaces (
" bg-red-500"). While browsers ignore the extra whitespace, it:
- Slightly inflates the HTML payload.
- Trips Tailwind’s JIT class extraction if a future purge step is more strict.
Recommend using
cn(already imported) for multi-line readability without the whitespace side-effect:- className={` - bg-red-500 text-red-50 - hover:bg-red-500/90 - `} + className={cn( + "bg-red-500 text-red-50", + "hover:bg-red-500/90" + )}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (67)
.prettierrc.js(1 hunks).vscode/settings.json(1 hunks)components.json(1 hunks)eslint.config.mjs(2 hunks)package.json(2 hunks)postcss.config.mjs(1 hunks)src/app/(app)/components/android-pdf-viewer.tsx(5 hunks)src/app/(app)/components/cta-toasts/index.tsx(8 hunks)src/app/(app)/components/index.tsx(7 hunks)src/app/(app)/components/invoice-form/index.tsx(10 hunks)src/app/(app)/components/invoice-form/sections/buyer-information.tsx(2 hunks)src/app/(app)/components/invoice-form/sections/general-information.tsx(6 hunks)src/app/(app)/components/invoice-form/sections/invoice-items.tsx(13 hunks)src/app/(app)/components/invoice-form/sections/seller-information.tsx(4 hunks)src/app/(app)/components/invoice-pdf-download-link.tsx(1 hunks)src/app/(app)/components/invoice-pdf-download-multiple-languages.tsx(1 hunks)src/app/(app)/components/invoice-pdf-viewer.tsx(1 hunks)src/app/(app)/loading.tsx(2 hunks)src/app/(app)/page.client.tsx(12 hunks)src/app/[locale]/about/loading.tsx(8 hunks)src/app/[locale]/about/page.tsx(13 hunks)src/app/api/generate-invoice/render-pdf-on-server.tsx(1 hunks)src/app/api/generate-invoice/route.tsx(1 hunks)src/app/changelog/[slug]/page.tsx(13 hunks)src/app/changelog/components/date-time.tsx(1 hunks)src/app/changelog/layout.tsx(6 hunks)src/app/changelog/page.tsx(2 hunks)src/app/confirm-subscription/page.tsx(3 hunks)src/app/globals.css(0 hunks)src/app/layout.tsx(2 hunks)src/app/not-found.tsx(2 hunks)src/components/buyer-dialog.tsx(5 hunks)src/components/buyer-management.tsx(4 hunks)src/components/etc/github-logo.tsx(1 hunks)src/components/footer.tsx(6 hunks)src/components/go-to-app-button-cta.tsx(2 hunks)src/components/project-logo-description.tsx(2 hunks)src/components/seller-dialog.tsx(7 hunks)src/components/seller-management.tsx(4 hunks)src/components/subscribe-input.tsx(3 hunks)src/components/ui/accordion.tsx(2 hunks)src/components/ui/alert-dialog.tsx(6 hunks)src/components/ui/badge.tsx(1 hunks)src/components/ui/button-helper.tsx(1 hunks)src/components/ui/button.tsx(1 hunks)src/components/ui/command.tsx(8 hunks)src/components/ui/dialog.tsx(5 hunks)src/components/ui/disclosure.tsx(2 hunks)src/components/ui/dropdown-menu.tsx(9 hunks)src/components/ui/form.tsx(3 hunks)src/components/ui/input-helper-message.tsx(1 hunks)src/components/ui/input.tsx(1 hunks)src/components/ui/label.tsx(1 hunks)src/components/ui/money-input.tsx(3 hunks)src/components/ui/multi-select.tsx(6 hunks)src/components/ui/popover.tsx(1 hunks)src/components/ui/select-native.tsx(2 hunks)src/components/ui/separator.tsx(1 hunks)src/components/ui/switch.tsx(1 hunks)src/components/ui/tabs.tsx(3 hunks)src/components/ui/textarea.tsx(1 hunks)src/components/ui/toasts/error-generating-pdf-toast.tsx(2 hunks)src/components/ui/tooltip.tsx(1 hunks)src/components/video.tsx(1 hunks)src/globals.css(1 hunks)src/mdx-components.tsx(5 hunks)tailwind.config.ts(0 hunks)
💤 Files with no reviewable changes (2)
- src/app/globals.css
- tailwind.config.ts
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/error-handling.mdc)
**/*.{ts,tsx}: Model expected errors as return values in Server Actions
Use Zod for form validation and type inference
Define reusable validation schemas
Handle expected errors (form validation, API responses) with try/catch and return typed error objects
Use the ActionResponse interface pattern for server action error handling in TypeScript
Use Zod schemas and z.infer for form validation and type inference in TypeScript
**/*.{ts,tsx}: Use TypeScript for all code; prefer interfaces over types.
Avoid enums; use objects withas constinstead.
Use the "function" keyword for pure functions.
Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Useconsole.log({})syntax for debugging.
Files:
src/app/not-found.tsxsrc/components/ui/tooltip.tsxsrc/app/api/generate-invoice/route.tsxsrc/components/ui/button-helper.tsxsrc/mdx-components.tsxsrc/components/ui/alert-dialog.tsxsrc/app/api/generate-invoice/render-pdf-on-server.tsxsrc/components/video.tsxsrc/app/(app)/components/invoice-pdf-download-multiple-languages.tsxsrc/components/ui/input-helper-message.tsxsrc/app/changelog/layout.tsxsrc/app/layout.tsxsrc/components/ui/money-input.tsxsrc/components/project-logo-description.tsxsrc/components/ui/textarea.tsxsrc/components/ui/disclosure.tsxsrc/app/(app)/loading.tsxsrc/components/ui/popover.tsxsrc/app/(app)/components/invoice-pdf-download-link.tsxsrc/components/ui/badge.tsxsrc/components/go-to-app-button-cta.tsxsrc/app/changelog/components/date-time.tsxsrc/components/ui/button.tsxsrc/components/ui/accordion.tsxsrc/components/ui/separator.tsxsrc/app/[locale]/about/loading.tsxsrc/app/(app)/page.client.tsxsrc/app/changelog/page.tsxsrc/components/ui/switch.tsxsrc/components/etc/github-logo.tsxsrc/app/(app)/components/invoice-form/sections/seller-information.tsxsrc/app/(app)/components/invoice-pdf-viewer.tsxsrc/components/ui/multi-select.tsxsrc/app/confirm-subscription/page.tsxsrc/app/(app)/components/android-pdf-viewer.tsxsrc/components/ui/dialog.tsxsrc/components/ui/form.tsxsrc/components/ui/toasts/error-generating-pdf-toast.tsxsrc/components/ui/label.tsxsrc/app/(app)/components/cta-toasts/index.tsxsrc/components/ui/tabs.tsxsrc/components/seller-dialog.tsxsrc/app/(app)/components/index.tsxsrc/app/(app)/components/invoice-form/sections/buyer-information.tsxsrc/app/[locale]/about/page.tsxsrc/components/ui/dropdown-menu.tsxsrc/components/ui/select-native.tsxsrc/components/seller-management.tsxsrc/components/subscribe-input.tsxsrc/components/buyer-dialog.tsxsrc/components/buyer-management.tsxsrc/components/ui/input.tsxsrc/app/changelog/[slug]/page.tsxsrc/components/ui/command.tsxsrc/components/footer.tsxsrc/app/(app)/components/invoice-form/sections/general-information.tsxsrc/app/(app)/components/invoice-form/sections/invoice-items.tsxsrc/app/(app)/components/invoice-form/index.tsx
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/error-handling.mdc)
**/*.tsx: Use error boundaries for unexpected errors
Implement client-side validation for immediate feedback
Display user-friendly messages for expected errors
Catch unexpected errors (runtime errors, network issues) with error boundaries
Show generic user-friendly fallback UI for unexpected errors
Wrap React components with ErrorBoundary and provide a FallbackComponent for error handling
**/*.tsx: Favor named exports for components.
Use functional components with TypeScript interfaces.
Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Use declarative JSX.
Use Shadcn UI, Radix, and Tailwind for components and styling.
Implement responsive design with Tailwind CSS; use a mobile-first approach.
Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Wrap client components in Suspense with fallback.
Use dynamic loading for non-critical components.
Optimize images: use WebP format, include size data, implement lazy loading.
Use 'nuqs' for URL search parameter state management.
Limit 'use client': Favor server components and Next.js SSR. Use only for Web API access in small components.
Files:
src/app/not-found.tsxsrc/components/ui/tooltip.tsxsrc/app/api/generate-invoice/route.tsxsrc/components/ui/button-helper.tsxsrc/mdx-components.tsxsrc/components/ui/alert-dialog.tsxsrc/app/api/generate-invoice/render-pdf-on-server.tsxsrc/components/video.tsxsrc/app/(app)/components/invoice-pdf-download-multiple-languages.tsxsrc/components/ui/input-helper-message.tsxsrc/app/changelog/layout.tsxsrc/app/layout.tsxsrc/components/ui/money-input.tsxsrc/components/project-logo-description.tsxsrc/components/ui/textarea.tsxsrc/components/ui/disclosure.tsxsrc/app/(app)/loading.tsxsrc/components/ui/popover.tsxsrc/app/(app)/components/invoice-pdf-download-link.tsxsrc/components/ui/badge.tsxsrc/components/go-to-app-button-cta.tsxsrc/app/changelog/components/date-time.tsxsrc/components/ui/button.tsxsrc/components/ui/accordion.tsxsrc/components/ui/separator.tsxsrc/app/[locale]/about/loading.tsxsrc/app/(app)/page.client.tsxsrc/app/changelog/page.tsxsrc/components/ui/switch.tsxsrc/components/etc/github-logo.tsxsrc/app/(app)/components/invoice-form/sections/seller-information.tsxsrc/app/(app)/components/invoice-pdf-viewer.tsxsrc/components/ui/multi-select.tsxsrc/app/confirm-subscription/page.tsxsrc/app/(app)/components/android-pdf-viewer.tsxsrc/components/ui/dialog.tsxsrc/components/ui/form.tsxsrc/components/ui/toasts/error-generating-pdf-toast.tsxsrc/components/ui/label.tsxsrc/app/(app)/components/cta-toasts/index.tsxsrc/components/ui/tabs.tsxsrc/components/seller-dialog.tsxsrc/app/(app)/components/index.tsxsrc/app/(app)/components/invoice-form/sections/buyer-information.tsxsrc/app/[locale]/about/page.tsxsrc/components/ui/dropdown-menu.tsxsrc/components/ui/select-native.tsxsrc/components/seller-management.tsxsrc/components/subscribe-input.tsxsrc/components/buyer-dialog.tsxsrc/components/buyer-management.tsxsrc/components/ui/input.tsxsrc/app/changelog/[slug]/page.tsxsrc/components/ui/command.tsxsrc/components/footer.tsxsrc/app/(app)/components/invoice-form/sections/general-information.tsxsrc/app/(app)/components/invoice-form/sections/invoice-items.tsxsrc/app/(app)/components/invoice-form/index.tsx
🧠 Learnings (65)
📓 Common learnings
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
.prettierrc.js (2)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
src/app/not-found.tsx (13)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use 'nuqs' for URL search parameter state management.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Catch unexpected errors (runtime errors, network issues) with error boundaries
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Wrap React components with ErrorBoundary and provide a FallbackComponent for error handling
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Use error boundaries for unexpected errors
src/components/ui/tooltip.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
src/components/ui/button-helper.tsx (7)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
src/mdx-components.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Wrap client components in Suspense with fallback.
src/components/ui/alert-dialog.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
src/app/api/generate-invoice/render-pdf-on-server.tsx (1)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Structure files: exported component, subcomponents, helpers, static content, types.
src/components/video.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/app/(app)/components/invoice-pdf-download-multiple-languages.tsx (7)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
src/components/ui/input-helper-message.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use React Suspense boundaries
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
postcss.config.mjs (3)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/app/changelog/layout.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
src/app/layout.tsx (14)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Implement proper caching strategies
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Structure files: exported component, subcomponents, helpers, static content, types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Use React Context sparingly
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Limit 'use client': Favor server components and Next.js SSR. Use only for Web API access in small components.
src/components/ui/money-input.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
src/components/project-logo-description.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
.vscode/settings.json (11)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.{ts,tsx} : Use Zod schemas and z.infer for form validation and type inference in TypeScript
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Use TypeScript for all code; prefer interfaces over types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.{ts,tsx} : Use Zod for form validation and type inference
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Use console.log({}) syntax for debugging.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid enums; use objects with as const instead.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Use Vitest for unit and integration tests
src/components/ui/textarea.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/components/ui/disclosure.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
src/app/(app)/loading.tsx (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Handle loading and error states
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
src/components/ui/popover.tsx (8)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/app/(app)/components/invoice-pdf-download-link.tsx (7)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
src/components/ui/badge.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
src/components/go-to-app-button-cta.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/app/changelog/components/date-time.tsx (4)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
src/components/ui/button.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/components/ui/accordion.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
src/components/ui/separator.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
src/app/[locale]/about/loading.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Handle loading and error states
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
src/app/(app)/page.client.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Limit 'use client': Favor server components and Next.js SSR. Use only for Web API access in small components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
src/app/changelog/page.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Wrap client components in Suspense with fallback.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use React Suspense boundaries
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/components/ui/switch.tsx (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Use React Context sparingly
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use React Suspense boundaries
components.json (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Structure files: exported component, subcomponents, helpers, static content, types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Use TypeScript for all code; prefer interfaces over types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
src/components/etc/github-logo.tsx (7)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
src/app/(app)/components/invoice-form/sections/seller-information.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
src/app/(app)/components/invoice-pdf-viewer.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
src/components/ui/multi-select.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
src/app/confirm-subscription/page.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
src/app/(app)/components/android-pdf-viewer.tsx (13)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Handle loading and error states
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Wrap React components with ErrorBoundary and provide a FallbackComponent for error handling
src/components/ui/dialog.tsx (11)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/components/ui/form.tsx (11)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
src/components/ui/toasts/error-generating-pdf-toast.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Test error cases
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Use error boundaries for unexpected errors
src/components/ui/label.tsx (9)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/app/(app)/components/cta-toasts/index.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
src/components/ui/tabs.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/components/seller-dialog.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
src/app/(app)/components/index.tsx (13)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Handle loading and error states
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
src/app/(app)/components/invoice-form/sections/buyer-information.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
src/app/[locale]/about/page.tsx (11)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Extract business logic to separate files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
src/components/ui/dropdown-menu.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use 'nuqs' for URL search parameter state management.
src/components/ui/select-native.tsx (9)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/components/seller-management.tsx (9)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
src/components/subscribe-input.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
src/components/buyer-dialog.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
src/components/buyer-management.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/components/ui/input.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/app/changelog/[slug]/page.tsx (13)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Wrap client components in Suspense with fallback.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Show generic user-friendly fallback UI for unexpected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use dynamic loading for non-critical components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use React Suspense boundaries
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Wrap React components with ErrorBoundary and provide a FallbackComponent for error handling
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Follow Next.js docs for Data Fetching, Rendering, and Routing.
src/components/ui/command.tsx (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
package.json (7)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Use pnpm.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Use Vitest for unit and integration tests
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Keep tests isolated
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Mock external dependencies in tests
src/components/footer.tsx (10)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
src/app/(app)/components/invoice-form/sections/general-information.tsx (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Display user-friendly messages for expected errors
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
src/app/(app)/components/invoice-form/sections/invoice-items.tsx (12)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/*.tsx : Use Server Components when possible
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
src/globals.css (2)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
src/app/(app)/components/invoice-form/index.tsx (11)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Components: PascalCase.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to {components,app}/**/*.tsx : Keep client state minimal
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to components/**/*.tsx : Keep components small and focused
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.tsx : Implement client-side validation for immediate feedback
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to app/**/page.tsx : Keep page components lean
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Prefer Conditional (ternary) operator (? :) over Logical AND operator (&&) in React components.
eslint.config.mjs (21)
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Favor named exports for components.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use Shadcn UI, Radix, and Tailwind for components and styling.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Avoid enums; use objects with as const instead.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Use TypeScript for all code; prefer interfaces over types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Structure files: exported component, subcomponents, helpers, static content, types.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use declarative JSX.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Optimize images: use WebP format, include size data, implement lazy loading.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.{ts,tsx} : Use Zod schemas and z.infer for form validation and type inference in TypeScript
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Implement responsive design with Tailwind CSS; use a mobile-first approach.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.tsx : Use React Testing Library for component testing
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Use Vitest for unit and integration tests
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Keep tests isolated
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.{ts,tsx} : Use Zod for form validation and type inference
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.tsx : Use functional components with TypeScript interfaces.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Test files must be named *.test.ts or *.test.tsx
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-07-20T21:59:36.257Z
Learning: Applies to **/*.{ts,tsx} : Define reusable validation schemas
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Applies to **/*.test.{ts,tsx} : Test error cases
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/shared.mdc:0-0
Timestamp: 2025-07-20T22:00:19.380Z
Learning: Applies to **/*.{ts,tsx} : Use console.log({}) syntax for debugging.
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/project-structure.mdc:0-0
Timestamp: 2025-07-20T21:59:55.483Z
Learning: Applies to types/**/*.{ts,tsx} : Place shared types in dedicated files
Learnt from: CR
PR: VladSez/easy-invoice-pdf#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-07-20T22:00:37.696Z
Learning: Use Playwright for E2E testing
🧬 Code Graph Analysis (17)
src/components/ui/alert-dialog.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/app/changelog/layout.tsx (1)
src/components/go-to-app-button-cta.tsx (1)
BlackGoToAppButton(37-58)
src/components/ui/popover.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/ui/separator.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/app/(app)/page.client.tsx (5)
src/components/ui/button.tsx (1)
Button(95-95)src/config.ts (1)
GITHUB_URL(15-15)src/components/etc/github-logo.tsx (1)
GithubIcon(3-21)src/components/ui/dialog.tsx (2)
Dialog(145-145)DialogContent(147-147)src/app/(app)/page.tsx (1)
AppPage(42-44)
src/app/changelog/page.tsx (1)
src/app/changelog/components/date-time.tsx (1)
DateTime(1-22)
src/components/ui/switch.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/etc/github-logo.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/ui/dialog.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/ui/form.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/ui/label.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/ui/tabs.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
src/components/seller-dialog.tsx (1)
src/components/ui/dialog.tsx (2)
DialogHeader(150-150)DialogFooter(149-149)
src/app/[locale]/about/page.tsx (4)
src/components/go-to-app-button-cta.tsx (2)
BlackGoToAppButton(37-58)GoToAppButton(6-35)src/config.ts (1)
GITHUB_URL(15-15)src/components/etc/github-logo.tsx (1)
GithubIcon(3-21)src/components/etc/project-logo.tsx (1)
ProjectLogo(3-25)
src/components/buyer-dialog.tsx (1)
src/components/ui/dialog.tsx (2)
DialogHeader(150-150)DialogFooter(149-149)
src/app/changelog/[slug]/page.tsx (1)
src/app/changelog/components/date-time.tsx (1)
DateTime(1-22)
src/components/ui/command.tsx (1)
src/lib/utils.ts (1)
cn(4-6)
🪛 ESLint
src/components/ui/tooltip.tsx
[error] 31-41: Incorrect class order. Expected
↵ ············relative·z-50·max-w-[280px]·animate-in·rounded-lg·border·border-slate-200·bg-white·px-3↵ ············py-1.5·text-sm·text-slate-950·fade-in-0·zoom-in-95↵ ············data-[side=bottom]:slide-in-from-top-2↵ ············data-[side=left]:slide-in-from-right-2↵ ············data-[side=right]:slide-in-from-left-2↵ ············data-[side=top]:slide-in-from-bottom-2↵ ············data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ············data-[state=closed]:zoom-out-95↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
to be
↵ ············animate-in·fade-in-0·zoom-in-95·data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95↵ ············relative·z-50·max-w-[280px]·rounded-lg·border↵ ············border-slate-200↵ ············bg-white↵ ············px-3↵ ············py-1.5↵ ············text-sm·text-slate-950↵ ············data-[state=closed]:animate-out↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
(better-tailwindcss/enforce-consistent-class-order)
[error] 32-32: Unregistered class detected: animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 33-33: Unregistered class detected: fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 33-33: Unregistered class detected: zoom-in-95
(better-tailwindcss/no-unregistered-classes)
[error] 34-34: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 35-35: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 36-36: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 37-37: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 38-38: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 38-38: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 39-39: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
src/components/ui/alert-dialog.tsx
[error] 21-25: Incorrect class order. Expected
↵ ········fixed·inset-0·z-50·bg-black/80↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ········data-[state=open]:animate-in·data-[state=open]:fade-in-0↵ ······
to be
↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0·data-[state=open]:fade-in-0·fixed↵ ········inset-0·z-50↵ ········bg-black/80·data-[state=open]:animate-in↵ ······
(better-tailwindcss/enforce-consistent-class-order)
[error] 23-23: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 23-23: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 24-24: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 24-24: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 43-54: Incorrect class order. Expected
↵ ··········fixed·top-1/2·left-1/2·z-50·grid·max-h-[calc(100%-4rem)]·w-full·-translate-x-1/2↵ ··········-translate-y-1/2·gap-4·overflow-y-auto·border·border-slate-200·bg-white·p-6·shadow-lg↵ ··········shadow-black/5·duration-200↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ··········data-[state=closed]:zoom-out-95·data-[state=closed]:slide-out-to-left-1/2↵ ··········data-[state=closed]:slide-out-to-top-[48%]↵ ··········data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········data-[state=open]:slide-in-from-left-1/2·data-[state=open]:slide-in-from-top-[48%]↵ ··········sm:max-w-[400px]·sm:rounded-xl↵ ··········dark:border-slate-800·dark:bg-slate-950↵ ········
to be
↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=closed]:slide-out-to-left-1/2·data-[state=closed]:slide-out-to-top-[48%]·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95·data-[state=open]:slide-in-from-left-1/2↵ ··········data-[state=open]:slide-in-from-top-[48%]·fixed·top-1/2·left-1/2·z-50·grid·max-h-[calc(100%-4rem)]·w-full↵ ··········-translate-x-1/2·-translate-y-1/2↵ ··········gap-4·overflow-y-auto↵ ··········border·border-slate-200↵ ··········bg-white↵ ··········p-6·shadow-lg·shadow-black/5↵ ··········duration-200·data-[state=open]:animate-in↵ ··········sm:max-w-[400px]·sm:rounded-xl↵ ··········dark:border-slate-800·dark:bg-slate-950↵ ········
(better-tailwindcss/enforce-consistent-class-order)
[error] 47-47: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 47-47: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 48-48: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 48-48: Unregistered class detected: data-[state=closed]:slide-out-to-left-1/2
(better-tailwindcss/no-unregistered-classes)
[error] 49-49: Unregistered class detected: data-[state=closed]:slide-out-to-top-[48%]
(better-tailwindcss/no-unregistered-classes)
[error] 50-50: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 50-50: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 50-50: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
[error] 51-51: Unregistered class detected: data-[state=open]:slide-in-from-left-1/2
(better-tailwindcss/no-unregistered-classes)
[error] 51-51: Unregistered class detected: data-[state=open]:slide-in-from-top-[48%]
(better-tailwindcss/no-unregistered-classes)
src/components/ui/popover.tsx
[error] 22-33: Incorrect class order. Expected
↵ ··········z-50·w-72·rounded-md·border·border-slate-200·bg-white·p-4·text-slate-950·shadow-md↵ ··········outline-hidden↵ ··········data-[side=bottom]:slide-in-from-top-2↵ ··········data-[side=left]:slide-in-from-right-2↵ ··········data-[side=right]:slide-in-from-left-2↵ ··········data-[side=top]:slide-in-from-bottom-2↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ··········data-[state=closed]:zoom-out-95↵ ··········data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
to be
↵ ··········data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95·z-50↵ ··········w-72↵ ··········rounded-md↵ ··········border↵ ··········border-slate-200↵ ··········bg-white↵ ··········p-4·text-slate-950↵ ··········shadow-md↵ ··········outline-hidden·data-[state=closed]:animate-out·data-[state=open]:animate-in↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
(better-tailwindcss/enforce-consistent-class-order)
[error] 25-25: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 26-26: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 28-28: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 29-29: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 29-29: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 30-30: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
src/app/changelog/page.tsx
[error] 122-148: Incorrect class order. Expected
↵ ············prose·max-w-none·transition-all·prose-gray↵ ············dark:prose-invert↵ ············prose-headings:relative·prose-headings:mt-6·prose-headings:mb-4↵ ············prose-headings:scroll-mt-20·prose-headings:font-semibold·prose-headings:text-gray-900↵ ············dark:prose-headings:text-gray-100↵ ············prose-h1:text-2xl↵ ············prose-h2:text-xl↵ ············prose-h3:text-lg↵ ············prose-h4:text-base↵ ············prose-p:leading-relaxed·prose-p:text-gray-600↵ ············dark:prose-p:text-gray-300↵ ············prose-a:font-medium·prose-a:text-gray-500·prose-a:underline-offset-4↵ ············hover:prose-a:text-black↵ ············dark:prose-a:text-blue-400↵ ············prose-strong:text-gray-900↵ ············dark:prose-strong:text-gray-100↵ ············prose-code:rounded·prose-code:bg-gray-100·prose-code:px-1.5·prose-code:py-0.5↵ ············prose-code:text-sm↵ ············dark:prose-code:bg-gray-800↵ ············prose-pre:border·prose-pre:border-gray-200·prose-pre:bg-gray-100↵ ············dark:prose-pre:border-gray-700·dark:prose-pre:bg-gray-800↵ ············prose-li:text-gray-600↵ ············dark:prose-li:text-gray-300↵ ············prose-img:rounded-lg·prose-img:border·prose-img:border-gray-200·prose-img:shadow-md↵ ············dark:prose-img:border-gray-700↵ ··········
to be
↵ ············prose·prose-gray·dark:prose-invert·prose-headings:relative↵ ············prose-headings:mt-6↵ ············prose-headings:mb-4·prose-headings:scroll-mt-20·prose-headings:font-semibold↵ ············prose-headings:text-gray-900·dark:prose-headings:text-gray-100·prose-h1:text-2xl↵ ············prose-h2:text-xl↵ ············prose-h3:text-lg↵ ············prose-h4:text-base↵ ············prose-p:leading-relaxed↵ ············prose-p:text-gray-600↵ ············dark:prose-p:text-gray-300·prose-a:font-medium↵ ············prose-a:text-gray-500↵ ············prose-a:underline-offset-4·hover:prose-a:text-black·dark:prose-a:text-blue-400↵ ············prose-strong:text-gray-900↵ ············dark:prose-strong:text-gray-100↵ ············prose-code:rounded↵ ············prose-code:bg-gray-100↵ ············prose-code:px-1.5·prose-code:py-0.5·prose-code:text-sm·dark:prose-code:bg-gray-800↵ ············prose-pre:border↵ ············prose-pre:border-gray-200↵ ············prose-pre:bg-gray-100·dark:prose-pre:border-gray-700·dark:prose-pre:bg-gray-800↵ ············prose-li:text-gray-600·dark:prose-li:text-gray-300↵ ············prose-img:rounded-lg↵ ············prose-img:border↵ ············prose-img:border-gray-200·prose-img:shadow-md·dark:prose-img:border-gray-700·max-w-none↵ ············transition-all↵ ··········
(better-tailwindcss/enforce-consistent-class-order)
[error] 123-123: Unregistered class detected: prose
(better-tailwindcss/no-unregistered-classes)
[error] 123-123: Unregistered class detected: prose-gray
(better-tailwindcss/no-unregistered-classes)
[error] 124-124: Unregistered class detected: dark:prose-invert
(better-tailwindcss/no-unregistered-classes)
[error] 125-125: Unregistered class detected: prose-headings:relative
(better-tailwindcss/no-unregistered-classes)
[error] 125-125: Unregistered class detected: prose-headings:mt-6
(better-tailwindcss/no-unregistered-classes)
[error] 125-125: Unregistered class detected: prose-headings:mb-4
(better-tailwindcss/no-unregistered-classes)
[error] 126-126: Unregistered class detected: prose-headings:scroll-mt-20
(better-tailwindcss/no-unregistered-classes)
[error] 126-126: Unregistered class detected: prose-headings:font-semibold
(better-tailwindcss/no-unregistered-classes)
[error] 126-126: Unregistered class detected: prose-headings:text-gray-900
(better-tailwindcss/no-unregistered-classes)
[error] 127-127: Unregistered class detected: dark:prose-headings:text-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 128-128: Unregistered class detected: prose-h1:text-2xl
(better-tailwindcss/no-unregistered-classes)
[error] 129-129: Unregistered class detected: prose-h2:text-xl
(better-tailwindcss/no-unregistered-classes)
[error] 130-130: Unregistered class detected: prose-h3:text-lg
(better-tailwindcss/no-unregistered-classes)
[error] 131-131: Unregistered class detected: prose-h4:text-base
(better-tailwindcss/no-unregistered-classes)
[error] 132-132: Unregistered class detected: prose-p:leading-relaxed
(better-tailwindcss/no-unregistered-classes)
[error] 132-132: Unregistered class detected: prose-p:text-gray-600
(better-tailwindcss/no-unregistered-classes)
[error] 133-133: Unregistered class detected: dark:prose-p:text-gray-300
(better-tailwindcss/no-unregistered-classes)
[error] 134-134: Unregistered class detected: prose-a:font-medium
(better-tailwindcss/no-unregistered-classes)
[error] 134-134: Unregistered class detected: prose-a:text-gray-500
(better-tailwindcss/no-unregistered-classes)
[error] 134-134: Unregistered class detected: prose-a:underline-offset-4
(better-tailwindcss/no-unregistered-classes)
[error] 135-135: Unregistered class detected: hover:prose-a:text-black
(better-tailwindcss/no-unregistered-classes)
[error] 136-136: Unregistered class detected: dark:prose-a:text-blue-400
(better-tailwindcss/no-unregistered-classes)
[error] 137-137: Unregistered class detected: prose-strong:text-gray-900
(better-tailwindcss/no-unregistered-classes)
[error] 138-138: Unregistered class detected: dark:prose-strong:text-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 139-139: Unregistered class detected: prose-code:rounded
(better-tailwindcss/no-unregistered-classes)
[error] 139-139: Unregistered class detected: prose-code:bg-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 139-139: Unregistered class detected: prose-code:px-1.5
(better-tailwindcss/no-unregistered-classes)
[error] 139-139: Unregistered class detected: prose-code:py-0.5
(better-tailwindcss/no-unregistered-classes)
[error] 140-140: Unregistered class detected: prose-code:text-sm
(better-tailwindcss/no-unregistered-classes)
[error] 141-141: Unregistered class detected: dark:prose-code:bg-gray-800
(better-tailwindcss/no-unregistered-classes)
[error] 142-142: Unregistered class detected: prose-pre:border
(better-tailwindcss/no-unregistered-classes)
[error] 142-142: Unregistered class detected: prose-pre:border-gray-200
(better-tailwindcss/no-unregistered-classes)
[error] 142-142: Unregistered class detected: prose-pre:bg-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 143-143: Unregistered class detected: dark:prose-pre:border-gray-700
(better-tailwindcss/no-unregistered-classes)
[error] 143-143: Unregistered class detected: dark:prose-pre:bg-gray-800
(better-tailwindcss/no-unregistered-classes)
[error] 144-144: Unregistered class detected: prose-li:text-gray-600
(better-tailwindcss/no-unregistered-classes)
[error] 145-145: Unregistered class detected: dark:prose-li:text-gray-300
(better-tailwindcss/no-unregistered-classes)
[error] 146-146: Unregistered class detected: prose-img:rounded-lg
(better-tailwindcss/no-unregistered-classes)
[error] 146-146: Unregistered class detected: prose-img:border
(better-tailwindcss/no-unregistered-classes)
[error] 146-146: Unregistered class detected: prose-img:border-gray-200
(better-tailwindcss/no-unregistered-classes)
[error] 146-146: Unregistered class detected: prose-img:shadow-md
(better-tailwindcss/no-unregistered-classes)
[error] 147-147: Unregistered class detected: dark:prose-img:border-gray-700
(better-tailwindcss/no-unregistered-classes)
src/components/ui/dialog.tsx
[error] 24-28: Incorrect class order. Expected
↵ ········fixed·inset-0·z-101·bg-black/80↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ········data-[state=open]:animate-in·data-[state=open]:fade-in-0↵ ······
to be
↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0·data-[state=open]:fade-in-0·fixed↵ ········inset-0·z-101↵ ········bg-black/80·data-[state=open]:animate-in↵ ······
(better-tailwindcss/enforce-consistent-class-order)
[error] 26-26: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 26-26: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 45-56: Incorrect class order. Expected
↵ ··········fixed·top-1/2·left-1/2·z-101·grid·max-h-[calc(100%-4rem)]·w-full·max-w-[calc(100%-2rem)]↵ ··········-translate-x-1/2·-translate-y-1/2·gap-4·overflow-y-auto·rounded-xl·border·border-slate-200↵ ··········bg-white·p-6·shadow-lg·shadow-black/5·duration-200↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ··········data-[state=closed]:zoom-out-95·data-[state=closed]:slide-out-to-left-1/2↵ ··········data-[state=closed]:slide-out-to-top-[48%]↵ ··········data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········data-[state=open]:slide-in-from-left-1/2·data-[state=open]:slide-in-from-top-[48%]↵ ··········sm:max-w-[400px]·sm:rounded-xl↵ ··········dark:border-slate-800·dark:bg-slate-950↵ ········
to be
↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=closed]:slide-out-to-left-1/2·data-[state=closed]:slide-out-to-top-[48%]·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95·data-[state=open]:slide-in-from-left-1/2↵ ··········data-[state=open]:slide-in-from-top-[48%]·fixed·top-1/2·left-1/2·z-101·grid·max-h-[calc(100%-4rem)]↵ ··········w-full·max-w-[calc(100%-2rem)]·-translate-x-1/2·-translate-y-1/2·gap-4↵ ··········overflow-y-auto·rounded-xl↵ ··········border·border-slate-200↵ ··········bg-white↵ ··········p-6·shadow-lg·shadow-black/5↵ ··········duration-200·data-[state=open]:animate-in↵ ··········sm:max-w-[400px]·sm:rounded-xl↵ ··········dark:border-slate-800·dark:bg-slate-950↵ ········
(better-tailwindcss/enforce-consistent-class-order)
[error] 49-49: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 49-49: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 50-50: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 50-50: Unregistered class detected: data-[state=closed]:slide-out-to-left-1/2
(better-tailwindcss/no-unregistered-classes)
[error] 51-51: Unregistered class detected: data-[state=closed]:slide-out-to-top-[48%]
(better-tailwindcss/no-unregistered-classes)
[error] 52-52: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 52-52: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 52-52: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
[error] 53-53: Unregistered class detected: data-[state=open]:slide-in-from-left-1/2
(better-tailwindcss/no-unregistered-classes)
[error] 53-53: Unregistered class detected: data-[state=open]:slide-in-from-top-[48%]
(better-tailwindcss/no-unregistered-classes)
src/components/ui/dropdown-menu.tsx
[error] 91-102: Incorrect class order. Expected
↵ ············z-50·min-w-40·overflow-hidden·rounded-md·border·border-slate-200·bg-white·p-1↵ ············text-slate-950·shadow-lg↵ ············data-[side=bottom]:slide-in-from-top-2↵ ············data-[side=left]:slide-in-from-right-2↵ ············data-[side=right]:slide-in-from-left-2↵ ············data-[side=top]:slide-in-from-bottom-2↵ ············data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ············data-[state=closed]:zoom-out-95↵ ············data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
to be
↵ ············data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ············z-50·min-w-40↵ ············overflow-hidden↵ ············rounded-md↵ ············border↵ ············border-slate-200↵ ············bg-white·p-1↵ ············text-slate-950↵ ············shadow-lg·data-[state=closed]:animate-out·data-[state=open]:animate-in↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
(better-tailwindcss/enforce-consistent-class-order)
[error] 94-94: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 95-95: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 96-96: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 97-97: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 98-98: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 98-98: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 99-99: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 100-100: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 100-100: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 100-100: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
[error] 358-369: Incorrect class order. Expected
↵ ··········z-50·min-w-40·overflow-hidden·rounded-md·border·border-slate-200·bg-white·p-1↵ ··········text-slate-950·shadow-lg↵ ··········data-[side=bottom]:slide-in-from-top-2↵ ··········data-[side=left]:slide-in-from-right-2↵ ··········data-[side=right]:slide-in-from-left-2↵ ··········data-[side=top]:slide-in-from-bottom-2↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ··········data-[state=closed]:zoom-out-95↵ ··········data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
to be
↵ ··········data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········z-50·min-w-40↵ ··········overflow-hidden↵ ··········rounded-md↵ ··········border↵ ··········border-slate-200↵ ··········bg-white·p-1↵ ··········text-slate-950↵ ··········shadow-lg·data-[state=closed]:animate-out·data-[state=open]:animate-in↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
(better-tailwindcss/enforce-consistent-class-order)
[error] 361-361: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 362-362: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 363-363: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 364-364: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 365-365: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 365-365: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 366-366: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 367-367: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 367-367: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 367-367: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
src/components/subscribe-input.tsx
[error] 70-70: Incorrect class order. Expected
"animate-in·duration-300·fade-in-0·slide-in-from-top-1"
to be
"animate-in·fade-in-0·slide-in-from-top-1·duration-300"
(better-tailwindcss/enforce-consistent-class-order)
[error] 70-70: Unregistered class detected: animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 70-70: Unregistered class detected: fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 70-70: Unregistered class detected: slide-in-from-top-1
(better-tailwindcss/no-unregistered-classes)
src/app/changelog/[slug]/page.tsx
[error] 132-135: Incorrect class order. Expected
↵ ············prose·max-w-none·prose-gray↵ ············dark:prose-invert↵ ··········
to be
↵ ············prose·prose-gray·dark:prose-invert↵ ············max-w-none↵ ··········
(better-tailwindcss/enforce-consistent-class-order)
[error] 133-133: Unregistered class detected: prose
(better-tailwindcss/no-unregistered-classes)
[error] 133-133: Unregistered class detected: prose-gray
(better-tailwindcss/no-unregistered-classes)
[error] 134-134: Unregistered class detected: dark:prose-invert
(better-tailwindcss/no-unregistered-classes)
[error] 356-356: Unregistered class detected: prose-headings:mt-8
(better-tailwindcss/no-unregistered-classes)
[error] 356-356: Unregistered class detected: prose-headings:font-semibold
(better-tailwindcss/no-unregistered-classes)
[error] 356-356: Unregistered class detected: prose-headings:text-black
(better-tailwindcss/no-unregistered-classes)
[error] 357-357: Unregistered class detected: dark:prose-headings:text-white
(better-tailwindcss/no-unregistered-classes)
[error] 358-358: Unregistered class detected: prose-h1:text-3xl
(better-tailwindcss/no-unregistered-classes)
[error] 359-359: Unregistered class detected: prose-h2:text-2xl
(better-tailwindcss/no-unregistered-classes)
[error] 360-360: Unregistered class detected: prose-h3:text-xl
(better-tailwindcss/no-unregistered-classes)
[error] 361-361: Unregistered class detected: prose-h4:text-lg
(better-tailwindcss/no-unregistered-classes)
[error] 362-362: Unregistered class detected: prose-h5:text-base
(better-tailwindcss/no-unregistered-classes)
[error] 363-363: Unregistered class detected: prose-h6:text-sm
(better-tailwindcss/no-unregistered-classes)
[error] 364-364: Unregistered class detected: prose-p:text-gray-600
(better-tailwindcss/no-unregistered-classes)
[error] 365-365: Unregistered class detected: dark:prose-p:text-gray-300
(better-tailwindcss/no-unregistered-classes)
[error] 366-366: Unregistered class detected: prose-blockquote:border-l-blue-500
(better-tailwindcss/no-unregistered-classes)
[error] 367-367: Unregistered class detected: prose-strong:text-gray-900
(better-tailwindcss/no-unregistered-classes)
[error] 368-368: Unregistered class detected: dark:prose-strong:text-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 369-369: Unregistered class detected: prose-code:rounded
(better-tailwindcss/no-unregistered-classes)
[error] 369-369: Unregistered class detected: prose-code:bg-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 369-369: Unregistered class detected: prose-code:px-2
(better-tailwindcss/no-unregistered-classes)
[error] 369-369: Unregistered class detected: prose-code:py-1
(better-tailwindcss/no-unregistered-classes)
[error] 370-370: Unregistered class detected: dark:prose-code:bg-gray-800
(better-tailwindcss/no-unregistered-classes)
[error] 371-371: Unregistered class detected: prose-pre:bg-gray-100
(better-tailwindcss/no-unregistered-classes)
[error] 372-372: Unregistered class detected: dark:prose-pre:bg-gray-800
(better-tailwindcss/no-unregistered-classes)
[error] 373-373: Unregistered class detected: prose-li:text-gray-600
(better-tailwindcss/no-unregistered-classes)
[error] 374-374: Unregistered class detected: dark:prose-li:text-gray-300
(better-tailwindcss/no-unregistered-classes)
[error] 375-375: Unregistered class detected: prose-img:rounded-lg
(better-tailwindcss/no-unregistered-classes)
[error] 375-375: Unregistered class detected: prose-img:shadow-lg
(better-tailwindcss/no-unregistered-classes)
src/app/(app)/components/invoice-form/sections/general-information.tsx
[error] 214-214: Incorrect class order. Expected
"animate-in·duration-500·fade-in·slide-in-from-bottom-2"
to be
"animate-in·fade-in·slide-in-from-bottom-2·duration-500"
(better-tailwindcss/enforce-consistent-class-order)
[error] 214-214: Unregistered class detected: animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 214-214: Unregistered class detected: fade-in
(better-tailwindcss/no-unregistered-classes)
[error] 214-214: Unregistered class detected: slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 286-286: Incorrect class order. Expected
"animate-in·duration-500·fade-in·slide-in-from-bottom-2"
to be
"animate-in·fade-in·slide-in-from-bottom-2·duration-500"
(better-tailwindcss/enforce-consistent-class-order)
[error] 286-286: Unregistered class detected: animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 286-286: Unregistered class detected: fade-in
(better-tailwindcss/no-unregistered-classes)
[error] 286-286: Unregistered class detected: slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
🪛 Biome (2.1.2)
src/app/(app)/page.client.tsx
[error] 670-671: Avoid using target="_blank" without rel="noopener" or rel="noreferrer".
Opening external links in new tabs without rel="noopener" is a security risk. See the explanation for more details.
Safe fix: Add the rel="noopener" attribute.
(lint/security/noBlankTarget)
🔇 Additional comments (108)
src/app/api/generate-invoice/route.tsx (1)
45-46: LGTM! Good addition for monitoring rate limiting.The console.log statement provides useful debugging information when rate limits are exceeded. The ESLint disable comment is appropriate for server-side logging.
src/mdx-components.tsx (5)
23-27: Excellent formatting improvement for Tailwind classes.Converting to multi-line template literals significantly improves readability and maintainability of the Tailwind utility classes.
38-41: Consistent formatting applied.The multi-line template literal format makes the pre element's styling classes much easier to read and modify.
51-54: Clean formatting for inline code styling.The template literal approach enhances the readability of the complex class combinations for dark/light mode styling.
64-67: Improved blockquote styling readability.The multi-line format clearly separates the different utility classes and makes the styling intentions more obvious.
82-85: Enhanced image styling clarity.The formatting improvement makes the responsive image classes much more readable and easier to maintain.
src/globals.css (3)
1-4: Excellent Tailwind v4 migration setup.The import structure correctly includes the new Tailwind CSS imports, animation plugin, and typography plugin. This follows Tailwind v4 best practices.
7-76: Well-structured theme system with OKLCH colors.The comprehensive CSS custom properties provide excellent theming capabilities. Using OKLCH color space is a modern approach that offers better perceptual uniformity compared to traditional color spaces.
181-189: Good backward compatibility approach.The compatibility styles for Tailwind v3 border color defaults ensure a smooth migration without breaking existing components.
src/app/api/generate-invoice/render-pdf-on-server.tsx (1)
13-13: Good formatting improvement.The additional blank line improves code readability by providing better visual separation between imports and the main code body.
src/components/ui/input-helper-message.tsx (1)
10-10: Class-reordering change is harmless.Ordering of utility classes has no functional impact; update is fine.
src/app/layout.tsx (2)
16-16: Corrected import path – looks good.Relative path now matches
src/globals.css. ✅
148-148: Body base styles added – good default.
bg-white antialiasedensures text clarity and a neutral background. No issues.src/components/video.tsx (1)
83-83: Minor class re-ordering – no effect.Position utilities are order-agnostic; change is purely cosmetic.
postcss.config.mjs (1)
3-3: LGTM: Correct Tailwind v4 PostCSS configurationThe migration to
@tailwindcss/postcssis the proper approach for Tailwind v4, which consolidates CSS processing and autoprefixing into a single unified plugin.src/app/not-found.tsx (2)
11-14: LGTM: Improved readability with multiline template literalThe refactoring to multiline template literal enhances readability while preserving the exact same CSS classes and styling behavior.
23-27: LGTM: Consistent formatting improvementThe multiline template literal formatting is consistent with the broader codebase refactor and improves maintainability.
src/components/ui/button-helper.tsx (1)
16-16: LGTM: Minor class reorderingThe reordering of
text-prettyandwhitespace-normalclasses doesn't affect functionality and appears to be part of the consistent styling refactor across the codebase.src/components/etc/github-logo.tsx (1)
10-13: LGTM: Enhanced readability with multiline formattingThe conversion to multiline template literal improves code readability while preserving the exact same CSS classes and component functionality.
src/app/(app)/components/invoice-pdf-viewer.tsx (1)
14-20: LGTM: Improved readability for responsive classesThe multiline template literal formatting makes the responsive height classes more readable while preserving the exact same styling and error handling behavior.
src/app/changelog/components/date-time.tsx (1)
10-16: LGTM! Improved className formatting and shadow utility update.The multiline template literal format significantly improves readability compared to the previous single-line string. The shadow utility class update from
shadow-smtoshadow-xsaligns with Tailwind v4 conventions.src/components/project-logo-description.tsx (2)
8-11: Excellent className formatting improvement.The multiline template literal makes the responsive and utility classes much more readable and maintainable.
20-23: Well-formatted responsive text classes.The multiline format clearly shows the text size progression from mobile to larger screens.
src/components/ui/badge.tsx (5)
7-12: Well-formatted base styles with Tailwind v4 compatibility.The multiline template literal improves readability, and the
focus:outline-hiddenupdate aligns with Tailwind v4 conventions.
17-21: Clean formatting for default variant styles.The multiline format makes the color transitions and hover states easy to read and maintain.
23-27: Well-structured secondary variant styles.The formatting clearly separates light and dark mode styling rules.
29-33: Clear destructive variant formatting.The red color scheme and hover states are well-organized in the multiline format.
34-37: Concise outline variant styling.The minimal outline variant is appropriately formatted.
src/app/(app)/components/android-pdf-viewer.tsx (8)
45-49: Well-formatted error state container.The multiline template literal clearly shows the responsive height classes and layout utilities.
62-64: Clean loading state formatting.The container classes are well-organized for the loading indicator.
66-69: Nicely formatted spinner animation classes.The loading spinner styles are clearly readable in the multiline format.
78-80: Clear no-URL state formatting.Simple and effective formatting for the fallback state.
92-96: Well-structured document loading container.The responsive height classes are clearly visible and maintainable.
98-101: Consistent spinner formatting.The loading spinner maintains the same clear formatting pattern throughout the component.
116-121: Good page loading state formatting.The multiline format makes the responsive height progression easy to follow.
123-126: Final spinner with consistent formatting.All loading spinners maintain the same clear, readable formatting pattern.
src/components/ui/toasts/error-generating-pdf-toast.tsx (1)
17-20: LGTM – readability win, behaviour unchanged.Moving the Tailwind classes into a template-literal keeps long class lists tidy without affecting runtime cost (they’re compiled away).
Also applies to: 29-32
src/components/ui/alert-dialog.tsx (1)
43-54: Same order / registration issue as above.All
AlertDialogContentutility strings need the same ordering fix and Radix variant registration, otherwise you’ll get 11 more errors.
Consider runningpnpm eslint --fix src/components/ui/alert-dialog.tsxafter configuring the plugin – it will auto-sort for you.src/components/go-to-app-button-cta.tsx (2)
18-22: Non-standard utilityshadow-xs– verify it is generated
shadow-xsisn’t part of Tailwind’s default shadow scale (sm | md | lg | xl | 2xl | inner | none).
Unless you added a custom shadow in a Tailwind plugin/boxShadowextension, this class will be stripped at build time, leaving the button without a shadow.
Confirm that:
shadow-xsis defined in your (new) Tailwind config or in a PostCSS layer, or- Revert to
shadow-sm/ another built-in utility.Same caveat applies to the instance in
invoice-pdf-download-link.tsx.
47-52: 👍 Readability improvementThe multiline template literal makes the variant-specific styles stand out clearly; good call.
src/components/ui/separator.tsx (1)
21-26: LGTM – semantic utilities & px aliasesSwitching from
h-[1px]/w-[1px]to the canonicalh-px/w-pxkeeps intent clear while preventing potential JIT pruning. No further issues spotted.src/app/(app)/components/invoice-pdf-download-link.tsx (1)
157-165: Custom utilitiesshadow-xs&ring-3may be purged
shadow-xsandring-3are not part of Tailwind core scales. If they’re defined only inglobals.css, JIT won’t pick them up unless you safelist the selectors or extend the config. Double-check the built CSS for those rules; otherwise users will lose elevation & focus outline.If you confirm they’re generated, add them to
tailwind.config.(js|ts)under:extend: { boxShadow: { xs: '0 1px 1px 0 rgb(0 0 0 / 0.05)' }, ringWidth: { 3: '3px' }, },src/components/ui/switch.tsx (2)
18-26: Verify customoutline-*utilities exist
focus-visible:outline-ring/70andfocus-visible:outline-solidare not part of Tailwind-CSS core.
If they aren’t provided via the newglobals.cssor a plugin, the focus style will be lost, harming accessibility.Please ensure these utilities are generated (or revert to a supported pattern such as
focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring).
34-41: Confirm thatshadow-xsis definedTailwind’s default shadow scale starts at
shadow-sm.
If you rely on a custom preset, great—otherwise this class is ignored and the thumb loses its elevation.Double-check that
shadow-xsis included in the new Tailwind v4 configuration.src/app/(app)/loading.tsx (1)
3-64: Styling refactor looks goodPurely formatting changes; no functional impact and the multiline template literals improve readability. ✔️
src/components/ui/accordion.tsx (1)
32-36: Accordion class-name reformat is fineNo functional changes; the multi-line literals read better and the animation utilities remain intact.
Also applies to: 61-69
src/app/[locale]/about/loading.tsx (1)
7-8: Check availability ofshadow-xsSame concern as in
Switch: Tailwind core does not shipshadow-xs.
Confirm it’s defined globally; otherwise revert toshadow-smto avoid dropping the header shadow.src/components/ui/form.tsx (1)
96-105: Multiline template-literals look goodThe conversion to template literals keeps the conditional logic intact and doesn’t introduce any functional change. Whitespace/new-line characters are collapsed by Tailwind/clsx, so no unintended classes are generated.
LGTM.Also applies to: 138-147, 164-173
src/app/confirm-subscription/page.tsx (1)
78-83: Formatting-only change – no issuesThe template-literal conversion is purely stylistic; no behaviour is altered.
Also applies to: 108-109, 124-129
src/app/(app)/components/invoice-form/sections/buyer-information.tsx (1)
161-166: Double-check new variant ordering for theSwitchOur search across committed CSS files didn’t locate the
data-[state=checked]:[&_span]:translate-x-3rule (or its RTL counterpart). Please run a local build and confirm that Tailwind emits these exact variant rules—without them, the toggle knob won’t move when checked, and RTL support may break.
- File:
src/app/(app)/components/invoice-form/sections/buyer-information.tsx
- Lines 161–166
- Also applies at lines 269–274
src/components/footer.tsx (1)
27-35: Style refactor acknowledgedClass names remain unchanged; only formatting was updated for readability. No action required.
Also applies to: 36-43, 45-50, 67-71, 90-94, 107-112, 152-156, 165-169
src/components/ui/dialog.tsx (1)
24-56: ESLint flags fordata-[state=*]:*variants
eslint-plugin-better-tailwindcssmarks everydata-[state=*]utility as “unregistered”.
These are perfectly valid arbitrary variants; adddata-*to the plugin’s allowed list or disable the rule for this file to keep CI green.src/app/changelog/page.tsx (1)
122-148:prose*classes will be stripped if the Typography plugin isn’t loadedThe linter reports all
prose-*utilities as unknown, hinting that@tailwindcss/typographyis no longer in the plugin array after the config migration.Add it back:
// tailwind.config.js module.exports = { plugins: [require('@tailwindcss/typography')], };or expect the rich-text styling to vanish in production.
src/components/buyer-management.tsx (1)
323-327: Confirm all tooling is on Tailwind v4Utilities like
text-prettyand the shorthandshrink-0are v4 additions. If ancillary builds (Storybook, tests, CI containers) still resolve Tailwind v3 they’ll silently drop these classes.Make sure every build target consumes the same upgraded version before merging.
Also applies to: 345-347, 354-360
src/app/(app)/page.client.tsx (7)
220-230: LGTM: Template literal formatting improves readabilityThe conversion from inline string to template literal enhances code readability while maintaining the same styling behavior.
323-327: LGTM: Consistent template literal formattingGood consistency with the overall className formatting refactor throughout the codebase.
385-392: LGTM: Improved container formattingThe template literal format makes the responsive design classes more readable while preserving all styling behavior.
393-399: LGTM: Consistent container formattingTemplate literal formatting improves readability of the layout classes without affecting functionality.
490-490: LGTM: Modernized Tailwind class usageGood use of the
shrink-0shorthand instead offlex-shrink-0, and consistent template literal formatting.
478-482: LGTM: Consistent template literal formatting across componentsAll these changes maintain the same styling while improving code readability through template literal formatting. Good consistency with the codebase refactoring pattern.
Also applies to: 495-500, 577-581, 589-592, 602-605, 615-618
640-645: LGTM: Template literal formatting enhances readabilityAll these className conversions to template literals improve code readability while maintaining the same styling behavior. Excellent consistency with the overall refactoring approach.
Also applies to: 653-658, 677-680, 687-692
src/components/ui/tabs.tsx (4)
29-34: LGTM: Template literal formatting improves readabilityThe conversion to template literal format enhances code organization while maintaining all styling functionality.
49-61: LGTM: Enhanced formatting with minor style refinementsThe template literal format significantly improves readability of the complex styling classes. The adjustments to
focus-visible:ring-3andshadow-xsalign with the design system updates throughout the codebase.
75-75: LGTM: Semantic improvement with outline-hiddenGood use of
outline-hiddeninstead ofoutline-nonefor better semantic clarity while maintaining the same visual behavior.
29-61: ESLint warnings are likely false positives due to Tailwind v4 migrationThe static analysis warnings about "unregistered classes" for data-attribute animations and class ordering appear to be related to the Tailwind CSS v4 migration in this PR. These classes are valid Tailwind utilities and the warnings can be safely ignored.
To confirm the Tailwind configuration is properly updated for these animation classes, you may want to verify the new global CSS setup supports these utilities.
src/app/(app)/components/index.tsx (6)
15-19: LGTM: Improved loading component formattingTemplate literal formatting enhances readability of the loading component styles while maintaining all functionality.
Also applies to: 32-35
139-139: LGTM: Shadow system update for consistencyThe change from
shadow-smtoshadow-xsaligns with the design system updates throughout the codebase, providing more subtle shadow effects.
158-162: LGTM: Enhanced formatting for complex stylingTemplate literal formatting significantly improves readability of the complex shadow and layout styling for the sticky footer container.
182-186: LGTM: Consistent tooltip formattingTemplate literal formatting improves readability of tooltip content styling while maintaining proper text hierarchy and spacing.
Also applies to: 199-203
194-194: LGTM: Modernized Tailwind shorthandGood use of
shrink-0shorthand instead offlex-shrink-0, consistent with the Tailwind CSS modernization throughout the codebase.
222-225: LGTM: Enhanced desktop layout formattingTemplate literal formatting improves readability of the responsive desktop layout styling, making the grid system and height adjustments clearer.
Also applies to: 233-236
src/components/ui/dropdown-menu.tsx (5)
91-102: LGTM: Significantly improved readability for complex stylingThe template literal format makes the extensive animation, positioning, and theme classes much more readable and maintainable without affecting functionality.
137-157: LGTM: Excellent organization of complex interactive stylingThe template literal format transforms a very complex className string into readable, well-organized styling that clearly shows all the interactive states, variants, and theme variations.
175-182: LGTM: Consistent formatting for form componentsTemplate literal formatting improves readability of the checkbox and radio item styling while maintaining all focus states and indicator positioning.
Also applies to: 188-190, 220-227, 232-234
256-260: LGTM: Comprehensive formatting improvements across all componentsAll dropdown menu sub-components now use consistent template literal formatting, significantly improving code readability while maintaining all styling and interaction behavior.
Also applies to: 276-279, 295-299, 326-333, 341-344, 358-369
91-102: ESLint warnings are false positives from Tailwind v4 migrationThe static analysis warnings about "unregistered classes" for data-attribute animations and class ordering are likely related to the Tailwind CSS v4 migration. These animation classes are valid Tailwind utilities and the warnings can be ignored.
Also applies to: 358-369
src/app/changelog/[slug]/page.tsx (7)
98-110: LGTM: Enhanced layout formatting with semantic structureTemplate literal formatting improves readability of responsive layout styling while maintaining proper semantic HTML structure and comprehensive responsive/dark mode support.
Also applies to: 115-118, 131-136, 138-142, 144-150
154-159: LGTM: Improved author and social section formattingTemplate literal formatting enhances readability of the author information and social sharing styling while maintaining proper text hierarchy and interactive states.
Also applies to: 167-172, 191-194, 201-206, 209-214, 218-222
236-239: LGTM: Consistent social icon formattingTemplate literal formatting improves readability of social sharing icons while maintaining platform-specific styling and hover effects across all social platforms.
Also applies to: 250-253, 265-268, 280-283, 295-298, 310-313, 326-329, 339-342
354-376: LGTM: Excellent organization of complex prose stylingThe template literal format transforms extensive prose typography styling into a highly readable and maintainable format, clearly organizing all heading levels, text elements, code blocks, and dark mode variants.
380-385: LGTM: Clean loading state formattingTemplate literal formatting improves readability of the Suspense fallback styling while maintaining animation and dark mode support.
405-410: LGTM: Enhanced navigation formattingTemplate literal formatting significantly improves readability of the complex navigation styling, making the responsive design and interactive states much clearer and more maintainable.
Also applies to: 412-416, 421-424, 426-432, 433-438, 441-448, 458-463, 469-472, 474-480, 482-487, 489-496
132-135: ESLint warnings about prose classes are false positivesThe static analysis warnings about "unregistered" prose classes like
prose,prose-gray, andprose-headings:*are false positives. These are standard classes from the Tailwind Typography plugin and the warnings are likely due to the Tailwind CSS v4 migration in this PR.You may want to verify that the Tailwind Typography plugin is properly configured in the new setup.
Also applies to: 354-376
src/components/ui/select-native.tsx (1)
19-29:ring-3is not a standard Tailwind width – verify custom token existsTailwind ships ring widths
ring-0,ring-1,ring-2,ring-4,ring-8.
ring-3will be ignored unless you’ve extendedtheme.ringWidth.If the intent was to keep the previous 2-pixel ring, revert to
ring-2; otherwise add the custom value in the Tailwind config (or the new globals.css).src/components/subscribe-input.tsx (1)
26-33: Static-analysis flags show unregistered animation utilitiesThe linter reports
animate-in,fade-in-0,slide-in-from-top-1as unknown classes (line 70).
Confirm these utilities are declared inglobals.css(or in the new plugin) and, if they’re custom keyframes, add them to thesafelistsobetter-tailwindcssstops flagging.src/app/[locale]/about/page.tsx (1)
661-668:GoToAppButtonvariant leaks white text on dark bg in dark-modeWhen
bg-whiteis applied inside a dark section (bg-slate-900) the button will stay white in dark mode as well, possibly clashing with the design. Considerbg-slate-50 dark:bg-whiteor remove the explicit background so the base component handles it.src/app/(app)/components/invoice-form/sections/invoice-items.tsx (1)
116-121: Shadow downgrade (shadow→shadow-sm) may affect visual hierarchyIf the surrounding cards still use
shadow-lg/shadow-md, reducing toshadow-smcould flatten the item and hurt affordance. Double-check the design spec.src/app/(app)/components/invoice-form/index.tsx (4)
358-358: LGTM! Consistent shadow utility updates.The change from
shadowtoshadow-smfor all AccordionItem components is consistent and aligns with the overall styling updates in this PR.Also applies to: 377-377, 396-396, 415-415
443-443: LGTM! Shadow utility refinement.The change from
shadow-smtoshadow-xsfor the total field container is consistent with other shadow utility updates throughout the codebase.
472-472: Verify margin class order doesn't affect layout.The order of margin classes was swapped from
mb-2 mt-6tomt-6 mb-2. While this shouldn't affect the final styling, it's worth verifying that the layout remains unchanged.
488-494: LGTM! Consistent Switch component className refactoring.The Switch component className changes are consistent across all instances:
- Converted to multiline template literals for better readability
- Updated selector syntax from
[_span]:data-[state=checked]:translate-x-3todata-[state=checked]:[&_span]:translate-x-3- RTL support syntax similarly updated
These changes align with Tailwind CSS v4 best practices and improve code maintainability.
Also applies to: 614-620, 667-673, 694-700
src/components/ui/input.tsx (2)
12-22: LGTM! Well-structured Input component styling refactor.The refactoring improves readability with multiline template literals and includes several refinements:
- Shadow utility updated from
shadow-smtoshadow-xs(consistent with other components)- Focus styles simplified by removing explicit
focus-visible:border-indigo-500while keeping the ring stylearia-readonlyselectors changed from bracket notation to the more concise variant syntaxAll changes maintain functionality while improving code maintainability.
25-30: LGTM! Search and file input type styles properly formatted.The search and file input type-specific styles have been converted to multiline template literals with proper formatting, improving readability without altering functionality.
Also applies to: 32-38
src/components/ui/multi-select.tsx (4)
34-38: LGTM! Variant styles properly formatted.The
multiSelectVariantsbase classes have been converted to a multiline template literal, improving readability while maintaining the same hover animation effects.
228-237: LGTM! Button styling enhancements.The Button component styling has been improved with:
- Multiline template literal formatting for better readability
- Shadow utility updated to
shadow-xs(consistent with other components)- Enhanced focus styles with
focus-visible:ring-3for better accessibilityThese changes align with the overall styling updates in the PR.
Also applies to: 299-309
311-311: Minor: ChevronDown icon class reordering.The ChevronDown icon classes were reordered from
h-4 w-4 text-muted-foregroundtoh-4 w-4 text-muted-foreground. While functionally identical, this change appears to be for consistency.
268-273: LGTM! Consistent Badge and CommandItem styling.The Badge and CommandItem components have been refactored with multiline template literals, maintaining functionality while improving code readability. The conditional styling logic remains intact.
Also applies to: 344-354, 386-391
src/app/(app)/components/invoice-form/sections/general-information.tsx (4)
227-229: LGTM! Logo image styling updates.The logo image styling has been properly refactored with:
- Shadow utility updated from
shadow-smtoshadow-xs- Multiline template literal formatting
These changes are consistent with the overall styling updates.
234-239: LGTM! Remove button focus style update.The focus style change from
focus:outline-nonetofocus:outline-hiddenis a good improvement. Theoutline-hiddenutility is more semantic and maintains accessibility while hiding the outline.
638-644: LGTM! Switch component className refactoring.The Switch component className has been consistently refactored to match the pattern used in other files, with proper data attribute selector syntax for Tailwind CSS v4.
261-265: LGTM! Consistent multiline template literal formatting.The label upload area and alert message container have been refactored with multiline template literals, improving readability while maintaining the same styling behavior.
Also applies to: 508-519
eslint.config.mjs (3)
9-20: LGTM! Proper ESM compatibility setup.The addition of
dirnameandfileURLToPathimports correctly sets up__dirnamefor ESM compatibility, fixing the invalidimport.meta.dirnameusage in FlatCompat initialization.
29-38: LGTM! Enhanced linting configuration.Good additions:
reportUnusedDisableDirectives: truehelps maintain clean code by flagging unnecessary ESLint disable commentsprojectService: trueenables TypeScript's project service for better type-aware linting
131-131: LGTM! Correct Tailwind CSS v4 configuration.The
better-tailwindcssplugin is properly configured to usesrc/globals.cssas the entry point, which aligns with Tailwind CSS v4's CSS-based configuration approach (as opposed to the JavaScript-based config in v3).Also applies to: 178-178
src/components/seller-management.tsx (4)
255-261: Conditional placeholder styling looks goodUsing
cn()to append"text-gray-700 italic"only when no seller is selected is concise and keeps the base styles untouched.
No further action needed.
337-344: Clarity-first copy + semantic colouring approvedThe reordered class string (
text-xs leading-relaxed text-pretty text-red-700) keeps typography utilities grouped and uses the newtext-prettyhelper—nice touch for readability.
357-365: Tooltip body re-ordering OKSame observation as above—class-ordering and
text-prettyintroduction don’t affect behaviour and improve consistency.
368-377: Tailwind v4 migration fromflex-shrink-0→shrink-0is correctThe icon now follows v4 naming while the additional
fill-red-600/text-whitecombo cleanly separates fill and stroke colours for Lucide SVGs.
| const config = { | ||
| trailingComma: "es5", | ||
| plugins: [require.resolve("prettier-plugin-tailwindcss")], | ||
| // plugins: [require.resolve("prettier-plugin-tailwindcss")], |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Verify Tailwind class ordering after disabling prettier-plugin-tailwindcss.
Commenting out the Prettier Tailwind plugin aligns with the migration to ESLint-based linting, but this removes automatic class ordering. Ensure that eslint-plugin-better-tailwindcss is properly configured to maintain consistent class ordering across the codebase.
🏁 Script executed:
#!/bin/bash
# Verify ESLint Tailwind configuration is properly set up
echo "Checking ESLint configuration for Tailwind CSS linting..."
cat eslint.config.mjs | grep -A 10 -B 5 "tailwind"
echo -e "\nChecking if better-tailwindcss plugin is installed..."
cat package.json | grep "better-tailwindcss"Length of output: 3544
Ensure Tailwind CSS class ordering is enforced via ESLint plugin
We’ve confirmed that eslint-plugin-better-tailwindcss v3.7.1 is installed and pulled into your eslint.config.mjs with the recommended-warn and recommended-error rule sets. However, class‐order enforcement isn’t explicitly enabled (the better-tailwindcss/enforce-consistent-class-order rule is commented out), so you should turn it on to retain the same ordering behavior Prettier provided.
• File to update: eslint.config.mjs
• Location: inside the rules object for "better-tailwindcss"
Suggested diff:
rules: {
- // "better-tailwindcss/enforce-consistent-class-order": "off",
+ "better-tailwindcss/enforce-consistent-class-order": "error",
"better-tailwindcss/enforce-consistent-line-wrapping": [
"warn",
{ printWidth: 100 },
],
},This guarantees consistent Tailwind class ordering across your TS/TSX files.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // plugins: [require.resolve("prettier-plugin-tailwindcss")], | |
| rules: { | |
| "better-tailwindcss/enforce-consistent-class-order": "error", | |
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | |
| "warn", | |
| { printWidth: 100 }, | |
| ], | |
| }, |
🤖 Prompt for AI Agents
In eslint.config.mjs, locate the rules object for "better-tailwindcss" and
explicitly enable the "better-tailwindcss/enforce-consistent-class-order" rule
by setting it to "error" or "warn". This will enforce consistent Tailwind CSS
class ordering as previously handled by Prettier, ensuring uniform styling
across your TS/TSX files.
| "config": "", | ||
| "css": "src/globals.css", |
There was a problem hiding this comment.
💡 Verification agent
❓ Verification inconclusive
Empty tailwind.config path may break the shadcn CLI.
The generator (shadcn-ui@latest init / add) expects a valid Tailwind config file to read theme tokens.
"config": "" will be interpreted as “file not found” and the CLI may bail out or silently fall back to the default theme.
Consider either:
- "config": "",
+ // point to the actual file if you keep one
+ "config": "tailwind.config.js",or drop the key entirely if you really want the default theme:
- "config": "",🏁 Script executed:
#!/usr/bin/env bash
# Verify whether a Tailwind config file still exists anywhere in the repo.
fd '^tailwind\.config\.(js|cjs|mjs|ts)$' .Length of output: 44
Ensure a valid Tailwind config or remove the config key
It looks like there isn’t a tailwind.config.js (or .cjs/.mjs/.ts) file in the repo. An empty "config": "" entry in components.json can cause the shadcn CLI to error out or silently fall back to the default theme. To address this, choose one of the following:
- If you need custom theme tokens, add a Tailwind config file at the project root and point to it:
// components.json - "config": "", + "config": "tailwind.config.js",
- If you don’t require any custom theme and prefer the default, simply remove the key:
- "config": "",
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "config": "", | |
| "css": "src/globals.css", | |
| // components.json | |
| - "config": "", | |
| + "config": "tailwind.config.js", | |
| "css": "src/globals.css", |
🤖 Prompt for AI Agents
In components.json at lines 7 to 8, the "config" key is set to an empty string,
which can cause errors or fallback issues with the shadcn CLI. To fix this,
either add a valid Tailwind config file (e.g., tailwind.config.js) at the
project root and update the "config" value to point to it, or if no custom theme
is needed, remove the "config" key entirely from components.json.
| { | ||
| files: ["src/**/*.{ts,tsx,cts,mts}"], | ||
| languageOptions: { | ||
| parser: eslintParserTypeScript, | ||
| parserOptions: { | ||
| project: true, | ||
| }, | ||
| }, | ||
| }, | ||
| { | ||
| files: ["src/**/*.{jsx,tsx}"], | ||
| languageOptions: { | ||
| parser: eslintParserTypeScript, | ||
| parserOptions: { | ||
| project: true, | ||
| ecmaFeatures: { | ||
| jsx: true, | ||
| }, | ||
| }, | ||
| }, | ||
| plugins: { | ||
| "better-tailwindcss": eslintPluginBetterTailwindcss, | ||
| }, | ||
| rules: { | ||
| // enable all recommended rules to report a warning | ||
| ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules, | ||
| // enable all recommended rules to report an error | ||
| ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules, | ||
|
|
||
| // or configure rules individually | ||
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | ||
| "warn", | ||
| { printWidth: 100 }, | ||
| ], | ||
| }, | ||
| settings: { | ||
| "better-tailwindcss": { | ||
| // tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`) | ||
| // tailwindConfig: "tailwind.config.js", | ||
| // tsconfig: "tsconfig.json", | ||
| entryPoint: "src/globals.css", | ||
| }, | ||
| }, | ||
| }, | ||
|
|
||
| // for better-tailwindcss plugin | ||
| { | ||
| files: ["src/**/*.{ts,tsx,cts,mts}"], | ||
| languageOptions: { | ||
| parser: eslintParserTypeScript, | ||
| parserOptions: { | ||
| project: true, | ||
| }, | ||
| }, | ||
| }, | ||
| { | ||
| files: ["src/**/*.{jsx,tsx}"], | ||
| languageOptions: { | ||
| parserOptions: { | ||
| ecmaFeatures: { | ||
| jsx: true, | ||
| }, | ||
| }, | ||
| }, | ||
| plugins: { | ||
| // https://github.com/schoero/eslint-plugin-better-tailwindcss | ||
| "better-tailwindcss": eslintPluginBetterTailwindcss, | ||
| }, | ||
| rules: { | ||
| // enable all recommended rules to report a warning | ||
| ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules, | ||
| // enable all recommended rules to report an error | ||
| ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules, | ||
|
|
||
| // or configure rules individually | ||
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | ||
| "warn", | ||
| { printWidth: 100 }, | ||
| ], | ||
| // "better-tailwindcss/enforce-consistent-class-order": "off", | ||
| }, | ||
| settings: { | ||
| "better-tailwindcss": { | ||
| // tailwindcss 4: the path to the entry file of the css based tailwind config (eg: `src/global.css`) | ||
| // entryPoint: "src/global.css", | ||
| // tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`) | ||
| // tailwindConfig: "tailwind.config.js", | ||
| entryPoint: "src/globals.css", | ||
| }, | ||
| }, | ||
| }, |
There was a problem hiding this comment.
Remove duplicate better-tailwindcss configuration.
There are two identical configuration blocks for the better-tailwindcss plugin (lines 91-134 and 136-181). This duplication should be removed to avoid confusion and potential conflicts.
},
- {
- files: ["src/**/*.{ts,tsx,cts,mts}"],
- languageOptions: {
- parser: eslintParserTypeScript,
- parserOptions: {
- project: true,
- },
- },
- },
- {
- files: ["src/**/*.{jsx,tsx}"],
- languageOptions: {
- parser: eslintParserTypeScript,
- parserOptions: {
- project: true,
- ecmaFeatures: {
- jsx: true,
- },
- },
- },
- plugins: {
- "better-tailwindcss": eslintPluginBetterTailwindcss,
- },
- rules: {
- // enable all recommended rules to report a warning
- ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules,
- // enable all recommended rules to report an error
- ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules,
-
- // or configure rules individually
- "better-tailwindcss/enforce-consistent-line-wrapping": [
- "warn",
- { printWidth: 100 },
- ],
- },
- settings: {
- "better-tailwindcss": {
- // tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`)
- // tailwindConfig: "tailwind.config.js",
- // tsconfig: "tsconfig.json",
- entryPoint: "src/globals.css",
- },
- },
- },
-
- // for better-tailwindcss plugin
{📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| { | |
| files: ["src/**/*.{ts,tsx,cts,mts}"], | |
| languageOptions: { | |
| parser: eslintParserTypeScript, | |
| parserOptions: { | |
| project: true, | |
| }, | |
| }, | |
| }, | |
| { | |
| files: ["src/**/*.{jsx,tsx}"], | |
| languageOptions: { | |
| parser: eslintParserTypeScript, | |
| parserOptions: { | |
| project: true, | |
| ecmaFeatures: { | |
| jsx: true, | |
| }, | |
| }, | |
| }, | |
| plugins: { | |
| "better-tailwindcss": eslintPluginBetterTailwindcss, | |
| }, | |
| rules: { | |
| // enable all recommended rules to report a warning | |
| ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules, | |
| // enable all recommended rules to report an error | |
| ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules, | |
| // or configure rules individually | |
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | |
| "warn", | |
| { printWidth: 100 }, | |
| ], | |
| }, | |
| settings: { | |
| "better-tailwindcss": { | |
| // tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`) | |
| // tailwindConfig: "tailwind.config.js", | |
| // tsconfig: "tsconfig.json", | |
| entryPoint: "src/globals.css", | |
| }, | |
| }, | |
| }, | |
| // for better-tailwindcss plugin | |
| { | |
| files: ["src/**/*.{ts,tsx,cts,mts}"], | |
| languageOptions: { | |
| parser: eslintParserTypeScript, | |
| parserOptions: { | |
| project: true, | |
| }, | |
| }, | |
| }, | |
| { | |
| files: ["src/**/*.{jsx,tsx}"], | |
| languageOptions: { | |
| parserOptions: { | |
| ecmaFeatures: { | |
| jsx: true, | |
| }, | |
| }, | |
| }, | |
| plugins: { | |
| // https://github.com/schoero/eslint-plugin-better-tailwindcss | |
| "better-tailwindcss": eslintPluginBetterTailwindcss, | |
| }, | |
| rules: { | |
| // enable all recommended rules to report a warning | |
| ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules, | |
| // enable all recommended rules to report an error | |
| ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules, | |
| // or configure rules individually | |
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | |
| "warn", | |
| { printWidth: 100 }, | |
| ], | |
| // "better-tailwindcss/enforce-consistent-class-order": "off", | |
| }, | |
| settings: { | |
| "better-tailwindcss": { | |
| // tailwindcss 4: the path to the entry file of the css based tailwind config (eg: `src/global.css`) | |
| // entryPoint: "src/global.css", | |
| // tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`) | |
| // tailwindConfig: "tailwind.config.js", | |
| entryPoint: "src/globals.css", | |
| }, | |
| }, | |
| }, | |
| { | |
| files: ["src/**/*.{ts,tsx,cts,mts}"], | |
| languageOptions: { | |
| parser: eslintParserTypeScript, | |
| parserOptions: { | |
| project: true, | |
| }, | |
| }, | |
| }, | |
| { | |
| files: ["src/**/*.{jsx,tsx}"], | |
| languageOptions: { | |
| parser: eslintParserTypeScript, | |
| parserOptions: { | |
| project: true, | |
| ecmaFeatures: { | |
| jsx: true, | |
| }, | |
| }, | |
| }, | |
| plugins: { | |
| "better-tailwindcss": eslintPluginBetterTailwindcss, | |
| }, | |
| rules: { | |
| // enable all recommended rules to report a warning | |
| ...eslintPluginBetterTailwindcss.configs["recommended-warn"].rules, | |
| // enable all recommended rules to report an error | |
| ...eslintPluginBetterTailwindcss.configs["recommended-error"].rules, | |
| // or configure rules individually | |
| "better-tailwindcss/enforce-consistent-line-wrapping": [ | |
| "warn", | |
| { printWidth: 100 }, | |
| ], | |
| }, | |
| settings: { | |
| "better-tailwindcss": { | |
| entryPoint: "src/globals.css", | |
| }, | |
| }, | |
| }, |
🤖 Prompt for AI Agents
In eslint.config.mjs between lines 91 and 181, there are two duplicate
configuration blocks for the better-tailwindcss plugin with identical settings.
Remove one of these duplicate blocks entirely to avoid confusion and potential
conflicts, ensuring only a single configuration block for better-tailwindcss
remains.
| "@tailwindcss/postcss": "4.1.11", | ||
| "@types/file-saver": "2.0.7", | ||
| "@types/node": "22.8.1", | ||
| "@types/pdf-parse": "1.1.5", | ||
| "@types/react": "18.3.12", | ||
| "@types/react-dom": "18.3.1", | ||
| "@typescript-eslint/parser": "8.38.0", | ||
| "@typescript/native-preview": "7.0.0-dev.20250525.1", |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Version / package mismatch in TypeScript-ESLint tooling
@typescript-eslint/parser is declared at 8.38.0 while typescript-eslint meta-package is 8.32.0 and @typescript-eslint/eslint-plugin is missing entirely.
Mixing minor versions regularly breaks linting.
Action items:
- Pin all
@typescript-eslint/*packages (parser + eslint-plugin) to the same version, e.g.8.38.0. - Remove the stray
typescript-eslintentry – that package is unrelated. - Add
"@typescript-eslint/eslint-plugin": "8.38.0"if ESLint config expects it.
Optionally, remove prettier-plugin-tailwindcss if you’ve disabled it in Prettier to avoid unnecessary install time.
Also applies to: 116-119
🤖 Prompt for AI Agents
In package.json around lines 93 to 100 and 116 to 119, the @typescript-eslint
packages have version mismatches and missing entries. Ensure all
@typescript-eslint packages, including @typescript-eslint/parser and
@typescript-eslint/eslint-plugin, are pinned to the same version, such as
8.38.0. Remove the unrelated typescript-eslint package entry. Add
@typescript-eslint/eslint-plugin at version 8.38.0 if it is expected by the
ESLint configuration. Optionally, remove prettier-plugin-tailwindcss if it is
disabled in Prettier to reduce install time.
| <div | ||
| className="relative max-w-sm rounded-lg border border-indigo-200 bg-gradient-to-br from-indigo-50 via-white to-purple-50 p-4 shadow-xl" | ||
| className={` | ||
| relative max-w-sm rounded-lg border border-indigo-200 bg-linear-to-br from-indigo-50 | ||
| via-white to-purple-50 p-4 shadow-xl | ||
| `} | ||
| data-testid="download-pdf-toast" | ||
| > | ||
| {/* Close button - styled like default Sonner toast */} | ||
| <SonnerCloseButton onClick={() => sonnerToast.dismiss(id)} /> | ||
|
|
||
| <div className="relative"> | ||
| <div className="mb-2 flex items-center gap-2"> | ||
| <div className="flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"> | ||
| <div className={` | ||
| flex h-8 w-8 items-center justify-center rounded-lg bg-linear-to-br from-indigo-500 | ||
| to-purple-600 | ||
| `}> | ||
| <GiftIcon className="h-4 w-4 text-white" /> |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Verify custom bg-linear-to-* utilities exist
The refactor replaces the native Tailwind bg-gradient-to-* utilities with bg-linear-to-*. Tailwind v4 does not ship these by default; they must be declared in src/globals.css (or a plugin layer).
Please confirm the utilities are defined, otherwise these components will render without background gradients.
Also applies to: 130-135, 192-199, 221-226, 250-264, 276-284, 341-345, 368-372
🏁 Script executed:
#!/bin/bash
# Grep for a custom utility definition
rg --no-heading 'bg-linear-to-' -n src | headLength of output: 1478
🏁 Script executed:
#!/bin/bash
# Search for custom gradient utilities in CSS files
rg --no-heading '\.bg-linear-to-' -n --glob '*.css' .
# Search for custom definitions in Tailwind config
rg --no-heading 'bg-linear-to-' -n tailwind.config.jsLength of output: 168
🏁 Script executed:
#!/bin/bash
# List all CSS files in the repository
echo "CSS files found:"
rg --files --glob '*.css'
# Search for gradient utility definitions inside all CSS files
echo -e "\nSearching for 'bg-linear-to-' definitions in CSS files:"
rg --no-heading 'bg-linear-to-' -n --glob '*.css'
# Locate any Tailwind configuration files (JS or TS)
echo -e "\nTailwind config files:"
rg --files | grep -Ei 'tailwind(\.config)?\.(js|ts)$' || echo "No Tailwind config file found"
# If a globals.css exists at src/globals.css, inspect it
if [ -f src/globals.css ]; then
echo -e "\nInspecting src/globals.css:"
rg --no-heading 'bg-linear-to-' -n src/globals.css || echo "No definitions in src/globals.css"
fiLength of output: 683
Define missing bg-linear-to-* utilities
I searched both your global CSS and potential Tailwind config files and found no custom definitions for the new bg-linear-to-* classes. Without those, all gradients using bg-linear-to-b, bg-linear-to-r, bg-linear-to-br, etc., will fall back to a solid background.
Please add definitions for these utilities, for example by extending Tailwind’s backgroundImage in your tailwind.config.js or by declaring the corresponding @layer utilities rules in src/globals.css.
• If using Tailwind config, create (or locate) tailwind.config.js/.ts and add under theme.extend.backgroundImage:
module.exports = {
theme: {
extend: {
backgroundImage: {
'linear-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
'linear-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
'linear-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
// …add as needed
},
},
},
// …rest of config
}• Or in src/globals.css (adjust syntax to your setup):
@layer utilities {
.bg-linear-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)); }
.bg-linear-to-b { background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); }
.bg-linear-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); }
/* …etc. */
}Once these utilities are declared, all toast components will render the intended gradients.
🤖 Prompt for AI Agents
In src/app/(app)/components/cta-toasts/index.tsx around lines 100 to 116, the
CSS classes bg-linear-to-br and similar gradient utilities are used but not
defined in your Tailwind setup or global CSS. To fix this, add these gradient
background utilities either by extending the backgroundImage property in your
tailwind.config.js file under theme.extend with entries like 'linear-to-r',
'linear-to-b', and 'linear-to-br' mapped to the appropriate linear-gradient CSS
strings, or by declaring corresponding CSS rules inside an @layer utilities
block in src/globals.css defining these classes with background-image properties
using linear-gradient and var(--tw-gradient-stops). This will ensure the
gradient backgrounds render correctly in the toast components.
| ` | ||
| flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden | ||
| placeholder:text-slate-500 | ||
| disabled:cursor-not-allowed disabled:opacity-50 | ||
| dark:placeholder:text-slate-400 | ||
| `, | ||
| className |
There was a problem hiding this comment.
outline-hidden is not a Tailwind utility – causes loss of focus ring
Tailwind v4 valid values: outline-none, outline, outline-0, outline-1, etc.
outline-hidden will be stripped → the input will inherit browser default outline, hurting accessibility. Revert to outline-none and rely on the surrounding border / ring for focus-visible styling.
- flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden
+ flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ` | |
| flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden | |
| placeholder:text-slate-500 | |
| disabled:cursor-not-allowed disabled:opacity-50 | |
| dark:placeholder:text-slate-400 | |
| `, | |
| className | |
| ` | |
| flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none | |
| placeholder:text-slate-500 | |
| disabled:cursor-not-allowed disabled:opacity-50 | |
| dark:placeholder:text-slate-400 | |
| `, | |
| className |
🤖 Prompt for AI Agents
In src/components/ui/command.tsx around lines 60 to 66, replace the invalid
Tailwind class 'outline-hidden' with 'outline-none' to prevent the loss of the
focus ring and maintain accessibility. This change ensures the input does not
inherit the browser's default outline and relies on the surrounding border or
ring for focus-visible styling.
| fixed inset-0 z-101 bg-black/80 | ||
| data-[state=closed]:animate-out data-[state=closed]:fade-out-0 | ||
| data-[state=open]:animate-in data-[state=open]:fade-in-0 | ||
| `, |
There was a problem hiding this comment.
z-101 is invalid – overlay/content lose their stacking order
Tailwind’s preset stops at z-50. Switching from the valid arbitrary value z-[101] to z-101 removes the rule, so the dialog may appear behind other fixed elements.
- fixed inset-0 z-101 bg-black/80
+ fixed inset-0 z-[101] bg-black/80
...
- fixed top-1/2 left-1/2 z-101 grid …
+ fixed top-1/2 left-1/2 z-[101] grid …Re-introduce the bracketed form (or extend the scale in tailwind.config) for reliable stacking.
Also applies to: 46-56
🧰 Tools
🪛 ESLint
[error] 24-28: Incorrect class order. Expected
↵ ········fixed·inset-0·z-101·bg-black/80↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ········data-[state=open]:animate-in·data-[state=open]:fade-in-0↵ ······
to be
↵ ········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0·data-[state=open]:fade-in-0·fixed↵ ········inset-0·z-101↵ ········bg-black/80·data-[state=open]:animate-in↵ ······
(better-tailwindcss/enforce-consistent-class-order)
[error] 26-26: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 26-26: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
🤖 Prompt for AI Agents
In src/components/ui/dialog.tsx around lines 25 to 28 and also lines 46 to 56,
the class name z-101 is invalid in Tailwind CSS because the default z-index
scale only goes up to z-50. Replace z-101 with the arbitrary value syntax
z-[101] to ensure the stacking order is applied correctly and the dialog appears
above other fixed elements. Alternatively, you can extend the z-index scale in
tailwind.config.js, but using the bracketed form is the quickest fix here.
| ` | ||
| z-50 w-72 rounded-md border border-slate-200 bg-white p-4 text-slate-950 shadow-md | ||
| outline-hidden | ||
| data-[side=bottom]:slide-in-from-top-2 | ||
| data-[side=left]:slide-in-from-right-2 | ||
| data-[side=right]:slide-in-from-left-2 | ||
| data-[side=top]:slide-in-from-bottom-2 | ||
| data-[state=closed]:animate-out data-[state=closed]:fade-out-0 | ||
| data-[state=closed]:zoom-out-95 | ||
| data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 | ||
| dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 | ||
| `, |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Good formatting improvement, but address ESLint configuration issues.
The multiline template literal format significantly improves readability. However, the ESLint errors indicate potential issues with the Tailwind v4 migration:
- Class order enforcement: The new
better-tailwindcss/enforce-consistent-class-orderrule expects a different class arrangement - Unregistered animation classes: The
data-[state=*]:animate-*anddata-[side=*]:slide-in-*classes are not recognized
These animation classes are likely custom utilities that need to be properly configured in the new Tailwind v4 setup.
Verify that the animation utilities are properly defined in the new Tailwind configuration:
🏁 Script executed:
#!/bin/bash
# Check if animation utilities are defined in the new global CSS
echo "Checking for animation utility definitions..."
rg -A 5 -B 5 "(slide-in|animate-in|animate-out|fade-in|fade-out|zoom-in|zoom-out)" src/globals.css
# Check for any custom animation definitions
echo -e "\nChecking for @keyframes definitions..."
rg -A 10 "@keyframes" src/globals.cssLength of output: 767
🏁 Script executed:
#!/bin/bash
# Verify custom animation keyframes and animation utilities in Tailwind config
echo "Searching Tailwind config for keyframes extensions..."
rg -n -A5 "keyframes" tailwind.config.{js,ts} || echo "No keyframes block found in tailwind.config.js/ts"
echo -e "\nSearching Tailwind config for animation extensions..."
rg -n -A5 "animation" tailwind.config.{js,ts} || echo "No animation block found in tailwind.config.js/ts"Length of output: 813
🏁 Script executed:
#!/bin/bash
# Locate Tailwind configuration files
echo "Locating tailwind configuration files..."
fd tailwind.config.* || echo "No tailwind.config.* found"
# Search package.json for animation-related Tailwind plugins
echo -e "\nChecking package.json for animation-related dependencies..."
rg -n "tailwindcss-animate" package.json || echo "No tailwindcss-animate plugin found"
rg -n "@tailwindcss" package.json || echo "No @tailwindcss scoped plugins found"
# Inspect src/globals.css for custom utility definitions
echo -e "\nInspecting src/globals.css for custom utility definitions..."
rg -n "@layer utilities" -A20 src/globals.css || echo "No @layer utilities block found"
rg -n "slide-in-from" -A5 src/globals.css || echo "No slide-in-from-* utility definitions"
rg -n "animate-in" -A5 src/globals.css || echo "No animate-in/out utility definitions"
rg -n "fade-in" -A5 src/globals.css || echo "No fade-in/out utility definitions"
rg -n "zoom-in" -A5 src/globals.css || echo "No zoom-in/out utility definitions"Length of output: 1354
Configure and register custom animation utilities in Tailwind CSS
It looks like none of your data-[state=*]:animate-*, data-[state=*]:fade-*, data-[state=*]:zoom-* or data-[side=*]:slide-in-* classes are defined in your project’s Tailwind setup. You’ll need to:
• Add (or update) a tailwind.config.js/ts file at project root
– Install and register the tailwindcss-animate plugin (you already have it in package.json)
– Extend theme.keyframes and theme.animation with your custom names
• Or declare them under @layer utilities in src/globals.css with matching @keyframes
Also, once the utilities are recognized, reorder your classes to satisfy the new better-tailwindcss/enforce-consistent-class-order rule.
Files to update:
- tailwind.config.js (or .ts)
- src/globals.css (if you prefer defining utilities there)
Example tailwind.config.ts snippet:
+ import { defineConfig } from 'tailwindcss'
+ import animatePlugin from 'tailwindcss-animate'
export default defineConfig({
content: ['./src/**/*.{js,ts,jsx,tsx}'],
theme: {
extend: {
+ keyframes: {
+ 'slide-in-from-top': { /* … */ },
+ 'slide-in-from-right': { /* … */ },
+ /* etc. */
+ },
+ animation: {
+ 'slide-in-from-top-2': 'slide-in-from-top 0.2s ease-out',
+ 'animate-in': 'fade-in 0.15s ease-in-out',
+ /* etc. */
+ },
},
},
+ plugins: [animatePlugin],
})Or in src/globals.css:
@layer utilities {
@keyframes slide-in-from-top { /* … */ }
.slide-in-from-top-2 { animation: slide-in-from-top 0.2s ease-out; }
/* define each utility */
}🧰 Tools
🪛 ESLint
[error] 22-33: Incorrect class order. Expected
↵ ··········z-50·w-72·rounded-md·border·border-slate-200·bg-white·p-4·text-slate-950·shadow-md↵ ··········outline-hidden↵ ··········data-[side=bottom]:slide-in-from-top-2↵ ··········data-[side=left]:slide-in-from-right-2↵ ··········data-[side=right]:slide-in-from-left-2↵ ··········data-[side=top]:slide-in-from-bottom-2↵ ··········data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ··········data-[state=closed]:zoom-out-95↵ ··········data-[state=open]:animate-in·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
to be
↵ ··········data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95·data-[state=open]:fade-in-0·data-[state=open]:zoom-in-95·z-50↵ ··········w-72↵ ··········rounded-md↵ ··········border↵ ··········border-slate-200↵ ··········bg-white↵ ··········p-4·text-slate-950↵ ··········shadow-md↵ ··········outline-hidden·data-[state=closed]:animate-out·data-[state=open]:animate-in↵ ··········dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ········
(better-tailwindcss/enforce-consistent-class-order)
[error] 25-25: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 26-26: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 27-27: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 28-28: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 29-29: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 29-29: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 30-30: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 31-31: Unregistered class detected: data-[state=open]:zoom-in-95
(better-tailwindcss/no-unregistered-classes)
🤖 Prompt for AI Agents
In src/components/ui/popover.tsx lines 22 to 33, the custom animation classes
used are not defined in the Tailwind CSS setup. To fix this, add or update
tailwind.config.js or tailwind.config.ts at the project root to include the
tailwindcss-animate plugin and extend theme.keyframes and theme.animation with
the custom animations matching the class names used. Alternatively, define the
keyframes and animation utilities under @layer utilities in src/globals.css with
corresponding @keyframes and class definitions. After defining these, reorder
the classes in the component to comply with the
better-tailwindcss/enforce-consistent-class-order rule.
| focus-visible:border-indigo-500/50 focus-visible:ring-3 focus-visible:ring-indigo-200 | ||
| disabled:cursor-not-allowed disabled:opacity-50 |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
ring-3 is not part of Tailwind’s default ring-width scale
The default scale only ships ring, ring-0, ring-1, ring-2, ring-4, and ring-8.
ring-3 will therefore be purged at build-time unless you have explicitly extended theme.ringWidth. The previous focus-visible:ring (== ring-2) was valid.
- focus-visible:border-indigo-500/50 focus-visible:ring-3 focus-visible:ring-indigo-200
+ focus-visible:border-indigo-500/50 focus-visible:ring-2 focus-visible:ring-indigo-200Confirm you really need a custom width and, if so, extend the theme; otherwise switch to one of the supported utilities.
🏁 Script executed:
#!/bin/bash
# List Tailwind config files in the repo root
echo "Config files at repo root:"
ls tailwind.config.* 2>/dev/null || echo "None found"
# Search for any ringWidth customizations in those config files
for cfg in tailwind.config.*; do
if [ -f "$cfg" ]; then
echo "=== Inspecting $cfg ==="
rg -n "ringWidth" "$cfg" || echo " → No ringWidth key in $cfg"
fi
doneLength of output: 182
Unsupported ring-3 Utility
Tailwind’s default ringWidth scale only includes ring-0, ring-1, ring-2, ring-4, and ring-8. We couldn’t locate any tailwind.config.* or ringWidth extension in the repo, so ring-3 will be purged at build time.
• File: src/components/ui/textarea.tsx
Lines: 16–17
Apply one of the following fixes:
- Use the closest default width:
- focus-visible:border-indigo-500/50 focus-visible:ring-3 focus-visible:ring-indigo-200
+ focus-visible:border-indigo-500/50 focus-visible:ring-2 focus-visible:ring-indigo-200- Or, if you truly need a 3px ring, extend your Tailwind config:
// tailwind.config.js
module.exports = {
theme: {
extend: {
ringWidth: {
3: '3px',
},
},
},
};🤖 Prompt for AI Agents
In src/components/ui/textarea.tsx at lines 16 to 17, the class `ring-3` is used
but Tailwind CSS does not support a ring width of 3 by default, causing it to be
purged during build. To fix this, either replace `ring-3` with the closest
supported ring width like `ring-2` or `ring-4`, or extend the Tailwind
configuration by adding a `ringWidth` entry for `3: '3px'` in the
tailwind.config.js file under the theme.extend section.
| ` | ||
| relative z-50 max-w-[280px] animate-in rounded-lg border border-slate-200 bg-white px-3 | ||
| py-1.5 text-sm text-slate-950 fade-in-0 zoom-in-95 | ||
| data-[side=bottom]:slide-in-from-top-2 | ||
| data-[side=left]:slide-in-from-right-2 | ||
| data-[side=right]:slide-in-from-left-2 | ||
| data-[side=top]:slide-in-from-bottom-2 | ||
| data-[state=closed]:animate-out data-[state=closed]:fade-out-0 | ||
| data-[state=closed]:zoom-out-95 | ||
| dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 | ||
| `, | ||
| className | ||
| )} |
There was a problem hiding this comment.
Unregistered animation utilities – build will drop them
animate-in, fade-in-0, zoom-in-95, slide-in-from-*, animate-out, etc. are provided by tailwindcss-animate (used by shadcn-ui).
ESLint reports them as “unregistered”, meaning your Tailwind config no longer loads the plugin after the v4 migration.
Result: the tooltip will render without any entrance/exit animation.
Quick fix:
// tailwind.config.ts
module.exports = {
plugins: [
+ require('tailwindcss-animate'),
],
}Alternatively, remove the utilities or replace them with core transition / animate-* classes.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ` | |
| relative z-50 max-w-[280px] animate-in rounded-lg border border-slate-200 bg-white px-3 | |
| py-1.5 text-sm text-slate-950 fade-in-0 zoom-in-95 | |
| data-[side=bottom]:slide-in-from-top-2 | |
| data-[side=left]:slide-in-from-right-2 | |
| data-[side=right]:slide-in-from-left-2 | |
| data-[side=top]:slide-in-from-bottom-2 | |
| data-[state=closed]:animate-out data-[state=closed]:fade-out-0 | |
| data-[state=closed]:zoom-out-95 | |
| dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 | |
| `, | |
| className | |
| )} | |
| // tailwind.config.ts | |
| module.exports = { | |
| plugins: [ | |
| require('tailwindcss-animate'), | |
| ], | |
| } |
🧰 Tools
🪛 ESLint
[error] 31-41: Incorrect class order. Expected
↵ ············relative·z-50·max-w-[280px]·animate-in·rounded-lg·border·border-slate-200·bg-white·px-3↵ ············py-1.5·text-sm·text-slate-950·fade-in-0·zoom-in-95↵ ············data-[side=bottom]:slide-in-from-top-2↵ ············data-[side=left]:slide-in-from-right-2↵ ············data-[side=right]:slide-in-from-left-2↵ ············data-[side=top]:slide-in-from-bottom-2↵ ············data-[state=closed]:animate-out·data-[state=closed]:fade-out-0↵ ············data-[state=closed]:zoom-out-95↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
to be
↵ ············animate-in·fade-in-0·zoom-in-95·data-[side=bottom]:slide-in-from-top-2·data-[side=left]:slide-in-from-right-2·data-[side=right]:slide-in-from-left-2·data-[side=top]:slide-in-from-bottom-2·data-[state=closed]:fade-out-0·data-[state=closed]:zoom-out-95↵ ············relative·z-50·max-w-[280px]·rounded-lg·border↵ ············border-slate-200↵ ············bg-white↵ ············px-3↵ ············py-1.5↵ ············text-sm·text-slate-950↵ ············data-[state=closed]:animate-out↵ ············dark:border-slate-800·dark:bg-slate-950·dark:text-slate-50↵ ··········
(better-tailwindcss/enforce-consistent-class-order)
[error] 32-32: Unregistered class detected: animate-in
(better-tailwindcss/no-unregistered-classes)
[error] 33-33: Unregistered class detected: fade-in-0
(better-tailwindcss/no-unregistered-classes)
[error] 33-33: Unregistered class detected: zoom-in-95
(better-tailwindcss/no-unregistered-classes)
[error] 34-34: Unregistered class detected: data-[side=bottom]:slide-in-from-top-2
(better-tailwindcss/no-unregistered-classes)
[error] 35-35: Unregistered class detected: data-[side=left]:slide-in-from-right-2
(better-tailwindcss/no-unregistered-classes)
[error] 36-36: Unregistered class detected: data-[side=right]:slide-in-from-left-2
(better-tailwindcss/no-unregistered-classes)
[error] 37-37: Unregistered class detected: data-[side=top]:slide-in-from-bottom-2
(better-tailwindcss/no-unregistered-classes)
[error] 38-38: Unregistered class detected: data-[state=closed]:animate-out
(better-tailwindcss/no-unregistered-classes)
[error] 38-38: Unregistered class detected: data-[state=closed]:fade-out-0
(better-tailwindcss/no-unregistered-classes)
[error] 39-39: Unregistered class detected: data-[state=closed]:zoom-out-95
(better-tailwindcss/no-unregistered-classes)
🤖 Prompt for AI Agents
In src/components/ui/tooltip.tsx around lines 31 to 43, the Tailwind CSS
animation utilities like animate-in, fade-in-0, zoom-in-95, and slide-in-from-*
are unregistered because the tailwindcss-animate plugin is not loaded in the
Tailwind config after the v4 migration. To fix this, update the Tailwind
configuration file to include the tailwindcss-animate plugin so these classes
are recognized and applied correctly, restoring the tooltip's entrance and exit
animations. Alternatively, replace these custom animation classes with standard
Tailwind core transition or animate-* classes if you prefer not to use the
plugin.
Summary by CodeRabbit
Style
Chores
Refactor
Bug Fixes
Documentation