@aws/nx-plugin 0.68.1 → 0.69.1

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.
Files changed (58) hide show
  1. package/LICENSE-THIRD-PARTY +19 -195
  2. package/package.json +7 -7
  3. package/src/infra/app/__snapshots__/generator.spec.ts.snap +15 -15
  4. package/src/infra/app/generator.js +1 -1
  5. package/src/infra/app/generator.js.map +1 -1
  6. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  7. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  8. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +2 -2
  9. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +103 -46
  10. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +21 -10
  11. package/src/trpc/react/files/src/hooks/use__apiNameClassName__.tsx.template +16 -1
  12. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  13. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +1 -1
  14. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +195 -311
  15. package/src/ts/react-website/app/files/app/shadcn/src/app.tsx.template +12 -0
  16. package/src/ts/react-website/app/files/app/shadcn/src/components/AppLayout/index.tsx.template +116 -0
  17. package/src/ts/react-website/app/files/app/shadcn/src/components/alert.tsx.template +30 -0
  18. package/src/ts/react-website/app/files/app/shadcn/src/components/spinner.tsx.template +3 -0
  19. package/src/ts/react-website/app/files/app/shadcn/src/main.tsx.template +32 -0
  20. package/src/ts/react-website/app/files/app/shadcn/src/styles.css.template +2 -0
  21. package/src/ts/react-website/app/files/tanstack-router/shadcn/src/components/app-sidebar.tsx.template +49 -0
  22. package/src/ts/react-website/app/files/tanstack-router/shadcn/src/routes/index.tsx.template +16 -0
  23. package/src/ts/react-website/app/generator.d.ts +3 -2
  24. package/src/ts/react-website/app/generator.js +41 -11
  25. package/src/ts/react-website/app/generator.js.map +1 -1
  26. package/src/ts/react-website/app/schema.d.ts +1 -1
  27. package/src/ts/react-website/app/schema.json +6 -2
  28. package/src/ts/react-website/cognito-auth/generator.js +12 -8
  29. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  30. package/src/ts/react-website/cognito-auth/utils.d.ts +1 -0
  31. package/src/ts/react-website/cognito-auth/utils.js +113 -1
  32. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  33. package/src/utils/files/common/shadcn/readme/README.md.template +32 -0
  34. package/src/utils/files/common/shadcn/src/components/ui/alert.tsx.template +66 -0
  35. package/src/utils/files/common/shadcn/src/components/ui/breadcrumb.tsx.template +109 -0
  36. package/src/utils/files/common/shadcn/src/components/ui/button.tsx.template +62 -0
  37. package/src/utils/files/common/shadcn/src/components/ui/card.tsx.template +92 -0
  38. package/src/utils/files/common/shadcn/src/components/ui/input.tsx.template +21 -0
  39. package/src/utils/files/common/shadcn/src/components/ui/separator.tsx.template +28 -0
  40. package/src/utils/files/common/shadcn/src/components/ui/sheet.tsx.template +139 -0
  41. package/src/utils/files/common/shadcn/src/components/ui/sidebar.tsx.template +726 -0
  42. package/src/utils/files/common/shadcn/src/components/ui/skeleton.tsx.template +13 -0
  43. package/src/utils/files/common/shadcn/src/components/ui/spinner.tsx.template +16 -0
  44. package/src/utils/files/common/shadcn/src/components/ui/tooltip.tsx.template +61 -0
  45. package/src/utils/files/common/shadcn/src/hooks/use-mobile.ts.template +19 -0
  46. package/src/utils/files/common/shadcn/src/index.ts.template +2 -0
  47. package/src/utils/files/common/shadcn/src/lib/utils.ts.template +6 -0
  48. package/src/utils/files/common/shadcn/src/styles/globals.css.template +125 -0
  49. package/src/utils/files/shadcn/components.json.template +20 -0
  50. package/src/utils/shared-constructs-constants.d.ts +2 -0
  51. package/src/utils/shared-constructs-constants.js +3 -1
  52. package/src/utils/shared-constructs-constants.js.map +1 -1
  53. package/src/utils/shared-shadcn.d.ts +6 -0
  54. package/src/utils/shared-shadcn.js +123 -0
  55. package/src/utils/shared-shadcn.js.map +1 -0
  56. package/src/utils/versions.d.ts +38 -26
  57. package/src/utils/versions.js +37 -25
  58. package/src/utils/versions.js.map +1 -1
