@blocknote/ariakit 0.13.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.
Files changed (52) hide show
  1. package/LICENSE +373 -0
  2. package/dist/blocknote-ariakit.js +1146 -0
  3. package/dist/blocknote-ariakit.js.map +1 -0
  4. package/dist/blocknote-ariakit.umd.cjs +28 -0
  5. package/dist/blocknote-ariakit.umd.cjs.map +1 -0
  6. package/dist/style.css +1 -0
  7. package/dist/webpack-stats.json +1 -0
  8. package/package.json +84 -0
  9. package/src/ariakitStyles.css +1005 -0
  10. package/src/index.tsx +103 -0
  11. package/src/input/Form.tsx +12 -0
  12. package/src/input/TextInput.tsx +48 -0
  13. package/src/menu/Menu.tsx +130 -0
  14. package/src/panel/Panel.tsx +55 -0
  15. package/src/panel/PanelButton.tsx +24 -0
  16. package/src/panel/PanelFileInput.tsx +28 -0
  17. package/src/panel/PanelTab.tsx +18 -0
  18. package/src/panel/PanelTextInput.tsx +29 -0
  19. package/src/popover/Popover.tsx +47 -0
  20. package/src/sideMenu/SideMenu.tsx +20 -0
  21. package/src/sideMenu/SideMenuButton.tsx +44 -0
  22. package/src/style.css +136 -0
  23. package/src/suggestionMenu/SuggestionMenu.tsx +24 -0
  24. package/src/suggestionMenu/SuggestionMenuEmptyItem.tsx +20 -0
  25. package/src/suggestionMenu/SuggestionMenuItem.tsx +43 -0
  26. package/src/suggestionMenu/SuggestionMenuLabel.tsx +20 -0
  27. package/src/suggestionMenu/SuggestionMenuLoader.tsx +18 -0
  28. package/src/tableHandle/TableHandle.tsx +42 -0
  29. package/src/toolbar/Toolbar.tsx +26 -0
  30. package/src/toolbar/ToolbarButton.tsx +73 -0
  31. package/src/toolbar/ToolbarSelect.tsx +47 -0
  32. package/types/src/index.d.ts +6 -0
  33. package/types/src/input/Form.d.ts +2 -0
  34. package/types/src/input/TextInput.d.ts +13 -0
  35. package/types/src/menu/Menu.d.ts +24 -0
  36. package/types/src/panel/Panel.d.ts +12 -0
  37. package/types/src/panel/PanelButton.d.ts +11 -0
  38. package/types/src/panel/PanelFileInput.d.ts +7 -0
  39. package/types/src/panel/PanelTab.d.ts +5 -0
  40. package/types/src/panel/PanelTextInput.d.ts +8 -0
  41. package/types/src/popover/Popover.d.ts +11 -0
  42. package/types/src/sideMenu/SideMenu.d.ts +5 -0
  43. package/types/src/sideMenu/SideMenuButton.d.ts +15 -0
  44. package/types/src/suggestionMenu/SuggestionMenu.d.ts +6 -0
  45. package/types/src/suggestionMenu/SuggestionMenuEmptyItem.d.ts +5 -0
  46. package/types/src/suggestionMenu/SuggestionMenuItem.d.ts +8 -0
  47. package/types/src/suggestionMenu/SuggestionMenuLabel.d.ts +5 -0
  48. package/types/src/suggestionMenu/SuggestionMenuLoader.d.ts +5 -0
  49. package/types/src/tableHandle/TableHandle.d.ts +14 -0
  50. package/types/src/toolbar/Toolbar.d.ts +10 -0
  51. package/types/src/toolbar/ToolbarButton.d.ts +8 -0
  52. package/types/src/toolbar/ToolbarSelect.d.ts +12 -0
