@assistant-ui/mcp-docs-server 0.1.17 → 0.1.18

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 (95) hide show
  1. package/.docs/organized/code-examples/with-ag-ui.md +146 -152
  2. package/.docs/organized/code-examples/with-ai-sdk-v5.md +96 -101
  3. package/.docs/organized/code-examples/with-assistant-transport.md +132 -220
  4. package/.docs/organized/code-examples/with-cloud.md +124 -131
  5. package/.docs/organized/code-examples/with-custom-thread-list.md +26 -46
  6. package/.docs/organized/code-examples/with-external-store.md +146 -151
  7. package/.docs/organized/code-examples/with-ffmpeg.md +129 -139
  8. package/.docs/organized/code-examples/with-langgraph.md +231 -225
  9. package/.docs/organized/code-examples/with-parent-id-grouping.md +146 -151
  10. package/.docs/organized/code-examples/with-react-hook-form.md +146 -152
  11. package/.docs/organized/code-examples/{store-example.md → with-store.md} +16 -20
  12. package/.docs/organized/code-examples/with-tanstack.md +23 -41
  13. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +36 -0
  14. package/.docs/raw/docs/runtimes/custom/local.mdx +31 -8
  15. package/.docs/raw/docs/ui/Scrollbar.mdx +0 -6
  16. package/dist/constants.d.ts +10 -0
  17. package/dist/constants.d.ts.map +1 -0
  18. package/dist/constants.js +14 -0
  19. package/dist/constants.js.map +1 -0
  20. package/dist/index.d.ts +4 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +33 -1
  23. package/dist/index.js.map +1 -0
  24. package/dist/prepare-docs/code-examples.d.ts +2 -0
  25. package/dist/prepare-docs/code-examples.d.ts.map +1 -0
  26. package/dist/prepare-docs/code-examples.js +129 -0
  27. package/dist/prepare-docs/code-examples.js.map +1 -0
  28. package/dist/prepare-docs/copy-raw.d.ts +2 -0
  29. package/dist/prepare-docs/copy-raw.d.ts.map +1 -0
  30. package/dist/prepare-docs/copy-raw.js +50 -0
  31. package/dist/prepare-docs/copy-raw.js.map +1 -0
  32. package/dist/prepare-docs/prepare.d.ts +2 -0
  33. package/dist/prepare-docs/prepare.d.ts.map +1 -0
  34. package/dist/prepare-docs/prepare.js +18 -195
  35. package/dist/prepare-docs/prepare.js.map +1 -0
  36. package/dist/stdio.d.ts +3 -0
  37. package/dist/stdio.d.ts.map +1 -0
  38. package/dist/stdio.js +4 -5
  39. package/dist/stdio.js.map +1 -0
  40. package/dist/tools/docs.d.ts +23 -0
  41. package/dist/tools/docs.d.ts.map +1 -0
  42. package/dist/tools/docs.js +168 -0
  43. package/dist/tools/docs.js.map +1 -0
  44. package/dist/tools/examples.d.ts +23 -0
  45. package/dist/tools/examples.d.ts.map +1 -0
  46. package/dist/tools/examples.js +95 -0
  47. package/dist/tools/examples.js.map +1 -0
  48. package/dist/tools/tests/test-setup.d.ts +4 -0
  49. package/dist/tools/tests/test-setup.d.ts.map +1 -0
  50. package/dist/tools/tests/test-setup.js +36 -0
  51. package/dist/tools/tests/test-setup.js.map +1 -0
  52. package/dist/utils/logger.d.ts +7 -0
  53. package/dist/utils/logger.d.ts.map +1 -0
  54. package/dist/utils/logger.js +20 -0
  55. package/dist/utils/logger.js.map +1 -0
  56. package/dist/utils/mcp-format.d.ts +7 -0
  57. package/dist/utils/mcp-format.d.ts.map +1 -0
  58. package/dist/utils/mcp-format.js +11 -0
  59. package/dist/utils/mcp-format.js.map +1 -0
  60. package/dist/utils/mdx.d.ts +9 -0
  61. package/dist/utils/mdx.d.ts.map +1 -0
  62. package/dist/utils/mdx.js +27 -0
  63. package/dist/utils/mdx.js.map +1 -0
  64. package/dist/utils/paths.d.ts +8 -0
  65. package/dist/utils/paths.d.ts.map +1 -0
  66. package/dist/utils/paths.js +84 -0
  67. package/dist/utils/paths.js.map +1 -0
  68. package/dist/utils/security.d.ts +2 -0
  69. package/dist/utils/security.d.ts.map +1 -0
  70. package/dist/utils/security.js +43 -0
  71. package/dist/utils/security.js.map +1 -0
  72. package/package.json +37 -19
  73. package/src/constants.ts +22 -0
  74. package/src/index.ts +51 -0
  75. package/src/prepare-docs/code-examples.ts +158 -0
  76. package/src/prepare-docs/copy-raw.ts +55 -0
  77. package/src/prepare-docs/prepare.ts +24 -0
  78. package/src/stdio.ts +7 -0
  79. package/src/tools/docs.ts +207 -0
  80. package/src/tools/examples.ts +107 -0
  81. package/src/tools/tests/docs.test.ts +122 -0
  82. package/src/tools/tests/examples.test.ts +94 -0
  83. package/src/tools/tests/integration.test.ts +46 -0
  84. package/src/tools/tests/json-parsing.test.ts +23 -0
  85. package/src/tools/tests/mcp-protocol.test.ts +133 -0
  86. package/src/tools/tests/path-traversal.test.ts +81 -0
  87. package/src/tools/tests/test-setup.ts +40 -0
  88. package/src/utils/logger.ts +20 -0
  89. package/src/utils/mcp-format.ts +12 -0
  90. package/src/utils/mdx.ts +39 -0
  91. package/src/utils/paths.ts +114 -0
  92. package/src/utils/security.ts +52 -0
  93. package/src/utils/tests/security.test.ts +119 -0
  94. package/dist/chunk-M2RKUM66.js +0 -38
  95. package/dist/chunk-NVNFQ5ZO.js +0 -423
