Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: File blocks #731

Merged
merged 53 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0dfe4c1
WIP file blocks
matthewlipski May 3, 2024
7737077
Refactored API for extending file block previews
matthewlipski May 8, 2024
5a2dc3c
Added `parse`/`toExternalHTML` to vanilla file block API
matthewlipski May 13, 2024
a0200f7
Added `parse`/`toExternalHTML` to React file block API
matthewlipski May 14, 2024
dca1fcb
Merged main
matthewlipski May 15, 2024
309da3b
Fixed issues from merge
matthewlipski May 15, 2024
fda09b8
Added audio/video file extensions, file UI buttons, and code improvem…
matthewlipski May 16, 2024
e7db2c5
wip
YousefED May 17, 2024
2a7100b
update formatting toolbar buttons
YousefED May 17, 2024
a6cac7a
Added `parse` & `toExternalHTML`
matthewlipski May 17, 2024
3510762
Moved `parse` & `toExternalHTML` for file block
matthewlipski May 17, 2024
21905d9
wip
YousefED May 17, 2024
ed9c3df
Finished core refactor
matthewlipski May 17, 2024
d67ab4e
Refactored react package
matthewlipski May 20, 2024
0289c9e
Merge pull request #751 from TypeCellOS/file-blocks-separate-blocks
YousefED May 20, 2024
450971a
small improvements
YousefED May 20, 2024
dc5f08f
Updated CSS
matthewlipski May 20, 2024
4f9c9f0
fix build
YousefED May 20, 2024
885dcd3
Merge branch 'file-blocks' of github.com:TypeCellOS/BlockNote into fi…
YousefED May 20, 2024
4ce7fe9
Updated examples
matthewlipski May 20, 2024
f534286
Implemented PR feedback
matthewlipski May 20, 2024
6934c5c
Implemented PR feedback
matthewlipski May 20, 2024
72b701e
Fixed issues with `toExternalHTML`
matthewlipski May 20, 2024
3a2c63d
Updated core unit tests
matthewlipski May 20, 2024
9067754
Updated React unit tests
matthewlipski May 20, 2024
dda2fc2
Fixed build
matthewlipski May 20, 2024
ee109a7
small fixes
YousefED May 20, 2024
def6472
Merge branch 'file-blocks' of github.com:TypeCellOS/BlockNote into fi…
YousefED May 20, 2024
74eac81
fix build
YousefED May 20, 2024
f5cfc86
Updated PW tests
matthewlipski May 20, 2024
d818a09
Fixed PW tests
matthewlipski May 20, 2024
18fc9f7
small cleanup
YousefED May 21, 2024
fddc0bd
small fixes + add accept for file uploads
YousefED May 21, 2024
2c7fa6d
Small fix to buttons & PDF example
matthewlipski May 21, 2024
fedac25
Merge remote-tracking branch 'origin/file-blocks' into file-blocks
matthewlipski May 21, 2024
c6e4a9d
fix dictionary
YousefED May 21, 2024
bd5915d
Merge branch 'file-blocks' of github.com:TypeCellOS/BlockNote into fi…
YousefED May 21, 2024
b131e11
Merge branch 'main' into file-blocks
matthewlipski May 21, 2024
54747f5
Merge branch 'main' into file-blocks
matthewlipski May 21, 2024
018a026
Updated locales
matthewlipski May 21, 2024
1f47ab9
Updated test screenshots
matthewlipski May 21, 2024
1eb6a02
Reverted test editor changes
matthewlipski May 21, 2024
2578871
Updated snapshots
matthewlipski May 21, 2024
7470908
Updated snapshots
matthewlipski May 21, 2024
57c0466
Changed how focus is set in toolbar buttons
matthewlipski May 21, 2024
b5343fa
tmp fix for resetting fileId
YousefED May 21, 2024
52f7310
Merge branch 'file-blocks' of github.com:TypeCellOS/BlockNote into fi…
YousefED May 21, 2024
f42a846
Simplified React unit tests
matthewlipski May 21, 2024
5bcfadf
Merge remote-tracking branch 'origin/file-blocks' into file-blocks
matthewlipski May 21, 2024
b8d8a29
Small CSS fix
matthewlipski May 21, 2024
29270d3
Removed text alignment from default file block
matthewlipski May 21, 2024
8d51664
Updated unit test snapshots
matthewlipski May 21, 2024
7b93d70
Updated PW tests
matthewlipski May 21, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions examples/01-basic/testing/App.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
import { uploadToTmpFilesDotOrg_DEV_ONLY } from "@blocknote/core";
import {
BlockNoteSchema,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: remove this file?

defaultBlockSpecs,
uploadToTmpFilesDotOrg_DEV_ONLY,
} from "@blocknote/core";
import "@blocknote/core/fonts/inter.css";
import { useCreateBlockNote } from "@blocknote/react";
import { BlockNoteView } from "@blocknote/mantine";
import "@blocknote/mantine/style.css";
import {
ReactAudioBlock,
ReactImageBlock,
ReactVideoBlock,
useCreateBlockNote,
} from "@blocknote/react";

