@blocknote/shadcn 0.24.2 → 0.25.0

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.
@@ -0,0 +1,15 @@
1
+ import { cn } from "../../lib/utils";
2
+
3
+ function Skeleton({
4
+ className,
5
+ ...props
6
+ }: React.HTMLAttributes<HTMLDivElement>) {
7
+ return (
8
+ <div
9
+ className={cn("animate-pulse rounded-md bg-primary/10", className)}
10
+ {...props}
11
+ />
12
+ );
13
+ }
14
+
15
+ export { Skeleton };
package/src/components.ts CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  MenuLabel,
11
11
  MenuTrigger,
12
12
  } from "./menu/Menu.js";
13
+ import { MenuButton } from "./menu/Button.js";
13
14
  import { Panel } from "./panel/Panel.js";
14
15
  import { PanelTab } from "./panel/PanelTab.js";
15
16
  import { PanelTextInput } from "./panel/PanelTextInput.js";
@@ -26,6 +27,10 @@ import { SuggestionMenuLoader } from "./suggestionMenu/SuggestionMenuLoader.js";
26
27
  import { ExtendButton } from "./tableHandle/ExtendButton.js";
27
28
  import { TableHandle } from "./tableHandle/TableHandle.js";
28
29
  import { Toolbar, ToolbarButton, ToolbarSelect } from "./toolbar/Toolbar.js";
30
+ import { Card, CardSection } from "./comments/Card.js";
31
+ import { Comment } from "./comments/Comment.js";
32
+ import { Editor } from "./comments/Editor.js";
33
+ import { Badge, BadgeGroup } from "./badge/Badge.js";
29
34
 
30
35
  import { PanelButton } from "./panel/PanelButton.js";
31
36
  import { PanelFileInput } from "./panel/PanelFileInput.js";
@@ -71,7 +76,17 @@ export const components: Components = {
71
76
  Root: TableHandle,
72
77
  ExtendButton: ExtendButton,
73
78
  },