package/src/index.tsx ADDED
@@ -0,0 +1,103 @@
1
+ import { BlockSchema, InlineContentSchema, StyleSchema } from "@blocknote/core";
2
+ import {
3
+ BlockNoteViewRaw,
4
+ Components,
5
+ ComponentsContext,
6
+ } from "@blocknote/react";
7
+ import { ComponentProps } from "react";
8
+
9
+ import { Form } from "./input/Form";
10
+ import { TextInput } from "./input/TextInput";
11
+ import {
12
+ Menu,
13
+ MenuDivider,
14
+ MenuDropdown,
15
+ MenuItem,
16
+ MenuLabel,
17
+ MenuTrigger,
18
+ } from "./menu/Menu";
19
+ import { Panel } from "./panel/Panel";
20
+ import { PanelButton } from "./panel/PanelButton";
21
+ import { PanelFileInput } from "./panel/PanelFileInput";
22
+ import { PanelTab } from "./panel/PanelTab";
23
+ import { PanelTextInput } from "./panel/PanelTextInput";
24
+ import { Popover, PopoverContent, PopoverTrigger } from "./popover/Popover";
25
+ import { SideMenu } from "./sideMenu/SideMenu";
26
+ import { SideMenuButton } from "./sideMenu/SideMenuButton";
27
+ import { SuggestionMenu } from "./suggestionMenu/SuggestionMenu";
28
+ import { SuggestionMenuItem } from "./suggestionMenu/SuggestionMenuItem";
29
+ import { SuggestionMenuEmptyItem } from "./suggestionMenu/SuggestionMenuEmptyItem";
30
+ import { SuggestionMenuLabel } from "./suggestionMenu/SuggestionMenuLabel";
31
+ import { SuggestionMenuLoader } from "./suggestionMenu/SuggestionMenuLoader";
32
+ import { TableHandle } from "./tableHandle/TableHandle";
33
+ import { Toolbar } from "./toolbar/Toolbar";
34
+ import { ToolbarButton } from "./toolbar/ToolbarButton";
35
+ import { ToolbarSelect } from "./toolbar/ToolbarSelect";
36
+
37
+ import "./style.css";
38
+
39
+ export const components: Components = {
40
+ FormattingToolbar: {
41
+ Root: Toolbar,
42
+ Button: ToolbarButton,
43
+ Select: ToolbarSelect,
44
+ },
45
+ ImagePanel: {
46
+ Root: Panel,
47
+ Button: PanelButton,
48
+ FileInput: PanelFileInput,
49
+ TabPanel: PanelTab,
50
+ TextInput: PanelTextInput,
51
+ },
52
+ LinkToolbar: {
53
+ Root: Toolbar,
54
+ Button: ToolbarButton,
55
+ },
56
+ SideMenu: {
57
+ Root: SideMenu,
58
+ Button: SideMenuButton,
59
+ },
60
+ SuggestionMenu: {
61
+ Root: SuggestionMenu,
62
+ Item: SuggestionMenuItem,
63
+ EmptyItem: SuggestionMenuEmptyItem,
64
+ Label: SuggestionMenuLabel,
65
+ Loader: SuggestionMenuLoader,
66
+ },
67
+ TableHandle: {
68
+ Root: TableHandle,
69
+ },
70
+ Generic: {
71
+ Form: {
72
+ Root: Form,
73
+ TextInput: TextInput,
74
+ },
75
+ Menu: {
76
+ Root: Menu,
77
+ Trigger: MenuTrigger,
78
+ Dropdown: MenuDropdown,
79
+ Divider: MenuDivider,
80
+ Label: MenuLabel,
81
+ Item: MenuItem,
82
+ },
83
+ Popover: {
84
+ Root: Popover,
85
+ Trigger: PopoverTrigger,
86
+ Content: PopoverContent,
87
+ },
88
+ },
89
+ };
90
+
91
+ export const BlockNoteView = <
92
+ BSchema extends BlockSchema,
93
+ ISchema extends InlineContentSchema,
94
+ SSchema extends StyleSchema
95
+ >(
96
+ props: ComponentProps<typeof BlockNoteViewRaw<BSchema, ISchema, SSchema>>
97
+ ) => {
98
+ return (
99
+ <ComponentsContext.Provider value={components}>
100
+ <BlockNoteViewRaw {...props} />
101
+ </ComponentsContext.Provider>
102
+ );
103
+ };
@@ -0,0 +1,12 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+ import { assertEmpty } from "@blocknote/core";
3
+
4
+ import { ComponentProps } from "@blocknote/react";
5
+
6
+ export const Form = (props: ComponentProps["Generic"]["Form"]["Root"]) => {
7
+ const { children, ...rest } = props;
8
+
9
+ assertEmpty(rest);
10
+
11
+ return <Ariakit.FormProvider>{children}</Ariakit.FormProvider>;
12
+ };
@@ -0,0 +1,48 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const TextInput = forwardRef<
8
+ HTMLInputElement,
9
+ ComponentProps["Generic"]["Form"]["TextInput"]
10
+ >((props, ref) => {
11
+ const {
12
+ className,
13
+ name,
14
+ label,
15
+ icon,
16
+ value,
17
+ autoFocus,
18
+ placeholder,
19
+ onKeyDown,
20
+ onChange,
21
+ onSubmit,
22
+ ...rest
23
+ } = props;
24
+
25
+ assertEmpty(rest);
26
+
27
+ return (
28
+ <>
29
+ {props.label && (
30
+ <Ariakit.FormLabel name={name}>{label}</Ariakit.FormLabel>
31
+ )}
32
+ <div className="bn-ak-input-wrapper">
33
+ {icon}
34
+ <Ariakit.FormInput
35
+ className={mergeCSSClasses("bn-ak-input", className || "")}
36
+ ref={ref}
37
+ name={name}
38
+ value={value}
39
+ autoFocus={autoFocus}
40
+ placeholder={placeholder}
41
+ onKeyDown={onKeyDown}
42
+ onChange={onChange}
43
+ onSubmit={onSubmit}
44
+ />
45
+ </div>
46
+ </>
47
+ );
48
+ });
@@ -0,0 +1,130 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const Menu = (props: ComponentProps["Generic"]["Menu"]["Root"]) => {
8
+ const {
9
+ children,
10
+ onOpenChange,
11
+ position,
12
+ sub, // unused
13
+ ...rest
14
+ } = props;
15
+
16
+ assertEmpty(rest);
17
+
18
+ return (
19
+ <Ariakit.MenuProvider
20
+ placement={position}
21
+ setOpen={onOpenChange}
22
+ virtualFocus={true}>
23
+ {children}
24
+ </Ariakit.MenuProvider>
25
+ );
26
+ };
27
+
28
+ export const MenuDropdown = forwardRef<
29
+ HTMLDivElement,
30
+ ComponentProps["Generic"]["Menu"]["Dropdown"]
31
+ >((props, ref) => {
32
+ const {
33
+ className,
34
+ children,
35
+ sub, // unused
36
+ ...rest
37
+ } = props;
38
+
39
+ assertEmpty(rest);
40
+
41
+ return (
42
+ <Ariakit.Menu
43
+ className={mergeCSSClasses("bn-ak-menu", className || "")}
44
+ ref={ref}>
45
+ {children}
46
+ </Ariakit.Menu>
47
+ );
48
+ });
49
+
50
+ export const MenuItem = forwardRef<
51
+ HTMLDivElement,
52
+ ComponentProps["Generic"]["Menu"]["Item"]
53
+ >((props, ref) => {
54
+ const { className, children, icon, checked, subTrigger, onClick, ...rest } =
55
+ props;
56
+
57
+ assertEmpty(rest);
58
+
59
+ if (subTrigger) {
60
+ return (
61
+ <Ariakit.MenuButton
62
+ render={<Ariakit.MenuItem />}
63
+ className={mergeCSSClasses("bn-ak-menu-item", className || "")}
64
+ ref={ref}
65
+ onClick={onClick}>
66
+ {icon}
67
+ {children}
68
+ <Ariakit.MenuButtonArrow />
69
+ {checked !== undefined && <Ariakit.CheckboxCheck checked={checked} />}
70
+ </Ariakit.MenuButton>
71
+ );
72
+ }
73
+ return (
74
+ <Ariakit.MenuItem
75
+ className={mergeCSSClasses("bn-ak-menu-item", className || "")}
76
+ ref={ref}
77
+ onClick={onClick}>
78
+ {icon}
79
+ {children}
80
+ {checked !== undefined && <Ariakit.CheckboxCheck checked={checked} />}
81
+ </Ariakit.MenuItem>
82
+ );
83
+ });
84
+
85
+ export const MenuLabel = forwardRef<
86
+ HTMLDivElement,
87
+ ComponentProps["Generic"]["Menu"]["Label"]
88
+ >((props, ref) => {
89
+ const { className, children, ...rest } = props;
90
+
91
+ assertEmpty(rest);
92
+
93
+ return (
94
+ <Ariakit.MenuGroupLabel
95
+ className={mergeCSSClasses("bn-ak-group-label", className || "")}
96
+ ref={ref}>
97
+ {children}
98
+ </Ariakit.MenuGroupLabel>
99
+ );
100
+ });
101
+
102
+ export const MenuTrigger = (
103
+ props: ComponentProps["Generic"]["Menu"]["Trigger"]
104
+ ) => {
105
+ const { children, sub, ...rest } = props;
106
+
107
+ assertEmpty(rest);
108
+
109
+ if (sub) {
110
+ return children;
111
+ }
112
+
113
+ return <Ariakit.MenuButton render={children as any}></Ariakit.MenuButton>;
114
+ };
115
+
116
+ export const MenuDivider = forwardRef<
117
+ HTMLHRElement,
118
+ ComponentProps["Generic"]["Menu"]["Divider"]
119
+ >((props, ref) => {
120
+ const { className, ...rest } = props;
121
+
122
+ assertEmpty(rest);
123
+
124
+ return (
125
+ <Ariakit.MenuSeparator
126
+ className={mergeCSSClasses("bn-ak-separator", className || "")}
127
+ ref={ref}
128
+ />
129
+ );
130
+ });
@@ -0,0 +1,55 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const Panel = forwardRef<
8
+ HTMLDivElement,
9
+ ComponentProps["ImagePanel"]["Root"]
10
+ >((props, ref) => {
11
+ const {
12
+ className,
13
+ tabs,
14
+ defaultOpenTab,
15
+ openTab,
16
+ setOpenTab,
17
+ loading, // TODO: implement loading
18
+ ...rest
19
+ } = props;
20
+
21
+ assertEmpty(rest);
22
+
23
+ return (
24
+ <div
25
+ className={mergeCSSClasses("bn-ak-wrapper", className || "")}
26
+ ref={ref}>
27
+ <Ariakit.TabProvider
28
+ defaultSelectedId={defaultOpenTab}
29
+ selectedId={openTab}
30
+ setActiveId={(activeId) => {
31
+ if (activeId) {
32
+ setOpenTab(activeId);
33
+ }
34
+ }}>
35
+ {/*{loading && <LoadingOverlay visible={loading} />}*/}
36
+
37
+ <Ariakit.TabList className={"bn-ak-tab-list"}>
38
+ {tabs.map((tab) => (
39
+ <Ariakit.Tab className={"bn-ak-tab"} id={tab.name} key={tab.name}>
40
+ {tab.name}
41
+ </Ariakit.Tab>
42
+ ))}
43
+ </Ariakit.TabList>
44
+
45
+ <div className={"bn-ak-panels"}>
46
+ {tabs.map((tab) => (
47
+ <Ariakit.TabPanel tabId={tab.name} key={tab.name}>
48
+ {tab.tabPanel}
49
+ </Ariakit.TabPanel>
50
+ ))}
51
+ </div>
52
+ </Ariakit.TabProvider>
53
+ </div>
54
+ );
55
+ });
@@ -0,0 +1,24 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const PanelButton = forwardRef<
8
+ HTMLButtonElement,
9
+ ComponentProps["ImagePanel"]["Button"]
10
+ >((props, ref) => {
11
+ const { className, children, onClick, label, ...rest } = props;
12
+
13
+ assertEmpty(rest);
14
+
15
+ return (
16
+ <Ariakit.Button
17
+ className={mergeCSSClasses("bn-ak-button", className || "")}
18
+ onClick={onClick}
19
+ aria-label={label}
20
+ ref={ref}>
21
+ {children}
22
+ </Ariakit.Button>
23
+ );
24
+ });
@@ -0,0 +1,28 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+ import { assertEmpty } from "@blocknote/core";
3
+
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const PanelFileInput = forwardRef<
8
+ HTMLInputElement,
9
+ ComponentProps["ImagePanel"]["FileInput"]
10
+ >((props, ref) => {
11
+ const { className, value, placeholder, onChange, ...rest } = props;
12
+
13
+ assertEmpty(rest);
14
+
15
+ return (
16
+ <Ariakit.FormProvider>
17
+ <Ariakit.FormInput
18
+ className={className}
19
+ ref={ref}
20
+ name={"panel-input"}
21
+ type={"file"}
22
+ value={value ? value.name : undefined}
23
+ onChange={async (e) => onChange?.(e.target.files![0])}
24
+ placeholder={placeholder}
25
+ />
26
+ </Ariakit.FormProvider>
27
+ );
28
+ });
@@ -0,0 +1,18 @@
1
+ import { assertEmpty } from "@blocknote/core";
2
+ import { ComponentProps } from "@blocknote/react";
3
+ import { forwardRef } from "react";
4
+
5
+ export const PanelTab = forwardRef<
6
+ HTMLDivElement,
7
+ ComponentProps["ImagePanel"]["TabPanel"]
8
+ >((props, ref) => {
9
+ const { className, children, ...rest } = props;
10
+
11
+ assertEmpty(rest);
12
+
13
+ return (
14
+ <div className={className} ref={ref}>
15
+ {children}
16
+ </div>
17
+ );
18
+ });
@@ -0,0 +1,29 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const PanelTextInput = forwardRef<
8
+ HTMLInputElement,
9
+ ComponentProps["ImagePanel"]["TextInput"]
10
+ >((props, ref) => {
11
+ const { className, value, placeholder, onKeyDown, onChange, ...rest } = props;
12
+
13
+ assertEmpty(rest);
14
+
15
+ return (
16
+ <Ariakit.FormProvider>
17
+ <Ariakit.FormInput
18
+ className={mergeCSSClasses("bn-ak-input", className || "")}
19
+ name={"panel-input"}
20
+ value={value}
21
+ placeholder={placeholder}
22
+ onChange={onChange}
23
+ onKeyDown={onKeyDown}
24
+ data-test={"embed-input"}
25
+ ref={ref}
26
+ />
27
+ </Ariakit.FormProvider>
28
+ );
29
+ });
@@ -0,0 +1,47 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const PopoverTrigger = forwardRef<
8
+ HTMLButtonElement,
9
+ ComponentProps["Generic"]["Popover"]["Trigger"]
10
+ >((props, ref) => {
11
+ const { children, ...rest } = props;
12
+
13
+ assertEmpty(rest);
14
+
15
+ return <Ariakit.PopoverDisclosure render={children as any} ref={ref} />;
16
+ });
17
+
18
+ export const PopoverContent = forwardRef<
19
+ HTMLDivElement,
20
+ ComponentProps["Generic"]["Popover"]["Content"]
21
+ >((props, ref) => {
22
+ const { className, children, variant, ...rest } = props;
23
+
24
+ assertEmpty(rest);
25
+
26
+ return (
27
+ <Ariakit.Popover
28
+ className={mergeCSSClasses("bn-ak-popover", className || "")}
29
+ ref={ref}>
30
+ {children}
31
+ </Ariakit.Popover>
32
+ );
33
+ });
34
+
35
+ export const Popover = (
36
+ props: ComponentProps["Generic"]["Popover"]["Root"]
37
+ ) => {
38
+ const { children, opened, position, ...rest } = props;
39
+
40
+ assertEmpty(rest);
41
+
42
+ return (
43
+ <Ariakit.PopoverProvider open={opened} placement={position}>
44
+ {children}
45
+ </Ariakit.PopoverProvider>
46
+ );
47
+ };
@@ -0,0 +1,20 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+ import { assertEmpty } from "@blocknote/core";
3
+
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const SideMenu = forwardRef<
8
+ HTMLDivElement,
9
+ ComponentProps["SideMenu"]["Root"]
10
+ >((props, ref) => {
11
+ const { className, children, ...rest } = props;
12
+
13
+ assertEmpty(rest);
14
+
15
+ return (
16
+ <Ariakit.Group className={className} ref={ref}>
17
+ {children}
18
+ </Ariakit.Group>
19
+ );
20
+ });
@@ -0,0 +1,44 @@
1
+ import * as Ariakit from "@ariakit/react";
2
+
3
+ import { assertEmpty, mergeCSSClasses } from "@blocknote/core";
4
+ import { ComponentProps } from "@blocknote/react";
5
+ import { forwardRef } from "react";
6
+
7
+ export const SideMenuButton = forwardRef<
8
+ HTMLButtonElement,
9
+ ComponentProps["SideMenu"]["Button"]
10
+ >((props, ref) => {
11
+ const {
12
+ className,
13
+ children,
14
+ icon,
15
+ onClick,
16
+ label,
17
+ onDragEnd,
18
+ onDragStart,
19
+ draggable,
20
+ ...rest
21
+ } = props;
22
+
23
+ // false, because rest props can be added by ariakit when button is used as a trigger
24
+ // assertEmpty in this case is only used at typescript level, not runtime level
25
+ assertEmpty(rest, false);
26
+
27
+ return (
28
+ <Ariakit.Button
29
+ onDragEnd={onDragEnd}
30
+ onDragStart={onDragStart}
31
+ draggable={draggable}
32
+ aria-label={label}
33
+ className={mergeCSSClasses(
34
+ "bn-ak-button bn-ak-secondary",
35
+ className || ""
36
+ )}
37
+ ref={ref}
38
+ onClick={onClick}
39
+ {...rest}>
40
+ {icon}
41
+ {children}
42
+ </Ariakit.Button>
43
+ );
44
+ });
package/src/style.css ADDED
@@ -0,0 +1,136 @@
1
+ @import url("@blocknote/react/style.css");
2
+
3
+ /* This file contains BlockNote-specific fixes for the styles in
4
+ ariakitStyles.css. */
5
+
6
+ @import "./ariakitStyles.css";
7
+
8
+ .bn-ak-input-wrapper {
9
+ align-items: center;
10
+ display: flex;
11
+ gap: 0.5rem;
12
+ }
13
+
14
+ .bn-toolbar .bn-ak-button {
15
+ width: unset;
16
+ }
17
+
18
+ .bn-toolbar .bn-ak-button[data-selected] {
19
+ padding-top: 0.125rem;
20
+ box-shadow: inset 0 0 0 1px var(--border), inset 0 2px 0 var(--border);
21
+ }
22
+
23
+ .bn-toolbar .bn-ak-button[data-selected]:where(.dark, .dark *) {
24
+ box-shadow: inset 0 0 0 1px var(--border), inset 0 1px 1px 1px var(--shadow);
25
+ }
26
+
27
+ .bn-toolbar .bn-ak-popover {
28
+ gap: 0.5rem;
29
+ }
30
+
31
+ .bn-tab-panel {
32
+ align-items: center;
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 0.5rem;
36
+ }
37
+
38
+ .bn-file-input {
39
+ max-width: 100%;
40
+ }
41
+
42
+ .bn-ak-button {
43
+ outline-style: none;
44
+ }
45
+
46
+ .bn-ak-menu-item[aria-selected="true"],
47
+ .bn-ak-menu-item:hover {
48
+ background-color: hsl(204 100% 40%);
49
+ color: hsl(204 20% 100%);
50
+ }
51
+
52
+ .bn-ak-menu-item {
53
+ display: flex;
54
+ }
55
+
56
+ .bn-dropdown {
57
+ overflow: visible;
58
+ }
59
+
60
+ .bn-suggestion-menu,
61
+ .bn-color-picker-dropdown {
62
+ overflow: scroll;
63
+ }
64
+
65
+ .bn-ak-suggestion-menu-item-body {
66
+ flex: 1;
67
+ }
68
+
69
+ .bn-ak-suggestion-menu-item-subtitle {
70
+ font-size: 0.7rem;
71
+ }
72
+
73
+ .bn-ak-suggestion-menu-item-section[data-position="left"] {
74
+ padding: 8px;
75
+ }
76
+
77
+ .bn-ak-suggestion-menu-item-section[data-position="right"] {
78
+ --border: rgb(0 0 0/13%);
79
+ --highlight: rgb(255 255 255/20%);
80
+ --shadow: rgb(0 0 0/10%);
81
+ box-shadow: inset 0 0 0 1px var(--border), inset 0 2px 0 var(--highlight),
82
+ inset 0 -1px 0 var(--shadow), 0 1px 1px var(--shadow);
83
+ font-size: 0.7rem;
84
+ border-radius: 4px;
85
+ padding-inline: 4px;
86
+ }
87
+
88
+ .bn-side-menu {
89
+ align-items: center;
90
+ display: flex;
91
+ justify-content: center;
92
+ }
93
+
94
+ .bn-side-menu .bn-ak-button {
95
+ height: fit-content;
96
+ padding: 0;
97
+ width: fit-content;
98
+ }
99
+
100
+ .bn-panel-popover {
101
+ background-color: transparent;
102
+ border: none;
103
+ box-shadow: none;
104
+ }
105
+
106
+ .bn-table-handle {
107
+ height: fit-content;
108
+ padding: 0;
109
+ width: fit-content;
110
+ }
111
+
112
+ .bn-side-menu,
113
+ .bn-table-handle {
114
+ color: gray;
115
+ }
116
+
117
+ .bn-ak-button:where(.dark, .dark *) {
118
+ color: hsl(204 20% 100%);
119
+ }
120
+
121
+ .bn-ak-tab,
122
+ .bn-file-input {
123
+ background-color: transparent;
124
+ color: black;
125
+ }
126
+
127
+ .bn-ak-tab:where(.dark, .dark *),
128
+ .bn-file-input:where(.dark, .dark *) {
129
+ color: white;
130
+ }
131
+
132
+ .bn-ak-tooltip {
133
+ align-items: center;
134
+ display: flex;
135
+ flex-direction: column;
136
+ }