const schema = BlockNoteSchema.create({
blockSpecs: {
...defaultBlockSpecs,
image: ReactImageBlock,
video: ReactVideoBlock,
audio: ReactAudioBlock,
},
});

export default function App() {
// Creates a new editor instance.
const editor = useCreateBlockNote({
uploadFile: uploadToTmpFilesDotOrg_DEV_ONLY,
schema,
});

// Renders the editor instance using a React component.
Expand Down
20 changes: 18 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/ariakit/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export const components: Components = {
Button: ToolbarButton,
Select: ToolbarSelect,
},
ImagePanel: {
FilePanel: {
Root: Panel,
Button: PanelButton,
FileInput: PanelFileInput,
Expand Down
2 changes: 1 addition & 1 deletion packages/ariakit/src/panel/Panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { forwardRef } from "react";

export const Panel = forwardRef<
HTMLDivElement,
ComponentProps["ImagePanel"]["Root"]
ComponentProps["FilePanel"]["Root"]
>((props, ref) => {
const {
className,
Expand Down
2 changes: 1 addition & 1 deletion packages/ariakit/src/panel/PanelButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { forwardRef } from "react";

export const PanelButton = forwardRef<
HTMLButtonElement,
ComponentProps["ImagePanel"]["Button"]
ComponentProps["FilePanel"]["Button"]
>((props, ref) => {
const { className, children, onClick, label, ...rest } = props;

Expand Down
5 changes: 3 additions & 2 deletions packages/ariakit/src/panel/PanelFileInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import { forwardRef } from "react";

export const PanelFileInput = forwardRef<
HTMLInputElement,
ComponentProps["ImagePanel"]["FileInput"]
ComponentProps["FilePanel"]["FileInput"]
>((props, ref) => {
const { className, value, placeholder, onChange, ...rest } = props;
const { className, accept, value, placeholder, onChange, ...rest } = props;

assertEmpty(rest);

Expand All @@ -19,6 +19,7 @@ export const PanelFileInput = forwardRef<
ref={ref}
name={"panel-input"}
type={"file"}
accept={accept}
value={value ? value.name : undefined}
onChange={async (e) => onChange?.(e.target.files![0])}
placeholder={placeholder}
Expand Down
2 changes: 1 addition & 1 deletion packages/ariakit/src/panel/PanelTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { forwardRef } from "react";

export const PanelTab = forwardRef<
HTMLDivElement,
ComponentProps["ImagePanel"]["TabPanel"]
ComponentProps["FilePanel"]["TabPanel"]
>((props, ref) => {
const { className, children, ...rest } = props;

Expand Down
2 changes: 1 addition & 1 deletion packages/ariakit/src/panel/PanelTextInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { forwardRef } from "react";

export const PanelTextInput = forwardRef<
HTMLInputElement,
ComponentProps["ImagePanel"]["TextInput"]
ComponentProps["FilePanel"]["TextInput"]
>((props, ref) => {
const { className, value, placeholder, onKeyDown, onChange, ...rest } = props;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<figure><embed src="exampleURL"><figcaption>Caption</figcaption></figure>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file" data-url="exampleURL" data-caption="Caption"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>Add file</p>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file"><div class="bn-file-block-content-wrapper"><div class="bn-add-file-button"><div class="bn-add-file-button-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-add-file-button-text">Add file</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<figure><embed src="exampleURL"><figcaption>Caption</figcaption></figure><figure><embed src="exampleURL"><figcaption>Caption</figcaption></figure>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file" data-url="exampleURL" data-caption="Caption"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="file" data-url="exampleURL" data-caption="Caption"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<figure><img src="exampleURL"><figcaption>Caption</figcaption></figure>
<figure><img src="exampleURL" width="256" alt="Caption"><figcaption>Caption</figcaption></figure>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-width="256"><div class="bn-image-block-content-wrapper" style="align-items: flex-start;"><div class="bn-image-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="placeholder" draggable="false" style="width: 0px;"></div><p class="bn-image-caption" style="padding: 4px;"></p></div></div></div></div></div></div>
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file" data-file-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<p>Add Image</p>
<p>Add image</p>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image"><div class="bn-image-block-content-wrapper" style="align-items: flex-start;"><div class="bn-add-image-button"><div class="bn-add-image-button-icon"></div><p class="bn-add-image-button-text"></p></div></div></div></div></div></div>
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file" data-file-type="image"><div class="bn-file-block-content-wrapper"><div class="bn-add-file-button"><div class="bn-add-file-button-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5 11.1005L7 9.1005L12.5 14.6005L16 11.1005L19 14.1005V5H5V11.1005ZM4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3ZM15.5 10C14.6716 10 14 9.32843 14 8.5C14 7.67157 14.6716 7 15.5 7C16.3284 7 17 7.67157 17 8.5C17 9.32843 16.3284 10 15.5 10Z"></path></svg></div><p class="bn-add-file-button-text">Add image</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<figure><img src="exampleURL"><figcaption>Caption</figcaption></figure><figure><img src="exampleURL"><figcaption>Caption</figcaption></figure>
<figure><img src="exampleURL" width="256" alt="Caption"><figcaption>Caption</figcaption></figure><figure><img src="exampleURL" width="256" alt="Caption"><figcaption>Caption</figcaption></figure>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-width="256"><div class="bn-image-block-content-wrapper" style="align-items: flex-start;"><div class="bn-image-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="placeholder" draggable="false" style="width: 0px;"></div><p class="bn-image-caption" style="padding: 4px;"></p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-width="256"><div class="bn-image-block-content-wrapper" style="align-items: flex-start;"><div class="bn-image-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="placeholder" draggable="false" style="width: 0px;"></div><p class="bn-image-caption" style="padding: 4px;"></p></div></div></div></div></div></div></div></div></div>
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="file" data-file-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="file" data-file-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-image-wrapper"><img class="bn-image" src="exampleURL" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleFile" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-file-block-content-wrapper"><div class="bn-add-file-button"><div class="bn-add-file-button-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-add-file-button-text">Add file</p></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleFile"><div class="bn-file-block-content-wrapper"><div class="bn-add-file-button"><div class="bn-add-file-button-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-add-file-button-text">Add file</p></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleFile" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="simpleFile" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-file" draggable="false">exampleURL</div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div></div></div></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Caption
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add file
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Caption

Caption
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
![](exampleURL)
![Caption](exampleURL)

Caption
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Add Image
Add image
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
![](exampleURL)
![Caption](exampleURL)

Caption

![](exampleURL)
![Caption](exampleURL)

Caption
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
exampleURL

Caption
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add file
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
exampleURL

Caption

exampleURL

Caption
Loading
Loading