@@ -9,43 +9,41 @@
9
9
  @custom-variant dark (&:is(.dark *));
10
10
 
11
11
  @theme inline {
12
- --color-background: var(--background);
13
- --color-foreground: var(--foreground);
14
- --font-sans: var(--font-geist-sans);
15
- --font-mono: var(--font-geist-mono);
16
- --color-sidebar-ring: var(--sidebar-ring);
17
- --color-sidebar-border: var(--sidebar-border);
18
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
19
- --color-sidebar-accent: var(--sidebar-accent);
20
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
21
- --color-sidebar-primary: var(--sidebar-primary);
22
- --color-sidebar-foreground: var(--sidebar-foreground);
23
- --color-sidebar: var(--sidebar);
24
- --color-chart-5: var(--chart-5);
25
- --color-chart-4: var(--chart-4);
26
- --color-chart-3: var(--chart-3);
27
- --color-chart-2: var(--chart-2);
28
- --color-chart-1: var(--chart-1);
29
- --color-ring: var(--ring);
30
- --color-input: var(--input);
31
- --color-border: var(--border);
32
- --color-destructive: var(--destructive);
33
- --color-accent-foreground: var(--accent-foreground);
34
- --color-accent: var(--accent);
35
- --color-muted-foreground: var(--muted-foreground);
36
- --color-muted: var(--muted);
37
- --color-secondary-foreground: var(--secondary-foreground);
38
- --color-secondary: var(--secondary);
39
- --color-primary-foreground: var(--primary-foreground);
40
- --color-primary: var(--primary);
41
- --color-popover-foreground: var(--popover-foreground);
42
- --color-popover: var(--popover);
43
- --color-card-foreground: var(--card-foreground);
44
- --color-card: var(--card);
45
12
  --radius-sm: calc(var(--radius) - 4px);
46
13
  --radius-md: calc(var(--radius) - 2px);
47
14
  --radius-lg: var(--radius);
48
15
  --radius-xl: calc(var(--radius) + 4px);
16
+ --color-background: var(--background);
17
+ --color-foreground: var(--foreground);
18
+ --color-card: var(--card);
19
+ --color-card-foreground: var(--card-foreground);
20
+ --color-popover: var(--popover);
21
+ --color-popover-foreground: var(--popover-foreground);
22
+ --color-primary: var(--primary);
23
+ --color-primary-foreground: var(--primary-foreground);
24
+ --color-secondary: var(--secondary);
25
+ --color-secondary-foreground: var(--secondary-foreground);
26
+ --color-muted: var(--muted);
27
+ --color-muted-foreground: var(--muted-foreground);
28
+ --color-accent: var(--accent);
29
+ --color-accent-foreground: var(--accent-foreground);
30
+ --color-destructive: var(--destructive);
31
+ --color-border: var(--border);
32
+ --color-input: var(--input);
33
+ --color-ring: var(--ring);
34
+ --color-chart-1: var(--chart-1);
35
+ --color-chart-2: var(--chart-2);
36
+ --color-chart-3: var(--chart-3);
37
+ --color-chart-4: var(--chart-4);
38
+ --color-chart-5: var(--chart-5);
39
+ --color-sidebar: var(--sidebar);
40
+ --color-sidebar-foreground: var(--sidebar-foreground);
41
+ --color-sidebar-primary: var(--sidebar-primary);
42
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
43
+ --color-sidebar-accent: var(--sidebar-accent);
44
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
45
+ --color-sidebar-border: var(--sidebar-border);
46
+ --color-sidebar-ring: var(--sidebar-ring);
49
47
  }
