diff --git a/.eslintrc.js b/.eslintrc.js index 983f7ae31e..dee0b4c119 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,6 +24,7 @@ module.exports = { }, }, }, + ignorePatterns: ["**/ui/*"], rules: { curly: 1, "import/no-extraneous-dependencies": [ diff --git a/docs/components/pages/landing/hero/DemoEditor.tsx b/docs/components/pages/landing/hero/DemoEditor.tsx index b57d50203f..acb58ee337 100644 --- a/docs/components/pages/landing/hero/DemoEditor.tsx +++ b/docs/components/pages/landing/hero/DemoEditor.tsx @@ -1,7 +1,8 @@ import { uploadToTmpFilesDotOrg_DEV_ONLY } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useCallback, useMemo, useState } from "react"; import YPartyKitProvider from "y-partykit/provider"; import * as Y from "yjs"; diff --git a/docs/package.json b/docs/package.json index 5f64f7f919..542b5d7c58 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,6 +11,9 @@ "dependencies": { "@blocknote/core": "^0.12.4", "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "@headlessui/react": "^1.7.18", "@mantine/core": "^7.7.1", "@next/bundle-analyzer": "^14.1.0", diff --git a/docs/pages/docs/advanced/ariakit.mdx b/docs/pages/docs/advanced/ariakit.mdx new file mode 100644 index 0000000000..ff5eb5646e --- /dev/null +++ b/docs/pages/docs/advanced/ariakit.mdx @@ -0,0 +1,16 @@ +--- +title: BlockNote with Ariakit +description: Ariakit rich text editor with BlockNote +imageTitle: BlockNote with Ariakit +--- + +import { Example } from "@/components/example"; +import { Callout } from "nextra/components"; + +## Using Ariakit with BlockNote + +[Ariakit](https://ariakit.org/) is an open-source library of unstyled (headless), primitive components with a focus on Accessibility. To use BlockNote with Ariakit, you can import `BlockNoteView` from `@blocknote/ariakit` (instead of from `@blocknote/mantine`). + +You can fully style the components with your own CSS, or import the provided default styles using the CSS file from `@blocknote/ariakit/style.css`. + + diff --git a/docs/pages/docs/advanced/component-libraries.mdx b/docs/pages/docs/advanced/component-libraries.mdx new file mode 100644 index 0000000000..9b11e720ce --- /dev/null +++ b/docs/pages/docs/advanced/component-libraries.mdx @@ -0,0 +1,95 @@ +--- +title: Using Other Component Libraries +description: While BlockNote's default UI uses the Mantine component library, you can configure it to use other libraries instead. +imageTitle: Use with Other Component Libraries +path: /docs/component-libraries +--- + +import { Callout } from "nextra/components"; +import { Example } from "@/components/example"; + +# Using Other Component Libraries + +While BlockNote's default UI uses the [Mantine](https://mantine.dev/) component library, you can configure it to use other libraries instead. + +## Using Ariakit/ShadCN + +BlockNote has plug & play support for [Ariakit](https://ariakit.org/) and [ShadCN](https://ui.shadcn.com/). You can switch to them just by importing `BlockNoteView` from either `@blocknote/ariakit` or `@blocknote/shadcn` instead of `@blocknote/mantine`, as well as the corresponding CSS file. + + + + + +## ShadCN Customization + +If you want BlockNote to use customized ShadCN components instead of the default ones, you can pass them using the `shadCNComponents` prop of `BlockNoteView`: + +```tsx +return ( + +); +``` + +You can pass components from the following ShadCN modules: + +- Badge +- Button +- Card +- DropdownMenu +- Form +- Input +- Label +- Popover +- Select +- Tabs +- Toggle +- Tooltip + + + To ensure compatibility, your ShadCN components should not use Portals, as styling and CSS variables are scoped to only the editor. + + +## Using Your Own Components + +If you want to use a different component library to Mantine/Ariakit/ShadCN, you will have to provide your own `BlockNoteView` implementation using the `BlockNoteViewRaw` component and a `ComponentsContext`: + +```tsx +import { BlockSchema, InlineContentSchema, StyleSchema } from "@blocknote/core"; +import { + BlockNoteViewRaw, + Components, + ComponentsContext, +} from "@blocknote/react"; +import { ComponentProps } from "react"; + +export const components: Components = { + ... +}; + +export const BlockNoteView = < + BSchema extends BlockSchema, + ISchema extends InlineContentSchema, + SSchema extends StyleSchema +>( + props: ComponentProps> +) => { + return ( + + + + ); +}; +``` + +The components you want BlockNote to use should be added to `components`. To see exactly how this object is structured, which components you need to provide, and what props each component should take, see [this source file](https://github.com/TypeCellOS/BlockNote/tree/main/packages/react/src/editor/ComponentsContext.tsx). + diff --git a/docs/pages/docs/advanced/nextjs.mdx b/docs/pages/docs/advanced/nextjs.mdx index bbf109397b..7fc38c8354 100644 --- a/docs/pages/docs/advanced/nextjs.mdx +++ b/docs/pages/docs/advanced/nextjs.mdx @@ -2,7 +2,6 @@ title: Next.js and BlockNote description: Details on integrating BlockNote with Next.js imageTitle: Next.js and BlockNote -path: /docs/nextjs --- # Next.js and BlockNote diff --git a/docs/pages/docs/advanced/real-time-collaboration.mdx b/docs/pages/docs/advanced/real-time-collaboration.mdx index 94ba2f4515..d8e37d287c 100644 --- a/docs/pages/docs/advanced/real-time-collaboration.mdx +++ b/docs/pages/docs/advanced/real-time-collaboration.mdx @@ -2,7 +2,6 @@ title: Real-time Collaborative rich text editor description: Let's see how you can add Multiplayer capabilities to your BlockNote setup, and allow real-time collaboration between users (similar to Google Docs) imageTitle: Real-time Collaboration -path: /docs/real-time-collaboration --- # Real-time Collaboration (multiplayer text editor) diff --git a/docs/pages/docs/advanced/shadcn.mdx b/docs/pages/docs/advanced/shadcn.mdx new file mode 100644 index 0000000000..0aeb7add3a --- /dev/null +++ b/docs/pages/docs/advanced/shadcn.mdx @@ -0,0 +1,52 @@ +--- +title: BlockNote with ShadCN and Tailwind +description: ShadCN + Tailwind rich text editor using BlockNote +imageTitle: BlockNote with ShadCN and Tailwind +--- + +import { Example } from "@/components/example"; +import { Callout } from "nextra/components"; + +## Using ShadCN, Radix and Tailwind with BlockNote + +[shadcn/ui](https://ui.shadcn.com/) is an open-source collection of React components based on [Radix](https://radix-ui.com/) and Tailwind. To use BlockNote with shadcn, you can import `BlockNoteView` from `@blocknote/shadcn` (instead of from `@blocknote/mantine`) and the stylesheet from `@blocknote/shadcn/style.css`. + + + +## ShadCN Customization + +BlockNote comes with default shadcn components. However, it's likely that you have copied and possibly customized your own shadcn components in your project. +To make BlockNote use the ShadCN components from your project instead of the default ones, you can pass them using the `shadCNComponents` prop of `BlockNoteView`: + +```tsx +import * as Button from "@/components/ui/button" +import * as Select from "@/components/ui/select" + +return ( + +); +``` + +You can pass components from the following ShadCN modules: + +- Badge +- Button +- Card +- DropdownMenu +- Form +- Input +- Label +- Popover +- Select +- Tabs +- Toggle +- Tooltip + + + To ensure compatibility, your ShadCN components should not use Portals + (comment these out from your DropdownMenu, Popover and Select components). + diff --git a/docs/pages/docs/advanced/vanilla-js.mdx b/docs/pages/docs/advanced/vanilla-js.mdx index 6c0981696b..938dbda970 100644 --- a/docs/pages/docs/advanced/vanilla-js.mdx +++ b/docs/pages/docs/advanced/vanilla-js.mdx @@ -2,7 +2,6 @@ title: Usage Without React (Vanilla JS) description: BlockNote is mainly designed as a quick and easy drop-in block-based editor for React apps, but can also be used in vanilla JavaScript apps. imageTitle: Usage Without React (Vanilla JS) -path: /docs/vanilla-js --- import { Callout } from "nextra/components"; diff --git a/docs/pages/docs/editor-basics/setup.mdx b/docs/pages/docs/editor-basics/setup.mdx index eddf89a58b..f7018a7372 100644 --- a/docs/pages/docs/editor-basics/setup.mdx +++ b/docs/pages/docs/editor-basics/setup.mdx @@ -24,6 +24,7 @@ type BlockNoteEditorOptions = { defaultStyles?: boolean; uploadFile?: (file: File) => Promise; collaboration?: CollaborationOptions; + dictionary?: Dictionary; schema?: BlockNoteSchema; }; ``` @@ -42,6 +43,8 @@ The hook takes two optional parameters: `collaboration`: Options for enabling real-time collaboration. See [Real-time Collaboration](/docs/advanced/real-time-collaboration) for more info. +`dictionary`: Provide strings for localization. See the [Localization / i18n example](/examples/basic/localization). + `schema` (_advanced_): The editor schema if you want to extend your editor with custom blocks, styles, or inline content [Custom Schemas](/docs/custom-schemas). **deps:** Dependency array that's internally passed to `useMemo`. A new editor will only be created when this array changes. diff --git a/docs/pages/docs/quickstart.mdx b/docs/pages/docs/quickstart.mdx index c33ef16616..71b7ea054c 100644 --- a/docs/pages/docs/quickstart.mdx +++ b/docs/pages/docs/quickstart.mdx @@ -17,7 +17,7 @@ Getting started with BlockNote is quick and easy. Install the required packages To install BlockNote with [NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), run: ```console -npm install @blocknote/core @blocknote/react +npm install @blocknote/core @blocknote/react @blocknote/mantine ``` ## Creating an Editor @@ -26,7 +26,7 @@ With the `useCreateBlockNote` hook, we can create a new editor instance, then us -We also import `@blocknote/react/style.css` to add default styling for the editor and the `Inter` font that BlockNote exports (optional). +We also import `@blocknote/mantine/style.css` to add default styling for the editor and the `Inter` font that BlockNote exports (optional). Next.js usage (or other server-side React frameworks) diff --git a/docs/pages/docs/styling-theming/themes.mdx b/docs/pages/docs/styling-theming/themes.mdx index 335205bd63..8c74c91cda 100644 --- a/docs/pages/docs/styling-theming/themes.mdx +++ b/docs/pages/docs/styling-theming/themes.mdx @@ -11,6 +11,8 @@ import { Example } from "@/components/example"; Themes let you quickly change the basic look of the editor UI, including colors, borders, shadows, and font. If you want to set more complex styles on the editor, see [Overriding CSS](/docs/styling-theming/overriding-css). +_Themes are only available when using the default Mantine components. ShadCN / Ariakit components can be styled differently._ + ## Theme CSS Variables A theme is made up of a set of CSS variables, which can be overwritten to change the editor theme. BlockNote comes with two default themes, one for light and one for dark mode, which are selected based on system preference. diff --git a/docs/pages/docs/ui-components/_meta.json b/docs/pages/docs/ui-components/_meta.json index 5784d1ed55..5aeec08e5a 100644 --- a/docs/pages/docs/ui-components/_meta.json +++ b/docs/pages/docs/ui-components/_meta.json @@ -1,7 +1,7 @@ { "side-menu": "Block Side Menu", "formatting-toolbar": "Formatting Toolbar", - "link-toolbar": { + "hyperlink-toolbar": { "title": "Link Toolbar", "display": "hidden" }, diff --git a/docs/pages/docs/ui-components/formatting-toolbar.mdx b/docs/pages/docs/ui-components/formatting-toolbar.mdx index 2f2ee74ad3..ffe62720bf 100644 --- a/docs/pages/docs/ui-components/formatting-toolbar.mdx +++ b/docs/pages/docs/ui-components/formatting-toolbar.mdx @@ -23,21 +23,14 @@ You can change or replace the Formatting Toolbar with your own React component. +We first define our custom `BlueButton`. The `useComponentsContext` hook gets all components used internally by BlockNote, so we want to use `Components.FormattingToolbar.Button` for this. + We use the `FormattingToolbar` component to create a custom Formatting Toolbar. By specifying its children, we can replace the default buttons in the toolbar with our own. This custom Formatting Toolbar is passed to a `FormattingToolbarController`, which controls its position and visibility (above or below the highlighted text). Setting `formattingToolbar={false}` on `BlockNoteView` tells BlockNote not to show the default Formatting Toolbar. -
- - Tip: The children you pass to the `FormattingToolbar` component - should be default selects/buttons (e.g. `BlockTypeSelect` & `BasicTextStyleButton`) or custom selects/buttons - (`ToolbarSelect` & `ToolbarButton`). To see all the components you can use, head to the - [Formatting Toolbar's source code](https://github.com/TypeCellOS/BlockNote/blob/main/packages/react/src/components/FormattingToolbar/mantine/FormattingToolbar.tsx). - -
- ## Changing Block Type Select (Dropdown) Items The first element in the default Formatting Toolbar is the Block Type Select, and you can change the items in it. The demo makes the Block Type Select work for image blocks by adding an item to it. diff --git a/docs/pages/docs/ui-components/hyperlink-toolbar.mdx b/docs/pages/docs/ui-components/hyperlink-toolbar.mdx index 2f1ea13f49..8ab0464757 100644 --- a/docs/pages/docs/ui-components/hyperlink-toolbar.mdx +++ b/docs/pages/docs/ui-components/hyperlink-toolbar.mdx @@ -19,19 +19,12 @@ TODO Image You can change or replace the Link Toolbar with your own React component. In the demo below, a button is added to the default Link Toolbar, which opens a browser alert. -[//]: # () +[//]: # '' + +We first define our custom `AlertButton`. The `useComponentsContext` hook gets all components used internally by BlockNote, so we want to use `Components.LinkToolbar.Button` for this. We use the `LinkToolbar` component to create a custom Link Toolbar. By specifying its children, we can replace the default buttons in the toolbar with our own. This custom Link Toolbar is passed to a `LinkToolbarController`, which controls its position and visibility (above or below the hovered link). Setting `linkToolbar={false}` on `BlockNoteView` tells BlockNote not to show the default Link Toolbar. - -
- - Tip: The children you pass to the `LinkToolbar` - component should be default buttons (e.g. TODO) or custom selects/buttons - (`ToolbarSelect` & `ToolbarButton`). To see all the components you can - use, head to the [Link Toolbar's source code](link). - -
diff --git a/docs/pages/docs/ui-components/side-menu.mdx b/docs/pages/docs/ui-components/side-menu.mdx index 6a23c1d826..4236843ddf 100644 --- a/docs/pages/docs/ui-components/side-menu.mdx +++ b/docs/pages/docs/ui-components/side-menu.mdx @@ -31,21 +31,14 @@ You can change or replace the Block Side Menu with your own React component. In +We first define our custom `RemoveBlockButton`. The `useComponentsContext` hook gets all components used internally by BlockNote, so we want to use `Components.SideMenu.Button` for this. + We use the `SideMenu` component to create a custom Block Side Menu. By specifying its children, we can replace the default buttons in the menu with our own. This custom Side Menu is passed to a `SideMenuController`, which controls its position and visibility (on the left side when you hover a block). Setting `sideMenu={false}` on `BlockNoteView` tells BlockNote not to show the default Block Side Menu. -
- - Tip: The children you pass to the `SideMenu` component - should be default buttons (e.g. `DragHandleButton`) or custom buttons - (`SideMenuButton`). To see all the components you can use, head to the - [Side Menu's source code](link). - -
- ## Changing Drag Handle Menu Items You can also change the items in the Drag Handle Menu. The demo below adds an item that resets the block type to a paragraph. diff --git a/docs/styles.css b/docs/styles.css index 510ff1d534..ada51f15b1 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -2,3 +2,11 @@ @tailwind components; @tailwind utilities; @tailwind variants; + +/* Hack needed because the ShadCN Tailwind config overrides the Nextra Tailwind +config. This is a problem because ShadCN relies on CSS variables which are only +scoped to the editor, and are undefined when Nextra components try to use them. +Seems like this only affects border radius in the demos though. */ +body { + --radius: 0.5rem; +} \ No newline at end of file diff --git a/examples/01-basic/01-minimal/App.tsx b/examples/01-basic/01-minimal/App.tsx index 55a0cc8e69..c545b7b4dd 100644 --- a/examples/01-basic/01-minimal/App.tsx +++ b/examples/01-basic/01-minimal/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; export default function App() { // Creates a new editor instance. diff --git a/examples/01-basic/01-minimal/package.json b/examples/01-basic/01-minimal/package.json index 41993cc9e0..81b9a97220 100644 --- a/examples/01-basic/01-minimal/package.json +++ b/examples/01-basic/01-minimal/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-minimal", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/02-block-objects/App.tsx b/examples/01-basic/02-block-objects/App.tsx index 45cd7c39e6..846df5d180 100644 --- a/examples/01-basic/02-block-objects/App.tsx +++ b/examples/01-basic/02-block-objects/App.tsx @@ -1,7 +1,8 @@ import { Block } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useState } from "react"; import "./styles.css"; diff --git a/examples/01-basic/02-block-objects/package.json b/examples/01-basic/02-block-objects/package.json index 0acac38a6d..b837666f72 100644 --- a/examples/01-basic/02-block-objects/package.json +++ b/examples/01-basic/02-block-objects/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-block-objects", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/03-all-blocks/App.tsx b/examples/01-basic/03-all-blocks/App.tsx index 19758e6017..ff6e4d05bd 100644 --- a/examples/01-basic/03-all-blocks/App.tsx +++ b/examples/01-basic/03-all-blocks/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; export default function App() { // Creates a new editor instance. diff --git a/examples/01-basic/03-all-blocks/package.json b/examples/01-basic/03-all-blocks/package.json index 39561f0b95..7e7b18cbde 100644 --- a/examples/01-basic/03-all-blocks/package.json +++ b/examples/01-basic/03-all-blocks/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-all-blocks", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/04-selection-blocks/App.tsx b/examples/01-basic/04-selection-blocks/App.tsx index 5649a37878..5251754f5a 100644 --- a/examples/01-basic/04-selection-blocks/App.tsx +++ b/examples/01-basic/04-selection-blocks/App.tsx @@ -1,7 +1,8 @@ import { Block } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useState } from "react"; import "./styles.css"; diff --git a/examples/01-basic/04-selection-blocks/package.json b/examples/01-basic/04-selection-blocks/package.json index e087a6d5ff..1ee11c639e 100644 --- a/examples/01-basic/04-selection-blocks/package.json +++ b/examples/01-basic/04-selection-blocks/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-selection-blocks", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/05-block-manipulation/App.tsx b/examples/01-basic/05-block-manipulation/App.tsx index f961d3527d..412f39c56e 100644 --- a/examples/01-basic/05-block-manipulation/App.tsx +++ b/examples/01-basic/05-block-manipulation/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/01-basic/05-block-manipulation/package.json b/examples/01-basic/05-block-manipulation/package.json index 9a0b49bbf6..2686943289 100644 --- a/examples/01-basic/05-block-manipulation/package.json +++ b/examples/01-basic/05-block-manipulation/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-block-manipulation", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/06-file-uploading/App.tsx b/examples/01-basic/06-file-uploading/App.tsx index c7fea399e8..725c2346a9 100644 --- a/examples/01-basic/06-file-uploading/App.tsx +++ b/examples/01-basic/06-file-uploading/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; // Uploads a file to tmpfiles.org and returns the URL to the uploaded file. async function uploadFile(file: File) { diff --git a/examples/01-basic/06-file-uploading/package.json b/examples/01-basic/06-file-uploading/package.json index 4d80ea85cb..00cbc515d8 100644 --- a/examples/01-basic/06-file-uploading/package.json +++ b/examples/01-basic/06-file-uploading/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-file-uploading", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/07-saving-loading/App.tsx b/examples/01-basic/07-saving-loading/App.tsx index df8a07b99e..5fe11c206b 100644 --- a/examples/01-basic/07-saving-loading/App.tsx +++ b/examples/01-basic/07-saving-loading/App.tsx @@ -1,7 +1,7 @@ import { Block, BlockNoteEditor, PartialBlock } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useEffect, useMemo, useState } from "react"; async function saveToStorage(jsonBlocks: Block[]) { diff --git a/examples/01-basic/07-saving-loading/package.json b/examples/01-basic/07-saving-loading/package.json index 927b53a1d9..10dd1597ec 100644 --- a/examples/01-basic/07-saving-loading/package.json +++ b/examples/01-basic/07-saving-loading/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-saving-loading", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/01-basic/08-shadcn/.bnexample.json b/examples/01-basic/08-shadcn/.bnexample.json new file mode 100644 index 0000000000..6d4a02dd52 --- /dev/null +++ b/examples/01-basic/08-shadcn/.bnexample.json @@ -0,0 +1,6 @@ +{ + "playground": true, + "docs": true, + "author": "matthewlipski", + "tags": ["Basic"] +} diff --git a/examples/01-basic/08-shadcn/App.tsx b/examples/01-basic/08-shadcn/App.tsx new file mode 100644 index 0000000000..754b4a5e94 --- /dev/null +++ b/examples/01-basic/08-shadcn/App.tsx @@ -0,0 +1,22 @@ +import "@blocknote/core/fonts/inter.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/shadcn"; +import "@blocknote/shadcn/style.css"; + +export default function App() { + // Creates a new editor instance. + const editor = useCreateBlockNote(); + + // Renders the editor instance using a React component. + return ( + + ); +} diff --git a/examples/01-basic/08-shadcn/README.md b/examples/01-basic/08-shadcn/README.md new file mode 100644 index 0000000000..b585d3e461 --- /dev/null +++ b/examples/01-basic/08-shadcn/README.md @@ -0,0 +1,7 @@ +# Use with ShadCN + +This example shows how you can use BlockNote with ShadCN (instead of Mantine). + +**Relevant Docs:** + +- [ShadCN](/docs/advanced/shadcn) diff --git a/examples/01-basic/08-shadcn/index.html b/examples/01-basic/08-shadcn/index.html new file mode 100644 index 0000000000..c70c418c1a --- /dev/null +++ b/examples/01-basic/08-shadcn/index.html @@ -0,0 +1,14 @@ + + + + + + Use with ShadCN + + +
+ + + diff --git a/examples/01-basic/08-shadcn/main.tsx b/examples/01-basic/08-shadcn/main.tsx new file mode 100644 index 0000000000..f88b490fbd --- /dev/null +++ b/examples/01-basic/08-shadcn/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + +); diff --git a/examples/01-basic/08-shadcn/package.json b/examples/01-basic/08-shadcn/package.json new file mode 100644 index 0000000000..a5f526e246 --- /dev/null +++ b/examples/01-basic/08-shadcn/package.json @@ -0,0 +1,37 @@ +{ + "name": "@blocknote/example-shadcn", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "eslint . --max-warnings 0" + }, + "dependencies": { + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "vite": "^4.4.8" + }, + "eslintConfig": { + "extends": [ + "../../../.eslintrc.js" + ] + }, + "eslintIgnore": [ + "dist" + ] +} \ No newline at end of file diff --git a/examples/01-basic/08-shadcn/tsconfig.json b/examples/01-basic/08-shadcn/tsconfig.json new file mode 100644 index 0000000000..1bd8ab3c57 --- /dev/null +++ b/examples/01-basic/08-shadcn/tsconfig.json @@ -0,0 +1,36 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true + }, + "include": [ + "." + ], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} \ No newline at end of file diff --git a/examples/01-basic/08-shadcn/vite.config.ts b/examples/01-basic/08-shadcn/vite.config.ts new file mode 100644 index 0000000000..f62ab20bc2 --- /dev/null +++ b/examples/01-basic/08-shadcn/vite.config.ts @@ -0,0 +1,32 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// import eslintPlugin from "vite-plugin-eslint"; +// https://vitejs.dev/config/ +export default defineConfig((conf) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/" + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/" + ), + } as any), + }, +})); diff --git a/examples/01-basic/09-ariakit/.bnexample.json b/examples/01-basic/09-ariakit/.bnexample.json new file mode 100644 index 0000000000..6d4a02dd52 --- /dev/null +++ b/examples/01-basic/09-ariakit/.bnexample.json @@ -0,0 +1,6 @@ +{ + "playground": true, + "docs": true, + "author": "matthewlipski", + "tags": ["Basic"] +} diff --git a/examples/01-basic/09-ariakit/App.tsx b/examples/01-basic/09-ariakit/App.tsx new file mode 100644 index 0000000000..1a86f6b436 --- /dev/null +++ b/examples/01-basic/09-ariakit/App.tsx @@ -0,0 +1,12 @@ +import "@blocknote/core/fonts/inter.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/ariakit"; +import "@blocknote/ariakit/style.css"; + +export default function App() { + // Creates a new editor instance. + const editor = useCreateBlockNote(); + + // Renders the editor instance using a React component. + return ; +} diff --git a/examples/01-basic/09-ariakit/README.md b/examples/01-basic/09-ariakit/README.md new file mode 100644 index 0000000000..7ddb27b10a --- /dev/null +++ b/examples/01-basic/09-ariakit/README.md @@ -0,0 +1,7 @@ +# Use with Ariakit + +This example shows how you can use BlockNote with Ariakit (instead of Mantine). + +**Relevant Docs:** + +- [Ariakit](/docs/advanced/ariakit) diff --git a/examples/01-basic/09-ariakit/index.html b/examples/01-basic/09-ariakit/index.html new file mode 100644 index 0000000000..f394c4992a --- /dev/null +++ b/examples/01-basic/09-ariakit/index.html @@ -0,0 +1,14 @@ + + + + + + Use with Ariakit + + +
+ + + diff --git a/examples/01-basic/09-ariakit/main.tsx b/examples/01-basic/09-ariakit/main.tsx new file mode 100644 index 0000000000..f88b490fbd --- /dev/null +++ b/examples/01-basic/09-ariakit/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + +); diff --git a/examples/01-basic/09-ariakit/package.json b/examples/01-basic/09-ariakit/package.json new file mode 100644 index 0000000000..4a5ba888e6 --- /dev/null +++ b/examples/01-basic/09-ariakit/package.json @@ -0,0 +1,37 @@ +{ + "name": "@blocknote/example-ariakit", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "eslint . --max-warnings 0" + }, + "dependencies": { + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "vite": "^4.4.8" + }, + "eslintConfig": { + "extends": [ + "../../../.eslintrc.js" + ] + }, + "eslintIgnore": [ + "dist" + ] +} \ No newline at end of file diff --git a/examples/01-basic/09-ariakit/tsconfig.json b/examples/01-basic/09-ariakit/tsconfig.json new file mode 100644 index 0000000000..1bd8ab3c57 --- /dev/null +++ b/examples/01-basic/09-ariakit/tsconfig.json @@ -0,0 +1,36 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true + }, + "include": [ + "." + ], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} \ No newline at end of file diff --git a/examples/01-basic/09-ariakit/vite.config.ts b/examples/01-basic/09-ariakit/vite.config.ts new file mode 100644 index 0000000000..f62ab20bc2 --- /dev/null +++ b/examples/01-basic/09-ariakit/vite.config.ts @@ -0,0 +1,32 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// import eslintPlugin from "vite-plugin-eslint"; +// https://vitejs.dev/config/ +export default defineConfig((conf) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/" + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/" + ), + } as any), + }, +})); diff --git a/examples/01-basic/10-localization/.bnexample.json b/examples/01-basic/10-localization/.bnexample.json new file mode 100644 index 0000000000..fd06fde1e0 --- /dev/null +++ b/examples/01-basic/10-localization/.bnexample.json @@ -0,0 +1,6 @@ +{ + "playground": true, + "docs": true, + "author": "yousefed", + "tags": ["Basic"] +} diff --git a/examples/01-basic/10-localization/App.tsx b/examples/01-basic/10-localization/App.tsx new file mode 100644 index 0000000000..9799a8ad7b --- /dev/null +++ b/examples/01-basic/10-localization/App.tsx @@ -0,0 +1,18 @@ +import { locales } from "@blocknote/core"; +import "@blocknote/core/fonts/inter.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; + +export default function App() { + // Creates a new editor instance. + const editor = useCreateBlockNote({ + // Passes the Dutch (NL) dictionary to the editor instance. + // You can also provide your own dictionary here to customize the strings used in the editor, + // or submit a Pull Request to add support for your language of your choice + dictionary: locales.nl, + }); + + // Renders the editor instance using a React component. + return ; +} diff --git a/examples/01-basic/10-localization/README.md b/examples/01-basic/10-localization/README.md new file mode 100644 index 0000000000..e1da3ce24b --- /dev/null +++ b/examples/01-basic/10-localization/README.md @@ -0,0 +1,9 @@ +# Localization (i18n) + +In this example, we pass in a custom dictionary to change the interface of the editor to use Dutch (NL) strings. + +You can also provide your own dictionary to customize the strings used in the editor, or submit a Pull Request to add support for your language of your choice. + +**Relevant Docs:** + +- [Editor Setup](/docs/editor-basics/setup) diff --git a/examples/01-basic/10-localization/index.html b/examples/01-basic/10-localization/index.html new file mode 100644 index 0000000000..5a75a1709e --- /dev/null +++ b/examples/01-basic/10-localization/index.html @@ -0,0 +1,14 @@ + + + + + + Localization (i18n) + + +
+ + + diff --git a/examples/01-basic/10-localization/main.tsx b/examples/01-basic/10-localization/main.tsx new file mode 100644 index 0000000000..f88b490fbd --- /dev/null +++ b/examples/01-basic/10-localization/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + +); diff --git a/examples/01-basic/10-localization/package.json b/examples/01-basic/10-localization/package.json new file mode 100644 index 0000000000..8fcb99d3fe --- /dev/null +++ b/examples/01-basic/10-localization/package.json @@ -0,0 +1,37 @@ +{ + "name": "@blocknote/example-localization", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "eslint . --max-warnings 0" + }, + "dependencies": { + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "vite": "^4.4.8" + }, + "eslintConfig": { + "extends": [ + "../../../.eslintrc.js" + ] + }, + "eslintIgnore": [ + "dist" + ] +} \ No newline at end of file diff --git a/examples/01-basic/10-localization/tsconfig.json b/examples/01-basic/10-localization/tsconfig.json new file mode 100644 index 0000000000..1bd8ab3c57 --- /dev/null +++ b/examples/01-basic/10-localization/tsconfig.json @@ -0,0 +1,36 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true + }, + "include": [ + "." + ], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} \ No newline at end of file diff --git a/examples/01-basic/10-localization/vite.config.ts b/examples/01-basic/10-localization/vite.config.ts new file mode 100644 index 0000000000..f62ab20bc2 --- /dev/null +++ b/examples/01-basic/10-localization/vite.config.ts @@ -0,0 +1,32 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// import eslintPlugin from "vite-plugin-eslint"; +// https://vitejs.dev/config/ +export default defineConfig((conf) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/" + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/" + ), + } as any), + }, +})); diff --git a/examples/01-basic/testing/App.tsx b/examples/01-basic/testing/App.tsx index 5bc1b1c47d..de439b5928 100644 --- a/examples/01-basic/testing/App.tsx +++ b/examples/01-basic/testing/App.tsx @@ -1,7 +1,8 @@ import { uploadToTmpFilesDotOrg_DEV_ONLY } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; export default function App() { // Creates a new editor instance. diff --git a/examples/01-basic/testing/package.json b/examples/01-basic/testing/package.json index 451c22b29e..8c3884e1b7 100644 --- a/examples/01-basic/testing/package.json +++ b/examples/01-basic/testing/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-testing", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/02-ui-components/01-ui-elements-remove/App.tsx b/examples/02-ui-components/01-ui-elements-remove/App.tsx index 0f67fdc449..b2f9038ab6 100644 --- a/examples/02-ui-components/01-ui-elements-remove/App.tsx +++ b/examples/02-ui-components/01-ui-elements-remove/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; export default function App() { // Creates a new editor instance. diff --git a/examples/02-ui-components/01-ui-elements-remove/package.json b/examples/02-ui-components/01-ui-elements-remove/package.json index 01bc2f7fc2..8a9d42d3a1 100644 --- a/examples/02-ui-components/01-ui-elements-remove/package.json +++ b/examples/02-ui-components/01-ui-elements-remove/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-ui-elements-remove", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/02-ui-components/02-formatting-toolbar-buttons/App.tsx b/examples/02-ui-components/02-formatting-toolbar-buttons/App.tsx index 8f44929e33..779452273d 100644 --- a/examples/02-ui-components/02-formatting-toolbar-buttons/App.tsx +++ b/examples/02-ui-components/02-formatting-toolbar-buttons/App.tsx @@ -1,7 +1,6 @@ import "@blocknote/core/fonts/inter.css"; import { BasicTextStyleButton, - BlockNoteView, BlockTypeSelect, ColorStyleButton, CreateLinkButton, @@ -14,7 +13,8 @@ import { UnnestBlockButton, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { BlueButton } from "./BlueButton"; diff --git a/examples/02-ui-components/02-formatting-toolbar-buttons/BlueButton.tsx b/examples/02-ui-components/02-formatting-toolbar-buttons/BlueButton.tsx index 4cde53596c..48400a273e 100644 --- a/examples/02-ui-components/02-formatting-toolbar-buttons/BlueButton.tsx +++ b/examples/02-ui-components/02-formatting-toolbar-buttons/BlueButton.tsx @@ -1,14 +1,17 @@ import { - ToolbarButton, useBlockNoteEditor, + useComponentsContext, useEditorContentOrSelectionChange, } from "@blocknote/react"; +import "@blocknote/mantine/style.css"; import { useState } from "react"; // Custom Formatting Toolbar Button to toggle blue text & background color. export function BlueButton() { const editor = useBlockNoteEditor(); + const Components = useComponentsContext()!; + // Tracks whether the text & background are both blue. const [isSelected, setIsSelected] = useState( editor.getActiveStyles().textColor === "blue" && @@ -24,7 +27,7 @@ export function BlueButton() { }, editor); return ( - { editor.toggleStyles({ @@ -34,6 +37,6 @@ export function BlueButton() { }} isSelected={isSelected}> Blue - + ); } diff --git a/examples/02-ui-components/02-formatting-toolbar-buttons/package.json b/examples/02-ui-components/02-formatting-toolbar-buttons/package.json index e4db1b4ba8..0dca1262e1 100644 --- a/examples/02-ui-components/02-formatting-toolbar-buttons/package.json +++ b/examples/02-ui-components/02-formatting-toolbar-buttons/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-formatting-toolbar-buttons", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/02-ui-components/03-formatting-toolbar-block-type-items/App.tsx b/examples/02-ui-components/03-formatting-toolbar-block-type-items/App.tsx index 0ede58d56e..fce0767f09 100644 --- a/examples/02-ui-components/03-formatting-toolbar-block-type-items/App.tsx +++ b/examples/02-ui-components/03-formatting-toolbar-block-type-items/App.tsx @@ -1,14 +1,14 @@ import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, + BlockTypeSelectItem, FormattingToolbar, FormattingToolbarController, - useCreateBlockNote, blockTypeSelectItems, - BlockTypeSelectItem, + useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { RiAlertFill } from "react-icons/ri"; import { Alert } from "./Alert"; @@ -56,7 +56,7 @@ export default function App() { formattingToolbar={() => ( - { - editor.removeBlocks([props.block]); - }} - /> - + { + editor.removeBlocks([props.block]); + }} + /> + } + /> ); } diff --git a/examples/02-ui-components/04-side-menu-buttons/package.json b/examples/02-ui-components/04-side-menu-buttons/package.json index c5c820c0cb..140e5b1e3d 100644 --- a/examples/02-ui-components/04-side-menu-buttons/package.json +++ b/examples/02-ui-components/04-side-menu-buttons/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-side-menu-buttons", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.3.1" diff --git a/examples/02-ui-components/05-side-menu-drag-handle-items/App.tsx b/examples/02-ui-components/05-side-menu-drag-handle-items/App.tsx index 8652837ae1..9f9cb25f57 100644 --- a/examples/02-ui-components/05-side-menu-drag-handle-items/App.tsx +++ b/examples/02-ui-components/05-side-menu-drag-handle-items/App.tsx @@ -1,15 +1,15 @@ import "@blocknote/core/fonts/inter.css"; import { BlockColorsItem, - BlockNoteView, DragHandleMenu, - DragHandleMenuItem, RemoveBlockItem, SideMenu, SideMenuController, + useComponentsContext, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; export default function App() { // Creates a new editor instance. @@ -34,6 +34,8 @@ export default function App() { ], }); + const Components = useComponentsContext()!; + // Renders the editor instance. return ( @@ -46,12 +48,12 @@ export default function App() { Delete Colors {/* Item which resets the hovered block's type. */} - { editor.updateBlock(props.block, { type: "paragraph" }); }}> Reset Type - + )} /> diff --git a/examples/02-ui-components/05-side-menu-drag-handle-items/package.json b/examples/02-ui-components/05-side-menu-drag-handle-items/package.json index 9982ce078e..64da52462a 100644 --- a/examples/02-ui-components/05-side-menu-drag-handle-items/package.json +++ b/examples/02-ui-components/05-side-menu-drag-handle-items/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-side-menu-drag-handle-items", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.3.1" diff --git a/examples/02-ui-components/06-suggestion-menus-slash-menu-items/App.tsx b/examples/02-ui-components/06-suggestion-menus-slash-menu-items/App.tsx index bc2900fbec..984cf3d4e1 100644 --- a/examples/02-ui-components/06-suggestion-menus-slash-menu-items/App.tsx +++ b/examples/02-ui-components/06-suggestion-menus-slash-menu-items/App.tsx @@ -5,13 +5,13 @@ import { } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, DefaultReactSuggestionItem, getDefaultReactSlashMenuItems, SuggestionMenuController, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { HiOutlineGlobeAlt } from "react-icons/hi"; // Custom Slash Menu item to insert a block after the current one. diff --git a/examples/02-ui-components/06-suggestion-menus-slash-menu-items/package.json b/examples/02-ui-components/06-suggestion-menus-slash-menu-items/package.json index 87a8b55798..63ea77793c 100644 --- a/examples/02-ui-components/06-suggestion-menus-slash-menu-items/package.json +++ b/examples/02-ui-components/06-suggestion-menus-slash-menu-items/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-suggestion-menus-slash-menu-items", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.3.1" diff --git a/examples/02-ui-components/07-suggestion-menus-slash-menu-component/App.tsx b/examples/02-ui-components/07-suggestion-menus-slash-menu-component/App.tsx index fdf1137fa7..2bd26465f0 100644 --- a/examples/02-ui-components/07-suggestion-menus-slash-menu-component/App.tsx +++ b/examples/02-ui-components/07-suggestion-menus-slash-menu-component/App.tsx @@ -1,12 +1,12 @@ import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, DefaultReactSuggestionItem, SuggestionMenuController, SuggestionMenuProps, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/02-ui-components/07-suggestion-menus-slash-menu-component/package.json b/examples/02-ui-components/07-suggestion-menus-slash-menu-component/package.json index 7eb92b487a..d0a6a12b00 100644 --- a/examples/02-ui-components/07-suggestion-menus-slash-menu-component/package.json +++ b/examples/02-ui-components/07-suggestion-menus-slash-menu-component/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-suggestion-menus-slash-menu-component", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/02-ui-components/08-custom-ui/App.tsx b/examples/02-ui-components/08-custom-ui/App.tsx index b447f7aefa..f3bb61a09f 100644 --- a/examples/02-ui-components/08-custom-ui/App.tsx +++ b/examples/02-ui-components/08-custom-ui/App.tsx @@ -1,13 +1,13 @@ import { filterSuggestionItems } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, getDefaultReactSlashMenuItems, SideMenuController, SuggestionMenuController, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { CustomFormattingToolbar } from "./CustomFormattingToolbar"; import { CustomSideMenu } from "./CustomSideMenu"; diff --git a/examples/02-ui-components/08-custom-ui/package.json b/examples/02-ui-components/08-custom-ui/package.json index db84e08ed6..7c66c2093e 100644 --- a/examples/02-ui-components/08-custom-ui/package.json +++ b/examples/02-ui-components/08-custom-ui/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-custom-ui", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.3.1" diff --git a/examples/02-ui-components/link-toolbar-buttons/AlertButton.tsx b/examples/02-ui-components/link-toolbar-buttons/AlertButton.tsx index 123d856b0e..b393d6077e 100644 --- a/examples/02-ui-components/link-toolbar-buttons/AlertButton.tsx +++ b/examples/02-ui-components/link-toolbar-buttons/AlertButton.tsx @@ -1,14 +1,16 @@ -import { LinkToolbarProps, ToolbarButton } from "@blocknote/react"; +import { LinkToolbarProps, useComponentsContext } from "@blocknote/react"; // Custom Link Toolbar button to open a browser alert. export function AlertButton(props: LinkToolbarProps) { + const Components = useComponentsContext()!; + return ( - { window.alert(`Link URL: ${props.url}`); }}> Open Alert - + ); } diff --git a/examples/02-ui-components/link-toolbar-buttons/App.tsx b/examples/02-ui-components/link-toolbar-buttons/App.tsx index 1e4525bd72..4664d4bf28 100644 --- a/examples/02-ui-components/link-toolbar-buttons/App.tsx +++ b/examples/02-ui-components/link-toolbar-buttons/App.tsx @@ -1,11 +1,11 @@ import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, LinkToolbar, LinkToolbarController, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { AlertButton } from "./AlertButton"; diff --git a/examples/02-ui-components/link-toolbar-buttons/package.json b/examples/02-ui-components/link-toolbar-buttons/package.json index 470ec0c68f..56e4b874f3 100644 --- a/examples/02-ui-components/link-toolbar-buttons/package.json +++ b/examples/02-ui-components/link-toolbar-buttons/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-link-toolbar-buttons", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/03-theming/01-theming-dom-attributes/App.tsx b/examples/03-theming/01-theming-dom-attributes/App.tsx index 5f5aa61cc9..7068e12388 100644 --- a/examples/03-theming/01-theming-dom-attributes/App.tsx +++ b/examples/03-theming/01-theming-dom-attributes/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/03-theming/01-theming-dom-attributes/package.json b/examples/03-theming/01-theming-dom-attributes/package.json index d747c5a61e..22a493f456 100644 --- a/examples/03-theming/01-theming-dom-attributes/package.json +++ b/examples/03-theming/01-theming-dom-attributes/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-theming-dom-attributes", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/03-theming/02-changing-font/App.tsx b/examples/03-theming/02-changing-font/App.tsx index e21dd05893..4ef3f9a3dd 100644 --- a/examples/03-theming/02-changing-font/App.tsx +++ b/examples/03-theming/02-changing-font/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/03-theming/02-changing-font/package.json b/examples/03-theming/02-changing-font/package.json index ba4a149a7f..5869405b62 100644 --- a/examples/03-theming/02-changing-font/package.json +++ b/examples/03-theming/02-changing-font/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-changing-font", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/03-theming/03-theming-css/App.tsx b/examples/03-theming/03-theming-css/App.tsx index 7a65b64349..493ae7d4ed 100644 --- a/examples/03-theming/03-theming-css/App.tsx +++ b/examples/03-theming/03-theming-css/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/03-theming/03-theming-css/package.json b/examples/03-theming/03-theming-css/package.json index ff356edda6..f0d3d8b136 100644 --- a/examples/03-theming/03-theming-css/package.json +++ b/examples/03-theming/03-theming-css/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-theming-css", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/03-theming/04-theming-css-variables/App.tsx b/examples/03-theming/04-theming-css-variables/App.tsx index dcfc1a4a72..ba45053f04 100644 --- a/examples/03-theming/04-theming-css-variables/App.tsx +++ b/examples/03-theming/04-theming-css-variables/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/03-theming/04-theming-css-variables/package.json b/examples/03-theming/04-theming-css-variables/package.json index c4a0335626..43df97f493 100644 --- a/examples/03-theming/04-theming-css-variables/package.json +++ b/examples/03-theming/04-theming-css-variables/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-theming-css-variables", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/03-theming/05-theming-css-variables-code/App.tsx b/examples/03-theming/05-theming-css-variables-code/App.tsx index 0f8e944d32..8a02496d7e 100644 --- a/examples/03-theming/05-theming-css-variables-code/App.tsx +++ b/examples/03-theming/05-theming-css-variables-code/App.tsx @@ -4,9 +4,9 @@ import { darkDefaultTheme, lightDefaultTheme, Theme, - useCreateBlockNote, -} from "@blocknote/react"; -import "@blocknote/react/style.css"; +} from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; // Base theme const lightRedTheme = { diff --git a/examples/03-theming/05-theming-css-variables-code/package.json b/examples/03-theming/05-theming-css-variables-code/package.json index 27c24dc2a0..f139bf737b 100644 --- a/examples/03-theming/05-theming-css-variables-code/package.json +++ b/examples/03-theming/05-theming-css-variables-code/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-theming-css-variables-code", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/04-interoperability/01-converting-blocks-to-html/App.tsx b/examples/04-interoperability/01-converting-blocks-to-html/App.tsx index 698de6f48e..e10fe0c57f 100644 --- a/examples/04-interoperability/01-converting-blocks-to-html/App.tsx +++ b/examples/04-interoperability/01-converting-blocks-to-html/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useState } from "react"; import "./styles.css"; diff --git a/examples/04-interoperability/01-converting-blocks-to-html/package.json b/examples/04-interoperability/01-converting-blocks-to-html/package.json index 49508d72f5..b50f1b3860 100644 --- a/examples/04-interoperability/01-converting-blocks-to-html/package.json +++ b/examples/04-interoperability/01-converting-blocks-to-html/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-converting-blocks-to-html", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/04-interoperability/02-converting-blocks-from-html/App.tsx b/examples/04-interoperability/02-converting-blocks-from-html/App.tsx index 98af0279b5..8b53b5ac9c 100644 --- a/examples/04-interoperability/02-converting-blocks-from-html/App.tsx +++ b/examples/04-interoperability/02-converting-blocks-from-html/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { ChangeEvent, useCallback, useEffect } from "react"; import "./styles.css"; diff --git a/examples/04-interoperability/02-converting-blocks-from-html/package.json b/examples/04-interoperability/02-converting-blocks-from-html/package.json index ec274231e4..07b2ea2a48 100644 --- a/examples/04-interoperability/02-converting-blocks-from-html/package.json +++ b/examples/04-interoperability/02-converting-blocks-from-html/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-converting-blocks-from-html", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/04-interoperability/03-converting-blocks-to-md/App.tsx b/examples/04-interoperability/03-converting-blocks-to-md/App.tsx index 1e020bfae7..c51a3ac92e 100644 --- a/examples/04-interoperability/03-converting-blocks-to-md/App.tsx +++ b/examples/04-interoperability/03-converting-blocks-to-md/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { useState } from "react"; import "./styles.css"; diff --git a/examples/04-interoperability/03-converting-blocks-to-md/package.json b/examples/04-interoperability/03-converting-blocks-to-md/package.json index b57907e8cc..17f357ec34 100644 --- a/examples/04-interoperability/03-converting-blocks-to-md/package.json +++ b/examples/04-interoperability/03-converting-blocks-to-md/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-converting-blocks-to-md", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/04-interoperability/04-converting-blocks-from-md/App.tsx b/examples/04-interoperability/04-converting-blocks-from-md/App.tsx index 3015c30f9d..876f5573e9 100644 --- a/examples/04-interoperability/04-converting-blocks-from-md/App.tsx +++ b/examples/04-interoperability/04-converting-blocks-from-md/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { ChangeEvent, useCallback, useEffect } from "react"; const initialMarkdown = "Hello, **world!**"; diff --git a/examples/04-interoperability/04-converting-blocks-from-md/package.json b/examples/04-interoperability/04-converting-blocks-from-md/package.json index a1e6d389d8..0e044fe334 100644 --- a/examples/04-interoperability/04-converting-blocks-from-md/package.json +++ b/examples/04-interoperability/04-converting-blocks-from-md/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-converting-blocks-from-md", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/05-custom-schema/01-alert-block/App.tsx b/examples/05-custom-schema/01-alert-block/App.tsx index 0dda8fbe61..dcaefdfbdf 100644 --- a/examples/05-custom-schema/01-alert-block/App.tsx +++ b/examples/05-custom-schema/01-alert-block/App.tsx @@ -6,12 +6,12 @@ import { } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, SuggestionMenuController, getDefaultReactSlashMenuItems, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { RiAlertFill } from "react-icons/ri"; import { Alert } from "./Alert"; diff --git a/examples/05-custom-schema/01-alert-block/package.json b/examples/05-custom-schema/01-alert-block/package.json index 004639656c..86d721a065 100644 --- a/examples/05-custom-schema/01-alert-block/package.json +++ b/examples/05-custom-schema/01-alert-block/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-alert-block", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "@mantine/core": "^7.7.1", diff --git a/examples/05-custom-schema/02-suggestion-menus-mentions/App.tsx b/examples/05-custom-schema/02-suggestion-menus-mentions/App.tsx index d3f0463537..e86e4594e9 100644 --- a/examples/05-custom-schema/02-suggestion-menus-mentions/App.tsx +++ b/examples/05-custom-schema/02-suggestion-menus-mentions/App.tsx @@ -5,12 +5,12 @@ import { } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, DefaultReactSuggestionItem, SuggestionMenuController, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { Mention } from "./Mention"; diff --git a/examples/05-custom-schema/02-suggestion-menus-mentions/package.json b/examples/05-custom-schema/02-suggestion-menus-mentions/package.json index d8c980f452..a7815452ce 100644 --- a/examples/05-custom-schema/02-suggestion-menus-mentions/package.json +++ b/examples/05-custom-schema/02-suggestion-menus-mentions/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-suggestion-menus-mentions", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/05-custom-schema/03-font-style/App.tsx b/examples/05-custom-schema/03-font-style/App.tsx index edb7f96322..0035fc1bbb 100644 --- a/examples/05-custom-schema/03-font-style/App.tsx +++ b/examples/05-custom-schema/03-font-style/App.tsx @@ -2,7 +2,6 @@ import { BlockNoteSchema, defaultStyleSpecs } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { BasicTextStyleButton, - BlockNoteView, BlockTypeSelect, ColorStyleButton, CreateLinkButton, @@ -12,12 +11,13 @@ import { NestBlockButton, ReplaceImageButton, TextAlignButton, - ToolbarButton, UnnestBlockButton, useBlockNoteEditor, + useComponentsContext, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { RiText } from "react-icons/ri"; import { Font } from "./Font"; @@ -41,10 +41,12 @@ const SetFontStyleButton = () => { typeof schema.styleSchema >(); + const Components = useComponentsContext()!; + return ( - } onClick={() => { const fontName = prompt("Enter a font name") || "Comic Sans MS"; diff --git a/examples/05-custom-schema/03-font-style/package.json b/examples/05-custom-schema/03-font-style/package.json index f00fab3dee..433bfa0633 100644 --- a/examples/05-custom-schema/03-font-style/package.json +++ b/examples/05-custom-schema/03-font-style/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-font-style", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/05-custom-schema/react-custom-blocks/App.tsx b/examples/05-custom-schema/react-custom-blocks/App.tsx index 49a541a21c..f92ffb7be6 100644 --- a/examples/05-custom-schema/react-custom-blocks/App.tsx +++ b/examples/05-custom-schema/react-custom-blocks/App.tsx @@ -4,12 +4,9 @@ import { defaultProps, } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { - BlockNoteView, - createReactBlockSpec, - useCreateBlockNote, -} from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { createReactBlockSpec, useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/05-custom-schema/react-custom-blocks/package.json b/examples/05-custom-schema/react-custom-blocks/package.json index c76019d6ce..45304a212d 100644 --- a/examples/05-custom-schema/react-custom-blocks/package.json +++ b/examples/05-custom-schema/react-custom-blocks/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-custom-blocks", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/05-custom-schema/react-custom-inline-content/App.tsx b/examples/05-custom-schema/react-custom-inline-content/App.tsx index e321420646..54f0ff7251 100644 --- a/examples/05-custom-schema/react-custom-inline-content/App.tsx +++ b/examples/05-custom-schema/react-custom-inline-content/App.tsx @@ -1,11 +1,11 @@ import { BlockNoteSchema, defaultInlineContentSpecs } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, createReactInlineContentSpec, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; const mention = createReactInlineContentSpec( { diff --git a/examples/05-custom-schema/react-custom-inline-content/package.json b/examples/05-custom-schema/react-custom-inline-content/package.json index 0122e6fd86..c1481cc5a3 100644 --- a/examples/05-custom-schema/react-custom-inline-content/package.json +++ b/examples/05-custom-schema/react-custom-inline-content/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-custom-inline-content", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/05-custom-schema/react-custom-styles/App.tsx b/examples/05-custom-schema/react-custom-styles/App.tsx index aba31bdeda..f19533c79d 100644 --- a/examples/05-custom-schema/react-custom-styles/App.tsx +++ b/examples/05-custom-schema/react-custom-styles/App.tsx @@ -1,17 +1,17 @@ import { BlockNoteSchema, defaultStyleSpecs } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, createReactStyleSpec, FormattingToolbar, FormattingToolbarController, FormattingToolbarProps, - ToolbarButton, useActiveStyles, useBlockNoteEditor, + useComponentsContext, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; const small = createReactStyleSpec( { @@ -51,9 +51,11 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { const editor = useBlockNoteEditor(schema); const activeStyles = useActiveStyles(editor); + const Components = useComponentsContext()!; + return ( - { editor.toggleStyles({ @@ -62,8 +64,8 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { }} isSelected={activeStyles.small}> Small - - + { editor.toggleStyles({ @@ -72,7 +74,7 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { }} isSelected={!!activeStyles.fontSize}> Font size - + ); }; diff --git a/examples/05-custom-schema/react-custom-styles/package.json b/examples/05-custom-schema/react-custom-styles/package.json index 327acc839d..268064ac15 100644 --- a/examples/05-custom-schema/react-custom-styles/package.json +++ b/examples/05-custom-schema/react-custom-styles/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-custom-styles", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/06-collaboration/01-partykit/App.tsx b/examples/06-collaboration/01-partykit/App.tsx index 5d0e98fb51..cecfb6767e 100644 --- a/examples/06-collaboration/01-partykit/App.tsx +++ b/examples/06-collaboration/01-partykit/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import YPartyKitProvider from "y-partykit/provider"; import * as Y from "yjs"; diff --git a/examples/06-collaboration/01-partykit/package.json b/examples/06-collaboration/01-partykit/package.json index 983e97f256..cd02a25020 100644 --- a/examples/06-collaboration/01-partykit/package.json +++ b/examples/06-collaboration/01-partykit/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-partykit", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "y-partykit": "^0.0.25", diff --git a/examples/06-collaboration/02-liveblocks/App.tsx b/examples/06-collaboration/02-liveblocks/App.tsx index cc65e59863..854b6b1091 100644 --- a/examples/06-collaboration/02-liveblocks/App.tsx +++ b/examples/06-collaboration/02-liveblocks/App.tsx @@ -1,6 +1,7 @@ import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import { createClient } from "@liveblocks/client"; import LiveblocksProvider from "@liveblocks/yjs"; import * as Y from "yjs"; diff --git a/examples/06-collaboration/02-liveblocks/package.json b/examples/06-collaboration/02-liveblocks/package.json index 992c95c466..22e6c315d9 100644 --- a/examples/06-collaboration/02-liveblocks/package.json +++ b/examples/06-collaboration/02-liveblocks/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-liveblocks", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0", "@liveblocks/client": "^1.10.0", diff --git a/examples/vanilla-js/react-vanilla-custom-blocks/App.tsx b/examples/vanilla-js/react-vanilla-custom-blocks/App.tsx index 6be9d75827..c0dbb42ce8 100644 --- a/examples/vanilla-js/react-vanilla-custom-blocks/App.tsx +++ b/examples/vanilla-js/react-vanilla-custom-blocks/App.tsx @@ -5,8 +5,9 @@ import { defaultProps, } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; import "./styles.css"; diff --git a/examples/vanilla-js/react-vanilla-custom-blocks/package.json b/examples/vanilla-js/react-vanilla-custom-blocks/package.json index 618db40ffe..1e6bbd0343 100644 --- a/examples/vanilla-js/react-vanilla-custom-blocks/package.json +++ b/examples/vanilla-js/react-vanilla-custom-blocks/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-vanilla-custom-blocks", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/vanilla-js/react-vanilla-custom-inline-content/App.tsx b/examples/vanilla-js/react-vanilla-custom-inline-content/App.tsx index a090f2aa00..7e81477387 100644 --- a/examples/vanilla-js/react-vanilla-custom-inline-content/App.tsx +++ b/examples/vanilla-js/react-vanilla-custom-inline-content/App.tsx @@ -4,8 +4,9 @@ import { defaultInlineContentSpecs, } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; -import { BlockNoteView, useCreateBlockNote } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { useCreateBlockNote } from "@blocknote/react"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; const mention = createInlineContentSpec( { diff --git a/examples/vanilla-js/react-vanilla-custom-inline-content/package.json b/examples/vanilla-js/react-vanilla-custom-inline-content/package.json index 83d07b6eb4..54afa39e7c 100644 --- a/examples/vanilla-js/react-vanilla-custom-inline-content/package.json +++ b/examples/vanilla-js/react-vanilla-custom-inline-content/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-vanilla-custom-inline-content", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/vanilla-js/react-vanilla-custom-styles/App.tsx b/examples/vanilla-js/react-vanilla-custom-styles/App.tsx index ee30b7b8ef..813952cda7 100644 --- a/examples/vanilla-js/react-vanilla-custom-styles/App.tsx +++ b/examples/vanilla-js/react-vanilla-custom-styles/App.tsx @@ -5,16 +5,16 @@ import { } from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { - BlockNoteView, FormattingToolbar, FormattingToolbarController, FormattingToolbarProps, - ToolbarButton, useActiveStyles, useBlockNoteEditor, + useComponentsContext, useCreateBlockNote, } from "@blocknote/react"; -import "@blocknote/react/style.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; const small = createStyleSpec( { @@ -63,9 +63,11 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { const editor = useBlockNoteEditor(schema); const activeStyles = useActiveStyles(editor); + const Components = useComponentsContext()!; + return ( - { editor.toggleStyles({ @@ -74,8 +76,8 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { }} isSelected={activeStyles.small}> Small - - + { editor.toggleStyles({ @@ -84,7 +86,7 @@ const CustomFormattingToolbar = (props: FormattingToolbarProps) => { }} isSelected={!!activeStyles.fontSize}> Font size - + ); }; diff --git a/examples/vanilla-js/react-vanilla-custom-styles/package.json b/examples/vanilla-js/react-vanilla-custom-styles/package.json index d6cb5a2f53..980714f744 100644 --- a/examples/vanilla-js/react-vanilla-custom-styles/package.json +++ b/examples/vanilla-js/react-vanilla-custom-styles/package.json @@ -2,7 +2,7 @@ "name": "@blocknote/example-react-vanilla-custom-styles", "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", "private": true, - "version": "0.12.0", + "version": "0.12.4", "scripts": { "start": "vite", "dev": "vite", @@ -11,8 +11,11 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/package-lock.json b/package-lock.json index ab08e787e9..8164cfb7a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,8 +26,11 @@ "docs": { "version": "0.12.4", "dependencies": { + "@blocknote/ariakit": "^0.12.4", "@blocknote/core": "^0.12.4", + "@blocknote/mantine": "^0.12.4", "@blocknote/react": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "@headlessui/react": "^1.7.18", "@mantine/core": "^7.7.1", "@next/bundle-analyzer": "^14.1.0", @@ -79,9 +82,9 @@ } }, "docs/node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.13.tgz", - "integrity": "sha512-2tPWHCFNC+WRjAC4SIWQNSOdcL1NNkydXim8w7TDqlZi+/ulZYz2OouAI6qMtkggnPt7lGamboj6LcTMwcCvoQ==", + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz", + "integrity": "sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==", "dev": true, "engines": { "node": ">=14.21.3" @@ -152,20 +155,10 @@ } } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "engines": { "node": ">=10" }, @@ -186,10 +179,45 @@ "node": ">=6.0.0" } }, + "node_modules/@ariakit/core": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.6.tgz", + "integrity": "sha512-L2WIZZlxDs611m3YLSv2xvJyQrkkVQJlxn8Y4DlI1G65VLTEH7hysw3RYUNdXsl0gP6S20id3zBMJCHT9BCRcg==" + }, + "node_modules/@ariakit/react": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.6.tgz", + "integrity": "sha512-7lZQew9n+nxswgJ5aL87xo42I+t3A8gWzaxIIZY+c58SLCASh1IdDkGLhGPcyhmXWRIjs/8L1h6cMbRMEBrtJQ==", + "dependencies": { + "@ariakit/react-core": "0.4.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ariakit" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@ariakit/react-core": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.6.tgz", + "integrity": "sha512-2Ca327IzSOxQEd3gEr59JJj0y8fXDMLYd+948wyOzIsk2/yoTnA4+R7Vhs361w3KzOjBQM44KmnNL7ckBMtT0w==", + "dependencies": { + "@ariakit/core": "0.4.6", + "@floating-ui/dom": "^1.0.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@auth/core": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.28.1.tgz", - "integrity": "sha512-gvp74mypYZADpTlfGRp6HE0G3pIHWvtJpy+KZ+8FvY0cmlIpHog+jdMOdd29dQtLtN25kF2YbfHsesCFuGUQbg==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.30.0.tgz", + "integrity": "sha512-8AE4m/nk+4EIiVCJwxZAsJeAQuzpEC8M8768mmKVn60CGDdupKQkVhxbRlm5Qh7eNRCoFFME+0DvtaX2aXrYaA==", "dependencies": { "@panva/hkdf": "^1.1.1", "@types/cookie": "0.6.0", @@ -230,30 +258,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -278,9 +306,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", - "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz", + "integrity": "sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -292,7 +320,7 @@ }, "peerDependencies": { "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { @@ -314,12 +342,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -378,19 +406,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "semver": "^6.3.1" }, "engines": { @@ -436,9 +464,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -486,12 +514,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -510,16 +538,16 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -541,9 +569,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -584,12 +612,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -608,12 +636,12 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -629,9 +657,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -647,40 +675,40 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", + "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/helper-function-name": "^7.23.0", + "@babel/template": "^7.24.0", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.5", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -761,9 +789,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -772,6 +800,22 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", @@ -1296,12 +1340,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1327,12 +1371,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1344,18 +1388,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" }, "engines": { @@ -1391,12 +1435,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1726,15 +1770,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/plugin-transform-parameters": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1776,12 +1820,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1793,12 +1837,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1824,14 +1868,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1906,12 +1950,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", - "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", + "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -2073,12 +2117,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -2088,14 +2132,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz", - "integrity": "sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz", + "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { @@ -2169,15 +2213,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", - "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.1", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", @@ -2204,12 +2249,12 @@ "@babel/plugin-transform-async-generator-functions": "^7.24.3", "@babel/plugin-transform-async-to-generator": "^7.24.1", "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.1", - "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", "@babel/plugin-transform-dotall-regex": "^7.24.1", "@babel/plugin-transform-duplicate-keys": "^7.24.1", "@babel/plugin-transform-dynamic-import": "^7.24.1", @@ -2229,13 +2274,13 @@ "@babel/plugin-transform-new-target": "^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", "@babel/plugin-transform-object-super": "^7.24.1", "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.1", - "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", "@babel/plugin-transform-property-literals": "^7.24.1", "@babel/plugin-transform-regenerator": "^7.24.1", "@babel/plugin-transform-reserved-words": "^7.24.1", @@ -2243,7 +2288,7 @@ "@babel/plugin-transform-spread": "^7.24.1", "@babel/plugin-transform-sticky-regex": "^7.24.1", "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", "@babel/plugin-transform-unicode-escapes": "^7.24.1", "@babel/plugin-transform-unicode-property-regex": "^7.24.1", "@babel/plugin-transform-unicode-regex": "^7.24.1", @@ -2331,9 +2376,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2356,19 +2401,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2386,19 +2431,23 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@blocknote/ariakit": { + "resolved": "packages/ariakit", + "link": true + }, "node_modules/@blocknote/core": { "resolved": "packages/core", "link": true @@ -2411,10 +2460,18 @@ "resolved": "playground", "link": true }, + "node_modules/@blocknote/mantine": { + "resolved": "packages/mantine", + "link": true + }, "node_modules/@blocknote/react": { "resolved": "packages/react", "link": true }, + "node_modules/@blocknote/shadcn": { + "resolved": "packages/shadcn", + "link": true + }, "node_modules/@blocknote/tests": { "resolved": "tests", "link": true @@ -2980,26 +3037,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", - "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", + "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", "dependencies": { - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", - "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.4.tgz", + "integrity": "sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==", "dependencies": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react": { - "version": "0.26.10", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.10.tgz", - "integrity": "sha512-sh6f9gVvWQdEzLObrWbJ97c0clJObiALsFe0LiR/kb3tDRKwEhObASEH2QyfdoO/ZBPzwxa9j+nYFo+sqgbioA==", + "version": "0.26.13", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.13.tgz", + "integrity": "sha512-kBa9wntpugzrZ8t/4yWelvSmEKZdeTXTJzrxqyrLmcU/n1SM4nvse8yQh2e1b37rJGvtu0EplV9+IkBrCJ1vkw==", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@floating-ui/utils": "^0.2.0", @@ -3011,11 +3068,11 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", - "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", + "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", "dependencies": { - "@floating-ui/dom": "^1.6.1" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -3023,9 +3080,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@gar/promisify": { "version": "1.1.3", @@ -3034,9 +3091,9 @@ "dev": true }, "node_modules/@headlessui/react": { - "version": "1.7.18", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.18.tgz", - "integrity": "sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==", + "version": "1.7.19", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.19.tgz", + "integrity": "sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==", "dependencies": { "@tanstack/react-virtual": "^3.0.0-beta.60", "client-only": "^0.0.1" @@ -3049,6 +3106,14 @@ "react-dom": "^16 || ^17 || ^18" } }, + "node_modules/@hookform/resolvers": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.3.4.tgz", + "integrity": "sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ==", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -3095,7 +3160,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3112,7 +3176,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -3124,7 +3187,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -4271,25 +4333,25 @@ } }, "node_modules/@liveblocks/client": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@liveblocks/client/-/client-1.11.0.tgz", - "integrity": "sha512-dZJM6rra/jBk7C++Cm7PX10TbwklkDv76LmMs8IZj8qkXrdG91ejT5PuLXXo3sDIMCdr2apbKyS6pdb8yw4DCA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@liveblocks/client/-/client-1.11.3.tgz", + "integrity": "sha512-Vinzfrz/pBGN/l3XTDgYiUrBzs1xmzKzMtES/qHdIWxTVyVEBT5p8ilyi7kSCdRkdSe6bfmnJmkQljViTsX3vw==", "dependencies": { - "@liveblocks/core": "1.11.0" + "@liveblocks/core": "1.11.3" } }, "node_modules/@liveblocks/core": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@liveblocks/core/-/core-1.11.0.tgz", - "integrity": "sha512-fB5ZlT/HiXHynDiVwtGz7/9ZJy9RF7nziJ7LicVvMc9OCuibLj8xl4Mp/ZHvFSAcbpWA2kKQe0m0wPawSkamIw==" + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@liveblocks/core/-/core-1.11.3.tgz", + "integrity": "sha512-lai5o9nhgboocb+AQzL94syp8CZ4blTJFk6xWgUD+/L3qK110ADp7JSEH93k90pXqjf5zBOj5XWPMYehQ6I43w==" }, "node_modules/@liveblocks/yjs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@liveblocks/yjs/-/yjs-1.11.0.tgz", - "integrity": "sha512-CfuHUxelk1hflN7BJuVSkNeFqByjes49MAYRHbt/vK41/GpylepCc3EOdU+MWqDPl5CctdVNE7FPbjaSLS3l+g==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@liveblocks/yjs/-/yjs-1.11.3.tgz", + "integrity": "sha512-HB2Gi+Z7FuHZe9QuESfyAXhs+rYh7vSK6l/1SpKFYcQdp6/Kjk9jQNfx0UFw4GhhnJzTKnPE7HMQYSTmtisNkQ==", "dependencies": { - "@liveblocks/client": "1.11.0", - "@liveblocks/core": "1.11.0", + "@liveblocks/client": "1.11.3", + "@liveblocks/core": "1.11.3", "js-base64": "^3.7.5" }, "peerDependencies": { @@ -4297,9 +4359,9 @@ } }, "node_modules/@mantine/core": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.7.1.tgz", - "integrity": "sha512-SdPzjvqvEK7uHFuVD3a8w3OZyQVoCwIXLSUfOtRNouDMQgsq6Ac7QjKXBBOk3wNweOWFVOU1vATLHobSmow0lQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.8.1.tgz", + "integrity": "sha512-dttbP2BhBzFJYBqgAQedJRca5+MXlJbppRhRsufnFeO7YC/UpZutOoHQ9dxGEQnhAWJ/d+wuRvYWG/gXex+wYQ==", "dependencies": { "@floating-ui/react": "^0.26.9", "clsx": "2.1.0", @@ -4309,15 +4371,23 @@ "type-fest": "^4.12.0" }, "peerDependencies": { - "@mantine/hooks": "7.7.1", + "@mantine/hooks": "7.8.1", "react": "^18.2.0", "react-dom": "^18.2.0" } }, + "node_modules/@mantine/core/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, "node_modules/@mantine/hooks": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.7.1.tgz", - "integrity": "sha512-3YH2FzKMlg840tb04PBDcDXyBCi9puFOxEBVgc6Y/pN6KFqfOoAnQE/YvgOtwSNXZlbTWyDlQoYj+3je7pA7og==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.8.1.tgz", + "integrity": "sha512-zCLqnxTUR2N6Awbt4rv/26UKTc75dXTVmCPsWUb6wdQExuC28fucG6kMoNYHVmOBDq9f3KP9zWOGDelHM2ogZA==", "peerDependencies": { "react": "^18.2.0" } @@ -4569,9 +4639,9 @@ } }, "node_modules/@next/bundle-analyzer": { - "version": "14.1.4", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.1.4.tgz", - "integrity": "sha512-IpF/18HcAOcfHRr24tqPOUpMmVKIqvkCxIubMeRYWCXs3jm7niPGrt8Mu74yMDzfGlUwgQA6Xd6BUc5+jQxcEg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.2.3.tgz", + "integrity": "sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA==", "dependencies": { "webpack-bundle-analyzer": "4.10.1" } @@ -4784,7 +4854,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4797,7 +4866,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -4806,7 +4874,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -5517,21 +5584,20 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" } }, "node_modules/@playwright/experimental-ct-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.42.1.tgz", - "integrity": "sha512-wBS6pzgJwRuK0MwgiooamLW0prQLgT0RAhxooeMyqU97VbDI5aYuuynlxobJDDymU4HcOKARg2rG8h6jX7ShrA==", + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.43.1.tgz", + "integrity": "sha512-4llE4A8fgqRsIHIAO4FVcolxzkvhJ60462C8MBERUEmEa4K/X34NiEIi2mhQTcfWp4iBlf9JPspiun3FDv/yig==", "dev": true, "dependencies": { - "playwright": "1.42.1", - "playwright-core": "1.42.1", - "vite": "^5.0.12" + "playwright": "1.43.1", + "playwright-core": "1.43.1", + "vite": "^5.0.13" }, "bin": { "playwright": "cli.js" @@ -5944,104 +6010,951 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/@playwright/experimental-ct-core/node_modules/vite": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", - "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", - "dev": true, + "node_modules/@playwright/experimental-ct-core/node_modules/vite": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", + "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/@playwright/experimental-ct-react": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.43.1.tgz", + "integrity": "sha512-DZ09HBBa0iLxINHjlFbn/qZdpcSAgCFLSRvLDfrCFapT7umvPWg0T/ngleiEpuleSm0ZQpDKiE6GQF4TtqxRNA==", + "dev": true, + "dependencies": { + "@playwright/experimental-ct-core": "1.43.1", + "@vitejs/plugin-react": "^4.2.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@playwright/test": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", + "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "dev": true, + "dependencies": { + "playwright": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@radix-ui/colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", + "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==", + "dev": true + }, + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", + "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", + "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz", + "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", + "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, - "bin": { - "vite": "bin/vite.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "engines": { - "node": "^18.0.0 || >=20.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dependencies": { + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { + "@types/react": { "optional": true } } }, - "node_modules/@playwright/experimental-ct-react": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.42.1.tgz", - "integrity": "sha512-/dxu7nkGOlZIx9MUGQPM5kiIGksYIBaaJKQuNmaJNV29V3VGI1p9yQqrvl1jFK/Hu7SC1LmFB8RlkrOgMiZKYg==", - "dev": true, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", "dependencies": { - "@playwright/experimental-ct-core": "1.42.1", - "@vitejs/plugin-react": "^4.2.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" }, - "bin": { - "playwright": "cli.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "engines": { - "node": ">=16" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", - "dev": true, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", "dependencies": { - "playwright": "1.42.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "bin": { - "playwright": "cli.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "engines": { - "node": ">=16" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" } }, "node_modules/@remirror/core-constants": { @@ -6050,9 +6963,9 @@ "integrity": "sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==" }, "node_modules/@remix-run/router": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", - "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", + "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==", "engines": { "node": ">=14.0.0" } @@ -6079,9 +6992,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", - "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", "cpu": [ "arm" ], @@ -6093,9 +7006,9 @@ "peer": true }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", - "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", "cpu": [ "arm64" ], @@ -6107,9 +7020,9 @@ "peer": true }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", - "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", "cpu": [ "arm64" ], @@ -6121,9 +7034,9 @@ "peer": true }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", - "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", "cpu": [ "x64" ], @@ -6135,9 +7048,23 @@ "peer": true }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", - "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", "cpu": [ "arm" ], @@ -6149,9 +7076,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", - "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", "cpu": [ "arm64" ], @@ -6163,9 +7090,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", - "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", "cpu": [ "arm64" ], @@ -6177,11 +7104,11 @@ "peer": true }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", - "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", "cpu": [ - "ppc64le" + "ppc64" ], "dev": true, "optional": true, @@ -6191,9 +7118,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", - "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", "cpu": [ "riscv64" ], @@ -6205,9 +7132,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", - "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", "cpu": [ "s390x" ], @@ -6219,9 +7146,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", - "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", "cpu": [ "x64" ], @@ -6233,9 +7160,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", - "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", "cpu": [ "x64" ], @@ -6247,9 +7174,9 @@ "peer": true }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", - "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", "cpu": [ "arm64" ], @@ -6261,9 +7188,9 @@ "peer": true }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", - "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", "cpu": [ "ia32" ], @@ -6275,9 +7202,9 @@ "peer": true }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", - "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", "cpu": [ "x64" ], @@ -6289,9 +7216,9 @@ "peer": true }, "node_modules/@rushstack/eslint-patch": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", - "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, "node_modules/@shuding/opentype.js": { @@ -6324,11 +7251,11 @@ } }, "node_modules/@tanstack/react-virtual": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.2.0.tgz", - "integrity": "sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.5.0.tgz", + "integrity": "sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==", "dependencies": { - "@tanstack/virtual-core": "3.2.0" + "@tanstack/virtual-core": "3.5.0" }, "funding": { "type": "github", @@ -6340,9 +7267,9 @@ } }, "node_modules/@tanstack/virtual-core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.2.0.tgz", - "integrity": "sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.5.0.tgz", + "integrity": "sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -6408,9 +7335,9 @@ } }, "node_modules/@tiptap/core": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.2.4.tgz", - "integrity": "sha512-cRrI8IlLIhCE1hacBQzXIC8dsRvGq6a4lYWQK/BaHuZg21CG7szp3Vd8Ix+ra1f5v0xPOT+Hy+QFNQooRMKMCw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.3.0.tgz", + "integrity": "sha512-Gk2JN3i5CMkYGmsbyFI7cBUftWa+F7QYmeCLTWfbuy+hCM2OBsnYVKxhggFPGXRL5KLBEgBWeCeWMHfIw3B2MA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6420,9 +7347,9 @@ } }, "node_modules/@tiptap/extension-bold": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.2.4.tgz", - "integrity": "sha512-v3tTLc8YESFZPOGj5ByFr8VbmQ/PTo49T1vsK50VubxIN/5r9cXlKH8kb3dZlZxCxJa3FrXNO/M8rdGBSWQvSg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.3.0.tgz", + "integrity": "sha512-SzkbJibHXFNU7TRaAebTtwbXUEhGZ8+MhlBn12aQ4QhdjNtFpQwKXQPyYeDyZGcyiOFgtFTb+WIfCGm8ZX0Fpw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6432,9 +7359,9 @@ } }, "node_modules/@tiptap/extension-bubble-menu": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.2.4.tgz", - "integrity": "sha512-Nx1fS9jcFlhxaTDYlnayz2UulhK6CMaePc36+7PQIVI+u20RhgTCRNr25zKNemvsiM0RPZZVUjlHkxC0l5as1Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.3.0.tgz", + "integrity": "sha512-dqyfQ8idTlhapvt0fxCGvkyjw92pBEwPqmkJ01h3EE8wTh53j0ytOHyMSf1KBuzardxpd8Yya3zlrAcR0Z3DlQ==", "dependencies": { "tippy.js": "^6.3.7" }, @@ -6448,9 +7375,9 @@ } }, "node_modules/@tiptap/extension-code": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.2.4.tgz", - "integrity": "sha512-JB4SJ2mUU/9qXFUf+K5K9szvovnN9AIcCb0f0UlcVBuddKHSqCl3wO3QJgYt44BfQTLMNuyzr+zVqfFd6BNt/g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.3.0.tgz", + "integrity": "sha512-O2FZmosiIRoVbW82fZy8xW4h4gb2xAzxWzHEcsHPlwCbE3vYvcBMmbkQ5p+33eRtuRQInzl3Q/cwupv9ctIepQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6460,9 +7387,9 @@ } }, "node_modules/@tiptap/extension-collaboration": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.2.4.tgz", - "integrity": "sha512-Q9DnGeTYhB8TDud9B2zbRZqbNdBi0C/zzTYora2bFRRXnUzQUJgvV7HeIcHajj2wdKe8HXGwXjrCzORUtwUFgA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.3.0.tgz", + "integrity": "sha512-mim3lG+wdlSYiPdPYO6jAt0YhBauS0E1GoqrDgIVPM5G3qqcMC8DMLsA3XPkf5LZE7JSJRcX+R8Wo2VJXvqqYQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6474,9 +7401,9 @@ } }, "node_modules/@tiptap/extension-collaboration-cursor": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.2.4.tgz", - "integrity": "sha512-G0j08yGwFaq3AiaNHR+CUVCqLQv0fZhmwy9V1ByE7YkIgiDs9icCuKo1cbY2riW/Sn874rIHEctMxA8hVsNttw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.3.0.tgz", + "integrity": "sha512-nwh3yBuFCBvGLzJeCDzwAesm4nkbIQuYJCM7IUt/JHnY4nj6H9ZtJQw4gWe4CCiEzl8zgozIDyq/WSExweH7zw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6487,9 +7414,9 @@ } }, "node_modules/@tiptap/extension-dropcursor": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.2.4.tgz", - "integrity": "sha512-IHwkEKmqpqXyJi16h7871NrcIqeyN7I6XRE2qdqi+MhGigVWI8nWHoYbjRKa7K/1uhs5zeRYyDlq5EuZyL6mgA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.3.0.tgz", + "integrity": "sha512-WWxxGQPWdbzxyYP6jtBYSq4wMRhINhI0wBC8pgkxTVwCIWftMuYj++FP4LLIpuWgj78PWApuoM0QQxk4Lj7FOw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6500,9 +7427,9 @@ } }, "node_modules/@tiptap/extension-floating-menu": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.2.4.tgz", - "integrity": "sha512-U25l7PEzOmlAPugNRl8t8lqyhQZS6W/+3f92+FdwW9qXju3i62iX/3OGCC3Gv+vybmQ4fbZmMjvl+VDfenNi3A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.3.0.tgz", + "integrity": "sha512-bNY43/yU/+wGfmk2eDV7EPDAN/akbC+YnSKTA5VPJADzscvlrL2HlQrxbd/STIdlwKqdPU5MokcvCChhfZ4f6w==", "dependencies": { "tippy.js": "^6.3.7" }, @@ -6516,9 +7443,9 @@ } }, "node_modules/@tiptap/extension-gapcursor": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.2.4.tgz", - "integrity": "sha512-Y6htT/RDSqkQ1UwG2Ia+rNVRvxrKPOs3RbqKHPaWr3vbFWwhHyKhMCvi/FqfI3d5pViVHOZQ7jhb5hT/a0BmNw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.3.0.tgz", + "integrity": "sha512-OxcXcfD0uzNcXdXu2ZpXFAtXIsgK2MBHvFUs0t0gxtcL/t43pTOQBLy+29Ei30BxpwLghtX8jQ6IDzMiybq/sA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6529,9 +7456,9 @@ } }, "node_modules/@tiptap/extension-hard-break": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.2.4.tgz", - "integrity": "sha512-FPvS57GcqHIeLbPKGJa3gnH30Xw+YB1PXXnAWG2MpnMtc2Vtj1l5xaYYBZB+ADdXLAlU0YMbKhFLQO4+pg1Isg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.3.0.tgz", + "integrity": "sha512-9pXi69SzLabbjY5KZ54UKzu7HAHTla9aYZKH56VatOAiJOPKJppFbU2/NfJwGzDrEtfOiDqr3dYbUDF3RuCFoQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6541,9 +7468,9 @@ } }, "node_modules/@tiptap/extension-history": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.2.4.tgz", - "integrity": "sha512-FDM32XYF5NU4mzh+fJ8w2CyUqv0l2Nl15sd6fOhQkVxSj8t57z+DUXc9ZR3zkH+1RAagYJo/2Gu3e99KpMr0tg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.3.0.tgz", + "integrity": "sha512-EF5Oq9fe/VBzU1Lsow2ubOlx1e1r4OQT1WUPGsRnL7pr94GH1Skpk7/hs9COJ9K6kP3Ebt42XjP0JEQodR58YA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6554,9 +7481,9 @@ } }, "node_modules/@tiptap/extension-horizontal-rule": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.2.4.tgz", - "integrity": "sha512-iCRHjFQQHApWg3R4fkKkJQhWEOdu1Fdc4YEAukdOXPSg3fg36IwjvsMXjt9SYBtVZ+iio3rORCZGXyMvgCH9uw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.3.0.tgz", + "integrity": "sha512-4DB8GU3uuDzzyqUmONIb3CHXcQ6Nuy4mHHkFSmUyEjg1i5eMQU5H7S6mNvZbltcJB2ImgCSwSMlj1kVN3MLIPg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6567,9 +7494,9 @@ } }, "node_modules/@tiptap/extension-italic": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.2.4.tgz", - "integrity": "sha512-qIhGNvWnsQswSgEMRA8jQQjxfkOGNAuNWKEVQX9DPoqAUgknT41hQcAMP8L2+OdACpb2jbVMOO5Cy5Dof2L8/w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.3.0.tgz", + "integrity": "sha512-jdFjLjdt5JtPlGMpoS6TEq5rznjbAYVlPwcw5VkYENVIYIGIR1ylIw2JwK1nUEsQ+OgYwVxHLejcUXWG1dCi2g==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6579,9 +7506,9 @@ } }, "node_modules/@tiptap/extension-link": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.2.4.tgz", - "integrity": "sha512-Qsx0cFZm4dxbkToXs5TcXbSoUdicv8db1gV1DYIZdETqjBm4wFjlzCUP7hPHFlvNfeSy1BzAMRt+RpeuiwvxWQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.3.0.tgz", + "integrity": "sha512-CnJAlV0ZOdEhKmDfYKuHJVG8g79iCFQ85cX/CROTWyuMfXz9uhj2rLpZ6nfidVbonqxAhQp7NAIr2y+Fj5/53A==", "dependencies": { "linkifyjs": "^4.1.0" }, @@ -6595,9 +7522,9 @@ } }, "node_modules/@tiptap/extension-paragraph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.2.4.tgz", - "integrity": "sha512-m1KwyvTNJxsq7StbspbcOhxO4Wk4YpElDbqOouWi+H4c8azdpI5Pn96ZqhFeE9bSyjByg6OcB/wqoJsLbeFWdQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.3.0.tgz", + "integrity": "sha512-peCpA7DFqkd0cHb+cHv4YHNoMsXG8tKFNJlCHpLmsZWl2hWmpKgKmUrXAUfzjcFSvkZxn0xYc5oWbqUgg+2LzA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6607,9 +7534,9 @@ } }, "node_modules/@tiptap/extension-strike": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.2.4.tgz", - "integrity": "sha512-/a2EwQgA+PpG17V2tVRspcrIY0SN3blwcgM7lxdW4aucGkqSKnf7+91dkhQEwCZ//o8kv9mBCyRoCUcGy6S5Xg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.3.0.tgz", + "integrity": "sha512-gOW4ALeH8gkJiUGGXVy/AOd5lAPTX0bzoOW1+sCLcTA7t8dluBW7M2ngNYxTEtlKqyv7aLfrgsYSiqucmmfSLw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6619,9 +7546,9 @@ } }, "node_modules/@tiptap/extension-table-cell": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.2.4.tgz", - "integrity": "sha512-Dt3FjNjM1Mh2BgEjvx5+s96DiJpC82BdMtqicO3z/Pk0X1bn70ocMuURNR7upfRYI+9YbE3+3wBk/vY1yf7ydw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.3.0.tgz", + "integrity": "sha512-jsFp5lc+be04AsuMiTGlluLnsmJl/51+sv0DewYHeidh7iyvk3R5y2pyA+Bk1V/txFdaH5GxOQvSH3RonEVMAg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6631,9 +7558,9 @@ } }, "node_modules/@tiptap/extension-table-header": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.2.4.tgz", - "integrity": "sha512-epRrB/468yGvKb/n6lW3VXWUpjMp3+mKxGWfsXLQncGb1leRbqkgQgsUUYuIEosk+70bjzz6lbfHKQBz408s3g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.3.0.tgz", + "integrity": "sha512-wLvJqDBaXc/xs+NBJZoSIfO7fVYqcrIlsdtQRlBec3vTpSG0w0zlrM/JY4mjQKHzWsDk6hb9mvbK2scChOu5TA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6643,9 +7570,9 @@ } }, "node_modules/@tiptap/extension-table-row": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.2.4.tgz", - "integrity": "sha512-VItZ0byY5CVMrcSRrdBjhElHxIq1JQAAli+o3UNYM5rLKHKx4ezeBCUh80wIKvmaAxWsLMs8h/t4crxUE8dyHA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.3.0.tgz", + "integrity": "sha512-i2o/S8Mggw1GDxF5N5i8SvDvmOvbHu8MuWpdhFwfOkbrnEdtHlU/GjWIEstPymg4QyrfAEQa/KDffkrX0T7RNw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6655,9 +7582,9 @@ } }, "node_modules/@tiptap/extension-text": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.2.4.tgz", - "integrity": "sha512-NlKHMPnRJXB+0AGtDlU0P2Pg+SdesA2lMMd7JzDUgJgL7pX2jOb8eUqSeOjFKuSzFSqYfH6C3o6mQiNhuQMv+g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.3.0.tgz", + "integrity": "sha512-zkudl0TyKRy/8vHtyo5dMzjBRD0HEUnsS8YOsjR4xwQq5EYUXleRgM1s6lb6Yms2sLUAZRWdDddoQ686iq4zQg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6667,9 +7594,9 @@ } }, "node_modules/@tiptap/extension-underline": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.2.4.tgz", - "integrity": "sha512-jCHgIJMwtXlGHVy/j3L8/QvglHCikkHJw7YS5yf8E/8HlPh1tZfVy/IxdgacDOpUN30X+UPJZQDdVKymafgwdA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.3.0.tgz", + "integrity": "sha512-vmmcwCPmWqGKYHZevz50+bxrpHyiu5y6YZweAE476hn8Mud6vYg7RpkXgW8bjkCOky6UA51uelslSc0XrLE6uw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -6679,9 +7606,9 @@ } }, "node_modules/@tiptap/pm": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.2.4.tgz", - "integrity": "sha512-Po0klR165zgtinhVp1nwMubjyKx6gAY9kH3IzcniYLCkqhPgiqnAcCr61TBpp4hfK8YURBS4ihvCB1dyfCyY8A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.3.0.tgz", + "integrity": "sha512-4WYqShZBwDyReKvapC0nmeYdOtZbZ31y4MjolpKQaSD4I7kg/oZspC+byUGdvIRsNpRN7i2X0IyvdISKk8gw5Q==", "dependencies": { "prosemirror-changeset": "^2.2.1", "prosemirror-collab": "^1.3.1", @@ -6708,12 +7635,12 @@ } }, "node_modules/@tiptap/react": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.2.4.tgz", - "integrity": "sha512-HkYmMZWcETPZn3KpzdDg/ns2TKeFh54TvtCEInA4ljYtWGLoZc/A+KaiEtMIgVs+Mo1XwrhuoNGjL9c0OK2HJw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.3.0.tgz", + "integrity": "sha512-ThgFJQTWYKRClTV2Zg0wBRqfy0EGz3U4NOey7jwncUjSjx5+o9nXbfQAYWDKQFfWyE+wnrBTYfddEP9pHNX5cQ==", "dependencies": { - "@tiptap/extension-bubble-menu": "^2.2.4", - "@tiptap/extension-floating-menu": "^2.2.4" + "@tiptap/extension-bubble-menu": "^2.3.0", + "@tiptap/extension-floating-menu": "^2.3.0" }, "funding": { "type": "github", @@ -6831,9 +7758,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.7", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.7.tgz", - "integrity": "sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -6938,9 +7865,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.12.tgz", - "integrity": "sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -6960,9 +7887,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.3.tgz", - "integrity": "sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } @@ -6990,19 +7917,19 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.2.74", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", - "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", + "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.23", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", - "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", - "dev": true, + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "devOptional": true, "dependencies": { "@types/react": "*" } @@ -7765,7 +8692,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7779,7 +8705,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7793,14 +8718,12 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -7850,14 +8773,24 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -8121,7 +9054,6 @@ "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "dev": true, "funding": [ { "type": "opencollective", @@ -8214,13 +9146,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -8250,12 +9182,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", - "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -8303,8 +9235,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -8370,7 +9301,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "engines": { "node": ">=8" }, @@ -8403,7 +9333,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -8472,9 +9401,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, "dependencies": { "semver": "^7.0.0" @@ -8646,7 +9575,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "engines": { "node": ">= 6" } @@ -8677,9 +9605,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "version": "1.0.30001614", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", + "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", "funding": [ { "type": "opencollective", @@ -8805,7 +9733,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8829,7 +9756,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -8861,6 +9787,25 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -9140,9 +10085,9 @@ } }, "node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } @@ -9163,7 +10108,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -9220,11 +10164,11 @@ } }, "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">= 12" + "node": ">= 6" } }, "node_modules/common-ancestor-path": { @@ -9281,6 +10225,12 @@ "typedarray": "^0.0.6" } }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -9452,9 +10402,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", - "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", "dev": true, "dependencies": { "browserslist": "^4.23.0" @@ -9544,7 +10494,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -9570,13 +10519,9 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/cytoscape": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.28.1.tgz", - "integrity": "sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.29.2.tgz", + "integrity": "sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ==", "engines": { "node": ">=0.10" } @@ -10120,9 +11065,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/debounce": { "version": "1.2.1", @@ -10362,8 +11307,7 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff": { "version": "5.2.0", @@ -10397,8 +11341,7 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/docs": { "resolved": "docs", @@ -10430,9 +11373,9 @@ } }, "node_modules/dompurify": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.11.tgz", - "integrity": "sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.2.tgz", + "integrity": "sha512-hLGGBI1tw5N8qTELr3blKjAML/LY4ANxksbS612UiJyDfyf/2D092Pvm+S7pmeTGJRqvlJkFzBoHBQKgQlOQVg==" }, "node_modules/dot-prop": { "version": "6.0.1", @@ -10466,13 +11409,12 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -10485,20 +11427,19 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.724", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz", - "integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA==" + "version": "1.4.751", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", + "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==" }, "node_modules/elkjs": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.2.tgz", - "integrity": "sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -10585,9 +11526,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -10693,14 +11634,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -10718,9 +11659,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", - "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz", + "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==", "peer": true }, "node_modules/es-object-atoms": { @@ -11203,9 +12144,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -11603,7 +12544,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -11619,7 +12559,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -11642,7 +12581,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -11722,7 +12660,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -11827,7 +12764,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -11857,7 +12793,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, "engines": { "node": "*" }, @@ -11950,7 +12885,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -11964,7 +12898,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12314,9 +13247,9 @@ } }, "node_modules/github-buttons": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/github-buttons/-/github-buttons-2.27.0.tgz", - "integrity": "sha512-PmfRMI2Rttg/2jDfKBeSl621sEznrsKF019SuoLdoNlO7qRUZaOyEI5Li4uW+79pVqnDtKfIEVuHTIJ5lgy64w==" + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/github-buttons/-/github-buttons-2.28.0.tgz", + "integrity": "sha512-KsCbYiA+MiHO3ytzdGvGt/GNde4GfG9BrrLxxc+ut2snBF9IAjrn2F5mNgHHEXdG/CfFIHOMV8Uxy4LNhxZwUA==" }, "node_modules/github-slugger": { "version": "2.0.0", @@ -12327,7 +13260,6 @@ "version": "10.3.12", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", @@ -12349,7 +13281,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -12366,7 +13297,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -12375,7 +13305,6 @@ "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12414,12 +13343,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12695,7 +13625,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -13347,11 +14276,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, "node_modules/hex-rgb": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", @@ -13876,7 +14800,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -13950,7 +14873,6 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, "dependencies": { "hasown": "^2.0.0" }, @@ -14024,7 +14946,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14045,7 +14966,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -14069,7 +14989,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -14160,7 +15079,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -14479,7 +15397,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -14544,15 +15461,14 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true, "bin": { "jiti": "bin/jiti.js" } }, "node_modules/jose": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.2.3.tgz", - "integrity": "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.2.4.tgz", + "integrity": "sha512-6ScbIk2WWCeXkmzF6bRPmEuaqy1m8SbsRFMa/FLrSCkGIhj8OLVG/IH+XHVmNMx/KUo8cVWEE6oKR4dJ+S0Rkg==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -14779,6 +15695,14 @@ "katex": "cli.js" } }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -15064,7 +15988,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, "engines": { "node": ">=10" } @@ -15184,7 +16107,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash-es": { "version": "4.17.21", @@ -15266,16 +16190,21 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.362.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.362.0.tgz", + "integrity": "sha512-0S+JudK0AD9vyB0zbu1K0aQsy8k9Wq2l03bio6wxqF2FhK2TSp/y+22HfMyv40EURifgxoSwdU8eIcOv0a8gBA==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/make-dir": { @@ -15939,7 +16868,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -16687,7 +17615,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -16797,7 +17724,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -17130,7 +18056,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -17226,11 +18151,11 @@ } }, "node_modules/next-auth": { - "version": "5.0.0-beta.16", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.16.tgz", - "integrity": "sha512-dX2snB+ezN23tFzSes3n3uosT9iBf0eILPYWH/R2fd9n3ZzdMQlRzq7JIOPeS1aLc84IuRlyuyXyx9XmmZB6og==", + "version": "5.0.0-beta.17", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.17.tgz", + "integrity": "sha512-XA/7JtAjOgDfAeotJPFUsFZGGItZwzZrxLt9Gc9fE7EchLk6zydZfuZ22Vvwixs3IilkN644D5IoD5tEOAFGCQ==", "dependencies": { - "@auth/core": "0.28.1" + "@auth/core": "0.30.0" }, "peerDependencies": { "@simplewebauthn/browser": "^9.0.1", @@ -17583,7 +18508,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -17592,7 +18516,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -17933,9 +18856,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==", "dev": true }, "node_modules/nx": { @@ -18233,7 +19156,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "engines": { "node": ">= 6" } @@ -18404,17 +19326,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -19402,14 +20324,12 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", - "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -19422,10 +20342,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } @@ -19481,7 +20400,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -19505,7 +20423,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "engines": { "node": ">= 6" } @@ -19575,23 +20492,23 @@ } }, "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz", + "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==", "dev": true, "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "confbox": "^0.1.7", + "mlly": "^1.6.1", + "pathe": "^1.1.2" } }, "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", + "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", "dev": true, "dependencies": { - "playwright-core": "1.42.1" + "playwright-core": "1.43.1" }, "bin": { "playwright": "cli.js" @@ -19604,9 +20521,9 @@ } }, "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", + "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -19628,7 +20545,6 @@ "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -19656,7 +20572,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -19673,7 +20588,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -19692,7 +20606,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -19727,7 +20640,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "dev": true, "engines": { "node": ">=14" }, @@ -19736,10 +20648,9 @@ } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "bin": { "yaml": "bin.mjs" }, @@ -19751,7 +20662,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -19770,7 +20680,6 @@ "version": "6.0.16", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19860,9 +20769,9 @@ } }, "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/printable-characters": { @@ -19942,9 +20851,9 @@ } }, "node_modules/property-information": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", - "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -20117,11 +21026,11 @@ } }, "node_modules/prosemirror-view": { - "version": "1.33.3", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.3.tgz", - "integrity": "sha512-P4Ao/bc4OrU/2yLIf8dL4lJaEtjLR3QjIvQHgJYp2jUS7kYM4bSR6okbBjkqzOs/FwUon6UGjTLdKMnPL1MZqw==", + "version": "1.33.6", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.6.tgz", + "integrity": "sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==", "dependencies": { - "prosemirror-model": "^1.16.0", + "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } @@ -20190,7 +21099,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -20277,6 +21185,21 @@ "react": ">=16.3.0" } }, + "node_modules/react-hook-form": { + "version": "7.51.3", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.3.tgz", + "integrity": "sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-icons": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", @@ -20303,9 +21226,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -20357,11 +21280,11 @@ } }, "node_modules/react-router": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", - "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", + "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", "dependencies": { - "@remix-run/router": "1.15.3" + "@remix-run/router": "1.16.0" }, "engines": { "node": ">=14.0.0" @@ -20371,12 +21294,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", - "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", + "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", "dependencies": { - "@remix-run/router": "1.15.3", - "react-router": "6.22.3" + "@remix-run/router": "1.16.0", + "react-router": "6.23.0" }, "engines": { "node": ">=14.0.0" @@ -20440,7 +21363,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -20449,7 +21371,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -20786,7 +21707,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -20980,9 +21900,9 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/rehype-katex/node_modules/hast-util-to-text": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", - "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -21610,7 +22530,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -21694,7 +22613,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -21741,9 +22659,9 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", - "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -21756,28 +22674,29 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.2", - "@rollup/rollup-android-arm64": "4.13.2", - "@rollup/rollup-darwin-arm64": "4.13.2", - "@rollup/rollup-darwin-x64": "4.13.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", - "@rollup/rollup-linux-arm64-gnu": "4.13.2", - "@rollup/rollup-linux-arm64-musl": "4.13.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", - "@rollup/rollup-linux-riscv64-gnu": "4.13.2", - "@rollup/rollup-linux-s390x-gnu": "4.13.2", - "@rollup/rollup-linux-x64-gnu": "4.13.2", - "@rollup/rollup-linux-x64-musl": "4.13.2", - "@rollup/rollup-win32-arm64-msvc": "4.13.2", - "@rollup/rollup-win32-ia32-msvc": "4.13.2", - "@rollup/rollup-win32-x64-msvc": "4.13.2", + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-webpack-stats": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/rollup-plugin-webpack-stats/-/rollup-plugin-webpack-stats-0.2.5.tgz", - "integrity": "sha512-H/Qjg41rwga3SZxhIVghxCcouOWhBNhqNW7kk9z/Ie4yrjr/GBr1BnUMTa01FCXNqaiZqgbQODrm+14YGq7SKw==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-webpack-stats/-/rollup-plugin-webpack-stats-0.2.6.tgz", + "integrity": "sha512-JqWP0FWzMily2//1WxhopsKzPO6nnGiWn1PN7l4HFQbus0MVC4hMUZPmkIDb65QV98YUA1PFFBbDHEjRbzg7+g==", "dev": true, "engines": { "node": ">=14" @@ -21810,7 +22729,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -21951,9 +22869,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -22189,9 +23107,9 @@ } }, "node_modules/socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { "ip-address": "^9.0.5", @@ -22421,7 +23339,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -22439,7 +23356,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22452,14 +23368,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -22471,7 +23385,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -22563,9 +23476,9 @@ } }, "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" @@ -22579,7 +23492,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22592,7 +23504,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22718,15 +23629,14 @@ } }, "node_modules/stylis": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", - "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -22744,20 +23654,10 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/sucrase/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -22775,7 +23675,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -22805,11 +23704,22 @@ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, + "node_modules/tailwind-merge": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz", + "integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==", + "dependencies": { + "@babel/runtime": "^7.24.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", - "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -22842,6 +23752,14 @@ "node": ">=14.0.0" } }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -22908,9 +23826,9 @@ } }, "node_modules/terser": { - "version": "5.30.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.2.tgz", - "integrity": "sha512-vTDjRKYKip4dOFL5VizdoxHTYDfEXPdz5t+FbxCC5Rp2s+KbEO8w5wqMDPgj7CtFKZuzq7PXv28fZoXfqqBVuw==", + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -22984,7 +23902,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -22993,7 +23910,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -23022,9 +23938,9 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, "node_modules/tinybench": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", - "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", + "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", "dev": true }, "node_modules/tinypool": { @@ -23289,7 +24205,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -23306,9 +24221,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "dependencies": { "psl": "^1.1.33", @@ -23397,8 +24312,7 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tsconfig-paths": { "version": "3.15.0", @@ -23460,9 +24374,9 @@ "dev": true }, "node_modules/tsx": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.1.tgz", - "integrity": "sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.3.tgz", + "integrity": "sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==", "dev": true, "dependencies": { "esbuild": "~0.19.10", @@ -23920,9 +24834,9 @@ } }, "node_modules/type-fest": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.14.0.tgz", - "integrity": "sha512-on5/Cw89wwqGZQu+yWO0gGMGu8VNxsaW9SB2HE8yJjllEk7IDTwnSN1dUVldYILhYPN5HzD7WAaw2cc/jBfn0Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.0.tgz", + "integrity": "sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==", "engines": { "node": ">=16" }, @@ -24019,9 +24933,9 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -24545,11 +25459,18 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "8.3.2", @@ -25244,6 +26165,15 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -25273,7 +26203,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -25291,7 +26220,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25307,14 +26235,12 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25328,7 +26254,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -25340,7 +26265,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -25352,7 +26276,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -25545,9 +26468,9 @@ } }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "engines": { "node": ">=10.0.0" }, @@ -25710,9 +26633,9 @@ } }, "node_modules/yjs": { - "version": "13.6.14", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.14.tgz", - "integrity": "sha512-D+7KcUr0j+vBCUSKXXEWfA+bG4UQBviAwP3gYBhkstkgwy5+8diOPMx0iqLIOxNo/HxaREUimZRxqHGAHCL2BQ==", + "version": "13.6.15", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.15.tgz", + "integrity": "sha512-moFv4uNYhp8BFxIk3AkpoAnnjts7gwdpiG8RtyFiKbMtxKCS0zVZ5wPaaGpwC3V2N/K8TK8MwtSI3+WO9CHWjQ==", "dependencies": { "lib0": "^0.2.86" }, @@ -25760,9 +26683,9 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.5.tgz", + "integrity": "sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -25776,6 +26699,53 @@ "url": "https://github.com/sponsors/wooorm" } }, + "packages/ariakit": { + "name": "@blocknote/ariakit", + "version": "0.12.4", + "license": "MPL-2.0", + "dependencies": { + "@ariakit/react": "^0.4.3", + "@blocknote/core": "0.12.4", + "@blocknote/react": "0.12.4", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "prettier": "^2.7.1", + "rimraf": "^5.0.5", + "rollup-plugin-webpack-stats": "^0.2.2", + "typescript": "^5.3.3", + "vite": "^4.4.8", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-externalize-deps": "^0.7.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + } + }, + "packages/ariakit/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/core": { "name": "@blocknote/core", "version": "0.12.4", @@ -25855,7 +26825,7 @@ }, "packages/dev-scripts": { "name": "@blocknote/dev-scripts", - "version": "0.12.1", + "version": "0.12.4", "license": "MPL-2.0", "devDependencies": { "@types/react": "^18.0.25", @@ -25870,11 +26840,62 @@ "typescript": "^5.3.3" } }, + "packages/mantine": { + "name": "@blocknote/mantine", + "version": "0.12.4", + "license": "MPL-2.0", + "dependencies": { + "@blocknote/core": "0.12.4", + "@blocknote/react": "0.12.4", + "@mantine/core": "^7.5.0", + "@mantine/hooks": "^7.5.0", + "@mantine/utils": "^6.0.21", + "react": "^18", + "react-dom": "^18", + "react-icons": "^4.3.1" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "prettier": "^2.7.1", + "rimraf": "^5.0.5", + "rollup-plugin-webpack-stats": "^0.2.2", + "typescript": "^5.3.3", + "vite": "^4.4.8", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-externalize-deps": "^0.7.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + } + }, + "packages/mantine/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/react": { "name": "@blocknote/react", "version": "0.12.4", "license": "MPL-2.0", "dependencies": { + "@ariakit/react": "^0.4.3", "@blocknote/core": "^0.12.4", "@floating-ui/react": "^0.26.4", "@mantine/core": "^7.7.1", @@ -25884,7 +26905,7 @@ "@tiptap/react": "^2.0.3", "lodash.merge": "^4.6.2", "react": "^18", - "react-dom": "^18.2.0", + "react-dom": "^18", "react-icons": "^4.3.1", "use-prefers-color-scheme": "^1.1.3" }, @@ -25928,12 +26949,82 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/shadcn": { + "name": "@blocknote/shadcn", + "version": "0.12.4", + "license": "MPL-2.0", + "dependencies": { + "@blocknote/core": "0.12.4", + "@blocknote/react": "0.12.4", + "@hookform/resolvers": "^3.3.4", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-toggle": "^1.0.3", + "@radix-ui/react-tooltip": "^1.0.7", + "autoprefixer": "^10.4.19", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.362.0", + "postcss": "^8.4.38", + "react": "^18", + "react-dom": "^18", + "react-hook-form": "^7.51.3", + "tailwind-merge": "^2.3.0", + "tailwindcss": "^3.4.3", + "tailwindcss-animate": "^1.0.7", + "zod": "^3.22.4" + }, + "devDependencies": { + "@radix-ui/colors": "^3.0.0", + "@types/node": "^20.12.7", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "prettier": "^2.7.1", + "rimraf": "^5.0.5", + "rollup-plugin-webpack-stats": "^0.2.2", + "typescript": "^5.3.3", + "vite": "^4.4.8", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-externalize-deps": "^0.7.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + } + }, + "packages/shadcn/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "playground": { "name": "@blocknote/example-editor", "version": "0.12.4", "dependencies": { + "@blocknote/ariakit": "^0.12.4", "@blocknote/core": "^0.12.4", + "@blocknote/mantine": "^0.12.4", "@blocknote/react": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "@liveblocks/client": "^1.10.0", "@liveblocks/yjs": "^1.10.0", "@mantine/core": "^7.7.1", @@ -25980,8 +27071,11 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@blocknote/ariakit": "^0.12.4", "@blocknote/core": "^0.12.4", + "@blocknote/mantine": "^0.12.4", "@blocknote/react": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", "@playwright/experimental-ct-react": "^1.42.1", "@playwright/test": "^1.42.1", "eslint": "^8.10.0", diff --git a/packages/ariakit/package.json b/packages/ariakit/package.json new file mode 100644 index 0000000000..fb30ad5e98 --- /dev/null +++ b/packages/ariakit/package.json @@ -0,0 +1,83 @@ +{ + "name": "@blocknote/ariakit", + "homepage": "https://github.com/TypeCellOS/BlockNote", + "private": false, + "license": "MPL-2.0", + "version": "0.12.4", + "files": [ + "dist", + "types", + "src" + ], + "keywords": [ + "react", + "javascript", + "editor", + "typescript", + "prosemirror", + "wysiwyg", + "rich-text-editor", + "notion", + "yjs", + "block-based", + "tiptap" + ], + "description": "A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", + "type": "module", + "source": "src/index.tsx", + "types": "./types/src/index.d.ts", + "main": "./dist/blocknote-ariakit.umd.cjs", + "module": "./dist/blocknote-ariakit.js", + "exports": { + ".": { + "types": "./types/src/index.d.ts", + "import": "./dist/blocknote-ariakit.js", + "require": "./dist/blocknote-ariakit.umd.cjs" + }, + "./style.css": { + "import": "./dist/style.css", + "require": "./dist/style.css" + } + }, + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "build-bundled": "tsc && vite build --config vite.config.bundled.ts && git checkout tmp-releases && rm -rf ../../release && mv ../../release-tmp ../../release", + "preview": "vite preview", + "lint": "eslint src --max-warnings 0", + "clean": "rimraf dist && rimraf types" + }, + "dependencies": { + "@ariakit/react": "^0.4.3", + "@blocknote/core": "0.12.4", + "@blocknote/react": "0.12.4", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "prettier": "^2.7.1", + "rimraf": "^5.0.5", + "rollup-plugin-webpack-stats": "^0.2.2", + "typescript": "^5.3.3", + "vite": "^4.4.8", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-externalize-deps": "^0.7.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + }, + "eslintConfig": { + "extends": [ + "../../.eslintrc.js" + ] + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/ariakit/src/ariakitStyles.css b/packages/ariakit/src/ariakitStyles.css new file mode 100644 index 0000000000..9834c1510f --- /dev/null +++ b/packages/ariakit/src/ariakitStyles.css @@ -0,0 +1,1005 @@ +/* This file contains styles copied directly from Ariakit's website, and is +responsible for the majority of the styling. */ + +/* https://ariakit.org/examples/menu-nested */ +.bn-ak-button { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + justify-content: center; + gap: 0.25rem; + white-space: nowrap; + border-radius: 0.5rem; + border-style: none; + background-color: hsl(204 20% 100%); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + font-weight: 500; +} + +.bn-ak-button:where(.dark, .dark *) { + --border: rgb(255 255 255/10%); + --highlight: rgb(255 255 255/5%); + --shadow: rgb(0 0 0/25%); + background-color: hsl(204 20% 100% / 0.05); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 -1px 0 1px var(--shadow), + inset 0 1px 0 var(--highlight); +} + +.bn-ak-button:not(:active):hover { + --border: rgb(0 0 0/33%); +} + +.bn-ak-button:where(.dark, .dark *):not(:active):hover { + --border: rgb(255 255 255/25%); +} + +.bn-ak-button[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-button[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-button:active, +.bn-ak-button[data-active] { + padding-top: 0.125rem; + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +@media (min-width: 640px) { + .bn-ak-button { + gap: 0.5rem; + } +} + +.bn-ak-button:active:where(.dark, .dark *), +.bn-ak-button[data-active]:where(.dark, .dark *) { + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-ak-menu { + position: relative; + z-index: 50; + display: flex; + max-height: var(--popover-available-height); + min-width: 180px; + flex-direction: column; + overscroll-behavior: contain; + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + border-color: hsl(204 20% 88%); + background-color: hsl(204 20% 100%); + padding: 0.5rem; + color: hsl(204 4% 0%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); + outline: none !important; + overflow: visible; +} + +.bn-ak-menu:where(.dark, .dark *) { + border-color: hsl(204 4% 24%); + background-color: hsl(204 4% 16%); + color: hsl(204 20% 100%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.25), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-menu-item { + display: flex; + cursor: default; + scroll-margin: 0.5rem; + align-items: center; + gap: 0.5rem; + border-radius: 0.25rem; + padding: 0.5rem; + outline: none !important; +} + +.bn-ak-menu-item[aria-disabled="true"] { + opacity: 0.25; +} + +.bn-ak-menu-item[data-active-item] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-menu-item:active, +.bn-ak-menu-item[data-active] { + background-color: hsl(204 100% 32%); + padding-top: 9px; + padding-bottom: 7px; +} + +.bn-ak-menu:not(:focus) .bn-ak-menu-item:not(:focus)[aria-expanded="true"] { + background-color: hsl(204 4% 0% / 7.5%); + color: currentColor; +} + +.bn-ak-menu:not(:focus) +.bn-ak-menu-item:not(:focus)[aria-expanded="true"]:where(.dark, .dark *) { + background-color: hsl(204 20% 100% / 0.1); +} + +.bn-ak-menu-item .label { + flex: 1 1 0%; +} + +/* https://ariakit.org/examples/form-select */ +.bn-ak-button { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + gap: 0.25rem; + white-space: nowrap; + border-style: none; + background-color: hsl(204 20% 100%); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + justify-content: space-between; + width: 100%; + border-radius: 0.375rem; +} + +.bn-ak-button:where(.dark, .dark *) { + --border: rgb(255 255 255/10%); + --highlight: rgb(255 255 255/5%); + --shadow: rgb(0 0 0/25%); + background-color: hsl(204 20% 100% / 0.05); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 -1px 0 1px var(--shadow), + inset 0 1px 0 var(--highlight); +} + +.bn-ak-button:not(:active):hover { + --border: rgb(0 0 0/33%); +} + +.bn-ak-button:where(.dark, .dark *):not(:active):hover { + --border: rgb(255 255 255/25%); +} + +.bn-ak-primary { + --border: rgba(0, 0, 0, 0.15); + --highlight: rgba(255, 255, 255, 0.25); + --shadow: rgba(0, 0, 0, 0.15); + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); + justify-content: center; +} + +.bn-ak-primary:hover { + --border: rgba(0, 0, 0, 0.35); + background-color: hsl(204 100% 35%); +} + +.bn-ak-primary:where(.dark, .dark *) { + --border: rgba(255, 255, 255, 0.25); + --highlight: rgba(255, 255, 255, 0.1); + --shadow: rgba(0, 0, 0, 0.25); + background-color: hsl(204 100% 35%); +} + +.bn-ak-primary:hover:where(.dark, .dark *) { + --border: rgba(255, 255, 255, 0.45); + background-color: hsl(204 100% 40%); +} + +.bn-ak-button[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-button[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-button:active, +.bn-ak-button[data-active] { + padding-top: 0.125rem; + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +@media (min-width: 640px) { + .bn-ak-button { + gap: 0.5rem; + } +} + +.bn-ak-button:active:where(.dark, .dark *), +.bn-ak-button[data-active]:where(.dark, .dark *) { + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-ak-wrapper { + display: flex; + width: 320px; + max-width: 100%; + flex-direction: column; + gap: 1.5rem; + border-radius: 0.5rem; + background-color: hsl(204 20% 100%); + padding: 1rem; + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.1), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-label { + padding-left: 1rem; +} + +.bn-ak-popover { + z-index: 50; + display: flex; + max-height: min(var(--popover-available-height, 300px), 300px); + flex-direction: column; + overflow: auto; + overscroll-behavior: contain; + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + border-color: hsl(204 20% 88%); + background-color: hsl(204 20% 100%); + padding: 0.5rem; + color: hsl(204 4% 0%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-popover:where(.dark, .dark *) { + border-color: hsl(204 4% 24%); + background-color: hsl(204 4% 16%); + color: hsl(204 20% 100%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.25), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-select-item { + display: flex; + cursor: default; + scroll-margin: 0.5rem; + align-items: center; + gap: 0.5rem; + border-radius: 0.25rem; + padding: 0.5rem; + outline: none !important; +} + +.bn-ak-select-item[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-select-item[data-active-item] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-wrapper:where(.dark, .dark *) { + background-color: hsl(204 4% 16%); + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.25), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-field { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.bn-ak-input { + height: 2.5rem; + width: 100%; + border-radius: 0.375rem; + border-style: none; + background-color: hsl(204 20% 94% / 0.4); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + box-shadow: + inset 0 0 0 1px rgba(0 0 0 / 0.1), + inset 0 2px 5px 0 rgba(0 0 0 / 0.05); +} + +.bn-ak-input::placeholder { + color: hsl(204 4% 0% / 0.6); +} + +.bn-ak-input:hover { + background-color: hsl(204 20% 94%); +} + +.bn-ak-popover:focus-visible, +.bn-ak-popover[data-focus-visible], +.bn-ak-input:focus-visible, +.bn-ak-input[data-focus-visible] { + outline: 2px solid hsl(204 100% 40%); + outline-offset: -1px; +} + +.bn-ak-input:where(.dark, .dark *) { + background-color: hsl(204 4% 10%); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px rgba(255 255 255 / 0.12), + inset 0 -1px 0 0 rgba(255 255 255 / 0.05), + inset 0 2px 5px 0 rgba(0 0 0 / 0.15); +} + +.bn-ak-input:where(.dark, .dark *)::placeholder { + color: hsl(204 20% 100% / 46%); +} + +.bn-ak-input:hover:where(.dark, .dark *) { + background-color: hsl(204 4% 8%); +} + +.bn-ak-error { + width: fit-content; + border-radius: 0.375rem; + border-width: 1px; + border-color: hsl(357 56% 80%); + background-color: hsl(357 56% 80% / 0.4); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + padding-right: 1rem; + color: hsl(357 100% 30%); +} + +.bn-ak-error:empty { + display: none; +} + +.bn-ak-error:where(.dark, .dark *) { + border-color: hsl(357 56% 50% / 0.4); + background-color: hsl(357 56% 42% / 0.25); + color: hsl(357 100% 90%); +} + +.bn-ak-buttons { + display: flex; + gap: 1rem; + padding-top: 1rem; +} + +/* https://ariakit.org/components/menu */ +.bn-ak-button { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + justify-content: center; + gap: 0.25rem; + white-space: nowrap; + border-radius: 0.5rem; + border-style: none; + background-color: hsl(204 20% 100%); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + font-weight: 500; +} + +.bn-ak-button:where(.dark, .dark *) { + --border: rgb(255 255 255/10%); + --highlight: rgb(255 255 255/5%); + --shadow: rgb(0 0 0/25%); + background-color: hsl(204 20% 100% / 0.05); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 -1px 0 1px var(--shadow), + inset 0 1px 0 var(--highlight); +} + +.bn-ak-button:not(:active):hover { + --border: rgb(0 0 0/33%); +} + +.bn-ak-button:where(.dark, .dark *):not(:active):hover { + --border: rgb(255 255 255/25%); +} + +.bn-ak-button[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-button[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-button:active, +.bn-ak-button[data-active] { + padding-top: 0.125rem; + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +@media (min-width: 640px) { + .bn-ak-button { + gap: 0.5rem; + } +} + +.bn-ak-button:active:where(.dark, .dark *), +.bn-ak-button[data-active]:where(.dark, .dark *) { + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-ak-separator { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + height: 0px; + width: 100%; + border-top-width: 1px; + border-color: hsl(204 20% 88%); +} + +.bn-ak-separator:where(.dark, .dark *) { + border-color: hsl(204 4% 28%); +} + +.bn-ak-menu { + position: relative; + z-index: 50; + display: flex; + /*max-height: var(--popover-available-height);*/ + min-width: 180px; + flex-direction: column; + /*overflow: auto;*/ + overscroll-behavior: contain; + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + border-color: hsl(204 20% 88%); + background-color: hsl(204 20% 100%); + padding: 0.5rem; + color: hsl(204 4% 0%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); + outline: none !important; +} + +.bn-ak-menu:where(.dark, .dark *) { + border-color: hsl(204 4% 24%); + background-color: hsl(204 4% 16%); + color: hsl(204 20% 100%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.25), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-menu-item { + display: flex; + cursor: default; + scroll-margin: 0.5rem; + align-items: center; + gap: 0.5rem; + border-radius: 0.25rem; + padding: 0.5rem; + outline: none !important; +} + +.bn-ak-menu-item[aria-disabled="true"] { + opacity: 0.25; +} + +.bn-ak-menu-item[data-active-item] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-menu-item:active, +.bn-ak-menu-item[data-active] { + background-color: hsl(204 100% 32%); + padding-top: 9px; + padding-bottom: 7px; +} + +/* https://ariakit.org/examples/select-group */ +.bn-ak-button { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + gap: 0.25rem; + white-space: nowrap; + border-radius: 0.5rem; + border-style: none; + background-color: hsl(204 20% 100%); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + width: 200px; + justify-content: space-between; +} + +.bn-ak-button:where(.dark, .dark *) { + --border: rgb(255 255 255/10%); + --highlight: rgb(255 255 255/5%); + --shadow: rgb(0 0 0/25%); + background-color: hsl(204 20% 100% / 0.05); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 -1px 0 1px var(--shadow), + inset 0 1px 0 var(--highlight); +} + +.bn-ak-button:not(:active):hover { + --border: rgb(0 0 0/33%); +} + +.bn-ak-button:where(.dark, .dark *):not(:active):hover { + --border: rgb(255 255 255/25%); +} + +.bn-ak-button[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-button[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-button:active, +.bn-ak-button[data-active] { + padding-top: 0.125rem; + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +@media (min-width: 640px) { + .bn-ak-button { + gap: 0.5rem; + } +} + +.bn-ak-button:active:where(.dark, .dark *), +.bn-ak-button[data-active]:where(.dark, .dark *) { + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-ak-wrapper { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 1rem; +} + +.bn-ak-popover { + z-index: 50; + display: flex; + max-height: min(var(--popover-available-height, 300px), 300px); + flex-direction: column; + overflow: auto; + overscroll-behavior: contain; + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + border-color: hsl(204 20% 88%); + background-color: hsl(204 20% 100%); + padding: 0.5rem; + color: hsl(204 4% 0%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-popover:focus-visible, +.bn-ak-popover[data-focus-visible] { + outline: 2px solid hsl(204 100% 40%); + outline-offset: -1px; +} + +.bn-ak-popover:where(.dark, .dark *) { + border-color: hsl(204 4% 24%); + background-color: hsl(204 4% 16%); + color: hsl(204 20% 100%); + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.25), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.bn-ak-select-item { + display: flex; + cursor: default; + scroll-margin: 0.5rem; + align-items: center; + gap: 0.5rem; + border-radius: 0.25rem; + padding: 0.5rem; + outline: none !important; +} + +.bn-ak-select-item[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-select-item[data-active-item] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-separator { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + height: 0px; + width: 100%; + border-top-width: 1px; + border-color: hsl(204 20% 88%); +} + +.bn-ak-separator:where(.dark, .dark *) { + border-color: hsl(204 4% 28%); +} + +.bn-ak-group-label { + cursor: default; + padding: 0.5rem; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 500; + opacity: 0.6; +} + +.bn-ak-group-label + * { + scroll-margin-top: 2.5rem; +} + +/* https://ariakit.org/components/tab */ +.bn-ak-wrapper { + display: flex; + flex-direction: column; + gap: 0.5rem; + border-radius: 0.5rem; + background-color: hsl(204 20% 100%); + padding: 0.5rem; + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.1), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-wrapper:where(.dark, .dark *) { + background-color: hsl(204 4% 16%); + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.25), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-tab-list { + display: flex; + gap: 0.5rem; +} + +.bn-ak-tab { + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + justify-content: center; + gap: 0.5rem; + white-space: nowrap; + border-radius: 0.25rem; + border-style: none; + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); +} + +.bn-ak-tab:hover { + background-color: hsl(204 4% 0% / 7.5%); +} + +.bn-ak-tab[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-tab[aria-selected="true"] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-tab:hover[aria-selected="true"] { + background-color: hsl(204 100% 32%); +} + +.bn-ak-tab[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-tab:active, +.bn-ak-tab[data-active] { + padding-top: 0.125rem; +} + +.bn-ak-tab:hover:where(.dark, .dark *) { + background-color: hsl(204 20% 100% / 0.1); +} + +.bn-ak-tab[aria-selected="true"]:where(.dark, .dark *) { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-tab:hover[aria-selected="true"]:where(.dark, .dark *) { + background-color: hsl(204 100% 32%); +} + +.bn-ak-panels { + padding: 0.5rem; +} + +/* https://ariakit.org/components/toolbar */ +.bn-ak-button { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + display: flex; + height: 2.5rem; + user-select: none; + align-items: center; + justify-content: center; + white-space: nowrap; + border-style: none; + background-color: hsl(204 20% 100%); + padding-left: 1rem; + padding-right: 1rem; + font-size: 1rem; + line-height: 1.5rem; + color: hsl(204 4% 0%); + text-decoration-line: none; + outline-width: 2px; + outline-offset: 2px; + outline-color: hsl(204 100% 40%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + scroll-margin-left: 0.25rem; + scroll-margin-right: 0.25rem; + gap: 0.5rem; + border-radius: 0.25rem; +} + +.bn-ak-button:where(.dark, .dark *) { + --border: rgb(255 255 255/10%); + --highlight: rgb(255 255 255/5%); + --shadow: rgb(0 0 0/25%); + background-color: hsl(204 20% 100% / 0.05); + color: hsl(204 20% 100%); + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 -1px 0 1px var(--shadow), + inset 0 1px 0 var(--highlight); +} + +.bn-ak-button:not(:active):hover { + --border: rgb(0 0 0/33%); +} + +.bn-ak-button:where(.dark, .dark *):not(:active):hover { + --border: rgb(255 255 255/25%); +} + +.bn-ak-button[aria-disabled="true"] { + opacity: 0.5; +} + +.bn-ak-button[data-focus-visible] { + outline-style: solid; +} + +.bn-ak-button:active, +.bn-ak-button[data-active] { + padding-top: 0.125rem; + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +@media (min-width: 640px) { + .bn-ak-button { + gap: 0.5rem; + } +} + +.bn-ak-button:active:where(.dark, .dark *), +.bn-ak-button[data-active]:where(.dark, .dark *) { + box-shadow: + inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-ak-secondary { + background-color: transparent; + color: currentColor; + box-shadow: none; +} + +.bn-ak-secondary:hover { + background-color: hsl(204 4% 0% / 0.05); +} + +.bn-ak-secondary:where(.dark, .dark *) { + background-color: transparent; + box-shadow: none; +} + +.bn-ak-secondary:hover:where(.dark, .dark *) { + background-color: hsl(204 20% 100% / 0.05); +} + +.bn-ak-secondary:active:where(.dark, .dark *), +.bn-ak-secondary[data-active]:where(.dark, .dark *) { + box-shadow: none; +} + +.bn-ak-toolbar { + display: flex; + max-width: 100%; + align-items: center; + gap: 0.25rem; + overflow-x: auto; + border-radius: 0.5rem; + background-color: hsl(204 20% 100%); + padding: 0.25rem; + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.1), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-toolbar:where(.dark, .dark *) { + background-color: hsl(204 4% 16%); + box-shadow: + 0 1px 3px 0 rgb(0 0 0 / 0.25), + 0 1px 2px -1px rgb(0 0 0 / 0.1); +} + +.bn-ak-separator { + height: 2rem; + border-right-width: 1px; + border-color: hsl(204 20% 88%); +} + +.bn-ak-separator:where(.dark, .dark *) { + border-color: hsl(204 4% 28%); +} + +/* https://ariakit.org/components/tooltip */ +.bn-ak-tooltip { + z-index: 50; + cursor: default; + border-radius: 0.375rem; + border-width: 1px; + border-color: hsl(204 20% 82%); + background-color: hsl(204 20% 94%); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + font-size: 0.875rem; + line-height: 1.25rem; + color: black; + box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); +} + +.bn-ak-tooltip:where(.dark, .dark *) { + border-color: hsl(204 4% 24%); + background-color: hsl(204 4% 16%); + color: white; + box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.15); +} + +.bn-ak-link { + font-weight: 500; + color: hsl(204 100% 35%); + text-decoration-line: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.25em; +} + +.bn-ak-link:hover { + text-decoration-thickness: 3px; +} + +.bn-ak-link:where(.dark, .dark *) { + color: hsl(204 100% 64%); +} \ No newline at end of file diff --git a/packages/ariakit/src/index.tsx b/packages/ariakit/src/index.tsx new file mode 100644 index 0000000000..e19cb08d4e --- /dev/null +++ b/packages/ariakit/src/index.tsx @@ -0,0 +1,103 @@ +import { BlockSchema, InlineContentSchema, StyleSchema } from "@blocknote/core"; +import { + BlockNoteViewRaw, + Components, + ComponentsContext, +} from "@blocknote/react"; +import { ComponentProps } from "react"; + +import { Form } from "./input/Form"; +import { TextInput } from "./input/TextInput"; +import { + Menu, + MenuDivider, + MenuDropdown, + MenuItem, + MenuLabel, + MenuTrigger, +} from "./menu/Menu"; +import { Panel } from "./panel/Panel"; +import { PanelButton } from "./panel/PanelButton"; +import { PanelFileInput } from "./panel/PanelFileInput"; +import { PanelTab } from "./panel/PanelTab"; +import { PanelTextInput } from "./panel/PanelTextInput"; +import { Popover, PopoverContent, PopoverTrigger } from "./popover/Popover"; +import { SideMenu } from "./sideMenu/SideMenu"; +import { SideMenuButton } from "./sideMenu/SideMenuButton"; +import { SuggestionMenu } from "./suggestionMenu/SuggestionMenu"; +import { SuggestionMenuItem } from "./suggestionMenu/SuggestionMenuItem"; +import { SuggestionMenuEmptyItem } from "./suggestionMenu/SuggestionMenuEmptyItem"; +import { SuggestionMenuLabel } from "./suggestionMenu/SuggestionMenuLabel"; +import { SuggestionMenuLoader } from "./suggestionMenu/SuggestionMenuLoader"; +import { TableHandle } from "./tableHandle/TableHandle"; +import { Toolbar } from "./toolbar/Toolbar"; +import { ToolbarButton } from "./toolbar/ToolbarButton"; +import { ToolbarSelect } from "./toolbar/ToolbarSelect"; + +import "./style.css"; + +export const components: Components = { + FormattingToolbar: { + Root: Toolbar, + Button: ToolbarButton, + Select: ToolbarSelect, + }, + ImagePanel: { + Root: Panel, + Button: PanelButton, + FileInput: PanelFileInput, + TabPanel: PanelTab, + TextInput: PanelTextInput, + }, + LinkToolbar: { + Root: Toolbar, + Button: ToolbarButton, + }, + SideMenu: { + Root: SideMenu, + Button: SideMenuButton, + }, + SuggestionMenu: { + Root: SuggestionMenu, + Item: SuggestionMenuItem, + EmptyItem: SuggestionMenuEmptyItem, + Label: SuggestionMenuLabel, + Loader: SuggestionMenuLoader, + }, + TableHandle: { + Root: TableHandle, + }, + Generic: { + Form: { + Root: Form, + TextInput: TextInput, + }, + Menu: { + Root: Menu, + Trigger: MenuTrigger, + Dropdown: MenuDropdown, + Divider: MenuDivider, + Label: MenuLabel, + Item: MenuItem, + }, + Popover: { + Root: Popover, + Trigger: PopoverTrigger, + Content: PopoverContent, + }, + }, +}; + +export const BlockNoteView = < + BSchema extends BlockSchema, + ISchema extends InlineContentSchema, + SSchema extends StyleSchema +>( + props: ComponentProps> +) => { + return ( + + + + ); +}; diff --git a/packages/ariakit/src/input/Form.tsx b/packages/ariakit/src/input/Form.tsx new file mode 100644 index 0000000000..e12de4f09f --- /dev/null +++ b/packages/ariakit/src/input/Form.tsx @@ -0,0 +1,9 @@ +import * as Ariakit from "@ariakit/react"; + +import { ComponentProps } from "@blocknote/react"; + +export const Form = (props: ComponentProps["Generic"]["Form"]["Root"]) => { + const { children } = props; + + return {children}; +}; diff --git a/packages/ariakit/src/input/TextInput.tsx b/packages/ariakit/src/input/TextInput.tsx new file mode 100644 index 0000000000..4bcb781049 --- /dev/null +++ b/packages/ariakit/src/input/TextInput.tsx @@ -0,0 +1,45 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const TextInput = forwardRef< + HTMLInputElement, + ComponentProps["Generic"]["Form"]["TextInput"] +>((props, ref) => { + const { + className, + name, + label, + icon, + value, + autoFocus, + placeholder, + onKeyDown, + onChange, + onSubmit, + } = props; + + return ( + <> + {props.label && ( + {label} + )} +
+ {icon} + +
+ + ); +}); diff --git a/packages/ariakit/src/menu/Menu.tsx b/packages/ariakit/src/menu/Menu.tsx new file mode 100644 index 0000000000..cf2f9dcb83 --- /dev/null +++ b/packages/ariakit/src/menu/Menu.tsx @@ -0,0 +1,111 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const Menu = (props: ComponentProps["Generic"]["Menu"]["Root"]) => { + const { + children, + onOpenChange, + position, + // sub + } = props; + + return ( + + {children} + + ); +}; + +export const MenuDropdown = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Dropdown"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); + +export const MenuItem = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Item"] +>((props, ref) => { + const { className, children, icon, checked, subTrigger, onClick } = props; + + if (subTrigger) { + return ( + } + className={mergeCSSClasses("bn-ak-menu-item", className || "")} + ref={ref} + onClick={onClick}> + {icon} + {children} + + {checked !== undefined && } + + ); + } + return ( + + {icon} + {children} + {checked !== undefined && } + + ); +}); + +export const MenuLabel = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Label"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); + +export const MenuTrigger = ( + props: ComponentProps["Generic"]["Menu"]["Trigger"] +) => { + const { children, sub } = props; + + if (sub) { + return children; + } + + return ; +}; + +export const MenuDivider = forwardRef< + HTMLHRElement, + ComponentProps["Generic"]["Menu"]["Divider"] +>((props, ref) => { + const { className } = props; + + return ( + + ); +}); diff --git a/packages/ariakit/src/panel/Panel.tsx b/packages/ariakit/src/panel/Panel.tsx new file mode 100644 index 0000000000..553c7b6678 --- /dev/null +++ b/packages/ariakit/src/panel/Panel.tsx @@ -0,0 +1,53 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const Panel = forwardRef< + HTMLDivElement, + ComponentProps["ImagePanel"]["Root"] +>((props, ref) => { + const { + className, + tabs, + defaultOpenTab, + openTab, + setOpenTab, + // loading, + // setLoading, + } = props; + + return ( +
+ { + if (activeId) { + setOpenTab(activeId); + } + }}> + {/*{loading && }*/} + + + {tabs.map((tab) => ( + + {tab.name} + + ))} + + +
+ {tabs.map((tab) => ( + + {tab.tabPanel} + + ))} +
+
+
+ ); +}); diff --git a/packages/ariakit/src/panel/PanelButton.tsx b/packages/ariakit/src/panel/PanelButton.tsx new file mode 100644 index 0000000000..04c300c18d --- /dev/null +++ b/packages/ariakit/src/panel/PanelButton.tsx @@ -0,0 +1,21 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelButton = forwardRef< + HTMLButtonElement, + ComponentProps["ImagePanel"]["Button"] +>((props, ref) => { + const { className, children, onClick } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/ariakit/src/panel/PanelFileInput.tsx b/packages/ariakit/src/panel/PanelFileInput.tsx new file mode 100644 index 0000000000..36df131840 --- /dev/null +++ b/packages/ariakit/src/panel/PanelFileInput.tsx @@ -0,0 +1,25 @@ +import * as Ariakit from "@ariakit/react"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelFileInput = forwardRef< + HTMLInputElement, + ComponentProps["ImagePanel"]["FileInput"] +>((props, ref) => { + const { className, value, placeholder, onChange } = props; + + return ( + + onChange?.(e.target.files![0])} + placeholder={placeholder} + /> + + ); +}); diff --git a/packages/ariakit/src/panel/PanelTab.tsx b/packages/ariakit/src/panel/PanelTab.tsx new file mode 100644 index 0000000000..58ed2aba46 --- /dev/null +++ b/packages/ariakit/src/panel/PanelTab.tsx @@ -0,0 +1,15 @@ +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelTab = forwardRef< + HTMLDivElement, + ComponentProps["ImagePanel"]["TabPanel"] +>((props, ref) => { + const { className, children } = props; + + return ( +
+ {children} +
+ ); +}); diff --git a/packages/ariakit/src/panel/PanelTextInput.tsx b/packages/ariakit/src/panel/PanelTextInput.tsx new file mode 100644 index 0000000000..3e7f9c2ac4 --- /dev/null +++ b/packages/ariakit/src/panel/PanelTextInput.tsx @@ -0,0 +1,27 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelTextInput = forwardRef< + HTMLInputElement, + ComponentProps["ImagePanel"]["TextInput"] +>((props, ref) => { + const { className, value, placeholder, onKeyDown, onChange } = props; + + return ( + + + + ); +}); diff --git a/packages/ariakit/src/popover/Popover.tsx b/packages/ariakit/src/popover/Popover.tsx new file mode 100644 index 0000000000..71adb6f07f --- /dev/null +++ b/packages/ariakit/src/popover/Popover.tsx @@ -0,0 +1,41 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PopoverTrigger = forwardRef< + HTMLButtonElement, + ComponentProps["Generic"]["Popover"]["Trigger"] +>((props, ref) => { + const { children } = props; + + return ; +}); + +export const PopoverContent = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Popover"]["Content"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); + +export const Popover = ( + props: ComponentProps["Generic"]["Popover"]["Root"] +) => { + const { children, opened, position } = props; + + return ( + + {children} + + ); +}; diff --git a/packages/ariakit/src/sideMenu/SideMenu.tsx b/packages/ariakit/src/sideMenu/SideMenu.tsx new file mode 100644 index 0000000000..742112d71c --- /dev/null +++ b/packages/ariakit/src/sideMenu/SideMenu.tsx @@ -0,0 +1,17 @@ +import * as Ariakit from "@ariakit/react"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SideMenu = forwardRef< + HTMLDivElement, + ComponentProps["SideMenu"]["Root"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/ariakit/src/sideMenu/SideMenuButton.tsx b/packages/ariakit/src/sideMenu/SideMenuButton.tsx new file mode 100644 index 0000000000..60ed1b7675 --- /dev/null +++ b/packages/ariakit/src/sideMenu/SideMenuButton.tsx @@ -0,0 +1,25 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SideMenuButton = forwardRef< + HTMLButtonElement, + ComponentProps["SideMenu"]["Button"] +>((props, ref) => { + const { className, children, icon, onClick } = props; + + return ( + + {icon} + {children} + + ); +}); diff --git a/packages/ariakit/src/style.css b/packages/ariakit/src/style.css new file mode 100644 index 0000000000..78b42d104c --- /dev/null +++ b/packages/ariakit/src/style.css @@ -0,0 +1,135 @@ +@import url("@blocknote/react/style.css"); + +/* This file contains BlockNote-specific fixes for the styles in + ariakitStyles.css. */ + +@import "./ariakitStyles.css"; + +.bn-ak-input-wrapper { + align-items: center; + display: flex; + gap: 0.5rem; +} + +.bn-toolbar .bn-ak-button { + width: unset; +} + +.bn-toolbar .bn-ak-button[data-selected] { + padding-top: 0.125rem; + box-shadow: inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--border); +} + +.bn-toolbar .bn-ak-button[data-selected]:where(.dark, .dark *) { + box-shadow: inset 0 0 0 1px var(--border), + inset 0 1px 1px 1px var(--shadow); +} + +.bn-toolbar .bn-ak-popover { + gap: 0.5rem; +} + +.bn-tab-panel { + align-items: center; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.bn-file-input { + max-width: 100%; +} + +.bn-ak-button { + outline-style: none; +} + +.bn-ak-menu-item[data-hovered] { + background-color: hsl(204 100% 40%); + color: hsl(204 20% 100%); +} + +.bn-ak-menu-item { + display: flex; +} + +.bn-dropdown { + overflow: visible; +} + +.bn-suggestion-menu, .bn-color-picker-dropdown { + overflow: scroll; +} + +.bn-ak-suggestion-menu-item-body { + flex: 1; +} + +.bn-ak-suggestion-menu-item-subtitle { + font-size: 0.7rem; +} + +.bn-ak-suggestion-menu-item-section[data-position="left"] { + padding: 8px; +} + +.bn-ak-suggestion-menu-item-section[data-position="right"] { + --border: rgb(0 0 0/13%); + --highlight: rgb(255 255 255/20%); + --shadow: rgb(0 0 0/10%); + box-shadow: inset 0 0 0 1px var(--border), + inset 0 2px 0 var(--highlight), + inset 0 -1px 0 var(--shadow), + 0 1px 1px var(--shadow); + font-size: 0.7rem; + border-radius: 4px; + padding-inline: 4px; +} + +.bn-side-menu { + align-items: center; + display: flex; + justify-content: center; +} + +.bn-side-menu .bn-ak-button { + height: fit-content; + padding: 0; + width: fit-content; +} + +.bn-panel-popover { + background-color: transparent; + border: none; + box-shadow: none; +} + +.bn-table-handle { + height: fit-content; + padding: 0; + width: fit-content; +} + +.bn-side-menu, .bn-table-handle { + color: gray; +} + +.bn-ak-button:where(.dark, .dark *) { + color: hsl(204 20% 100%); +} + +.bn-ak-tab, .bn-file-input { + background-color: transparent; + color: black; +} + +.bn-ak-tab:where(.dark, .dark *), .bn-file-input:where(.dark, .dark *) { + color: white; +} + +.bn-ak-tooltip { + align-items: center; + display: flex; + flex-direction: column; +} \ No newline at end of file diff --git a/packages/ariakit/src/suggestionMenu/SuggestionMenu.tsx b/packages/ariakit/src/suggestionMenu/SuggestionMenu.tsx new file mode 100644 index 0000000000..4229250989 --- /dev/null +++ b/packages/ariakit/src/suggestionMenu/SuggestionMenu.tsx @@ -0,0 +1,20 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenu = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Root"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/ariakit/src/suggestionMenu/SuggestionMenuEmptyItem.tsx b/packages/ariakit/src/suggestionMenu/SuggestionMenuEmptyItem.tsx new file mode 100644 index 0000000000..9729f0685b --- /dev/null +++ b/packages/ariakit/src/suggestionMenu/SuggestionMenuEmptyItem.tsx @@ -0,0 +1,18 @@ +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuEmptyItem = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["EmptyItem"] +>((props, ref) => { + const { className, children } = props; + + return ( +
+
{children}
+
+ ); +}); diff --git a/packages/ariakit/src/suggestionMenu/SuggestionMenuItem.tsx b/packages/ariakit/src/suggestionMenu/SuggestionMenuItem.tsx new file mode 100644 index 0000000000..a6cdee6b26 --- /dev/null +++ b/packages/ariakit/src/suggestionMenu/SuggestionMenuItem.tsx @@ -0,0 +1,61 @@ +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef, useCallback } from "react"; + +export const SuggestionMenuItem = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Item"] +>((props, ref) => { + const { + className, + title, + subtext, + // group, + icon, + badge, + // aliases, + // onItemClick, + isSelected, + setSelected, + onClick, + } = props; + + const handleMouseLeave = useCallback(() => { + setSelected?.(false); + }, [setSelected]); + + const handleMouseEnter = useCallback(() => { + setSelected?.(true); + }, [setSelected]); + + return ( +
+ {icon && ( +
+ {icon} +
+ )} +
+
{title}
+
{subtext}
+
+ {badge && ( +
+
{badge}
+
+ )} +
+ ); +}); diff --git a/packages/ariakit/src/suggestionMenu/SuggestionMenuLabel.tsx b/packages/ariakit/src/suggestionMenu/SuggestionMenuLabel.tsx new file mode 100644 index 0000000000..63e77d2cab --- /dev/null +++ b/packages/ariakit/src/suggestionMenu/SuggestionMenuLabel.tsx @@ -0,0 +1,18 @@ +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuLabel = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Label"] +>((props, ref) => { + const { className, children } = props; + + return ( +
+ {children} +
+ ); +}); diff --git a/packages/ariakit/src/suggestionMenu/SuggestionMenuLoader.tsx b/packages/ariakit/src/suggestionMenu/SuggestionMenuLoader.tsx new file mode 100644 index 0000000000..044fbf6c45 --- /dev/null +++ b/packages/ariakit/src/suggestionMenu/SuggestionMenuLoader.tsx @@ -0,0 +1,15 @@ +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuLoader = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Loader"] +>((props, ref) => { + const { className, children } = props; + + return ( +
+ {children} +
+ ); +}); diff --git a/packages/ariakit/src/tableHandle/TableHandle.tsx b/packages/ariakit/src/tableHandle/TableHandle.tsx new file mode 100644 index 0000000000..4c798d6637 --- /dev/null +++ b/packages/ariakit/src/tableHandle/TableHandle.tsx @@ -0,0 +1,36 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const TableHandle = forwardRef< + HTMLButtonElement, + ComponentProps["TableHandle"]["Root"] +>((props, ref) => { + const { + className, + children, + draggable, + onDragStart, + onDragEnd, + style, + ...rest + } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/ariakit/src/toolbar/Toolbar.tsx b/packages/ariakit/src/toolbar/Toolbar.tsx new file mode 100644 index 0000000000..c47874b0c9 --- /dev/null +++ b/packages/ariakit/src/toolbar/Toolbar.tsx @@ -0,0 +1,24 @@ +import * as Ariakit from "@ariakit/react"; + +import { mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +type ToolbarProps = ComponentProps["FormattingToolbar"]["Root"] & + ComponentProps["LinkToolbar"]["Root"]; + +export const Toolbar = forwardRef( + (props, ref) => { + const { className, children, onMouseEnter, onMouseLeave } = props; + + return ( + + {children} + + ); + } +); diff --git a/packages/ariakit/src/toolbar/ToolbarButton.tsx b/packages/ariakit/src/toolbar/ToolbarButton.tsx new file mode 100644 index 0000000000..5ba4f5baef --- /dev/null +++ b/packages/ariakit/src/toolbar/ToolbarButton.tsx @@ -0,0 +1,66 @@ +import * as Ariakit from "@ariakit/react"; + +import { isSafari, mergeCSSClasses } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +type ToolbarButtonProps = ComponentProps["FormattingToolbar"]["Button"] & + ComponentProps["LinkToolbar"]["Button"]; + +/** + * Helper for basic buttons that show in the formatting toolbar. + */ +export const ToolbarButton = forwardRef( + (props, ref) => { + const { + className, + children, + mainTooltip, + secondaryTooltip, + icon, + isSelected, + isDisabled, + onClick, + ...rest + } = props; + + return ( + + { + if (isSafari()) { + (e.currentTarget as HTMLButtonElement).focus(); + } + }} + onClick={onClick} + data-selected={isSelected ? "true" : undefined} + data-test={ + props.mainTooltip.slice(0, 1).toLowerCase() + + props.mainTooltip.replace(/\s+/g, "").slice(1) + } + // size={"xs"} + disabled={isDisabled || false} + ref={ref} + {...rest}> + {icon} + {children} + + } + /> + + {mainTooltip} + {secondaryTooltip} + + + ); + } +); diff --git a/packages/ariakit/src/toolbar/ToolbarSelect.tsx b/packages/ariakit/src/toolbar/ToolbarSelect.tsx new file mode 100644 index 0000000000..930a281380 --- /dev/null +++ b/packages/ariakit/src/toolbar/ToolbarSelect.tsx @@ -0,0 +1,45 @@ +import * as Ariakit from "@ariakit/react"; + +import { ComponentProps } from "@blocknote/react"; +import { mergeCSSClasses } from "@blocknote/core"; +import { forwardRef } from "react"; + +export const ToolbarSelect = forwardRef< + HTMLDivElement, + ComponentProps["FormattingToolbar"]["Select"] +>((props, ref) => { + const { className, items, isDisabled } = props; + + const selectedItem = props.items.filter((p) => p.isSelected)[0]; + + const setValue = (value: string) => { + items.find((item) => item.text === value)!.onClick?.(); + }; + + return ( + + }> + {selectedItem.icon} {selectedItem.text} + + + {items.map((option) => ( + + {option.icon} + {option.text} + {option.text === selectedItem.text && } + + ))} + + + ); +}); diff --git a/packages/ariakit/tsconfig.json b/packages/ariakit/tsconfig.json new file mode 100644 index 0000000000..607ad93cfa --- /dev/null +++ b/packages/ariakit/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "jsx": "react-jsx", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "outDir": "dist", + "declaration": true, + "declarationDir": "types", + "composite": true, + "skipLibCheck": true, + }, + "include": ["src"], + "references": [ + { + "path": "../core" + }, + { + "path": "../react" + } + ] +} diff --git a/packages/ariakit/vite.config.ts b/packages/ariakit/vite.config.ts new file mode 100644 index 0000000000..a50e2823d2 --- /dev/null +++ b/packages/ariakit/vite.config.ts @@ -0,0 +1,52 @@ +import react from "@vitejs/plugin-react"; +import * as path from "path"; +import { webpackStats } from "rollup-plugin-webpack-stats"; +import { defineConfig } from "vite"; +import pkg from "./package.json"; +// import eslintPlugin from "vite-plugin-eslint"; + +// https://vitejs.dev/config/ +export default defineConfig((conf) => ({ + test: { + environment: "jsdom", + setupFiles: ["./vitestSetup.ts"], + }, + plugins: [react(), webpackStats()], + // used so that vitest resolves the core package from the sources instead of the built version + resolve: { + alias: + conf.command === "build" + ? ({} as Record) + : ({ + // load live from sources with live reload working + "@blocknote/core": path.resolve(__dirname, "../core/src/"), + "@blocknote/react": path.resolve(__dirname, "../react/src/"), + } as Record), + }, + build: { + sourcemap: true, + lib: { + entry: path.resolve(__dirname, "src/index.tsx"), + name: "blocknote-ariakit", + fileName: "blocknote-ariakit", + }, + rollupOptions: { + // make sure to externalize deps that shouldn't be bundled + // into your library + external: Object.keys({ + ...pkg.dependencies, + ...pkg.peerDependencies, + ...pkg.devDependencies, + }), + output: { + // Provide global variables to use in the UMD build + // for externalized deps + globals: { + react: "React", + "react-dom": "ReactDOM", + }, + interop: "compat", // https://rollupjs.org/migration/#changed-defaults + }, + }, + }, +})); diff --git a/packages/core/src/blocks/ImageBlockContent/ImageBlockContent.ts b/packages/core/src/blocks/ImageBlockContent/ImageBlockContent.ts index 21f8eeeb00..af1e444a99 100644 --- a/packages/core/src/blocks/ImageBlockContent/ImageBlockContent.ts +++ b/packages/core/src/blocks/ImageBlockContent/ImageBlockContent.ts @@ -76,7 +76,7 @@ export const renderImage = ( // Text for the add image button. const addImageButtonText = document.createElement("p"); addImageButtonText.className = "bn-add-image-button-text"; - addImageButtonText.innerText = "Add Image"; + addImageButtonText.innerText = editor.dictionary.image.add_button; // Wrapper element for the image, resize handles and caption. const imageAndCaptionWrapper = document.createElement("div"); diff --git a/packages/core/src/editor/BlockNoteEditor.ts b/packages/core/src/editor/BlockNoteEditor.ts index 001782123b..e245a8b3b7 100644 --- a/packages/core/src/editor/BlockNoteEditor.ts +++ b/packages/core/src/editor/BlockNoteEditor.ts @@ -27,10 +27,10 @@ import { PartialBlock, } from "../blocks/defaultBlocks"; import { FormattingToolbarProsemirrorPlugin } from "../extensions/FormattingToolbar/FormattingToolbarPlugin"; +import { ImagePanelProsemirrorPlugin } from "../extensions/ImagePanel/ImageToolbarPlugin"; import { LinkToolbarProsemirrorPlugin } from "../extensions/LinkToolbar/LinkToolbarPlugin"; import { SideMenuProsemirrorPlugin } from "../extensions/SideMenu/SideMenuPlugin"; import { SuggestionMenuProseMirrorPlugin } from "../extensions/SuggestionMenu/SuggestionPlugin"; -import { ImagePanelProsemirrorPlugin } from "../extensions/ImagePanel/ImageToolbarPlugin"; import { TableHandlesProsemirrorPlugin } from "../extensions/TableHandles/TableHandlesPlugin"; import { UniqueID } from "../extensions/UniqueID/UniqueID"; import { @@ -62,6 +62,9 @@ import { } from "./BlockNoteTipTapEditor"; // CSS +import { PlaceholderPlugin } from "../extensions/Placeholder/PlaceholderPlugin"; +import { Dictionary } from "../i18n/dictionary"; +import { en } from "../i18n/locales"; import "./Block.css"; import "./editor.css"; @@ -73,6 +76,14 @@ export type BlockNoteEditorOptions< // TODO: Figure out if enableBlockNoteExtensions/disableHistoryExtension are needed and document them. enableBlockNoteExtensions: boolean; + /** + * A dictionary object containing translations for the editor. + */ + dictionary?: Dictionary; + + /** + * @deprecated, provide placeholders via dictionary instead + */ placeholders: Record; /** @@ -150,6 +161,8 @@ export class BlockNoteEditor< contentComponent: any; }; public blockCache = new WeakMap>(); + public readonly dictionary: Dictionary; + public readonly schema: BlockNoteSchema; public readonly blockImplementations: BlockSpecs; @@ -216,11 +229,17 @@ export class BlockNoteEditor< ); } + this.dictionary = options.dictionary || en; + // apply defaults const newOptions = { defaultStyles: true, schema: options.schema || BlockNoteSchema.create(), ...options, + placeholders: { + ...this.dictionary.placeholders, + ...options.placeholders, + }, }; // @ts-ignore @@ -243,7 +262,6 @@ export class BlockNoteEditor< const extensions = getBlockNoteExtensions({ editor: this, - placeholders: newOptions.placeholders, domAttributes: newOptions.domAttributes || {}, blockSchema: this.schema.blockSchema, blockSpecs: this.schema.blockSpecs, @@ -263,6 +281,7 @@ export class BlockNoteEditor< this.suggestionMenus.plugin, ...(this.imagePanel ? [this.imagePanel.plugin] : []), ...(this.tableHandles ? [this.tableHandles.plugin] : []), + PlaceholderPlugin(this, newOptions.placeholders), ]; }, }); diff --git a/packages/core/src/editor/BlockNoteExtensions.ts b/packages/core/src/editor/BlockNoteExtensions.ts index 2cf41f98f8..a408c00f3e 100644 --- a/packages/core/src/editor/BlockNoteExtensions.ts +++ b/packages/core/src/editor/BlockNoteExtensions.ts @@ -14,7 +14,6 @@ import * as Y from "yjs"; import { createCopyToClipboardExtension } from "../api/exporters/copyExtension"; import { createPasteFromClipboardExtension } from "../api/parsers/pasteExtension"; import { BackgroundColorExtension } from "../extensions/BackgroundColor/BackgroundColorExtension"; -import { Placeholder } from "../extensions/Placeholder/PlaceholderExtension"; import { TextAlignmentExtension } from "../extensions/TextAlignment/TextAlignmentExtension"; import { TextColorExtension } from "../extensions/TextColor/TextColorExtension"; import { TrailingNode } from "../extensions/TrailingNode/TrailingNodeExtension"; @@ -39,7 +38,6 @@ export const getBlockNoteExtensions = < S extends StyleSchema >(opts: { editor: BlockNoteEditor; - placeholders?: Record; domAttributes: Partial; blockSchema: BSchema; blockSpecs: BlockSpecs; @@ -66,12 +64,6 @@ export const getBlockNoteExtensions = < Gapcursor, // DropCursor, - Placeholder.configure({ - // TODO: This shorthand is kind of ugly - ...(opts.placeholders !== undefined - ? { placeholders: opts.placeholders } - : {}), - }), UniqueID.configure({ types: ["blockContainer"], }), diff --git a/packages/core/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts b/packages/core/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts index a60f1cb398..b1b329081a 100644 --- a/packages/core/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +++ b/packages/core/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts @@ -93,7 +93,10 @@ export class FormattingToolbarView { event.relatedTarget && // Element is inside the editor. (editorWrapper === (event.relatedTarget as Node) || - editorWrapper.contains(event.relatedTarget as Node)) + editorWrapper.contains(event.relatedTarget as Node) || + (event.relatedTarget as HTMLElement).matches( + ".bn-ui-container, .bn-ui-container *" + )) ) { return; } diff --git a/packages/core/src/extensions/Placeholder/PlaceholderExtension.ts b/packages/core/src/extensions/Placeholder/PlaceholderExtension.ts deleted file mode 100644 index b25e6d4c5a..0000000000 --- a/packages/core/src/extensions/Placeholder/PlaceholderExtension.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { Extension } from "@tiptap/core"; -import { Plugin, PluginKey } from "prosemirror-state"; -import { Decoration, DecorationSet } from "prosemirror-view"; - -const PLUGIN_KEY = new PluginKey(`blocknote-placeholder`); - -/** - * This is a modified version of the tiptap - * placeholder plugin, that also sets hasAnchorClass - * - * It does not set a data-placeholder (text is currently done in css) - * - */ -export interface PlaceholderOptions { - placeholders: Record; -} - -export const Placeholder = Extension.create({ - name: "placeholder", - - addOptions() { - return { - placeholders: { - default: "Enter text or type '/' for commands", - heading: "Heading", - bulletListItem: "List", - numberedListItem: "List", - }, - }; - }, - - addProseMirrorPlugins() { - const placeholders = this.options.placeholders; - return [ - new Plugin({ - key: PLUGIN_KEY, - view: () => { - const styleEl = document.createElement("style"); - document.head.appendChild(styleEl); - const styleSheet = styleEl.sheet!; - - const getBaseSelector = (additionalSelectors = "") => - `.bn-block-content${additionalSelectors} .bn-inline-content:has(> .ProseMirror-trailingBreak):before`; - - const getSelector = ( - blockType: string | "default", - mustBeFocused = true - ) => { - const mustBeFocusedSelector = mustBeFocused - ? `[data-is-empty-and-focused]` - : ``; - - if (blockType === "default") { - return getBaseSelector(mustBeFocusedSelector); - } - - const blockTypeSelector = `[data-content-type="${blockType}"]`; - return getBaseSelector(mustBeFocusedSelector + blockTypeSelector); - }; - - for (const [blockType, placeholder] of Object.entries(placeholders)) { - const mustBeFocused = blockType === "default"; - - styleSheet.insertRule( - `${getSelector( - blockType, - mustBeFocused - )}{ content: ${JSON.stringify(placeholder)}; }` - ); - - // For some reason, the placeholders which show when the block is focused - // take priority over ones which show depending on block type, so we need - // to make sure the block specific ones are also used when the block is - // focused. - if (!mustBeFocused) { - styleSheet.insertRule( - `${getSelector(blockType, true)}{ content: ${JSON.stringify( - placeholder - )}; }` - ); - } - } - - return { - destroy: () => { - document.head.removeChild(styleEl); - }, - }; - }, - props: { - // TODO: maybe also add placeholder for empty document ("e.g.: start writing..") - decorations: (state) => { - const { doc, selection } = state; - - const active = this.editor.isEditable; - - if (!active) { - return; - } - - if (!selection.empty) { - return; - } - - const $pos = selection.$anchor; - const node = $pos.parent; - - if (node.content.size > 0) { - return null; - } - - const before = $pos.before(); - - const dec = Decoration.node(before, before + node.nodeSize, { - "data-is-empty-and-focused": "true", - }); - - return DecorationSet.create(doc, [dec]); - }, - }, - }), - ]; - }, -}); diff --git a/packages/core/src/extensions/Placeholder/PlaceholderPlugin.ts b/packages/core/src/extensions/Placeholder/PlaceholderPlugin.ts new file mode 100644 index 0000000000..aa7f423126 --- /dev/null +++ b/packages/core/src/extensions/Placeholder/PlaceholderPlugin.ts @@ -0,0 +1,95 @@ +import { Plugin, PluginKey } from "prosemirror-state"; +import { Decoration, DecorationSet } from "prosemirror-view"; +import type { BlockNoteEditor } from "../../editor/BlockNoteEditor"; + +const PLUGIN_KEY = new PluginKey(`blocknote-placeholder`); + +export const PlaceholderPlugin = ( + editor: BlockNoteEditor, + placeholders: Record +) => { + return new Plugin({ + key: PLUGIN_KEY, + view: () => { + const styleEl = document.createElement("style"); + document.head.appendChild(styleEl); + const styleSheet = styleEl.sheet!; + + const getBaseSelector = (additionalSelectors = "") => + `.bn-block-content${additionalSelectors} .bn-inline-content:has(> .ProseMirror-trailingBreak):before`; + + const getSelector = ( + blockType: string | "default", + mustBeFocused = true + ) => { + const mustBeFocusedSelector = mustBeFocused + ? `[data-is-empty-and-focused]` + : ``; + + if (blockType === "default") { + return getBaseSelector(mustBeFocusedSelector); + } + + const blockTypeSelector = `[data-content-type="${blockType}"]`; + return getBaseSelector(mustBeFocusedSelector + blockTypeSelector); + }; + + for (const [blockType, placeholder] of Object.entries(placeholders)) { + const mustBeFocused = blockType === "default"; + + styleSheet.insertRule( + `${getSelector(blockType, mustBeFocused)}{ content: ${JSON.stringify( + placeholder + )}; }` + ); + + // For some reason, the placeholders which show when the block is focused + // take priority over ones which show depending on block type, so we need + // to make sure the block specific ones are also used when the block is + // focused. + if (!mustBeFocused) { + styleSheet.insertRule( + `${getSelector(blockType, true)}{ content: ${JSON.stringify( + placeholder + )}; }` + ); + } + } + + return { + destroy: () => { + document.head.removeChild(styleEl); + }, + }; + }, + props: { + // TODO: maybe also add placeholder for empty document ("e.g.: start writing..") + decorations: (state) => { + const { doc, selection } = state; + + if (!editor.isEditable) { + return; + } + + if (!selection.empty) { + return; + } + + const $pos = selection.$anchor; + const node = $pos.parent; + + if (node.content.size > 0) { + return null; + } + + const before = $pos.before(); + + const dec = Decoration.node(before, before + node.nodeSize, { + "data-is-empty-and-focused": "true", + }); + + return DecorationSet.create(doc, [dec]); + }, + }, + }); +}; diff --git a/packages/core/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts b/packages/core/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts index 4505a3aaa9..874c7e318c 100644 --- a/packages/core/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts +++ b/packages/core/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts @@ -1,4 +1,7 @@ +import type { Dictionary } from "../../i18n/dictionary"; + export type DefaultSuggestionItem = { + key: keyof Dictionary["slash_menu"]; title: string; onItemClick: () => void; subtext?: string; diff --git a/packages/core/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts b/packages/core/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts index a56363634e..8805c6a4d6 100644 --- a/packages/core/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +++ b/packages/core/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts @@ -83,95 +83,82 @@ export function getDefaultSlashMenuItems< if (checkDefaultBlockTypeInSchema("heading", editor)) { items.push( { - title: "Heading 1", onItemClick: () => { insertOrUpdateBlock(editor, { type: "heading", props: { level: 1 }, }); }, - subtext: "Used for a top-level heading", badge: formatKeyboardShortcut("Mod-Alt-1"), - aliases: ["h", "heading1", "h1"], - group: "Headings", + key: "heading", + ...editor.dictionary.slash_menu.heading, }, { - title: "Heading 2", onItemClick: () => { insertOrUpdateBlock(editor, { type: "heading", props: { level: 2 }, }); }, - subtext: "Used for key sections", badge: formatKeyboardShortcut("Mod-Alt-2"), - aliases: ["h2", "heading2", "subheading"], - group: "Headings", + key: "heading_2", + ...editor.dictionary.slash_menu.heading_2, }, { - title: "Heading 3", onItemClick: () => { insertOrUpdateBlock(editor, { type: "heading", props: { level: 3 }, }); }, - subtext: "Used for subsections and group headings", badge: formatKeyboardShortcut("Mod-Alt-3"), - aliases: ["h3", "heading3", "subheading"], - group: "Headings", + key: "heading_3", + ...editor.dictionary.slash_menu.heading_3, } ); } if (checkDefaultBlockTypeInSchema("numberedListItem", editor)) { items.push({ - title: "Numbered List", onItemClick: () => { insertOrUpdateBlock(editor, { type: "numberedListItem", }); }, - subtext: "Used to display a numbered list", badge: formatKeyboardShortcut("Mod-Shift-7"), - aliases: ["ol", "li", "list", "numberedlist", "numbered list"], - group: "Basic blocks", + key: "numbered_list", + ...editor.dictionary.slash_menu.numbered_list, }); } if (checkDefaultBlockTypeInSchema("bulletListItem", editor)) { items.push({ - title: "Bullet List", onItemClick: () => { insertOrUpdateBlock(editor, { type: "bulletListItem", }); }, - subtext: "Used to display an unordered list", badge: formatKeyboardShortcut("Mod-Shift-8"), - aliases: ["ul", "li", "list", "bulletlist", "bullet list"], - group: "Basic blocks", + key: "bullet_list", + ...editor.dictionary.slash_menu.bullet_list, }); } if (checkDefaultBlockTypeInSchema("paragraph", editor)) { items.push({ - title: "Paragraph", onItemClick: () => { insertOrUpdateBlock(editor, { type: "paragraph", }); }, - subtext: "Used for the body of your document", badge: formatKeyboardShortcut("Mod-Alt-0"), - aliases: ["p", "paragraph"], - group: "Basic blocks", + key: "paragraph", + ...editor.dictionary.slash_menu.paragraph, }); } if (checkDefaultBlockTypeInSchema("table", editor)) { items.push({ - title: "Table", onItemClick: () => { insertOrUpdateBlock(editor, { type: "table", @@ -188,16 +175,14 @@ export function getDefaultSlashMenuItems< }, }); }, - subtext: "Used for for tables", - aliases: ["table"], - group: "Advanced", badge: undefined, + key: "table", + ...editor.dictionary.slash_menu.table, }); } if (checkDefaultBlockTypeInSchema("image", editor)) { items.push({ - title: "Image", onItemClick: () => { const insertedBlock = insertOrUpdateBlock(editor, { type: "image", @@ -210,19 +195,8 @@ export function getDefaultSlashMenuItems< }) ); }, - subtext: "Insert an image", - aliases: [ - "image", - "imageUpload", - "upload", - "img", - "picture", - "media", - "url", - "drive", - "dropbox", - ], - group: "Media", + key: "image", + ...editor.dictionary.slash_menu.image, }); } diff --git a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts index 8b1918d8e5..ac0be6cda9 100644 --- a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts +++ b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts @@ -350,7 +350,7 @@ export class TableHandlesView< }; destroy() { - this.pmView.dom.removeEventListener("mousedown", this.mouseMoveHandler); + this.pmView.dom.removeEventListener("mousemove", this.mouseMoveHandler); document.removeEventListener("dragover", this.dragOverHandler); document.removeEventListener("drop", this.dropHandler); diff --git a/packages/core/src/i18n/dictionary.ts b/packages/core/src/i18n/dictionary.ts new file mode 100644 index 0000000000..c93e6533c5 --- /dev/null +++ b/packages/core/src/i18n/dictionary.ts @@ -0,0 +1,17 @@ +// function scramble(dict: any) { +// const newDict: any = {} as any; + +import type { en } from "./locales"; + +// for (const key in dict) { +// if (typeof dict[key] === "object") { +// newDict[key] = scramble(dict[key]); +// } else { +// newDict[key] = dict[key].split("").reverse().join(""); +// } +// } + +// return newDict; +// } + +export type Dictionary = typeof en; diff --git a/packages/core/src/i18n/locales/en.ts b/packages/core/src/i18n/locales/en.ts new file mode 100644 index 0000000000..3efd049612 --- /dev/null +++ b/packages/core/src/i18n/locales/en.ts @@ -0,0 +1,192 @@ +export const en = { + slash_menu: { + heading: { + title: "Heading 1", + subtext: "Used for a top-level heading", + aliases: ["h", "heading1", "h1"], + group: "Headings", + }, + heading_2: { + title: "Heading 2", + subtext: "Used for key sections", + aliases: ["h2", "heading2", "subheading"], + group: "Headings", + }, + heading_3: { + title: "Heading 3", + subtext: "Used for subsections and group headings", + aliases: ["h3", "heading3", "subheading"], + group: "Headings", + }, + numbered_list: { + title: "Numbered List", + subtext: "Used to display a numbered list", + aliases: ["ol", "li", "list", "numberedlist", "numbered list"], + group: "Basic blocks", + }, + bullet_list: { + title: "Bullet List", + subtext: "Used to display an unordered list", + aliases: ["ul", "li", "list", "bulletlist", "bullet list"], + group: "Basic blocks", + }, + paragraph: { + title: "Paragraph", + subtext: "Used for the body of your document", + aliases: ["p", "paragraph"], + group: "Basic blocks", + }, + table: { + title: "Table", + subtext: "Used for for tables", + aliases: ["table"], + group: "Advanced", + }, + image: { + title: "Image", + subtext: "Insert an image", + aliases: [ + "image", + "imageUpload", + "upload", + "img", + "picture", + "media", + "url", + "drive", + "dropbox", + ], + group: "Media", + }, + }, + placeholders: { + default: "Enter text or type '/' for commands", + heading: "Heading", + bulletListItem: "List", + numberedListItem: "List", + }, + image: { + add_button: "Add Image", + }, + // from react package: + drag_handle: { + delete_menuitem: "Delete", + colors_menuitem: "Colors", + }, + table_handle: { + delete_column_menuitem: "Delete column", + delete_row_menuitem: "Delete row", + add_left_menuitem: "Add column left", + add_right_menuitem: "Add column right", + add_above_menuitem: "Add row above", + add_below_menuitem: "Add row below", + }, + suggestion_menu: { + no_items_title: "No items found", + loading: "Loading…", + }, + color_picker: { + text_title: "Text", + background_title: "Background", + colors: { + default: "Default", + gray: "Gray", + brown: "Brown", + red: "Red", + orange: "Orange", + yellow: "Yellow", + green: "Green", + blue: "Blue", + purple: "Purple", + pink: "Pink", + }, + }, + + formatting_toolbar: { + bold: { + tooltip: "Bold", + secondary_tooltip: "Mod+B", + }, + italic: { + tooltip: "Italic", + secondary_tooltip: "Mod+I", + }, + underline: { + tooltip: "Underline", + secondary_tooltip: "Mod+U", + }, + strike: { + tooltip: "Strike", + secondary_tooltip: "Mod+Shift+X", + }, + code: { + tooltip: "Code", + secondary_tooltip: "", + }, + colors: { + tooltip: "Colors", + }, + link: { + tooltip: "Create link", + secondary_tooltip: "Mod+K", + }, + image_caption: { + tooltip: "Edit caption", + input_placeholder: "Edit caption", + }, + image_replace: { + tooltip: "Replace image", + }, + nest: { + tooltip: "Nest block", + secondary_tooltip: "Tab", + }, + unnest: { + tooltip: "Unnest block", + secondary_tooltip: "Shift+Tab", + }, + align_left: { + tooltip: "Align text left", + }, + align_center: { + tooltip: "Align text center", + }, + align_right: { + tooltip: "Align text right", + }, + align_justify: { + tooltip: "Justify text", + }, + }, + image_panel: { + upload: { + title: "Upload", + file_placeholder: "Upload image", + upload_error: "Error: Upload failed", + }, + embed: { + title: "Embed", + embed_button: "Embed image", + url_placeholder: "Enter URL", + }, + }, + link_toolbar: { + delete: { + tooltip: "Remove link", + }, + edit: { + text: "Edit link", + tooltip: "Edit", + }, + open: { + tooltip: "Open in new tab", + }, + form: { + title_placeholder: "Edit title", + url_placeholder: "Edit URL", + }, + }, + generic: { + ctrl_shortcut: "Ctrl", + }, +}; diff --git a/packages/core/src/i18n/locales/index.ts b/packages/core/src/i18n/locales/index.ts new file mode 100644 index 0000000000..e42aad308e --- /dev/null +++ b/packages/core/src/i18n/locales/index.ts @@ -0,0 +1,2 @@ +export * from "./en"; +export * from "./nl"; diff --git a/packages/core/src/i18n/locales/nl.ts b/packages/core/src/i18n/locales/nl.ts new file mode 100644 index 0000000000..be0cf48363 --- /dev/null +++ b/packages/core/src/i18n/locales/nl.ts @@ -0,0 +1,193 @@ +import type { Dictionary } from "../dictionary"; + +export const nl: Dictionary = { + slash_menu: { + heading: { + title: "Kop 1", + subtext: "Gebruikt voor een hoofdkop", + aliases: ["h", "kop1", "h1"], + group: "Koppen", + }, + heading_2: { + title: "Kop 2", + subtext: "Gebruikt voor belangrijke secties", + aliases: ["h2", "kop2", "subkop"], + group: "Koppen", + }, + heading_3: { + title: "Kop 3", + subtext: "Gebruikt voor subsecties en groepskoppen", + aliases: ["h3", "kop3", "subkop"], + group: "Koppen", + }, + numbered_list: { + title: "Genummerde Lijst", + subtext: "Gebruikt om een genummerde lijst weer te geven", + aliases: ["ol", "li", "lijst", "genummerdelijst", "genummerde lijst"], + group: "Basisblokken", + }, + bullet_list: { + title: "Puntenlijst", + subtext: "Gebruikt om een ongeordende lijst weer te geven", + aliases: ["ul", "li", "lijst", "puntenlijst", "punten lijst"], + group: "Basisblokken", + }, + paragraph: { + title: "Paragraaf", + subtext: "Gebruikt voor de hoofdtekst van uw document", + aliases: ["p", "paragraaf"], + group: "Basisblokken", + }, + table: { + title: "Tabel", + subtext: "Gebruikt voor tabellen", + aliases: ["tabel"], + group: "Geavanceerd", + }, + image: { + title: "Afbeelding", + subtext: "Voeg een afbeelding in", + aliases: [ + "afbeelding", + "imageUpload", + "upload", + "img", + "foto", + "media", + "url", + "drive", + "dropbox", + ], + group: "Media", + }, + }, + placeholders: { + default: "Voer tekst in of type '/' voor commando's", + heading: "Kop", + bulletListItem: "Lijst", + numberedListItem: "Lijst", + }, + image: { + add_button: "Afbeelding toevoegen", + }, + // from react package: + drag_handle: { + delete_menuitem: "Verwijder", + colors_menuitem: "Kleuren", + }, + table_handle: { + delete_column_menuitem: "Verwijder kolom", + delete_row_menuitem: "Verwijder rij", + add_left_menuitem: "Voeg kolom links toe", + add_right_menuitem: "Voeg kolom rechts toe", + add_above_menuitem: "Voeg rij boven toe", + add_below_menuitem: "Voeg rij onder toe", + }, + suggestion_menu: { + no_items_title: "Geen items gevonden", + loading: "Laden…", + }, + color_picker: { + text_title: "Tekst", + background_title: "Achtergrond", + colors: { + default: "Standaard", + gray: "Grijs", + brown: "Bruin", + red: "Rood", + orange: "Oranje", + yellow: "Geel", + green: "Groen", + blue: "Blauw", + purple: "Paars", + pink: "Roze", + }, + }, + formatting_toolbar: { + bold: { + tooltip: "Vet", + secondary_tooltip: "Mod+B", + }, + italic: { + tooltip: "Cursief", + secondary_tooltip: "Mod+I", + }, + underline: { + tooltip: "Onderstrepen", + secondary_tooltip: "Mod+U", + }, + strike: { + tooltip: "Doorstrepen", + secondary_tooltip: "Mod+Shift+X", + }, + code: { + tooltip: "Code", + secondary_tooltip: "", + }, + colors: { + tooltip: "Kleuren", + }, + link: { + tooltip: "Maak link", + secondary_tooltip: "Mod+K", + }, + image_caption: { + tooltip: "Bewerk onderschrift", + input_placeholder: "Bewerk onderschrift", + }, + image_replace: { + tooltip: "Vervang afbeelding", + }, + nest: { + tooltip: "Nest blok", + secondary_tooltip: "Tab", + }, + unnest: { + tooltip: "Ontnest blok", + secondary_tooltip: "Shift+Tab", + }, + align_left: { + tooltip: "Tekst links uitlijnen", + }, + align_center: { + tooltip: "Tekst centreren", + }, + align_right: { + tooltip: "Tekst rechts uitlijnen", + }, + align_justify: { + tooltip: "Tekst uitvullen", + }, + }, + image_panel: { + upload: { + title: "Upload", + file_placeholder: "Upload afbeelding", + upload_error: "Fout: Upload mislukt", + }, + embed: { + title: "Insluiten", + embed_button: "Insluiten afbeelding", + url_placeholder: "Voer URL in", + }, + }, + link_toolbar: { + delete: { + tooltip: "Verwijder link", + }, + edit: { + text: "Bewerk link", + tooltip: "Bewerk", + }, + open: { + tooltip: "Open in nieuw tabblad", + }, + form: { + title_placeholder: "Bewerk titel", + url_placeholder: "Bewerk URL", + }, + }, + generic: { + ctrl_shortcut: "Ctrl", + }, +}; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5a202f72bd..1a70105d11 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,3 +1,4 @@ +import * as locales from "./i18n/locales"; export * from "./api/exporters/html/externalHTMLExporter"; export * from "./api/exporters/html/internalHTMLSerializer"; export * from "./api/testUtil"; @@ -25,4 +26,6 @@ export * from "./util/string"; export * from "./api/nodeConversions/nodeConversions"; export * from "./api/testUtil/partialBlockTestUtil"; export * from "./extensions/UniqueID/UniqueID"; +export * from "./i18n/dictionary"; export { UnreachableCaseError } from "./util/typescript"; +export { locales }; diff --git a/packages/core/src/util/browser.ts b/packages/core/src/util/browser.ts index e5fcf8ac71..9ecdf3250d 100644 --- a/packages/core/src/util/browser.ts +++ b/packages/core/src/util/browser.ts @@ -4,11 +4,11 @@ export const isAppleOS = () => (/AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent))); -export function formatKeyboardShortcut(shortcut: string) { +export function formatKeyboardShortcut(shortcut: string, ctrlText = "Ctrl") { if (isAppleOS()) { return shortcut.replace("Mod", "⌘"); } else { - return shortcut.replace("Mod", "Ctrl"); + return shortcut.replace("Mod", ctrlText); } } diff --git a/packages/dev-scripts/examples/template-react/package.json.template.tsx b/packages/dev-scripts/examples/template-react/package.json.template.tsx index 5b391fab85..0f367b0b8c 100644 --- a/packages/dev-scripts/examples/template-react/package.json.template.tsx +++ b/packages/dev-scripts/examples/template-react/package.json.template.tsx @@ -4,7 +4,7 @@ const template = (project: Project) => ({ name: "@blocknote/example-" + project.projectSlug, description: "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", private: true, - version: "0.12.0", + version: "0.12.4", scripts: { start: "vite", dev: "vite", @@ -13,8 +13,11 @@ const template = (project: Project) => ({ lint: "eslint . --max-warnings 0", }, dependencies: { - "@blocknote/core": "^0.12.0", - "@blocknote/react": "^0.12.0", + "@blocknote/core": "^0.12.4", + "@blocknote/react": "^0.12.4", + "@blocknote/ariakit": "^0.12.4", + "@blocknote/mantine": "^0.12.4", + "@blocknote/shadcn": "^0.12.4", react: "^18.2.0", "react-dom": "^18.2.0", ...(project.config?.dependencies || {}), diff --git a/packages/dev-scripts/package.json b/packages/dev-scripts/package.json index 9adcfef2af..c4664ffef8 100644 --- a/packages/dev-scripts/package.json +++ b/packages/dev-scripts/package.json @@ -3,7 +3,7 @@ "homepage": "https://github.com/TypeCellOS/BlockNote", "private": true, "license": "MPL-2.0", - "version": "0.12.1", + "version": "0.12.4", "description": "", "type": "module", "scripts": { diff --git a/packages/mantine/package.json b/packages/mantine/package.json new file mode 100644 index 0000000000..da8c10c5df --- /dev/null +++ b/packages/mantine/package.json @@ -0,0 +1,87 @@ +{ + "name": "@blocknote/mantine", + "homepage": "https://github.com/TypeCellOS/BlockNote", + "private": false, + "license": "MPL-2.0", + "version": "0.12.4", + "files": [ + "dist", + "types", + "src" + ], + "keywords": [ + "react", + "javascript", + "editor", + "typescript", + "prosemirror", + "wysiwyg", + "rich-text-editor", + "notion", + "yjs", + "block-based", + "tiptap" + ], + "description": "A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", + "type": "module", + "source": "src/index.tsx", + "types": "./types/src/index.d.ts", + "main": "./dist/blocknote-mantine.umd.cjs", + "module": "./dist/blocknote-mantine.js", + "exports": { + ".": { + "types": "./types/src/index.d.ts", + "import": "./dist/blocknote-mantine.js", + "require": "./dist/blocknote-mantine.umd.cjs" + }, + "./style.css": { + "import": "./dist/style.css", + "require": "./dist/style.css" + } + }, + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "build-bundled": "tsc && vite build --config vite.config.bundled.ts && git checkout tmp-releases && rm -rf ../../release && mv ../../release-tmp ../../release", + "preview": "vite preview", + "lint": "eslint src --max-warnings 0", + "clean": "rimraf dist && rimraf types" + }, + "dependencies": { + "@blocknote/core": "0.12.4", + "@blocknote/react": "0.12.4", + "@mantine/core": "^7.5.0", + "@mantine/hooks": "^7.5.0", + "@mantine/utils": "^6.0.21", + "react": "^18", + "react-dom": "^18", + "react-icons": "^4.3.1", + "use-prefers-color-scheme": "^1.1.3" + }, + "devDependencies": { + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.4", + "eslint": "^8.10.0", + "prettier": "^2.7.1", + "rimraf": "^5.0.5", + "rollup-plugin-webpack-stats": "^0.2.2", + "typescript": "^5.3.3", + "vite": "^4.4.8", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-externalize-deps": "^0.7.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + }, + "eslintConfig": { + "extends": [ + "../../.eslintrc.js" + ] + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/react/src/editor/BlockNoteTheme.ts b/packages/mantine/src/BlockNoteTheme.ts similarity index 100% rename from packages/react/src/editor/BlockNoteTheme.ts rename to packages/mantine/src/BlockNoteTheme.ts diff --git a/packages/react/src/editor/defaultThemes.ts b/packages/mantine/src/defaultThemes.ts similarity index 100% rename from packages/react/src/editor/defaultThemes.ts rename to packages/mantine/src/defaultThemes.ts diff --git a/packages/mantine/src/form/TextInput.tsx b/packages/mantine/src/form/TextInput.tsx new file mode 100644 index 0000000000..db4a76a1c6 --- /dev/null +++ b/packages/mantine/src/form/TextInput.tsx @@ -0,0 +1,39 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const TextInput = forwardRef< + HTMLInputElement, + ComponentProps["Generic"]["Form"]["TextInput"] +>((props, ref) => { + const { + className, + name, + label, + icon, + value, + autoFocus, + placeholder, + onKeyDown, + onChange, + onSubmit, + } = props; + + return ( + + ); +}); diff --git a/packages/mantine/src/index.tsx b/packages/mantine/src/index.tsx new file mode 100644 index 0000000000..f0ade60fd2 --- /dev/null +++ b/packages/mantine/src/index.tsx @@ -0,0 +1,172 @@ +import { BlockSchema, InlineContentSchema, StyleSchema } from "@blocknote/core"; +import { + BlockNoteViewRaw, + Components, + ComponentsContext, + useBlockNoteContext, +} from "@blocknote/react"; +import { MantineProvider } from "@mantine/core"; +import { ComponentProps, useCallback } from "react"; +import usePrefersColorScheme from "use-prefers-color-scheme"; + +import { + Theme, + applyBlockNoteCSSVariablesFromTheme, + removeBlockNoteCSSVariables, +} from "./BlockNoteTheme"; +import { TextInput } from "./form/TextInput"; +import { + Menu, + MenuDivider, + MenuDropdown, + MenuItem, + MenuLabel, + MenuTrigger, +} from "./menu/Menu"; +import { Panel } from "./panel/Panel"; +import { PanelButton } from "./panel/PanelButton"; +import { PanelFileInput } from "./panel/PanelFileInput"; +import { PanelTab } from "./panel/PanelTab"; +import { PanelTextInput } from "./panel/PanelTextInput"; +import { Popover, PopoverContent, PopoverTrigger } from "./popover/Popover"; +import { SideMenu } from "./sideMenu/SideMenu"; +import { SideMenuButton } from "./sideMenu/SideMenuButton"; +import { SuggestionMenu } from "./suggestionMenu/SuggestionMenu"; +import { SuggestionMenuEmptyItem } from "./suggestionMenu/SuggestionMenuEmptyItem"; +import { SuggestionMenuItem } from "./suggestionMenu/SuggestionMenuItem"; +import { SuggestionMenuLabel } from "./suggestionMenu/SuggestionMenuLabel"; +import { SuggestionMenuLoader } from "./suggestionMenu/SuggestionMenuLoader"; +import { TableHandle } from "./tableHandle/TableHandle"; +import { Toolbar } from "./toolbar/Toolbar"; +import { ToolbarButton } from "./toolbar/ToolbarButton"; +import { ToolbarSelect } from "./toolbar/ToolbarSelect"; + +import "./style.css"; + +export * from "./BlockNoteTheme"; +export * from "./defaultThemes"; + +export const components: Components = { + FormattingToolbar: { + Root: Toolbar, + Button: ToolbarButton, + Select: ToolbarSelect, + }, + ImagePanel: { + Root: Panel, + Button: PanelButton, + FileInput: PanelFileInput, + TabPanel: PanelTab, + TextInput: PanelTextInput, + }, + LinkToolbar: { + Root: Toolbar, + Button: ToolbarButton, + }, + SideMenu: { + Root: SideMenu, + Button: SideMenuButton, + }, + SuggestionMenu: { + Root: SuggestionMenu, + Item: SuggestionMenuItem, + EmptyItem: SuggestionMenuEmptyItem, + Label: SuggestionMenuLabel, + Loader: SuggestionMenuLoader, + }, + TableHandle: { + Root: TableHandle, + }, + Generic: { + Form: { + Root: (props) =>
{props.children}
, + TextInput: TextInput, + }, + Menu: { + Root: Menu, + Trigger: MenuTrigger, + Dropdown: MenuDropdown, + Divider: MenuDivider, + Label: MenuLabel, + Item: MenuItem, + }, + Popover: { + Root: Popover, + Trigger: PopoverTrigger, + Content: PopoverContent, + }, + }, +}; + +const mantineTheme = { + // Removes button press effect + activeClassName: "", +}; + +export const BlockNoteView = < + BSchema extends BlockSchema, + ISchema extends InlineContentSchema, + SSchema extends StyleSchema +>( + props: Omit< + ComponentProps>, + "theme" + > & { + theme?: + | "light" + | "dark" + | Theme + | { + light: Theme; + dark: Theme; + }; + } +) => { + const { theme, ...rest } = props; + + const existingContext = useBlockNoteContext(); + const systemColorScheme = usePrefersColorScheme(); + const defaultColorScheme = + existingContext?.colorSchemePreference || systemColorScheme; + + const ref = useCallback( + (node: HTMLDivElement | null) => { + if (!node) { + // todo: clean variables? + return; + } + + removeBlockNoteCSSVariables(node); + + if (typeof theme === "object") { + if ("light" in theme && "dark" in theme) { + applyBlockNoteCSSVariablesFromTheme( + theme[defaultColorScheme === "dark" ? "dark" : "light"], + node + ); + return; + } + + applyBlockNoteCSSVariablesFromTheme(theme, node); + return; + } + }, + [defaultColorScheme, theme] + ); + + return ( + + {/* `cssVariablesSelector` scopes Mantine CSS variables to only the editor, */} + {/* as proposed here: https://github.com/orgs/mantinedev/discussions/5685 */} + + + + + ); +}; diff --git a/packages/react/src/editor/mantineStyles.css b/packages/mantine/src/mantineStyles.css similarity index 100% rename from packages/react/src/editor/mantineStyles.css rename to packages/mantine/src/mantineStyles.css diff --git a/packages/mantine/src/menu/Menu.tsx b/packages/mantine/src/menu/Menu.tsx new file mode 100644 index 0000000000..12a3d67cc5 --- /dev/null +++ b/packages/mantine/src/menu/Menu.tsx @@ -0,0 +1,245 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { + createContext, + forwardRef, + useCallback, + useContext, + useRef, + useState, +} from "react"; +import { HiChevronRight } from "react-icons/hi"; + +const SubMenuContext = createContext< + | { + onTriggerMouseOver: () => void; + onTriggerMouseLeave: () => void; + onMenuMouseOver: () => void; + onMenuMouseLeave: () => void; + } + | undefined +>(undefined); + +// https://github.com/orgs/mantinedev/discussions/2307 +// Mantine does not officially support sub menus, so we have to use a workaround +// which uses an unconventional nesting structure: +// +// Conventional nesting structure (used by Ariakit/ShadCN): +// +// +// Find +// +// +// Undo +// Redo +// +// +// Find +// +// +// Find Next +// Find Previous +// +// +// +// +// +// Required structure for Mantine: +// +// +// Find +// +// +// Undo +// Redo +// +// +// +//
Find
+//
+// +// Find Next +// Find Previous +// +//
+//
+//
+//
+const SubMenu = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Root"] +>((props, ref) => { + const { + children, + onOpenChange, + position, + // sub + } = props; + const [opened, setOpened] = useState(false); + + const menuCloseTimer = useRef | undefined>(); + + const mouseLeave = useCallback(() => { + if (menuCloseTimer.current) { + clearTimeout(menuCloseTimer.current); + } + menuCloseTimer.current = setTimeout(() => { + setOpened(false); + }, 250); + }, []); + + const mouseOver = useCallback(() => { + if (menuCloseTimer.current) { + clearTimeout(menuCloseTimer.current); + } + + setOpened(true); + }, []); + + return ( + + + onOpenChange?.(false)} + onOpen={() => onOpenChange?.(true)} + position={position}> + {children} + + + + ); +}); + +export const Menu = (props: ComponentProps["Generic"]["Menu"]["Root"]) => { + const { children, onOpenChange, position, sub } = props; + + if (sub) { + return ; + } + + return ( + onOpenChange?.(false)} + onOpen={() => onOpenChange?.(true)} + position={position}> + {children} + + ); +}; + +export const MenuItem = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Item"] +>((props, ref) => { + const { className, children, icon, checked, subTrigger, onClick, ...rest } = + props; + + const ctx = useContext(SubMenuContext); + + if (subTrigger) { + return ( +
+ {children} + +
+ ); + } + + const onMouseLeave = subTrigger ? ctx!.onTriggerMouseLeave : undefined; + const onMouseOver = subTrigger ? ctx!.onTriggerMouseOver : undefined; + + return ( + + ) : checked === false ? ( +
+ ) : null + } + onMouseOver={onMouseOver} + onMouseLeave={onMouseLeave} + onClick={onClick} + {...rest}> + {children} + + ); +}); + +export const MenuTrigger = ( + props: ComponentProps["Generic"]["Menu"]["Trigger"] +) => { + const { + children, + // sub + } = props; + + return {children}; +}; + +export const MenuDropdown = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Dropdown"] +>((props, ref) => { + const { + className, + children, + // sub + } = props; + + const ctx = useContext(SubMenuContext); + + return ( + + {children} + + ); +}); + +export const MenuDivider = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Divider"] +>((props, ref) => { + const { className } = props; + + return ; +}); + +export const MenuLabel = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Menu"]["Label"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/panel/Panel.tsx b/packages/mantine/src/panel/Panel.tsx new file mode 100644 index 0000000000..78a29f6231 --- /dev/null +++ b/packages/mantine/src/panel/Panel.tsx @@ -0,0 +1,47 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const Panel = forwardRef< + HTMLDivElement, + ComponentProps["ImagePanel"]["Root"] +>((props, ref) => { + const { + className, + tabs, + defaultOpenTab, + openTab, + setOpenTab, + loading, + // setLoading, + } = props; + + return ( + + + {loading && } + + + {tabs.map((tab) => ( + + {tab.name} + + ))} + + + {tabs.map((tab) => ( + + {tab.tabPanel} + + ))} + + + ); +}); diff --git a/packages/mantine/src/panel/PanelButton.tsx b/packages/mantine/src/panel/PanelButton.tsx new file mode 100644 index 0000000000..37909ce62a --- /dev/null +++ b/packages/mantine/src/panel/PanelButton.tsx @@ -0,0 +1,22 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelButton = forwardRef< + HTMLButtonElement, + ComponentProps["ImagePanel"]["Button"] +>((props, ref) => { + const { className, children, onClick, ...rest } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/panel/PanelFileInput.tsx b/packages/mantine/src/panel/PanelFileInput.tsx new file mode 100644 index 0000000000..5c38c138a4 --- /dev/null +++ b/packages/mantine/src/panel/PanelFileInput.tsx @@ -0,0 +1,23 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelFileInput = forwardRef< + HTMLButtonElement, + ComponentProps["ImagePanel"]["FileInput"] +>((props, ref) => { + const { className, value, placeholder, onChange, ...rest } = props; + + return ( + + ); +}); diff --git a/packages/mantine/src/panel/PanelTab.tsx b/packages/mantine/src/panel/PanelTab.tsx new file mode 100644 index 0000000000..58ed2aba46 --- /dev/null +++ b/packages/mantine/src/panel/PanelTab.tsx @@ -0,0 +1,15 @@ +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelTab = forwardRef< + HTMLDivElement, + ComponentProps["ImagePanel"]["TabPanel"] +>((props, ref) => { + const { className, children } = props; + + return ( +
+ {children} +
+ ); +}); diff --git a/packages/mantine/src/panel/PanelTextInput.tsx b/packages/mantine/src/panel/PanelTextInput.tsx new file mode 100644 index 0000000000..59f6f9b884 --- /dev/null +++ b/packages/mantine/src/panel/PanelTextInput.tsx @@ -0,0 +1,24 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const PanelTextInput = forwardRef< + HTMLInputElement, + ComponentProps["ImagePanel"]["TextInput"] +>((props, ref) => { + const { className, value, placeholder, onKeyDown, onChange } = props; + + return ( + + ); +}); diff --git a/packages/mantine/src/popover/Popover.tsx b/packages/mantine/src/popover/Popover.tsx new file mode 100644 index 0000000000..ccc1a74aeb --- /dev/null +++ b/packages/mantine/src/popover/Popover.tsx @@ -0,0 +1,41 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const Popover = ( + props: ComponentProps["Generic"]["Popover"]["Root"] +) => { + const { children, opened, position } = props; + + return ( + + {children} + + ); +}; + +export const PopoverTrigger = ( + props: ComponentProps["Generic"]["Popover"]["Trigger"] +) => { + const { children } = props; + + return {children}; +}; + +export const PopoverContent = forwardRef< + HTMLDivElement, + ComponentProps["Generic"]["Popover"]["Content"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/sideMenu/SideMenu.tsx b/packages/mantine/src/sideMenu/SideMenu.tsx new file mode 100644 index 0000000000..7a233730d8 --- /dev/null +++ b/packages/mantine/src/sideMenu/SideMenu.tsx @@ -0,0 +1,17 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SideMenu = forwardRef< + HTMLDivElement, + ComponentProps["SideMenu"]["Root"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/sideMenu/SideMenuButton.tsx b/packages/mantine/src/sideMenu/SideMenuButton.tsx new file mode 100644 index 0000000000..329f0baf4f --- /dev/null +++ b/packages/mantine/src/sideMenu/SideMenuButton.tsx @@ -0,0 +1,30 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SideMenuButton = forwardRef< + HTMLButtonElement, + ComponentProps["SideMenu"]["Button"] +>((props, ref) => { + const { className, children, icon, onClick, ...rest } = props; + + if (icon) { + return ( + + {icon} + + ); + } + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/style.css b/packages/mantine/src/style.css new file mode 100644 index 0000000000..dd22c7f316 --- /dev/null +++ b/packages/mantine/src/style.css @@ -0,0 +1,488 @@ +@import url("@blocknote/react/style.css"); +@import url("./mantineStyles.css"); + +/* Mantine base styles*/ + +/* Mantine Badge component base styles */ +.bn-container .mantine-Badge-root { + background-color: var(--bn-colors-tooltip-background); + color: var(--bn-colors-tooltip-text); +} + +/* Mantine FileInput component base styles */ +.bn-container .mantine-FileInput-input { + align-items: center; + background-color: var(--bn-colors-menu-background); + border: none; + border-radius: 4px; + color: var(--bn-colors-menu-text); + display: flex; + flex-direction: row; + justify-content: center; +} + +.bn-container .mantine-FileInput-input:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-container .mantine-FileInput-wrapper { + border: solid var(--bn-colors-border) 1px; + border-radius: 4px; +} + +.bn-container .mantine-InputPlaceholder-placeholder { + color: var(--bn-colors-menu-text); + font-weight: 600; +} + +/* Mantine Menu component base styles */ +.bn-container .mantine-Menu-dropdown { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + box-sizing: border-box; + color: var(--bn-colors-menu-text); + padding: 2px; + overflow: auto; +} + +.bn-container .mantine-Menu-label { + background-color: var(--bn-colors-menu-background); + color: var(--bn-colors-menu-text); +} + +.bn-container .mantine-Menu-item { + background-color: var(--bn-colors-menu-background); + border: none; + border-radius: var(--bn-border-radius-small); + color: var(--bn-colors-menu-text); +} + +.bn-container .mantine-Menu-item[data-hovered] { + background-color: var(--bn-colors-hovered-background); + border: none; + color: var(--bn-colors-hovered-text); +} + +/* Mantine Popover component base styles */ +.bn-container .mantine-Popover-dropdown { + background-color: transparent; + border: none; + border-radius: 0; + box-shadow: none; + padding: 0; +} + +/* Mantine Tabs component base styles */ +.bn-container .mantine-Tabs-root { + width: 100%; + background-color: var(--bn-colors-menu-background); +} + +.bn-container .mantine-Tabs-list:before { + border-color: var(--bn-colors-hovered-background); +} + +.bn-container .mantine-Tabs-tab { + color: var(--bn-colors-menu-text); + border-color: var(--bn-colors-hovered-background); +} + +.bn-container .mantine-Tabs-tab:hover { + background-color: var(--bn-colors-hovered-background); + border-color: var(--bn-colors-hovered-background); + color: var(--bn-colors-hovered-text); +} + +.bn-container .mantine-Tabs-tab[data-active], +.bn-container .mantine-Tabs-tab[data-active]:hover { + border-color: var(--bn-colors-menu-text); + color: var(--bn-colors-menu-text); +} + +.bn-container .mantine-Tabs-panel { + padding: 8px; +} + +/* Mantine TextInput component base styles */ +.bn-container .mantine-TextInput-input { + background-color: var(--bn-colors-menu-background); + border: solid var(--bn-colors-border) 1px; + border-radius: 4px; + color: var(--bn-colors-menu-text); + height: 32px; +} + +/* Mantine Tooltip component base styles */ +.bn-container .mantine-Tooltip-tooltip { + background-color: transparent; + border: none; + border-radius: 0; + box-shadow: none; + padding: 0; +} + +/* UI element styling */ + +/* Select styling */ +.bn-select { + overflow: auto; +} + +/* Toolbar styling */ +.bn-toolbar { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + flex-wrap: nowrap; + gap: 2px; + padding: 2px; + width: fit-content; +} + +.bn-toolbar:empty { + display: none; +} + +.bn-toolbar .mantine-Button-root, +.bn-toolbar .mantine-ActionIcon-root { + background-color: var(--bn-colors-menu-background); + border: none; + border-radius: var(--bn-border-radius-small); + color: var(--bn-colors-menu-text); +} + +.bn-toolbar .mantine-Button-root:hover, +.bn-toolbar .mantine-ActionIcon-root:hover { + background-color: var(--bn-colors-hovered-background); + border: none; + color: var(--bn-colors-hovered-text); +} + +.bn-toolbar .mantine-Button-root[data-selected], +.bn-toolbar .mantine-ActionIcon-root[data-selected] { + background-color: var(--bn-colors-selected-background); + border: none; + color: var(--bn-colors-selected-text); +} + +.bn-toolbar .mantine-Button-root[data-disabled], +.bn-toolbar .mantine-ActionIcon-root[data-disabled] { + background-color: var(--bn-colors-disabled-background); + border: none; + color: var(--bn-colors-disabled-text); +} + +.bn-toolbar .mantine-Menu-item { + font-size: 12px; + height: 30px; +} + +.bn-toolbar .mantine-Menu-item:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-container .bn-form-popover { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + color: var(--bn-colors-menu-text); + gap: 4px; + min-width: 145px; + padding: 2px; +} + +.bn-form-popover .mantine-TextInput-root, +.bn-form-popover .mantine-FileInput-root { + width: 300px; +} + +.bn-form-popover .mantine-TextInput-wrapper, +.bn-form-popover .mantine-FileInput-wrapper { + padding: 0; + border-radius: 4px; +} + +.bn-form-popover .mantine-TextInput-wrapper:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-form-popover .mantine-TextInput-input, +.bn-form-popover .mantine-FileInput-input { + border: none; + font-size: 12px; +} + +.bn-form-popover .mantine-FileInput-input:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-form-popover .mantine-FileInput-section[data-position="left"] { + color: var(--bn-colors-menu-text); +} + +.bn-form-popover .mantine-FileInput-placeholder { + color: var(--bn-colors-menu-text); +} + +/* Suggestion Menu styling*/ + +/* Base styles for Suggestion Menus, copied from the Mantine Menu component. */ +/* Unfortunately necessary, as we can't use a Menu.Dropdown component on its + own. */ +/* https://github.com/mantinedev/mantine/blob/e3e3bb834de1f2f75a27dbc757dc0a2fc6a6cba8/packages/%40mantine/core/src/components/Menu/Menu.module.css */ +.bn-suggestion-menu { + max-height: 100%; + position: relative; + box-shadow: var(--mantine-shadow-md); + border: calc(0.0625rem * var(--mantine-scale)) solid + var(--mantine-color-gray-2); + border-radius: var(--mantine-radius-default); + padding: 4px; +} + +.bn-suggestion-menu-label { + color: var(--mantine-color-dimmed); + font-weight: 500; + font-size: var(--mantine-font-size-xs); + padding: calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-sm); + cursor: default; +} + +.bn-suggestion-menu-item { + font-size: var(--mantine-font-size-sm); + width: 100%; + padding: calc(var(--mantine-spacing-xs) / 1.5) var(--mantine-spacing-sm); + border-radius: var(--popover-radius, var(--mantine-radius-default)); + color: var(--menu-item-color, var(--mantine-color-text)); + display: flex; + align-items: center; + user-select: none; + + &:where([data-disabled], :disabled) { + color: var(--mantine-color-dimmed); + opacity: 0.6; + pointer-events: none; + } + + &:where([data-hovered]) { + } +} + +/* Additional Suggestion Menu styling*/ +.bn-mt-suggestion-menu-item-body { + flex: 1; +} + +.bn-mt-suggestion-menu-item-section { + display: flex; + justify-content: center; + align-items: center; + + &:where([data-position="left"]) { + margin-inline-end: var(--mantine-spacing-xs); + } + + &:where([data-position="right"]) { + margin-inline-start: var(--mantine-spacing-xs); + } +} + +.bn-suggestion-menu { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + box-sizing: border-box; + color: var(--bn-colors-menu-text); + overflow-y: auto; + padding: 2px; +} + +.bn-suggestion-menu-item { + cursor: pointer; + height: 52px; +} + +.bn-suggestion-menu-item[data-hovered] { + background-color: var(--bn-colors-hovered-background); +} + +.bn-mt-suggestion-menu-item-section { + color: var(--bn-colors-tooltip-text); +} + +.bn-mt-suggestion-menu-item-section[data-position="left"] { + background-color: var(--bn-colors-tooltip-background); + border-radius: var(--bn-border-radius-small); + padding: 8px; +} + +.bn-mt-suggestion-menu-item-body { + align-items: stretch; + color: var(--bn-colors-menu-text); + display: flex; + flex: 1; + flex-direction: column; + justify-content: flex-start; + padding-right: 16px; +} + +.bn-mt-suggestion-menu-item-title { + line-height: 20px; + font-weight: 500; + font-size: 14px; + margin: 0; + padding: 0; +} + +.bn-mt-suggestion-menu-item-subtitle { + line-height: 16px; + font-size: 10px; + margin: 0; + padding: 0; +} + +.bn-suggestion-menu-label { + color: var(--bn-colors-hovered-text); +} + +.bn-suggestion-menu-loader { + height: 20px; + width: 100%; +} + +.bn-suggestion-menu-loader span { + background-color: var(--bn-colors-side-menu); +} + +/* Side Menu styling */ +.bn-side-menu { + background-color: transparent; + overflow: visible; +} + +.bn-side-menu .mantine-Menu-item, .bn-table-handle-menu .mantine-Menu-item { + font-size: 12px; + height: 30px; +} + +.bn-side-menu .mantine-UnstyledButton-root:not(.mantine-Menu-item) { + background-color: transparent; +} + +.bn-side-menu .mantine-UnstyledButton-root:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-side-menu .mantine-UnstyledButton-root:not(.mantine-Menu-item) svg { + background-color: transparent; + color: var(--bn-colors-side-menu); + height: 22px; + width: 22px; +} + +.bn-side-menu > [draggable="true"] { + display: flex; +} + +.bn-side-menu .mantine-Menu-dropdown { + min-width: 100px; + padding: 2px; + position: absolute; +} + +/* Image Panel styling*/ +.bn-panel { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + padding: 2px; + width: 500px; +} + +.bn-panel .bn-tab-panel { + align-items: center; + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; +} + +.bn-panel .mantine-TextInput-root, +.bn-panel .mantine-FileInput-root { + width: 100%; +} + +.bn-panel .mantine-Button-root { + background-color: var(--bn-colors-menu-background); + border: solid var(--bn-colors-border) 1px; + border-radius: var(--bn-border-radius-small); + color: var(--bn-colors-menu-text); + height: 32px; + width: 60%; +} + +.bn-panel .mantine-Button-root:hover { + background-color: var(--bn-colors-hovered-background); +} + +.bn-panel.mantine-Text-root { + text-align: center; +} + +/* Table Handle styling */ +.bn-table-handle { + align-items: center; + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-small); + box-shadow: var(--bn-shadow-light); + color: var(--bn-colors-side-menu); + cursor: pointer; + display: flex; + justify-content: center; + overflow: visible; + padding: 0; +} + +.bn-table-handle svg { + margin-inline: -4px; +} + +.bn-table-handle:hover, +.bn-table-handle-dragging { + background-color: var(--bn-colors-hovered-background); +} + +/* Drag Handle & Table Handle Menu styling */ +.bn-container .bn-drag-handle-menu { + overflow: visible; +} + +/* Tooltip styling */ +.bn-tooltip { + background-color: var(--bn-colors-tooltip-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + color: var(--bn-colors-tooltip-text); + padding: 4px 10px; + text-align: center; +} + +/* Additional menu styles */ +.bn-tick-space { + padding: 0; + width: 20px; +} + +.bn-mt-sub-menu-item > .mantine-Menu-itemLabel > div:not(.mantine-Menu-dropdown) { + align-items: center; + display: flex; + justify-content: space-between; +} diff --git a/packages/mantine/src/suggestionMenu/SuggestionMenu.tsx b/packages/mantine/src/suggestionMenu/SuggestionMenu.tsx new file mode 100644 index 0000000000..4c0e5a6db7 --- /dev/null +++ b/packages/mantine/src/suggestionMenu/SuggestionMenu.tsx @@ -0,0 +1,17 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenu = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Root"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/suggestionMenu/SuggestionMenuEmptyItem.tsx b/packages/mantine/src/suggestionMenu/SuggestionMenuEmptyItem.tsx new file mode 100644 index 0000000000..3e88792d86 --- /dev/null +++ b/packages/mantine/src/suggestionMenu/SuggestionMenuEmptyItem.tsx @@ -0,0 +1,19 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuEmptyItem = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["EmptyItem"] +>((props, ref) => { + const { className, children } = props; + + return ( + + + {children} + + + ); +}); diff --git a/packages/mantine/src/suggestionMenu/SuggestionMenuItem.tsx b/packages/mantine/src/suggestionMenu/SuggestionMenuItem.tsx new file mode 100644 index 0000000000..bc622bb073 --- /dev/null +++ b/packages/mantine/src/suggestionMenu/SuggestionMenuItem.tsx @@ -0,0 +1,67 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef, useCallback } from "react"; + +export const SuggestionMenuItem = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Item"] +>((props, ref) => { + const { + className, + title, + subtext, + // group, + icon, + badge, + // aliases, + // onItemClick, + isSelected, + setSelected, + onClick, + } = props; + + const handleMouseLeave = useCallback(() => { + setSelected?.(false); + }, [setSelected]); + + const handleMouseEnter = useCallback(() => { + setSelected?.(true); + }, [setSelected]); + + return ( + + {icon && ( + + {icon} + + )} + + + {title} + + + {subtext} + + + {badge && ( + + {badge} + + )} + + ); +}); diff --git a/packages/mantine/src/suggestionMenu/SuggestionMenuLabel.tsx b/packages/mantine/src/suggestionMenu/SuggestionMenuLabel.tsx new file mode 100644 index 0000000000..9c7178cc9b --- /dev/null +++ b/packages/mantine/src/suggestionMenu/SuggestionMenuLabel.tsx @@ -0,0 +1,17 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuLabel = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Label"] +>((props, ref) => { + const { className, children } = props; + + return ( + + {children} + + ); +}); diff --git a/packages/mantine/src/suggestionMenu/SuggestionMenuLoader.tsx b/packages/mantine/src/suggestionMenu/SuggestionMenuLoader.tsx new file mode 100644 index 0000000000..252a2682db --- /dev/null +++ b/packages/mantine/src/suggestionMenu/SuggestionMenuLoader.tsx @@ -0,0 +1,16 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const SuggestionMenuLoader = forwardRef< + HTMLDivElement, + ComponentProps["SuggestionMenu"]["Loader"] +>((props, ref) => { + const { + className, + // children + } = props; + + return ; +}); diff --git a/packages/mantine/src/tableHandle/TableHandle.tsx b/packages/mantine/src/tableHandle/TableHandle.tsx new file mode 100644 index 0000000000..08ed50271e --- /dev/null +++ b/packages/mantine/src/tableHandle/TableHandle.tsx @@ -0,0 +1,30 @@ +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const TableHandle = forwardRef< + HTMLButtonElement, + ComponentProps["TableHandle"]["Root"] +>((props, ref) => { + const { + className, + children, + draggable, + onDragStart, + onDragEnd, + style, + ...rest + } = props; + + return ( + + ); +}); diff --git a/packages/mantine/src/toolbar/Toolbar.tsx b/packages/mantine/src/toolbar/Toolbar.tsx new file mode 100644 index 0000000000..1ab8f33a64 --- /dev/null +++ b/packages/mantine/src/toolbar/Toolbar.tsx @@ -0,0 +1,23 @@ +import * as Mantine from "@mantine/core"; + +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +type ToolbarProps = ComponentProps["FormattingToolbar"]["Root"] & + ComponentProps["LinkToolbar"]["Root"]; + +export const Toolbar = forwardRef( + (props, ref) => { + const { className, children, onMouseEnter, onMouseLeave } = props; + + return ( + + {children} + + ); + } +); diff --git a/packages/mantine/src/toolbar/ToolbarButton.tsx b/packages/mantine/src/toolbar/ToolbarButton.tsx new file mode 100644 index 0000000000..d6a6ccfe5d --- /dev/null +++ b/packages/mantine/src/toolbar/ToolbarButton.tsx @@ -0,0 +1,97 @@ +import * as Mantine from "@mantine/core"; + +import { isSafari } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; + +export const TooltipContent = (props: { + mainTooltip: string; + secondaryTooltip?: string; +}) => ( + + {props.mainTooltip} + {props.secondaryTooltip && ( + {props.secondaryTooltip} + )} + +); + +type ToolbarButtonProps = ComponentProps["FormattingToolbar"]["Button"] & + ComponentProps["LinkToolbar"]["Button"]; + +/** + * Helper for basic buttons that show in the formatting toolbar. + */ +export const ToolbarButton = forwardRef( + (props, ref) => { + const { + className, + children, + mainTooltip, + secondaryTooltip, + icon, + isSelected, + isDisabled, + onClick, + ...rest + } = props; + + return ( + + }> + {/*Creates an ActionIcon instead of a Button if only an icon is provided as content.*/} + {children ? ( + { + if (isSafari()) { + (e.currentTarget as HTMLButtonElement).focus(); + } + }} + onClick={onClick} + data-selected={isSelected ? "true" : undefined} + data-test={ + mainTooltip.slice(0, 1).toLowerCase() + + mainTooltip.replace(/\s+/g, "").slice(1) + } + size={"xs"} + disabled={isDisabled || false} + ref={ref} + {...rest}> + {children} + + ) : ( + { + if (isSafari()) { + (e.currentTarget as HTMLButtonElement).focus(); + } + }} + onClick={onClick} + data-selected={isSelected ? "true" : undefined} + data-test={ + mainTooltip.slice(0, 1).toLowerCase() + + mainTooltip.replace(/\s+/g, "").slice(1) + } + size={30} + disabled={isDisabled || false} + ref={ref} + {...rest}> + {icon} + + )} + + ); + } +); diff --git a/packages/mantine/src/toolbar/ToolbarSelect.tsx b/packages/mantine/src/toolbar/ToolbarSelect.tsx new file mode 100644 index 0000000000..968decb9ab --- /dev/null +++ b/packages/mantine/src/toolbar/ToolbarSelect.tsx @@ -0,0 +1,67 @@ +import * as Mantine from "@mantine/core"; + +import { isSafari } from "@blocknote/core"; +import { ComponentProps } from "@blocknote/react"; +import { forwardRef } from "react"; +import { HiChevronDown } from "react-icons/hi"; + +// TODO: Turn into select? +export const ToolbarSelect = forwardRef< + HTMLDivElement, + ComponentProps["FormattingToolbar"]["Select"] +>((props, ref) => { + const { className, items, isDisabled } = props; + + const selectedItem = items.filter((p) => p.isSelected)[0]; + + if (!selectedItem) { + return null; + } + + return ( + + + { + if (isSafari()) { + (e.currentTarget as HTMLButtonElement).focus(); + } + }} + leftSection={selectedItem.icon} + rightSection={} + size={"xs"} + variant={"subtle"} + disabled={isDisabled}> + {selectedItem.text} + + + + {items.map((item) => ( + + ) : ( + // Ensures space for tick even if item isn't currently selected. +
+ ) + } + disabled={item.isDisabled}> + {item.text} + + ))} + + + ); +}); diff --git a/packages/mantine/tsconfig.json b/packages/mantine/tsconfig.json new file mode 100644 index 0000000000..607ad93cfa --- /dev/null +++ b/packages/mantine/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "jsx": "react-jsx", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "outDir": "dist", + "declaration": true, + "declarationDir": "types", + "composite": true, + "skipLibCheck": true, + }, + "include": ["src"], + "references": [ + { + "path": "../core" + }, + { + "path": "../react" + } + ] +} diff --git a/packages/mantine/vite.config.ts b/packages/mantine/vite.config.ts new file mode 100644 index 0000000000..0e9e1ed2f5 --- /dev/null +++ b/packages/mantine/vite.config.ts @@ -0,0 +1,52 @@ +import react from "@vitejs/plugin-react"; +import * as path from "path"; +import { webpackStats } from "rollup-plugin-webpack-stats"; +import { defineConfig } from "vite"; +import pkg from "./package.json"; +// import eslintPlugin from "vite-plugin-eslint"; + +// https://vitejs.dev/config/ +export default defineConfig((conf) => ({ + test: { + environment: "jsdom", + setupFiles: ["./vitestSetup.ts"], + }, + plugins: [react(), webpackStats()], + // used so that vitest resolves the core package from the sources instead of the built version + resolve: { + alias: + conf.command === "build" + ? ({} as Record) + : ({ + // load live from sources with live reload working + "@blocknote/core": path.resolve(__dirname, "../core/src/"), + "@blocknote/react": path.resolve(__dirname, "../react/src/"), + } as Record), + }, + build: { + sourcemap: true, + lib: { + entry: path.resolve(__dirname, "src/index.tsx"), + name: "blocknote-mantine", + fileName: "blocknote-mantine", + }, + rollupOptions: { + // make sure to externalize deps that shouldn't be bundled + // into your library + external: Object.keys({ + ...pkg.dependencies, + ...pkg.peerDependencies, + ...pkg.devDependencies, + }), + output: { + // Provide global variables to use in the UMD build + // for externalized deps + globals: { + react: "React", + "react-dom": "ReactDOM", + }, + interop: "compat", // https://rollupjs.org/migration/#changed-defaults + }, + }, + }, +})); diff --git a/packages/react/package.json b/packages/react/package.json index 09442665d3..001e68e5a6 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -50,6 +50,7 @@ "clean": "rimraf dist && rimraf types" }, "dependencies": { + "@ariakit/react": "^0.4.3", "@blocknote/core": "^0.12.4", "@floating-ui/react": "^0.26.4", "@mantine/core": "^7.7.1", @@ -59,7 +60,7 @@ "@tiptap/react": "^2.0.3", "lodash.merge": "^4.6.2", "react": "^18", - "react-dom": "^18.2.0", + "react-dom": "^18", "react-icons": "^4.3.1", "use-prefers-color-scheme": "^1.1.3" }, diff --git a/packages/react/src/components/mantine-shared/ColorPicker/ColorIcon.tsx b/packages/react/src/components/ColorPicker/ColorIcon.tsx similarity index 59% rename from packages/react/src/components/mantine-shared/ColorPicker/ColorIcon.tsx rename to packages/react/src/components/ColorPicker/ColorIcon.tsx index 725bd17b33..05eaaf7616 100644 --- a/packages/react/src/components/mantine-shared/ColorPicker/ColorIcon.tsx +++ b/packages/react/src/components/ColorPicker/ColorIcon.tsx @@ -1,4 +1,3 @@ -import { Box, MantineStyleProp } from "@mantine/core"; import { useMemo } from "react"; export const ColorIcon = ( @@ -12,25 +11,26 @@ export const ColorIcon = ( const backgroundColor = props.backgroundColor || "default"; const size = props.size || 16; - const style: MantineStyleProp = useMemo( - () => ({ - pointerEvents: "none", - fontSize: (size * 0.75).toString() + "px", - height: size.toString() + "px", - lineHeight: size.toString() + "px", - textAlign: "center", - width: size.toString() + "px", - }), + const style = useMemo( + () => + ({ + pointerEvents: "none", + fontSize: (size * 0.75).toString() + "px", + height: size.toString() + "px", + lineHeight: size.toString() + "px", + textAlign: "center", + width: size.toString() + "px", + } as const), [size] ); return ( - A - +
); }; diff --git a/packages/react/src/components/ColorPicker/ColorPicker.tsx b/packages/react/src/components/ColorPicker/ColorPicker.tsx new file mode 100644 index 0000000000..51d3e33534 --- /dev/null +++ b/packages/react/src/components/ColorPicker/ColorPicker.tsx @@ -0,0 +1,82 @@ +import { useComponentsContext } from "../../editor/ComponentsContext"; +import { useDictionary } from "../../i18n/dictionary"; +import { ColorIcon } from "./ColorIcon"; + +const colors = [ + "default", + "gray", + "brown", + "red", + "orange", + "yellow", + "green", + "blue", + "purple", + "pink", +] as const; + +export const ColorPicker = (props: { + onClick?: () => void; + iconSize?: number; + text?: { + color: string; + setColor: (color: string) => void; + }; + background?: { + color: string; + setColor: (color: string) => void; + }; +}) => { + const Components = useComponentsContext()!; + const dict = useDictionary(); + const TextColorSection = () => + props.text ? ( + <> + + {dict.color_picker.text_title} + + {colors.map((color) => ( + { + props.onClick && props.onClick(); + props.text!.setColor(color); + }} + data-test={"text-color-" + color} + icon={} + checked={props.text!.color === color} + key={"text-color-" + color}> + {dict.color_picker.colors[color]} + + ))} + + ) : null; + + const BackgroundColorSection = () => + props.background ? ( + <> + + {dict.color_picker.background_title} + + {colors.map((color) => ( + { + props.onClick && props.onClick(); + props.background!.setColor(color); + }} + data-test={"background-color-" + color} + icon={} + key={"background-color-" + color} + checked={props.background!.color === color}> + {dict.color_picker.colors[color]} + + ))} + + ) : null; + + return ( + <> + + + + ); +}; diff --git a/packages/react/src/components/FormattingToolbar/mantine/DefaultButtons/BasicTextStyleButton.tsx b/packages/react/src/components/FormattingToolbar/DefaultButtons/BasicTextStyleButton.tsx similarity index 71% rename from packages/react/src/components/FormattingToolbar/mantine/DefaultButtons/BasicTextStyleButton.tsx rename to packages/react/src/components/FormattingToolbar/DefaultButtons/BasicTextStyleButton.tsx index 1f5d58bd93..82896ea036 100644 --- a/packages/react/src/components/FormattingToolbar/mantine/DefaultButtons/BasicTextStyleButton.tsx +++ b/packages/react/src/components/FormattingToolbar/DefaultButtons/BasicTextStyleButton.tsx @@ -15,10 +15,11 @@ import { RiUnderline, } from "react-icons/ri"; -import { useBlockNoteEditor } from "../../../../hooks/useBlockNoteEditor"; -import { useEditorContentOrSelectionChange } from "../../../../hooks/useEditorContentOrSelectionChange"; -import { useSelectedBlocks } from "../../../../hooks/useSelectedBlocks"; -import { ToolbarButton } from "../../../mantine-shared/Toolbar/ToolbarButton"; +import { useComponentsContext } from "../../../editor/ComponentsContext"; +import { useBlockNoteEditor } from "../../../hooks/useBlockNoteEditor"; +import { useEditorContentOrSelectionChange } from "../../../hooks/useEditorContentOrSelectionChange"; +import { useSelectedBlocks } from "../../../hooks/useSelectedBlocks"; +import { useDictionary } from "../../../i18n/dictionary"; type BasicTextStyle = "bold" | "italic" | "underline" | "strike" | "code"; @@ -30,17 +31,9 @@ const icons = { code: RiCodeFill, } satisfies Record; -const shortcuts = { - bold: "Mod+B", - italic: "Mod+I", - underline: "Mod+U", - strike: "Mod+Shift+X", - code: "", -} satisfies Record; - function checkBasicTextStyleInSchema