nexoreui-cli 1.8.3 → 1.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2244,7 +2244,7 @@ export const AuroraSearchPill = React.forwardRef<HTMLDivElement, AuroraSearchPil
2244
2244
  sizeStyle.height,
2245
2245
  active ? cn(sizeStyle.paddingSearch, sizeStyle.minWidthSearch) : sizeStyle.paddingDots,
2246
2246
  bodyThemeClass,
2247
- 'transition-all duration-500 ease-[cubic-bezier()]'
2247
+ 'transition-all duration-500 ease-out'
2248
2248
  )}
2249
2249
  >
2250
2250
  {/* STATE 1: Pulsing Dots (Idle/Listening) */}
@@ -2252,7 +2252,7 @@ export const AuroraSearchPill = React.forwardRef<HTMLDivElement, AuroraSearchPil
2252
2252
  className={cn(
2253
2253
  'flex items-center',
2254
2254
  sizeStyle.dotGap,
2255
- 'transition-all duration-400 ease-[cubic-bezier()]',
2255
+ 'transition-all duration-400 ease-out',
2256
2256
  active
2257
2257
  ? 'opacity-0 scale-50 -translate-y-2 pointer-events-none absolute'
2258
2258
  : 'opacity-100 scale-100 translate-y-0'
@@ -2274,7 +2274,7 @@ export const AuroraSearchPill = React.forwardRef<HTMLDivElement, AuroraSearchPil
2274
2274
  <div
2275
2275
  className={cn(
2276
2276
  'flex items-center gap-2.5 whitespace-nowrap',
2277
- 'transition-all duration-400 ease-[cubic-bezier()]',
2277
+ 'transition-all duration-400 ease-out',
2278
2278
  active
2279
2279
  ? 'opacity-100 scale-100 translate-y-0'
2280
2280
  : 'opacity-0 scale-90 translate-y-2 pointer-events-none absolute'
@@ -2431,7 +2431,7 @@ const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(
2431
2431
  {...props}
2432
2432
  >
2433
2433
  {variant === "gradient" ? (
2434
- <div className="flex h-full w-full items-center justify-center rounded-full bg-background p-[1px]">
2434
+ <div className="flex h-full w-full items-center justify-center rounded-full bg-background p-px">
2435
2435
  {children}
2436
2436
  </div>
2437
2437
  ) : (
@@ -2589,7 +2589,7 @@ export const StackAvatar = ({
2589
2589
  }
2590
2590
 
2591
2591
  export const DottedAvatar = ({ src, fallback, size, status, className }: any) => (
2592
- <Avatar size={size} status={status} className={cn("border-2 border-dashed border-primary p-[1px]", className)}>
2592
+ <Avatar size={size} status={status} className={cn("border-2 border-dashed border-primary p-px", className)}>
2593
2593
  {src ? <AvatarImage src={src} /> : <AvatarFallback>{fallback}</AvatarFallback>}
2594
2594
  </Avatar>
2595
2595
  )
@@ -3074,7 +3074,7 @@ export const ThreeDButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
3074
3074
  <Button
3075
3075
  ref={ref}
3076
3076
  className={cn(
3077
- "shadow-[0_5px_0_hsl(var(--primary-dark,240_5.9%_30%))] hover:shadow-[0_2px_0_hsl(var(--primary-dark,240_5.9%_30%))] active:translate-y-[3px] active:shadow-[0_0px_0_transparent] transition-all",
3077
+ "shadow-[0_5px_0_hsl(var(--primary-dark,240_5.9%_30%))] hover:shadow-[0_2px_0_hsl(var(--primary-dark,240_5.9%_30%))] active:translate-y-0.75 active:shadow-[0_0px_0_transparent] transition-all",
3078
3078
  className
3079
3079
  )}
3080
3080
  {...props}
@@ -3163,7 +3163,7 @@ export const BorderBeamButton = React.forwardRef<HTMLButtonElement, ButtonProps>
3163
3163
  {...props}
3164
3164
  >
3165
3165
  <div className="absolute inset-0 bg-linear-to-r from-primary to-transparent opacity-0 group-hover:opacity-20 transition-opacity"></div>
3166
- <div className="absolute top-0 left-0 w-full h-[2px] bg-primary scale-x-0 group-hover:scale-x-100 transition-transform origin-left"></div>
3166
+ <div className="absolute top-0 left-0 w-full h-0.5 bg-primary scale-x-0 group-hover:scale-x-100 transition-transform origin-left"></div>
3167
3167
  <span className="relative z-10">{children}</span>
3168
3168
  </Button>
3169
3169
  )
@@ -4183,7 +4183,7 @@ export function Timeline({ items, className }: { items: TimelineItem[]; classNam
4183
4183
  {items.map((item, index) => (
4184
4184
  <div key={index} className="relative flex gap-6 pb-8 last:pb-0">
4185
4185
  {index !== items.length - 1 && (
4186
- <div className="absolute left-[11px] top-4 h-full w-[2px] bg-border" />
4186
+ <div className="absolute left-[11px] top-4 h-full w-0.5 bg-border" />
4187
4187
  )}
4188
4188
  <div
4189
4189
  className={cn(
@@ -4343,7 +4343,7 @@ export function Divider({ orientation = "horizontal", className, ...props }: Div
4343
4343
  <div
4344
4344
  className={cn(
4345
4345
  "bg-border shrink-0",
4346
- orientation === "horizontal" ? "h-[1px] w-full" : "w-[1px] h-full",
4346
+ orientation === "horizontal" ? "h-px w-full" : "w-px h-full",
4347
4347
  className
4348
4348
  )}
4349
4349
  {...props}
@@ -6932,7 +6932,7 @@ export function Steps({ items, className }: { items: Step[]; className?: string
6932
6932
  </motion.div>
6933
6933
  {index !== items.length - 1 && (
6934
6934
  <div className={cn(
6935
- "h-full w-[2px] min-h-[30px] my-2 transition-colors duration-300",
6935
+ "h-full w-0.5 min-h-[30px] my-2 transition-colors duration-300",
6936
6936
  item.status === "complete" ? "bg-emerald-500" : "bg-border"
6937
6937
  )} />
6938
6938
  )}
@@ -7036,9 +7036,9 @@ export const BreadcrumbTrail = () => (
7036
7036
  export const StepIndicator = () => (
7037
7037
  <div className="flex items-center w-full max-w-sm">
7038
7038
  <div className="flex items-center text-primary"><div className="w-8 h-8 rounded-full border-2 border-primary bg-primary text-primary-foreground flex items-center justify-center font-bold text-sm">1</div></div>
7039
- <div className="flex-1 h-[2px] bg-primary mx-2"></div>
7039
+ <div className="flex-1 h-0.5 bg-primary mx-2"></div>
7040
7040
  <div className="flex items-center text-primary"><div className="w-8 h-8 rounded-full border-2 border-primary bg-background flex items-center justify-center font-bold text-sm">2</div></div>
7041
- <div className="flex-1 h-[2px] bg-muted mx-2"></div>
7041
+ <div className="flex-1 h-0.5 bg-muted mx-2"></div>
7042
7042
  <div className="flex items-center text-muted-foreground"><div className="w-8 h-8 rounded-full border-2 border-muted bg-background flex items-center justify-center font-bold text-sm">3</div></div>
7043
7043
  </div>
7044
7044
  )
@@ -8421,8 +8421,8 @@ export function CreditCardVisual({
8421
8421
  <div className="flex items-center gap-3">
8422
8422
  {/* Gold EMV Chip */}
8423
8423
  <div className="w-10 h-7 rounded-md bg-linear-to-br from-amber-300 via-amber-400 to-amber-600 border border-amber-200/50 shadow-xs relative overflow-hidden">
8424
- <div className="absolute inset-x-0 top-1/2 -translate-y-1/2 h-[1px] bg-amber-900/30" />
8425
- <div className="absolute inset-y-0 left-1/2 -translate-x-1/2 w-[1px] bg-amber-900/30" />
8424
+ <div className="absolute inset-x-0 top-1/2 -translate-y-1/2 h-px bg-amber-900/30" />
8425
+ <div className="absolute inset-y-0 left-1/2 -translate-x-1/2 w-px bg-amber-900/30" />
8426
8426
  </div>
8427
8427
 
8428
8428
  {/* Contactless Wave */}
@@ -11785,7 +11785,7 @@ export function TextButton({ children, className, ...props }: React.ButtonHTMLAt
11785
11785
  {...props}
11786
11786
  >
11787
11787
  {children}
11788
- <span className="absolute bottom-0 left-0 h-[2px] w-0 bg-primary transition-all duration-300 group-hover:w-full" />
11788
+ <span className="absolute bottom-0 left-0 h-0.5 w-0 bg-primary transition-all duration-300 group-hover:w-full" />
11789
11789
  </button>
11790
11790
  )
11791
11791
  }
@@ -14363,9 +14363,9 @@ const ScrollBar = React.forwardRef<
14363
14363
  className={cn(
14364
14364
  "flex touch-none select-none transition-colors duration-150 rounded-full",
14365
14365
  orientation === "vertical" &&
14366
- "h-full w-2 border-l border-l-transparent p-[1px] hover:bg-black/5 dark:hover:bg-white/5",
14366
+ "h-full w-2 border-l border-l-transparent p-px hover:bg-black/5 dark:hover:bg-white/5",
14367
14367
  orientation === "horizontal" &&
14368
- "h-2 flex-col border-t border-t-transparent p-[1px] hover:bg-black/5 dark:hover:bg-white/5",
14368
+ "h-2 flex-col border-t border-t-transparent p-px hover:bg-black/5 dark:hover:bg-white/5",
14369
14369
  className
14370
14370
  )}
14371
14371
  {...props}
@@ -15065,7 +15065,7 @@ export function TypingAnimation({
15065
15065
  <motion.span
15066
15066
  animate={{ opacity: [1, 0, 1] }}
15067
15067
  transition={{ duration: 0.8, repeat: Infinity, ease: "linear" }}
15068
- className="ml-0.5 inline-block w-[2px] h-[1.1em] bg-current font-normal align-middle"
15068
+ className="ml-0.5 inline-block w-0.5 h-[1.1em] bg-current font-normal align-middle"
15069
15069
  >
15070
15070
  |
15071
15071
  </motion.span>
@@ -15364,7 +15364,7 @@ export const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(
15364
15364
 
15365
15365
  {/* Vertical Connector Line perfectly centered under the circle */}
15366
15366
  {!isLast && (
15367
- <div className="w-[2px] min-h-[36px] bg-muted/40 my-1 rounded-full relative overflow-hidden flex-1">
15367
+ <div className="w-0.5 min-h-[36px] bg-muted/40 my-1 rounded-full relative overflow-hidden flex-1">
15368
15368
  <motion.div
15369
15369
  className="absolute top-0 left-0 right-0 bg-primary"
15370
15370
  initial={{ height: "0%" }}
@@ -15496,7 +15496,7 @@ export const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(
15496
15496
  <ChevronRight className={cn("h-4 w-4 shrink-0 transition-colors", isCompleted && "text-primary")} />
15497
15497
  </div>
15498
15498
  ) : (
15499
- <div className="h-[2px] w-full bg-muted/50 rounded-full overflow-hidden relative">
15499
+ <div className="h-0.5 w-full bg-muted/50 rounded-full overflow-hidden relative">
15500
15500
  <motion.div
15501
15501
  className="absolute inset-y-0 left-0 bg-primary"
15502
15502
  initial={{ width: "0%" }}
@@ -16495,7 +16495,7 @@ export function AnimatedGradientBorder({
16495
16495
  duration = 3,
16496
16496
  }: AnimatedGradientBorderProps) {
16497
16497
  return (
16498
- <div className={cn("relative rounded-xl p-[1px]", containerClassName)}>
16498
+ <div className={cn("relative rounded-xl p-px", containerClassName)}>
16499
16499
  <motion.div
16500
16500
  className={cn(
16501
16501
  "absolute inset-0 rounded-xl",
@@ -16678,7 +16678,7 @@ export function Meteors({ number = 20, className }: MeteorsProps) {
16678
16678
  animationDuration: meteor.animationDuration,
16679
16679
  }}
16680
16680
  >
16681
- <div className="absolute top-1/2 -translate-y-1/2 w-[1px] h-full bg-linear-to-b from-foreground/30 to-transparent" />
16681
+ <div className="absolute top-1/2 -translate-y-1/2 w-px h-full bg-linear-to-b from-foreground/30 to-transparent" />
16682
16682
  </span>
16683
16683
  ))}
16684
16684
  </div>
@@ -37816,7 +37816,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url))
37816
37816
  function injectThemeCss(baseDir, cssRelativePath, themeName, radiusValue, fontFamily = "system", density = "default", animationStyle = "energetic") {
37817
37817
  const cssAbsolutePath = path4.join(baseDir, cssRelativePath);
37818
37818
  const palette = THEME_PALETTES[themeName] || THEME_PALETTES.cyan;
37819
- const radius = typeof radiusValue === "number" ? radiusValue : parseFloat(radiusValue) || 0.75;
37819
+ const radius = typeof radiusValue === "number" ? radiusValue : radiusValue !== void 0 && !isNaN(parseFloat(radiusValue)) ? parseFloat(radiusValue) : 0.75;
37820
37820
  const fontMap = {
37821
37821
  inter: "'Inter', sans-serif",
37822
37822
  geist: "'Geist', sans-serif",
@@ -37830,14 +37830,17 @@ function injectThemeCss(baseDir, cssRelativePath, themeName, radiusValue, fontFa
37830
37830
  if (animationStyle === "none") {
37831
37831
  animationCss = `
37832
37832
  /* NexoreUI Animation Style: None */
37833
- *, *::before, *::after {
37834
- animation-duration: 0.001ms !important;
37835
- animation-iteration-count: 1 !important;
37836
- transition-duration: 0.001ms !important;
37833
+ :root {
37834
+ --motion-ease: linear;
37835
+ --motion-duration: 0s;
37836
+ }
37837
+ button, a, input, select, textarea, [role="button"] {
37838
+ transition-duration: 0s !important;
37837
37839
  }
37838
37840
  `;
37839
37841
  } else if (animationStyle === "subtle") {
37840
37842
  animationCss = `
37843
+ /* NexoreUI Animation Style: Subtle */
37841
37844
  :root {
37842
37845
  --motion-ease: cubic-bezier(0.16, 1, 0.3, 1);
37843
37846
  --motion-duration: 0.35s;
@@ -37845,6 +37848,7 @@ function injectThemeCss(baseDir, cssRelativePath, themeName, radiusValue, fontFa
37845
37848
  `;
37846
37849
  } else {
37847
37850
  animationCss = `
37851
+ /* NexoreUI Animation Style: Energetic */
37848
37852
  :root {
37849
37853
  --motion-ease: cubic-bezier(0.34, 1.56, 0.64, 1);
37850
37854
  --motion-duration: 0.2s;
@@ -37934,44 +37938,25 @@ function injectThemeCss(baseDir, cssRelativePath, themeName, radiusValue, fontFa
37934
37938
  --density-gap: ${densityGap};
37935
37939
  }
37936
37940
 
37937
- body {
37941
+ html, body {
37942
+ font-family: var(--font-sans);
37938
37943
  background-color: var(--background);
37939
37944
  color: var(--foreground);
37940
37945
  }
37941
37946
  ${animationCss}
37942
37947
  /* End NexoreUI Theme Tokens */`;
37943
- if (fs4.existsSync(cssAbsolutePath)) {
37944
- let existingContent = fs4.readFileSync(cssAbsolutePath, "utf8");
37945
- existingContent = existingContent.replace(/#root\s*\{[^}]*\}/g, "");
37946
- existingContent = existingContent.replace(/:root\s*\{[^}]*color:\s*rgba\(255,\s*255,\s*255[^}]*\}/g, "");
37947
- existingContent = existingContent.replace(/body\s*\{[^}]*place-items:\s*center[^}]*\}/g, "");
37948
- if (existingContent.includes("/* NexoreUI Theme Tokens */")) {
37949
- existingContent = existingContent.replace(
37950
- /\/\* NexoreUI Theme Tokens \*\/[\s\S]*?\/\* End NexoreUI Theme Tokens \*\//,
37951
- themeBlock
37952
- );
37953
- fs4.writeFileSync(cssAbsolutePath, existingContent, "utf8");
37954
- return true;
37955
- } else if (existingContent.includes("--color-primary")) {
37956
- existingContent = existingContent.replace(/(@source[\s\S]*|@theme[\s\S]*)/, themeBlock);
37957
- fs4.writeFileSync(cssAbsolutePath, existingContent, "utf8");
37958
- return true;
37959
- } else {
37960
- let finalContent = existingContent.trim() + "\n\n" + themeBlock;
37961
- if (!finalContent.includes('@import "tailwindcss"') && !finalContent.includes("@import 'tailwindcss'")) {
37962
- finalContent = '@import "tailwindcss";\n' + finalContent;
37963
- }
37964
- fs4.writeFileSync(cssAbsolutePath, finalContent, "utf8");
37965
- return true;
37966
- }
37967
- } else {
37968
- const cssDir = path4.dirname(cssAbsolutePath);
37969
- if (!fs4.existsSync(cssDir)) fs4.mkdirSync(cssDir, { recursive: true });
37970
- fs4.writeFileSync(cssAbsolutePath, `@import "tailwindcss";
37948
+ const fontImports = `@import url('https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap');`;
37949
+ const cleanFullCss = `@import "tailwindcss";
37950
+ ${fontImports}
37971
37951
 
37972
- ` + themeBlock, "utf8");
37973
- return true;
37974
- }
37952
+ @custom-variant dark (&:where(.dark, .dark *));
37953
+
37954
+ ${themeBlock}
37955
+ `;
37956
+ const cssDir = path4.dirname(cssAbsolutePath);
37957
+ if (!fs4.existsSync(cssDir)) fs4.mkdirSync(cssDir, { recursive: true });
37958
+ fs4.writeFileSync(cssAbsolutePath, cleanFullCss, "utf8");
37959
+ return true;
37975
37960
  }
37976
37961
  function installPeerDependencies(baseDir, packageManager, dependencies = ["clsx", "tailwind-merge", "lucide-react", "framer-motion", "class-variance-authority"]) {
37977
37962
  try {
@@ -38180,7 +38165,7 @@ export default function App() {
38180
38165
 
38181
38166
  {/* Hero Title */}
38182
38167
  <div className="space-y-3">
38183
- <h1 className="text-4xl sm:text-5xl font-extrabold tracking-tight">
38168
+ <h1 className="text-4xl sm:text-5xl font-extrabold tracking-tight text-foreground">
38184
38169
  Welcome to <span className="text-primary">NexoreUI</span>
38185
38170
  </h1>
38186
38171
  <p className="text-muted-foreground text-sm sm:text-base max-w-md mx-auto">