@@ -338,13 +338,26 @@ exports[`react-website generator (uxProvider=Cloudscape) > should update package
338
338
  "
339
339
  `;
340
340
 
341
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/components/AppLayout/index.tsx 1`] = `
341
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/components/AppLayout/index.tsx 1`] = `
342
342
  "import * as React from 'react';
343
-
344
- import { useEffect, useMemo, useState } from 'react';
345
-
343
+ import {
344
+ SidebarInset,
345
+ SidebarProvider,
346
+ SidebarTrigger,
347
+ } from ':proj/common-shadcn/components/ui/sidebar';
348
+ import { Separator } from ':proj/common-shadcn/components/ui/separator';
346
349
  import Config from '../../config';
350
+
347
351
  import { Link, useLocation, useMatchRoute } from '@tanstack/react-router';
352
+ import {
353
+ Breadcrumb,
354
+ BreadcrumbItem,
355
+ BreadcrumbLink,
356
+ BreadcrumbList,
357
+ BreadcrumbPage,
358
+ BreadcrumbSeparator,
359
+ } from ':proj/common-shadcn/components/ui/breadcrumb';
360
+ import { AppSidebar } from '../app-sidebar';
348
361
 
349
362
  const getBreadcrumbs = (
350
363
  matchRoute: ReturnType<typeof useMatchRoute>,
@@ -377,72 +390,70 @@ const getBreadcrumbs = (
377
390
  });
378
391
  };
379
392
 