50
48
 
51
49
  :root {
@@ -971,7 +969,7 @@ const ThreadScrollToBottom: FC = () => {
971
969
  <TooltipIconButton
972
970
  tooltip="Scroll to bottom"
973
971
  variant="outline"
974
- className="aui-thread-scroll-to-bottom -top-12 absolute z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
972
+ className="aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent"
975
973
  >
976
974
  <ArrowDownIcon />
977
975
  </TooltipIconButton>
@@ -1135,7 +1133,7 @@ const AssistantActionBar: FC = () => {
1135
1133
  hideWhenRunning
1136
1134
  autohide="not-last"
1137
1135
  autohideFloat="single-branch"
1138
- className="aui-assistant-action-bar-root -ml-1 col-start-3 row-start-2 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1136
+ className="aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm"
1139
1137
  >
1140
1138
  <ActionBarPrimitive.Copy asChild>
1141
1139
  <TooltipIconButton tooltip="Copy">
@@ -1173,12 +1171,12 @@ const UserMessage: FC = () => {
1173
1171
  <div className="aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground">
1174
1172
  <MessagePrimitive.Parts />
1175
1173
  </div>
1176
- <div className="aui-user-action-bar-wrapper -translate-x-full -translate-y-1/2 absolute top-1/2 left-0 pr-2">
1174
+ <div className="aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2">
1177
1175
  <UserActionBar />
1178
1176
  </div>
1179
1177
  </div>
1180
1178
 
1181
- <BranchPicker className="aui-user-branch-picker -mr-1 col-span-full col-start-1 row-start-3 justify-end" />
1179
+ <BranchPicker className="aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end" />
1182
1180
  </MessagePrimitive.Root>
1183
1181
  );
1184
1182
  };
@@ -1230,7 +1228,7 @@ const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
1230
1228
  <BranchPickerPrimitive.Root
1231
1229
  hideWhenSingleBranch
1232
1230
  className={cn(
1233
- "aui-branch-picker-root -ml-2 mr-2 inline-flex items-center text-muted-foreground text-xs",
1231
+ "aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs",
1234
1232
  className,
1235
1233
  )}
1236
1234
  {...rest}
@@ -1411,47 +1409,50 @@ import * as AvatarPrimitive from "@radix-ui/react-avatar";
1411
1409
 
1412
1410
  import { cn } from "@/lib/utils";
1413
1411
 
1414
- const Avatar = React.forwardRef<
1415
- React.ElementRef<typeof AvatarPrimitive.Root>,
1416
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
1417
- >(({ className, ...props }, ref) => (
1418
- <AvatarPrimitive.Root
1419
- ref={ref}
1420
- className={cn(
1421
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
1422
- className,
1423
- )}
1424
- {...props}
1425
- />
1426
- ));
1427
- Avatar.displayName = AvatarPrimitive.Root.displayName;
1428
-
1429
- const AvatarImage = React.forwardRef<
1430
- React.ElementRef<typeof AvatarPrimitive.Image>,
1431
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
1432
- >(({ className, ...props }, ref) => (
1433
- <AvatarPrimitive.Image
1434
- ref={ref}
1435
- className={cn("aspect-square h-full w-full", className)}
1436
- {...props}
1437
- />
1438
- ));
1439
- AvatarImage.displayName = AvatarPrimitive.Image.displayName;
1440
-
1441
- const AvatarFallback = React.forwardRef<
1442
- React.ElementRef<typeof AvatarPrimitive.Fallback>,
1443
- React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
1444
- >(({ className, ...props }, ref) => (
1445
- <AvatarPrimitive.Fallback
1446
- ref={ref}
1447
- className={cn(
1448
- "flex h-full w-full items-center justify-center rounded-full bg-muted",
1449
- className,
1450
- )}
1451
- {...props}
1452
- />
1453
- ));
1454
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
1412
+ function Avatar({
1413
+ className,
1414
+ ...props
1415
+ }: React.ComponentProps<typeof AvatarPrimitive.Root>) {
1416
+ return (
1417
+ <AvatarPrimitive.Root
1418
+ data-slot="avatar"
1419
+ className={cn(
1420
+ "relative flex size-8 shrink-0 overflow-hidden rounded-full",
1421
+ className,
1422
+ )}
1423
+ {...props}
1424
+ />
1425
+ );
1426
+ }
1427
+
1428
+ function AvatarImage({
1429
+ className,
1430
+ ...props
1431
+ }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
1432
+ return (
1433
+ <AvatarPrimitive.Image
1434
+ data-slot="avatar-image"
1435
+ className={cn("aspect-square size-full", className)}
1436
+ {...props}
1437
+ />
1438
+ );
1439
+ }
1440
+
1441
+ function AvatarFallback({
1442
+ className,
1443
+ ...props
1444
+ }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
1445
+ return (
1446
+ <AvatarPrimitive.Fallback
1447
+ data-slot="avatar-fallback"
1448
+ className={cn(
1449
+ "flex size-full items-center justify-center rounded-full bg-muted",
1450
+ className,
1451
+ )}
1452
+ {...props}
1453
+ />
1454
+ );
1455
+ }
1455
1456
 
1456
1457
  export { Avatar, AvatarImage, AvatarFallback };
1457
1458
 
@@ -1460,8 +1461,6 @@ export { Avatar, AvatarImage, AvatarFallback };
1460
1461
  ## components/ui/button.tsx
1461
1462
 
1462
1463
  ```tsx
1463
- "use client";
1464
-
1465
1464
  import * as React from "react";
1466
1465
  import { Slot } from "@radix-ui/react-slot";
1467
1466
  import { cva, type VariantProps } from "class-variance-authority";
@@ -1469,26 +1468,28 @@ import { cva, type VariantProps } from "class-variance-authority";
1469
1468
  import { cn } from "@/lib/utils";
1470
1469
 
1471
1470
  const buttonVariants = cva(
1472
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1471
+ "inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
1473
1472
  {
1474
1473
  variants: {
1475
1474
  variant: {
1476
- default:
1477
- "bg-primary text-primary-foreground shadow hover:bg-primary/90",
1475
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
1478
1476
  destructive:
1479
- "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
1477
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
1480
1478
  outline:
1481
- "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
1479
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
1482
1480
  secondary:
1483
- "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
1484
- ghost: "hover:bg-accent hover:text-accent-foreground",
1481
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
1482
+ ghost:
1483
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
1485
1484
  link: "text-primary underline-offset-4 hover:underline",
1486
1485
  },
1487
1486
  size: {
1488
- default: "h-9 px-4 py-2",
1489
- sm: "h-8 rounded-md px-3 text-xs",
1490
- lg: "h-10 rounded-md px-8",
1491
- icon: "h-9 w-9",
1487
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
1488
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
1489
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
1490
+ icon: "size-9",
1491
+ "icon-sm": "size-8",
1492
+ "icon-lg": "size-10",
1492
1493
  },
1493
1494
  },
1494
1495
  defaultVariants: {
@@ -1498,25 +1499,28 @@ const buttonVariants = cva(
1498
1499
  },
1499
1500
  );
1500
1501
 
1501
- export interface ButtonProps
1502
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
1503
- VariantProps<typeof buttonVariants> {
1504
- asChild?: boolean;
1505
- }
1502
+ function Button({
1503
+ className,
1504
+ variant = "default",
1505
+ size = "default",
1506
+ asChild = false,
1507
+ ...props
1508
+ }: React.ComponentProps<"button"> &
1509
+ VariantProps<typeof buttonVariants> & {
1510
+ asChild?: boolean;
1511
+ }) {
1512
+ const Comp = asChild ? Slot : "button";
1506
1513
 
1507
- const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
1508
- ({ className, variant, size, asChild = false, ...props }, ref) => {
1509
- const Comp = asChild ? Slot : "button";
1510
- return (
1511
- <Comp
1512
- className={cn(buttonVariants({ variant, size, className }))}
1513
- ref={ref}
1514
- {...props}
1515
- />
1516
- );
1517
- },
1518
- );
1519
- Button.displayName = "Button";
1514
+ return (
1515
+ <Comp
1516
+ data-slot="button"
1517
+ data-variant={variant}
1518
+ data-size={size}
1519
+ className={cn(buttonVariants({ variant, size, className }))}
1520
+ {...props}
1521
+ />
1522
+ );
1523
+ }
1520
1524
 
1521
1525
  export { Button, buttonVariants };
1522
1526
 
@@ -1565,7 +1569,7 @@ function DialogOverlay({
1565
1569
  <DialogPrimitive.Overlay
1566
1570
  data-slot="dialog-overlay"
1567
1571
  className={cn(
1568
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 data-[state=closed]:animate-out data-[state=open]:animate-in",
1572
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in",
1569
1573
  className,
1570
1574
  )}
1571
1575
  {...props}
@@ -1576,24 +1580,32 @@ function DialogOverlay({
1576
1580
  function DialogContent({
1577
1581
  className,
1578
1582
  children,
1583
+ showCloseButton = true,
1579
1584
  ...props
1580
- }: React.ComponentProps<typeof DialogPrimitive.Content>) {
1585
+ }: React.ComponentProps<typeof DialogPrimitive.Content> & {
1586
+ showCloseButton?: boolean;
1587
+ }) {
1581
1588
  return (
1582
1589
  <DialogPortal data-slot="dialog-portal">
1583
1590
  <DialogOverlay />
1584
1591
  <DialogPrimitive.Content
1585
1592
  data-slot="dialog-content"
1586
1593
  className={cn(
1587
- "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg",
1594
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg",
1588
1595
  className,
1589
1596
  )}
1590
1597
  {...props}
1591
1598
  >
1592
1599
  {children}
1593
- <DialogPrimitive.Close className="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0">
1594
- <XIcon />
1595
- <span className="sr-only">Close</span>
1596
- </DialogPrimitive.Close>
1600
+ {showCloseButton && (
1601
+ <DialogPrimitive.Close
1602
+ data-slot="dialog-close"
1603
+ className="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0"
1604
+ >
1605
+ <XIcon />
1606
+ <span className="sr-only">Close</span>
1607
+ </DialogPrimitive.Close>
1608
+ )}
1597
1609
  </DialogPrimitive.Content>
1598
1610
  </DialogPortal>
1599
1611
  );
@@ -1714,13 +1726,13 @@ function TooltipContent({
1714
1726
  data-slot="tooltip-content"
1715
1727
  sideOffset={sideOffset}
1716
1728
  className={cn(
1717
- "fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 z-50 w-fit origin-[--radix-tooltip-content-transform-origin] animate-in text-balance rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs data-[state=closed]:animate-out",
1729
+ "fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in text-balance rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=closed]:animate-out",
1718
1730
  className,
1719
1731
  )}
1720
1732
  {...props}
1721
1733
  >
1722
1734
  {children}
1723
- <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary" />
1735
+ <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" />
1724
1736
  </TooltipPrimitive.Content>
1725
1737
  </TooltipPrimitive.Portal>
1726
1738
  );
@@ -1760,15 +1772,15 @@ export default nextConfig;
1760
1772
  ```json
1761
1773
  {
1762
1774
  "name": "with-parent-id-grouping",
1763
- "version": "0.1.0",
1775
+ "version": "0.0.0",
1764
1776
  "private": true,
1777
+ "type": "module",
1765
1778
  "scripts": {
1766
- "dev": "next dev --turbo",
1779
+ "dev": "next dev",
1767
1780
  "build": "next build",
1768
1781
  "start": "next start"
1769
1782
  },
1770
1783
  "dependencies": {
1771
- "@ai-sdk/openai": "^2.0.84",
1772
1784
  "@assistant-ui/react": "workspace:*",
1773
1785
  "@assistant-ui/react-markdown": "workspace:*",
1774
1786
  "@radix-ui/react-avatar": "^1.1.11",
@@ -1777,23 +1789,24 @@ export default nextConfig;
1777
1789
  "@radix-ui/react-tooltip": "^1.2.8",
1778
1790
  "class-variance-authority": "^0.7.1",
1779
1791
  "clsx": "^2.1.1",
1780
- "lucide-react": "^0.560.0",
1781
- "next": "16.0.10",
1792
+ "lucide-react": "^0.562.0",
1793
+ "next": "16.1.0",
1782
1794
  "react": "19.2.3",
1783
1795
  "react-dom": "19.2.3",
1784
1796
  "remark-gfm": "^4.0.1",
1785
1797
  "tailwind-merge": "^3.4.0",
1786
- "tw-animate-css": "^1.4.0",
1787
1798
  "zustand": "^5.0.9"
1788
1799
  },
1789
1800
  "devDependencies": {
1790
1801
  "@assistant-ui/x-buildutils": "workspace:*",
1791
- "@types/node": "^25",
1792
- "@types/react": "^19",
1793
- "@types/react-dom": "^19",
1794
- "postcss": "^8",
1802
+ "@tailwindcss/postcss": "^4.1.18",
1803
+ "@types/node": "^25.0.3",
1804
+ "@types/react": "^19.2.7",
1805
+ "@types/react-dom": "^19.2.3",
1806
+ "postcss": "^8.5.6",
1795
1807
  "tailwindcss": "^4.1.18",
1796
- "typescript": "^5"
1808
+ "tw-animate-css": "^1.4.0",
1809
+ "typescript": "^5.9.3"
1797
1810
  }
1798
1811
  }
1799
1812
 
@@ -1870,29 +1883,11 @@ This pattern is useful for:
1870
1883
 
1871
1884
  ```json
1872
1885
  {
1873
- "extends": "@assistant-ui/x-buildutils/ts/base",
1886
+ "extends": "@assistant-ui/x-buildutils/ts/next",
1874
1887
  "compilerOptions": {
1875
- "target": "ES6",
1876
- "module": "ESNext",
1877
- "incremental": true,
1878
- "plugins": [
1879
- {
1880
- "name": "next"
1881
- }
1882
- ],
1883
- "allowJs": true,
1884
- "strictNullChecks": true,
1885
- "jsx": "preserve",
1886
- "paths": {
1887
- "@/*": ["./*"],
1888
- "@assistant-ui/*": ["../../packages/*/src"],
1889
- "@assistant-ui/react/*": ["../../packages/react/src/*"],
1890
- "@assistant-ui/tap/*": ["../../packages/tap/src/*"],
1891
- "assistant-stream": ["../../packages/assistant-stream/src"],
1892
- "assistant-stream/*": ["../../packages/assistant-stream/src/*"]
1893
- }
1888
+ "paths": { "@/*": ["./*"] }
1894
1889
  },
1895
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1890
+ "include": ["**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1896
1891
  "exclude": ["node_modules"]
1897
1892
  }
1898
1893