79
+ Comments: {
80
+ Comment: Comment,
81
+ Editor: Editor,
82
+ Card: Card,
83
+ CardSection: CardSection,
84
+ },
74
85
  Generic: {
86
+ Badge: {
87
+ Root: Badge,
88
+ Group: BadgeGroup,
89
+ },
75
90
  Toolbar: {
76
91
  Root: Toolbar,
77
92
  Button: ToolbarButton,
@@ -87,6 +102,7 @@ export const components: Components = {
87
102
  Divider: MenuDivider,
88
103
  Label: MenuLabel,
89
104
  Item: MenuItem,
105
+ Button: MenuButton,
90
106
  },
91
107
  Popover: {
92
108
  Root: Popover,
@@ -0,0 +1,45 @@
1
+ import { assertEmpty } from "@blocknote/core";
2
+ import { ComponentProps } from "@blocknote/react";
3
+ import { forwardRef } from "react";
4
+
5
+ import { cn } from "../lib/utils.js";
6
+ import { useShadCNComponentsContext } from "../ShadCNComponentsContext.js";
7
+
8
+ export const MenuButton = forwardRef<
9
+ HTMLButtonElement,
10
+ ComponentProps["Generic"]["Menu"]["Button"]
11
+ >((props, ref) => {
12
+ const {
13
+ className,
14
+ children,
15
+ icon,
16
+ onClick,
17
+ onDragEnd,
18
+ onDragStart,
19
+ draggable,
20
+ label,
21
+ ...rest
22
+ } = props;
23
+
24
+ // false, because rest props can be added by ariakit when button is used as a trigger
25
+ // assertEmpty in this case is only used at typescript level, not runtime level
26
+ assertEmpty(rest, false);
27
+
28
+ const ShadCNComponents = useShadCNComponentsContext()!;
29
+
30
+ return (
31
+ <ShadCNComponents.Button.Button
32
+ variant={"ghost"}
33
+ className={cn(className, "bn-text-gray-400")}
34
+ ref={ref}
35
+ aria-label={label}
36
+ onClick={onClick}
37
+ onDragStart={onDragStart}
38
+ onDragEnd={onDragEnd}
39
+ draggable={draggable}
40
+ {...rest}>
41
+ {icon}
42
+ {children}
43
+ </ShadCNComponents.Button.Button>
44
+ );
45
+ });
package/src/menu/Menu.tsx CHANGED
@@ -56,7 +56,9 @@ export const Menu = (props: ComponentProps["Generic"]["Menu"]["Root"]) => {
56
56
  );
57
57
  } else {
58
58
  return (
59
- <ShadCNComponents.DropdownMenu.DropdownMenu onOpenChange={onOpenChange}>
59
+ <ShadCNComponents.DropdownMenu.DropdownMenu
60
+ modal={false}
61
+ onOpenChange={onOpenChange}>
60
62
  {children}
61
63
  </ShadCNComponents.DropdownMenu.DropdownMenu>
62
64
  );
@@ -147,7 +149,7 @@ export const MenuItem = forwardRef<
147
149
  if (checked !== undefined) {
148
150
  return (
149
151
  <ShadCNComponents.DropdownMenu.DropdownMenuCheckboxItem
150
- className={cn(className, "bn-gap-1")}
152
+ className={cn(className, "bn-gap-1", checked ? "" : "bn-px-2")}
151
153
  ref={ref}
152
154
  checked={checked}
153
155
  onClick={onClick}
package/src/style.css CHANGED
@@ -173,3 +173,13 @@
173
173
  overflow-x: auto;
174
174
  max-width: 100vw;
175
175
  }
176
+
177
+ .bn-shadcn .bn-comment-actions-wrapper {
178
+ display: flex;
179
+ justify-content: flex-end;
180
+ }
181
+
182
+ .bn-shadcn .bn-table-cell-handle {
183
+ padding: 0 4px;
184
+ height: 12px;
185
+ }
@@ -10,7 +10,14 @@ type ToolbarProps = ComponentProps["FormattingToolbar"]["Root"] &
10
10
 
11
11
  export const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(
12
12
  (props, ref) => {
13
- const { className, children, onMouseEnter, onMouseLeave, ...rest } = props;
13
+ const {
14
+ className,
15
+ children,
16
+ onMouseEnter,
17
+ onMouseLeave,
18
+ variant,
19
+ ...rest
20
+ } = props;
14
21
 
15
22
  assertEmpty(rest);
16
23
 
@@ -21,7 +28,8 @@ export const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(
21
28
  <div
22
29
  className={cn(
23
30
  className,
24
- "bn-flex bn-gap-1 bn-p-1 bn-bg-popover bn-text-popover-foreground bn-border bn-rounded-lg bn-shadow-md"
31
+ "bn-flex bn-gap-1 bn-p-1 bn-bg-popover bn-text-popover-foreground bn-border bn-rounded-lg bn-shadow-md bn-h-fit",
32
+ variant === "action-toolbar" ? "bn-w-fit" : ""
25
33
  )}
26
34
  ref={ref}
27
35
  onMouseEnter={onMouseEnter}
@@ -48,6 +56,7 @@ export const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(
48
56
  isDisabled,
49
57
  onClick,
50
58
  label,
59
+ variant,
51
60
  ...rest
52
61
  } = props;
53
62
 
@@ -60,8 +69,12 @@ export const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(
60
69
  const trigger =
61
70
  isSelected === undefined ? (
62
71
  <ShadCNComponents.Button.Button
63
- className={className}
72
+ className={cn(
73
+ className,
74
+ variant === "compact" ? "bn-h-6 bn-min-w-6 bn-p-0" : ""
75
+ )}
64
76
  variant="ghost"
77
+ size={variant === "compact" ? "sm" : "default"}
65
78
  disabled={isDisabled}
66
79
  onClick={onClick}
67
80
  ref={ref}
@@ -74,8 +87,10 @@ export const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(
74
87
  <ShadCNComponents.Toggle.Toggle
75
88
  className={cn(
76
89
  className,
77
- "data-[state=open]:bg-accent data-[state=closed]:text-accent-foreground"
90
+ "data-[state=open]:bg-accent data-[state=closed]:text-accent-foreground",
91
+ variant === "compact" ? "bn-h-6 bn-min-w-6 bn-p-0" : ""
78
92
  )}
93
+ size={variant === "compact" ? "sm" : "default"}
79
94
  aria-label={label}
80
95
  onClick={onClick}
81
96
  pressed={isSelected}
@@ -95,7 +110,9 @@ export const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(
95
110
  {trigger}
96
111
  </ShadCNComponents.Tooltip.TooltipTrigger>
97
112
  <ShadCNComponents.Tooltip.TooltipContent
98
- className={"bn-flex bn-flex-col bn-items-center"}>
113
+ className={
114
+ "bn-flex bn-flex-col bn-items-center bn-whitespace-pre-wrap"
115
+ }>
99
116
  <span>{mainTooltip}</span>
100
117
  {secondaryTooltip && <span>{secondaryTooltip}</span>}
101
118
  </ShadCNComponents.Tooltip.TooltipContent>
@@ -1,6 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import { Badge as ShadCNBadge } from "./components/ui/badge.js";
3
+ import { Skeleton as ShadCNSkeleton } from "./components/ui/skeleton.js";
3
4
  export declare const ShadCNDefaultComponents: {
5
+ Avatar: {
6
+ Avatar: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
7
+ AvatarFallback: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarFallbackProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
8
+ AvatarImage: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarImageProps & import("react").RefAttributes<HTMLImageElement>, "ref"> & import("react").RefAttributes<HTMLImageElement>>;
9
+ };
4
10
  Badge: {
5
11
  Badge: typeof ShadCNBadge;
6
12
  };
@@ -50,6 +56,9 @@ export declare const ShadCNDefaultComponents: {
50
56
  SelectTrigger: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-select").SelectTriggerProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
51
57
  SelectValue: import("react").ForwardRefExoticComponent<import("@radix-ui/react-select").SelectValueProps & import("react").RefAttributes<HTMLSpanElement>>;
52
58
  };
59
+ Skeleton: {
60
+ Skeleton: typeof ShadCNSkeleton;
61
+ };
53
62
  Tabs: {
54
63
  Tabs: import("react").ForwardRefExoticComponent<import("@radix-ui/react-tabs").TabsProps & import("react").RefAttributes<HTMLDivElement>>;
55
64
  TabsContent: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -71,6 +80,11 @@ export declare const ShadCNDefaultComponents: {
71
80
  };
72
81
  export type ShadCNComponents = typeof ShadCNDefaultComponents;
73
82
  export declare const ShadCNComponentsContext: import("react").Context<{
83
+ Avatar: {
84
+ Avatar: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
85
+ AvatarFallback: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarFallbackProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
86
+ AvatarImage: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarImageProps & import("react").RefAttributes<HTMLImageElement>, "ref"> & import("react").RefAttributes<HTMLImageElement>>;
87
+ };
74
88
  Badge: {
75
89
  Badge: typeof ShadCNBadge;
76
90
  };
@@ -120,6 +134,9 @@ export declare const ShadCNComponentsContext: import("react").Context<{
120
134
  SelectTrigger: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-select").SelectTriggerProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
121
135
  SelectValue: import("react").ForwardRefExoticComponent<import("@radix-ui/react-select").SelectValueProps & import("react").RefAttributes<HTMLSpanElement>>;
122
136
  };
137
+ Skeleton: {
138
+ Skeleton: typeof ShadCNSkeleton;
139
+ };
123
140
  Tabs: {
124
141
  Tabs: import("react").ForwardRefExoticComponent<import("@radix-ui/react-tabs").TabsProps & import("react").RefAttributes<HTMLDivElement>>;
125
142
  TabsContent: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -140,6 +157,11 @@ export declare const ShadCNComponentsContext: import("react").Context<{
140
157
  };
141
158
  } | undefined>;
142
159
  export declare function useShadCNComponentsContext(): {
160
+ Avatar: {
161
+ Avatar: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
162
+ AvatarFallback: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarFallbackProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
163
+ AvatarImage: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-avatar").AvatarImageProps & import("react").RefAttributes<HTMLImageElement>, "ref"> & import("react").RefAttributes<HTMLImageElement>>;
164
+ };
143
165
  Badge: {
144
166
  Badge: typeof ShadCNBadge;
145
167
  };
@@ -189,6 +211,9 @@ export declare function useShadCNComponentsContext(): {
189
211
  SelectTrigger: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-select").SelectTriggerProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
190
212
  SelectValue: import("react").ForwardRefExoticComponent<import("@radix-ui/react-select").SelectValueProps & import("react").RefAttributes<HTMLSpanElement>>;
191
213
  };
214
+ Skeleton: {
215
+ Skeleton: typeof ShadCNSkeleton;
216
+ };
192
217
  Tabs: {
193
218
  Tabs: import("react").ForwardRefExoticComponent<import("@radix-ui/react-tabs").TabsProps & import("react").RefAttributes<HTMLDivElement>>;
194
219
  TabsContent: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ export declare const Badge: import("react").ForwardRefExoticComponent<{
3
+ className?: string | undefined;
4
+ text: string;
5
+ icon?: import("react").ReactNode;
6
+ isSelected?: boolean | undefined;
7
+ mainTooltip?: string | undefined;
8
+ secondaryTooltip?: string | undefined;
9
+ onClick?: ((event: import("react").MouseEvent<Element, MouseEvent>) => void) | undefined;
10
+ onMouseEnter?: (() => void) | undefined;
11
+ } & import("react").RefAttributes<HTMLButtonElement>>;
12
+ export declare const BadgeGroup: import("react").ForwardRefExoticComponent<{
13
+ className?: string | undefined;
14
+ children: import("react").ReactNode;
15
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ export declare const Card: import("react").ForwardRefExoticComponent<{
3
+ className?: string | undefined;
4
+ children?: import("react").ReactNode;
5
+ } & import("react").RefAttributes<HTMLDivElement>>;
6
+ export declare const CardSection: import("react").ForwardRefExoticComponent<{
7
+ className?: string | undefined;
8
+ children?: import("react").ReactNode;
9
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ export declare const Comment: import("react").ForwardRefExoticComponent<{
3
+ className?: string | undefined;
4
+ children?: import("react").ReactNode;
5
+ authorInfo: "loading" | import("@blocknote/core/types/src/comments/index.js").User;
6
+ timeString: string;
7
+ actions?: import("react").ReactNode;
8
+ showActions?: boolean | "hover" | undefined;
9
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export declare const Editor: import("react").ForwardRefExoticComponent<{
3
+ className?: string | undefined;
4
+ editable: boolean;
5
+ editor: import("@blocknote/core").BlockNoteEditor<any, any, any>;
6
+ onFocus?: (() => void) | undefined;
7
+ onBlur?: (() => void) | undefined;
8
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
3
+ declare const Avatar: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
4
+ declare const AvatarImage: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React.RefAttributes<HTMLImageElement>, "ref"> & React.RefAttributes<HTMLImageElement>>;
5
+ declare const AvatarFallback: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
6
+ export { Avatar, AvatarImage, AvatarFallback };
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
2
  import * as React from "react";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "default" | "secondary" | "destructive" | "outline" | "link" | "ghost" | null | undefined;
4
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
5
5
  size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
6
  } & import("class-variance-authority/dist/types.js").ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
3
+ export { Skeleton };
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ export declare const MenuButton: import("react").ForwardRefExoticComponent<({
3
+ className?: string | undefined;
4
+ onClick?: ((e: import("react").MouseEvent<Element, MouseEvent>) => void) | undefined;
5
+ icon?: import("react").ReactNode;
6
+ onDragStart?: ((e: import("react").DragEvent<Element>) => void) | undefined;
7
+ onDragEnd?: ((e: import("react").DragEvent<Element>) => void) | undefined;
8
+ draggable?: boolean | undefined;
9
+ } & ({
10
+ children: import("react").ReactNode;
11
+ label?: string | undefined;
12
+ } | {
13
+ children?: undefined;
14
+ label: string;
15
+ })) & import("react").RefAttributes<HTMLButtonElement>>;
@@ -4,15 +4,17 @@ export declare const Toolbar: import("react").ForwardRefExoticComponent<{
4
4
  children?: import("react").ReactNode;
5
5
  onMouseEnter?: (() => void) | undefined;
6
6
  onMouseLeave?: (() => void) | undefined;
7
+ variant?: "default" | "action-toolbar" | undefined;
7
8
  } & import("react").RefAttributes<HTMLDivElement>>;
8
9
  export declare const ToolbarButton: import("react").ForwardRefExoticComponent<({
9
10
  className?: string | undefined;
10
- mainTooltip: string;
11
+ mainTooltip?: string | undefined;
11
12
  secondaryTooltip?: string | undefined;
12
13
  icon?: import("react").ReactNode;
13
14
  onClick?: ((e: import("react").MouseEvent<Element, MouseEvent>) => void) | undefined;
14
15
  isSelected?: boolean | undefined;
15
16
  isDisabled?: boolean | undefined;
17
+ variant?: "default" | "compact" | undefined;
16
18
  } & ({
17
19
  children: import("react").ReactNode;
18
20
  label?: string | undefined;