380
- /**
381
- * Defines the App layout and contains logic for routing.
382
- */
383
- const AppLayout: React.FC<React.PropsWithChildren> = ({ children }) => {
384
- const [activeBreadcrumbs, setActiveBreadcrumbs] = useState<
393
+ const AppLayout = ({ children }: { children: React.ReactNode }) => {
394
+ const [activeBreadcrumbs, setActiveBreadcrumbs] = React.useState<
385
395
  { href: string; text: string }[]
386
396
  >([{ text: '/', href: '/' }]);
387
397
  const matchRoute = useMatchRoute();
388
398
  const { pathname, search } = useLocation();
389
- const navItems = useMemo(() => [{ to: '/', label: 'Home' }], []);
390
399
 
391
- useEffect(() => {
400
+ React.useEffect(() => {
392
401
  const breadcrumbs = getBreadcrumbs(
393
402
  matchRoute,
394
403
  pathname,
395
404
  Object.entries(search).reduce((p, [k, v]) => p + \`\${k}=\${v}\`, ''),
396
- 'Home',
405
+ '/',
397
406
  );
398
407
  setActiveBreadcrumbs(breadcrumbs);
399
408
  }, [matchRoute, pathname, search]);
400
409
 
401
410
  return (
402
- <div className="app-shell">
403
- <header className="app-header">
404
- <div className="app-header-inner">
405
- <div className="brand">
406
- <a href="/">
411
+ <SidebarProvider>
412
+ <AppSidebar />
413
+ <SidebarInset>
414
+ <header className="supports-backdrop-blur:bg-background/60 sticky top-0 z-10 flex h-16 items-center gap-4 border-b bg-background/80 px-4 backdrop-blur">
415
+ <div className="flex items-center gap-3">
416
+ <SidebarTrigger className="-ml-1" />
417
+ <Separator orientation="vertical" className="h-6" />
418
+ <div className="flex items-center gap-2">
407
419
  <img
408
- src={Config.logo}
409
420
  alt={\`\${Config.applicationName} logo\`}
410
- className="brand-logo"
421
+ className="size-10 rounded-lg border border-border/60 bg-background object-cover shadow-sm"
422
+ src={Config.logo}
411
423
  />
412
- <span className="brand-name">{Config.applicationName}</span>
413
- </a>
424
+ <div className="flex flex-col leading-tight">
425
+ <span className="text-sm font-semibold">
426
+ {Config.applicationName}
427
+ </span>
428
+ </div>
429
+ </div>
414
430
  </div>
415
-
416
- <nav className="app-nav">
417
- {navItems.map((item) => (
418
- <Link
419
- key={item.to}
420
- to={item.to}
421
- className={pathname === item.to ? 'active' : undefined}
422
- >
423
- {item.label}
424
- </Link>
425
- ))}
426
- </nav>
431
+ </header>
432
+ <div className="flex flex-1 flex-col gap-6 p-6 pt-4">
433
+ <Breadcrumb>
434
+ <BreadcrumbList>
435
+ {activeBreadcrumbs.map((crumb, index) => (
436
+ <React.Fragment key={crumb.href || index}>
437
+ <BreadcrumbItem>
438
+ {index === activeBreadcrumbs.length - 1 ? (
439
+ <BreadcrumbPage>{crumb.text}</BreadcrumbPage>
440
+ ) : (
441
+ <BreadcrumbLink asChild>
442
+ <Link to={crumb.href}>{crumb.text}</Link>
443
+ </BreadcrumbLink>
444
+ )}
445
+ </BreadcrumbItem>
446
+ {index < activeBreadcrumbs.length - 1 && (
447
+ <BreadcrumbSeparator />
448
+ )}
449
+ </React.Fragment>
450
+ ))}
451
+ </BreadcrumbList>
452
+ </Breadcrumb>
453
+ {children}
427
454
  </div>
428
- </header>
429
- <main className="app-main">
430
- <nav className="breadcrumbs" aria-label="Breadcrumb">
431
- {activeBreadcrumbs.map((crumb, index) => (
432
- <span className="breadcrumb-segment" key={crumb.href || index}>
433
- {index > 0 && <span className="breadcrumb-separator">/</span>}
434
- {index === activeBreadcrumbs.length - 1 ? (
435
- <span className="breadcrumb-current">{crumb.text}</span>
436
- ) : (
437
- <Link to={crumb.href}>{crumb.text}</Link>
438
- )}
439
- </span>
440
- ))}
441
- </nav>
442
-
443
- <section className="card">{children}</section>
444
- </main>
445
- </div>
455
+ </SidebarInset>
456
+ </SidebarProvider>
446
457
  );
447
458
  };
448
459
 
@@ -450,36 +461,101 @@ export default AppLayout;
450
461
  "
451
462
  `;
452
463
 
453
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/components/alert.tsx 1`] = `
464
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/components/alert.tsx 1`] = `
454
465
  "import React from 'react';
466
+ import {
467
+ Alert as ShadcnAlert,
468
+ AlertDescription,
469
+ AlertTitle,
470
+ } from ':proj/common-shadcn/components/ui/alert';
471
+
472
+ type AlertType = 'info' | 'error';
455
473
 
456
- interface AlertProps {
457
- type: string;
458
- header: string;
474
+ export interface AlertProps {
475
+ type?: AlertType;
476
+ header: React.ReactNode;
459
477
  children: React.ReactNode;
460
478
  }
461
479
 
462
- export const Alert: React.FC<AlertProps> = ({ type, header, children }) => (
463
- <div className={\`alert alert-\${type}\`} role="alert">
464
- <div className="alert-header">{header}</div>
465
- <div className="alert-body">{children}</div>
466
- </div>
467
- );
480
+ export const Alert: React.FC<AlertProps> = ({
481
+ type = 'info',
482
+ header,
483
+ children,
484
+ }) => {
485
+ const variant = type === 'error' ? 'destructive' : 'default';
486
+ const role = type === 'error' ? 'alert' : 'status';
487
+
488
+ return (
489
+ <ShadcnAlert variant={variant} role={role}>
490
+ <AlertTitle>{header}</AlertTitle>
491
+ <AlertDescription>{children}</AlertDescription>
492
+ </ShadcnAlert>
493
+ );
494
+ };
468
495
  "
469
496
  `;
470
497
 
471
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/components/spinner.tsx 1`] = `
472
- "import React from 'react';
498
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/components/app-sidebar.tsx 1`] = `
499
+ "import { Home } from 'lucide-react';
473
500
 
474
- export const Spinner: React.FC = () => (
475
- <div className="spinner" role="status" aria-live="polite" aria-busy="true">
476
- Loading...
477
- </div>
478
- );
501
+ import {
502
+ Sidebar,
503
+ SidebarContent,
504
+ SidebarGroup,
505
+ SidebarGroupContent,
506
+ SidebarGroupLabel,
507
+ SidebarMenu,
508
+ SidebarMenuButton,
509
+ SidebarMenuItem,
510
+ } from ':proj/common-shadcn/components/ui/sidebar';
511
+ import { Link } from '@tanstack/react-router';
512
+
513
+ import Config from '../config';
514
+
515
+ export function AppSidebar() {
516
+ // Menu items.
517
+ const navItems = [
518
+ {
519
+ label: 'Home',
520
+ to: '/',
521
+ icon: Home,
522
+ },
523
+ ];
524
+ return (
525
+ <Sidebar>
526
+ <SidebarContent>
527
+ <SidebarGroup>
528
+ <SidebarGroupLabel>{Config.applicationName}</SidebarGroupLabel>
529
+ <SidebarGroupContent>
530
+ <SidebarMenu>
531
+ {navItems.map((item) => (
532
+ <SidebarMenuItem key={item.label}>
533
+ <SidebarMenuButton asChild>
534
+ <Link to={item.to} preload="intent">
535
+ <item.icon />
536
+ <span>{item.label}</span>
537
+ </Link>
538
+ </SidebarMenuButton>
539
+ </SidebarMenuItem>
540
+ ))}
541
+ </SidebarMenu>
542
+ </SidebarGroupContent>
543
+ </SidebarGroup>
544
+ </SidebarContent>
545
+ </Sidebar>
546
+ );
547
+ }
548
+ "
549
+ `;
550
+
551
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/components/spinner.tsx 1`] = `
552
+ "import { Spinner as ShadcnSpinner } from ':proj/common-shadcn/components/ui/spinner';
553
+
554
+ export const Spinner = ShadcnSpinner;
479
555
  "
480
556
  `;
481
557
 
482
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/config.ts 1`] = `
558
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/config.ts 1`] = `
483
559
  "export default {
484
560
  applicationName: 'test-app',
485
561
  logo: 'data:image/svg+xml;base64,PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KDTwhLS0gVXBsb2FkZWQgdG86IFNWRyBSZXBvLCB3d3cuc3ZncmVwby5jb20sIFRyYW5zZm9ybWVkIGJ5OiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyBmaWxsPSIjMjQ4YmFlIiB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0cm9rZT0iIzI0OGJhZSI+Cg08ZyBpZD0iU1ZHUmVwb19iZ0NhcnJpZXIiIHN0cm9rZS13aWR0aD0iMCIvPgoNPGcgaWQ9IlNWR1JlcG9fdHJhY2VyQ2FycmllciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cg08ZyBpZD0iU1ZHUmVwb19pY29uQ2FycmllciI+Cg08dGl0bGU+aW9uaWNvbnMtdjVfbG9nb3M8L3RpdGxlPgoNPHBhdGggZD0iTTQxMC42NiwxODAuNzJoMHEtNy42Ny0yLjYyLTE1LjQ1LTQuODgsMS4yOS01LjI1LDIuMzgtMTAuNTZjMTEuNy01Ni45LDQuMDUtMTAyLjc0LTIyLjA2LTExNy44My0yNS0xNC40OC02NiwuNjEtMTA3LjM2LDM2LjY5cS02LjEsNS4zNC0xMS45NSwxMS0zLjktMy43Ni04LTcuMzZjLTQzLjM1LTM4LjU4LTg2LjgtNTQuODMtMTEyLjg4LTM5LjY5LTI1LDE0LjUxLTMyLjQzLDU3LjYtMjEuOSwxMTEuNTNxMS41OCw4LDMuNTUsMTUuOTNjLTYuMTUsMS43NS0xMi4wOSwzLjYyLTE3Ljc3LDUuNkM0OC40NiwxOTguOSwxNiwyMjYuNzMsMTYsMjU1LjU5YzAsMjkuODIsMzQuODQsNTkuNzIsODcuNzcsNzcuODVxNi40NCwyLjE5LDEzLDQuMDdRMTE0LjY0LDM0NiwxMTMsMzU0LjY4Yy0xMCw1My0yLjIsOTUuMDcsMjIuNzUsMTA5LjQ5LDI1Ljc3LDE0Ljg5LDY5LS40MSwxMTEuMTQtMzcuMzFxNS00LjM4LDEwLTkuMjUsNi4zMiw2LjExLDEzLDExLjg2YzQwLjgsMzUuMTgsODEuMDksNDkuMzksMTA2LDM0LjkzLDI1Ljc1LTE0Ljk0LDM0LjEyLTYwLjE0LDIzLjI1LTExNS4xM3EtMS4yNS02LjMtMi44OC0xMi44Niw0LjU2LTEuMzUsOC45My0yLjc5YzU1LTE4LjI3LDkwLjgzLTQ3LjgxLDkwLjgzLTc4QzQ5NiwyMjYuNjIsNDYyLjUsMTk4LjYxLDQxMC42NiwxODAuNzJabS0xMjktODEuMDhjMzUuNDMtMzAuOTEsNjguNTUtNDMuMTEsODMuNjUtMzQuMzloMGMxNi4wNyw5LjI5LDIyLjMyLDQ2Ljc1LDEyLjIyLDk1Ljg4cS0xLDQuOC0yLjE2LDkuNTdhNDg3LjgzLDQ4Ny44MywwLDAsMC02NC4xOC0xMC4xNiw0ODEuMjcsNDgxLjI3LDAsMCwwLTQwLjU3LTUwLjc1UTI3NiwxMDQuNTcsMjgxLjY0LDk5LjY0Wk0xNTcuNzMsMjgwLjI1cTYuNTEsMTIuNiwxMy42MSwyNC44OSw3LjIzLDEyLjU0LDE1LjA3LDI0LjcxYTQzNS4yOCw0MzUuMjgsMCwwLDEtNDQuMjQtNy4xM0MxNDYuNDEsMzA5LDE1MS42MywyOTQuNzUsMTU3LjczLDI4MC4yNVptMC00OC4zM2MtNi0xNC4xOS0xMS4wOC0yOC4xNS0xNS4yNS00MS42MywxMy43LTMuMDcsMjguMy01LjU4LDQzLjUyLTcuNDhxLTcuNjUsMTEuOTQtMTQuNzIsMjQuMjNUMTU3LjcsMjMxLjkyWm0xMC45LDI0LjE3cTkuNDgtMTkuNzcsMjAuNDItMzguNzhoMHExMC45My0xOSwyMy4yNy0zNy4xM2MxNC4yOC0xLjA4LDI4LjkyLTEuNjUsNDMuNzEtMS42NXMyOS41Mi41Nyw0My43OSwxLjY2cTEyLjIxLDE4LjA5LDIzLjEzLDM3dDIwLjY5LDM4LjZRMzM0LDI3NS42MywzMjMsMjk0LjczaDBxLTEwLjkxLDE5LTIzLDM3LjI0Yy0xNC4yNSwxLTI5LDEuNTUtNDQsMS41NXMtMjkuNDctLjQ3LTQzLjQ2LTEuMzhxLTEyLjQzLTE4LjE5LTIzLjQ2LTM3LjI5VDE2OC42LDI1Ni4wOVpNMzQwLjc1LDMwNXE3LjI1LTEyLjU4LDEzLjkyLTI1LjQ5aDBhNDQwLjQxLDQ0MC40MSwwLDAsMSwxNi4xMiw0Mi4zMkE0MzQuNDQsNDM0LjQ0LDAsMCwxLDMyNiwzMjkuNDhRMzMzLjYyLDMxNy4zOSwzNDAuNzUsMzA1Wm0xMy43Mi03My4wN3EtNi42NC0xMi42NS0xMy44MS0yNWgwcS03LTEyLjE4LTE0LjU5LTI0LjA2YzE1LjMxLDEuOTQsMzAsNC41Miw0My43Nyw3LjY3QTQzOS44OSw0MzkuODksMCwwLDEsMzU0LjQ3LDIzMS45M1pNMjU2LjIzLDEyNC40OGgwYTQzOS43NSw0MzkuNzUsMCwwLDEsMjguMjUsMzQuMThxLTI4LjM1LTEuMzUtNTYuNzQsMEMyMzcuMDcsMTQ2LjMyLDI0Ni42MiwxMzQuODcsMjU2LjIzLDEyNC40OFpNMTQ1LjY2LDY1Ljg2YzE2LjA2LTkuMzIsNTEuNTcsNCw4OSwzNy4yNywyLjM5LDIuMTMsNC44LDQuMzYsNy4yLDYuNjdBNDkxLjM3LDQ5MS4zNywwLDAsMCwyMDEsMTYwLjUxYTQ5OS4xMiw0OTkuMTIsMCwwLDAtNjQuMDYsMTBxLTEuODMtNy4zNi0zLjMtMTQuODJoMEMxMjQuNTksMTA5LjQ2LDEzMC41OCw3NC42MSwxNDUuNjYsNjUuODZaTTEyMi4yNSwzMTcuNzFxLTYtMS43MS0xMS44NS0zLjcxYy0yMy40LTgtNDIuNzMtMTguNDQtNTYtMjkuODFDNDIuNTIsMjc0LDM2LjUsMjYzLjgzLDM2LjUsMjU1LjU5YzAtMTcuNTEsMjYuMDYtMzkuODUsNjkuNTItNTVxOC4xOS0yLjg1LDE2LjUyLTUuMjFhNDkzLjU0LDQ5My41NCwwLDAsMCwyMy40LDYwLjc1QTUwMi40Niw1MDIuNDYsMCwwLDAsMTIyLjI1LDMxNy43MVptMTExLjEzLDkzLjY3Yy0xOC42MywxNi4zMi0zNy4yOSwyNy44OS01My43NCwzMy43MmgwYy0xNC43OCw1LjIzLTI2LjU1LDUuMzgtMzMuNjYsMS4yNy0xNS4xNC04Ljc1LTIxLjQ0LTQyLjU0LTEyLjg1LTg3Ljg2cTEuNTMtOCwzLjUtMTZhNDgwLjg1LDQ4MC44NSwwLDAsMCw2NC42OSw5LjM5LDUwMS4yLDUwMS4yLDAsMCwwLDQxLjIsNTFDMjM5LjU0LDQwNS44MywyMzYuNDksNDA4LjY1LDIzMy4zOCw0MTEuMzhabTIzLjQyLTIzLjIyYy05LjcyLTEwLjUxLTE5LjQyLTIyLjE0LTI4Ljg4LTM0LjY0cTEzLjc5LjU0LDI4LjA4LjU0YzkuNzgsMCwxOS40Ni0uMjEsMjktLjY0QTQzOS4zMyw0MzkuMzMsMCwwLDEsMjU2LjgsMzg4LjE2Wm0xMjQuNTIsMjguNTljLTIuODYsMTUuNDQtOC42MSwyNS43NC0xNS43MiwyOS44Ni0xNS4xMyw4Ljc4LTQ3LjQ4LTIuNjMtODIuMzYtMzIuNzItNC0zLjQ0LTgtNy4xMy0xMi4wNy0xMWE0ODQuNTQsNDg0LjU0LDAsMCwwLDQwLjIzLTUxLjIsNDc3Ljg0LDQ3Ny44NCwwLDAsMCw2NS0xMC4wNXExLjQ3LDUuOTQsMi42LDExLjY0aDBDMzgzLjgxLDM3Ny41OCwzODQuNSwzOTkuNTYsMzgxLjMyLDQxNi43NVptMTcuNC0xMDIuNjRoMGMtMi42Mi44Ny01LjMyLDEuNzEtOC4wNiwyLjUzYTQ4My4yNiw0ODMuMjYsMCwwLDAtMjQuMzEtNjAuOTQsNDgxLjUyLDQ4MS41MiwwLDAsMCwyMy4zNi02MC4wNmM0LjkxLDEuNDMsOS42OCwyLjkzLDE0LjI3LDQuNTIsNDQuNDIsMTUuMzIsNzEuNTIsMzgsNzEuNTIsNTUuNDNDNDc1LjUsMjc0LjE5LDQ0Ni4yMywyOTguMzMsMzk4LjcyLDMxNC4xMVoiLz4KDTxwYXRoIGQ9Ik0yNTYsMjk4LjU1YTQzLDQzLDAsMSwwLTQyLjg2LTQzQTQyLjkxLDQyLjkxLDAsMCwwLDI1NiwyOTguNTVaIi8+Cg08L2c+Cg08L3N2Zz4=',
@@ -487,11 +563,12 @@ exports[`react-website generator (uxProvider=None) > should update package.json
487
563
  "
488
564
  `;
489
565
 
490
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/main.tsx 1`] = `
566
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/main.tsx 1`] = `
491
567
  "import React from 'react';
492
568
  import { createRoot } from 'react-dom/client';
493
569
  import { RouterProvider, createRouter } from '@tanstack/react-router';
494
570
  import { routeTree } from './routeTree.gen';
571
+ import './styles.css';
495
572
 
496
573
  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
497
574
  export type RouterProviderContext = {};
@@ -522,7 +599,7 @@ root &&
522
599
  "
523
600
  `;
524
601
 
525
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/routeTree.gen.ts 1`] = `
602
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/routeTree.gen.ts 1`] = `
526
603
  "/* eslint-disable */
527
604
 
528
605
  // @ts-nocheck
@@ -585,7 +662,7 @@ export const routeTree = rootRouteImport
585
662
  "
586
663
  `;
587
664
 
588
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/routes/__root.tsx 1`] = `
665
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/routes/__root.tsx 1`] = `
589
666
  "import { createRootRouteWithContext } from '@tanstack/react-router';
590
667
  import AppLayout from '../components/AppLayout';
591
668
  import { RouterProviderContext } from '../main';
@@ -601,7 +678,7 @@ export const Route = createRootRouteWithContext<RouterProviderContext>()({
601
678
  "
602
679
  `;
603
680
 
604
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/routes/index.tsx 1`] = `
681
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/routes/index.tsx 1`] = `
605
682
  "import { createFileRoute } from '@tanstack/react-router';
606
683
 
607
684
  export const Route = createFileRoute('/')({
@@ -610,213 +687,20 @@ export const Route = createFileRoute('/')({
610
687
 
611
688
  function RouteComponent() {
612
689
  return (
613
- <>
614
- <h1>Welcome</h1>
615
- <p>Welcome to your new React website!</p>
616
- </>
690
+ <div className="text-center">
691
+ <header>
692
+ <h1>Welcome</h1>
693
+ <p>Welcome to your new React website!</p>
694
+ </header>
695
+ </div>
617
696
  );
618
697
  }
619
698
  "
620
699
  `;
621
700
 
622
- exports[`react-website generator (uxProvider=None) > should update package.json with required dependencies > test-app/src/styles.css 1`] = `
623
- "@import 'tailwindcss';
624
-
625
- :root {
626
- color-scheme: light;
627
- font-family:
628
- system-ui,
629
- -apple-system,
630
- BlinkMacSystemFont,
631
- 'Segoe UI',
632
- sans-serif;
633
- background-color: #f8fafc;
634
- color: #0f172a;
635
- }
636
-
637
- * {
638
- box-sizing: border-box;
639
- }
640
-
641
- body {
642
- margin: 0;
643
- }
644
-
645
- a {
646
- color: inherit;
647
- text-decoration: none;
648
- }
649
-
650
- .app-shell {
651
- min-height: 100vh;
652
- display: flex;
653
- flex-direction: column;
654
- }
655
-
656
- .app-header {
657
- display: flex;
658
- align-items: center;
659
- justify-content: flex-start;
660
- padding: 1rem 0;
661
- border-bottom: 1px solid #e2e8f0;
662
- background: #ffffff;
663
- position: sticky;
664
- top: 0;
665
- z-index: 1;
666
- }
667
-
668
- .app-header-inner {
669
- display: flex;
670
- align-items: center;
671
- gap: 1.25rem;
672
- width: min(1100px, 100%);
673
- margin: 0 auto;
674
- padding: 0 1rem;
675
- }
676
-
677
- .brand {
678
- display: flex;
679
- align-items: center;
680
- }
681
-
682
- .brand a {
683
- display: inline-flex;
684
- align-items: center;
685
- gap: 0.5rem;
686
- }
687
-
688
- .brand-logo {
689
- height: 32px;
690
- width: auto;
691
- }
692
-
693
- .brand-name {
694
- font-weight: 700;
695
- font-size: 1.1rem;
696
- line-height: 1.1;
697
- display: inline-flex;
698
- align-items: center;
699
- }
700
-
701
- .user-greeting {
702
- margin-left: auto;
703
- display: flex;
704
- align-items: center;
705
- gap: 0.5rem;
706
- }
707
-
708
- .signout-link {
709
- border: none;
710
- background: transparent;
711
- color: #0ea5e9;
712
- cursor: pointer;
713
- font-weight: 600;
714
- padding: 0.25rem 0.35rem;
715
- border-radius: 0.35rem;
716
- }
717
-
718
- .signout-link:hover {
719
- background: #e0f2fe;
720
- }
721
-
722
- .app-main {
723
- width: min(1100px, 100%);
724
- margin: 2rem auto;
725
- padding: 0 1rem 3rem;
726
- }
727
-
728
- .card {
729
- background: #ffffff;
730
- border-radius: 0.75rem;
731
- padding: 1.5rem;
732
- box-shadow: 0 10px 40px rgba(15, 23, 42, 0.08);
733
- border: 1px solid #e2e8f0;
734
- }
735
-
736
- .card h1 {
737
- margin-top: 0;
738
- margin-bottom: 0.5rem;
739
- font-size: 1.5rem;
740
- }
741
-
742
- .card p {
743
- margin: 0;
744
- color: #334155;
745
- line-height: 1.6;
746
- }
747
-
748
- .spinner {
749
- display: inline-block;
750
- padding: 0.75rem 1rem;
751
- border: 1px solid #e2e8f0;
752
- border-radius: 0.5rem;
753
- background: #ffffff;
754
- color: #0f172a;
755
- }
756
-
757
- .alert {
758
- border-radius: 0.75rem;
759
- padding: 1rem 1.25rem;
760
- margin: 1rem 0;
761
- border: 1px solid #e2e8f0;
762
- background: #fff;
763
- color: #0f172a;
764
- }
765
-
766
- .alert-error {
767
- border-color: #fecdd3;
768
- background: #fff1f2;
769
- color: #881337;
770
- }
771
-
772
- .alert-header {
773
- font-weight: 700;
774
- margin-bottom: 0.35rem;
775
- }
776
-
777
- .alert-body {
778
- margin: 0;
779
- }
780
-
781
- .app-nav {
782
- display: flex;
783
- align-items: center;
784
- gap: 0.75rem;
785
- }
786
-
787
- .app-nav a {
788
- display: inline-flex;
789
- align-items: center;
790
- padding: 0.35rem 0.65rem;
791
- border-radius: 0.375rem;
792
- line-height: 1.1;
793
- }
794
-
795
- .app-nav a.active {
796
- background: #e2e8f0;
797
- }
798
-
799
- .breadcrumbs {
800
- display: flex;
801
- align-items: center;
802
- gap: 0.35rem;
803
- font-size: 0.95rem;
804
- color: #475569;
805
- margin: 0 0 1rem;
806
- }
807
-
808
- .breadcrumb-segment a {
809
- color: inherit;
810
- }
811
-
812
- .breadcrumb-current {
813
- font-weight: 600;
814
- color: #0f172a;
815
- }
816
-
817
- .breadcrumb-separator {
818
- color: #cbd5e1;
819
- }
701
+ exports[`react-website generator (uxProvider=Shadcn) > should update package.json with required dependencies > test-app/src/styles.css 1`] = `
702
+ "@import '../../packages/common/shadcn/src/styles/globals.css';
703
+ @source './**/*.{ts,tsx}';
820
704
  "
821
705
  `;
822
706
 
@@ -1874,24 +1758,24 @@ exports[`react-website generator > Tanstack router integration > should generate
1874
1758
  "{
1875
1759
  "name": "@proj/source",
1876
1760
  "dependencies": {
1877
- "@cloudscape-design/board-components": "3.0.143",
1878
- "@cloudscape-design/components": "3.0.1181",
1879
- "@cloudscape-design/global-styles": "1.0.49",
1880
- "aws-cdk-lib": "2.235.1",
1761
+ "@cloudscape-design/board-components": "3.0.145",
1762
+ "@cloudscape-design/components": "3.0.1184",
1763
+ "@cloudscape-design/global-styles": "1.0.50",
1764
+ "aws-cdk-lib": "2.236.0",
1881
1765
  "constructs": "10.4.5",
1882
- "react": "19.2.3",
1883
- "react-dom": "19.2.3",
1766
+ "react": "19.2.4",
1767
+ "react-dom": "19.2.4",
1884
1768
  "tailwindcss": "4.1.18"
1885
1769
  },
1886
1770
  "devDependencies": {
1887
1771
  "@eslint/js": "^9.8.0",
1888
- "@nx/eslint": "22.4.1",
1889
- "@nx/eslint-plugin": "22.4.1",
1890
- "@nx/js": "22.4.1",
1891
- "@nx/react": "22.4.1",
1892
- "@nx/vite": "22.4.1",
1893
- "@nx/vitest": "22.4.1",
1894
- "@nx/web": "22.4.1",
1772
+ "@nx/eslint": "22.4.4",
1773
+ "@nx/eslint-plugin": "22.4.4",
1774
+ "@nx/js": "22.4.4",
1775
+ "@nx/react": "22.4.4",
1776
+ "@nx/vite": "22.4.4",
1777
+ "@nx/vitest": "22.4.4",
1778
+ "@nx/web": "22.4.4",
1895
1779
  "@swc-node/register": "~1.9.1",
1896
1780
  "@swc/cli": "~0.6.0",
1897
1781
  "@swc/core": "~1.5.7",
@@ -3316,32 +3200,32 @@ exports[`react-website generator > Tanstack router integration > should generate
3316
3200
  "{
3317
3201
  "name": "@proj/source",
3318
3202
  "dependencies": {
3319
- "@cloudscape-design/board-components": "3.0.143",
3320
- "@cloudscape-design/components": "3.0.1181",
3321
- "@cloudscape-design/global-styles": "1.0.49",
3322
- "@tanstack/react-router": "1.154.12",
3323
- "aws-cdk-lib": "2.235.1",
3203
+ "@cloudscape-design/board-components": "3.0.145",
3204
+ "@cloudscape-design/components": "3.0.1184",
3205
+ "@cloudscape-design/global-styles": "1.0.50",
3206
+ "@tanstack/react-router": "1.157.16",
3207
+ "aws-cdk-lib": "2.236.0",
3324
3208
  "constructs": "10.4.5",
3325
- "react": "19.2.3",
3326
- "react-dom": "19.2.3",
3209
+ "react": "19.2.4",
3210
+ "react-dom": "19.2.4",
3327
3211
  "tailwindcss": "4.1.18"
3328
3212
  },
3329
3213
  "devDependencies": {
3330
3214
  "@eslint/js": "^9.8.0",
3331
- "@nx/eslint": "22.4.1",
3332
- "@nx/eslint-plugin": "22.4.1",
3333
- "@nx/js": "22.4.1",
3334
- "@nx/react": "22.4.1",
3335
- "@nx/vite": "22.4.1",
3336
- "@nx/vitest": "22.4.1",
3337
- "@nx/web": "22.4.1",
3215
+ "@nx/eslint": "22.4.4",
3216
+ "@nx/eslint-plugin": "22.4.4",
3217
+ "@nx/js": "22.4.4",
3218
+ "@nx/react": "22.4.4",
3219
+ "@nx/vite": "22.4.4",
3220
+ "@nx/vitest": "22.4.4",
3221
+ "@nx/web": "22.4.4",
3338
3222
  "@swc-node/register": "~1.9.1",
3339
3223
  "@swc/cli": "~0.6.0",
3340
3224
  "@swc/core": "~1.5.7",
3341
3225
  "@swc/helpers": "~0.5.11",
3342
3226
  "@tailwindcss/vite": "4.1.18",
3343
- "@tanstack/router-generator": "1.154.12",
3344
- "@tanstack/router-plugin": "1.154.12",
3227
+ "@tanstack/router-generator": "1.157.16",
3228
+ "@tanstack/router-plugin": "1.157.16",
3345
3229
  "@tanstack/router-utils": "1.154.7",
3346
3230
  "@tanstack/virtual-file-routes": "1.154.7",
3347
3231
  "@testing-library/dom": "10.4.0",
@@ -5403,14 +5287,14 @@ root &&
5403
5287
 
5404
5288
  exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `
5405
5289
  {
5406
- "@cloudscape-design/board-components": "3.0.143",
5407
- "@cloudscape-design/components": "3.0.1181",
5408
- "@cloudscape-design/global-styles": "1.0.49",
5409
- "@tanstack/react-router": "1.154.12",
5410
- "aws-cdk-lib": "2.235.1",
5290
+ "@cloudscape-design/board-components": "3.0.145",
5291
+ "@cloudscape-design/components": "3.0.1184",
5292
+ "@cloudscape-design/global-styles": "1.0.50",
5293
+ "@tanstack/react-router": "1.157.16",
5294
+ "aws-cdk-lib": "2.236.0",
5411
5295
  "constructs": "10.4.5",
5412
- "react": "19.2.3",
5413
- "react-dom": "19.2.3",
5296
+ "react": "19.2.4",
5297
+ "react-dom": "19.2.4",
5414
5298
  "tailwindcss": "4.1.18",
5415
5299
  }
5416
5300
  `;
@@ -0,0 +1,12 @@
1
+ import AppLayout from './components/AppLayout';
2
+
3
+ export const App = () => (
4
+ <AppLayout>
5
+ <div className="text-center">
6
+ <header>
7
+ <h1>Welcome</h1>
8
+ <p>Welcome to your new React website!</p>
9
+ </header>
10
+ </div>
11
+ </AppLayout>
12
+ );