@quadrats/react 0.4.3 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_internal/renderer/typings.d.ts +3 -3
- package/blockquote/jsx-serializer/createJsxSerializeBlockquote.d.ts +1 -1
- package/bold/createReactBold.js +1 -1
- package/bold/defaultRenderBold.d.ts +1 -1
- package/bold/defaultRenderBold.js +3 -1
- package/bold/index.cjs.js +3 -2
- package/bold/jsx-serializer/createJsxSerializeBold.js +1 -1
- package/bold/jsx-serializer/index.cjs.js +1 -1
- package/bold/typings.d.ts +5 -0
- package/core/components/Editable.js +2 -1
- package/core/composeHandlers.d.ts +1 -2
- package/core/composeRenderElements.d.ts +1 -1
- package/core/createReactEditor.d.ts +2 -1
- package/core/createRenderElement.d.ts +1 -1
- package/core/createRenderElements.d.ts +1 -1
- package/core/index.d.ts +10 -1
- package/core/typings/handler.d.ts +1 -2
- package/core/typings/renderer.d.ts +3 -3
- package/divider/jsx-serializer/createJsxSerializeDivider.d.ts +1 -1
- package/divider/toolbar/index.cjs.js +1 -1
- package/divider/toolbar/useDividerTool.js +2 -2
- package/embed/jsx-serializer/createJsxSerializeEmbed.d.ts +1 -1
- package/embed/toolbar/index.cjs.js +1 -1
- package/embed/toolbar/useEmbedTool.js +2 -2
- package/file-uploader/hooks/useFileUploader.js +2 -2
- package/file-uploader/index.cjs.js +1 -1
- package/file-uploader/toolbar/index.cjs.js +1 -1
- package/file-uploader/toolbar/useFileUploaderTool.js +2 -2
- package/footnote/createReactFootnote.js +0 -11
- package/footnote/defaultRenderFootnoteElement.js +1 -1
- package/footnote/index.cjs.js +44 -12
- package/footnote/index.d.ts +2 -0
- package/footnote/index.js +2 -0
- package/footnote/jsx-serializer/createJsxSerializeFootnote.d.ts +1 -1
- package/footnote/jsx-serializer/defaultRenderFootnoteElement.js +1 -1
- package/footnote/jsx-serializer/index.cjs.js +1 -1
- package/footnote/useFootnotes.d.ts +4 -0
- package/footnote/useFootnotes.js +21 -0
- package/footnote/useFootnotesFromNodes.d.ts +4 -0
- package/footnote/useFootnotesFromNodes.js +27 -0
- package/heading/jsx-serializer/createJsxSerializeHeading.d.ts +1 -1
- package/highlight/createReactHighlight.js +1 -1
- package/highlight/defaultRenderHighlight.d.ts +1 -1
- package/highlight/defaultRenderHighlight.js +3 -1
- package/highlight/index.cjs.js +3 -2
- package/highlight/jsx-serializer/createJsxSerializeHighlight.js +1 -1
- package/highlight/jsx-serializer/index.cjs.js +1 -1
- package/highlight/typings.d.ts +5 -0
- package/image/components/Image.js +2 -2
- package/image/components/ImageCaption.js +2 -2
- package/image/hooks/useImageResizer.js +2 -2
- package/image/index.cjs.js +3 -3
- package/image/jsx-serializer/createJsxSerializeImage.d.ts +2 -1
- package/image/jsx-serializer/createJsxSerializeImage.js +5 -4
- package/image/jsx-serializer/index.cjs.js +5 -4
- package/index.cjs.js +3 -2
- package/index.js +1 -1
- package/input-block/hooks/useInputBlock.js +2 -1
- package/input-block/index.cjs.js +2 -1
- package/italic/createReactItalic.js +1 -1
- package/italic/defaultRenderItalic.d.ts +1 -1
- package/italic/defaultRenderItalic.js +3 -1
- package/italic/index.cjs.js +3 -2
- package/italic/jsx-serializer/createJsxSerializeItalic.js +1 -1
- package/italic/jsx-serializer/index.cjs.js +1 -1
- package/italic/typings.d.ts +5 -0
- package/jsx-serializer/createJsxSerializeElement.d.ts +1 -1
- package/jsx-serializer/createJsxSerializeElements.d.ts +1 -1
- package/jsx-serializer/createJsxSerializer.d.ts +2 -2
- package/jsx-serializer/createJsxSerializer.js +2 -2
- package/jsx-serializer/index.cjs.js +2 -2
- package/jsx-serializer/typings.d.ts +2 -2
- package/link/jsx-serializer/createJsxSerializeLink.d.ts +1 -1
- package/link/toolbar/index.cjs.js +1 -1
- package/link/toolbar/useUnlinkTool.js +2 -2
- package/list/jsx-serializer/createJsxSerializeList.d.ts +1 -1
- package/package.json +12 -12
- package/paragraph/createRenderParagraphElement.d.ts +1 -1
- package/paragraph/jsx-serializer/createJsxSerializeParagraph.d.ts +1 -1
- package/read-more/jsx-serializer/createJsxSerializeReadMore.d.ts +1 -1
- package/read-more/toolbar/index.cjs.js +1 -1
- package/read-more/toolbar/useReadMoreTool.js +2 -2
- package/strikethrough/createReactStrikethrough.js +1 -1
- package/strikethrough/defaultRenderStrikethrough.d.ts +1 -1
- package/strikethrough/defaultRenderStrikethrough.js +3 -1
- package/strikethrough/index.cjs.js +3 -2
- package/strikethrough/jsx-serializer/createJsxSerializeStrikethrough.js +1 -1
- package/strikethrough/jsx-serializer/index.cjs.js +1 -1
- package/strikethrough/typings.d.ts +5 -0
- package/underline/createReactUnderline.js +1 -1
- package/underline/defaultRenderUnderline.d.ts +1 -1
- package/underline/defaultRenderUnderline.js +3 -1
- package/underline/index.cjs.js +3 -2
- package/underline/jsx-serializer/createJsxSerializeUnderline.js +1 -1
- package/underline/jsx-serializer/index.cjs.js +1 -1
- package/underline/typings.d.ts +5 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import { QuadratsElement, Text, WithElementType, WithMarkType } from '@quadrats/core';
|
|
3
3
|
export interface RenderLeafPropsBase {
|
|
4
4
|
children: any;
|
|
5
5
|
leaf: Text;
|
|
@@ -7,13 +7,13 @@ export interface RenderLeafPropsBase {
|
|
|
7
7
|
export interface RenderMarkPropsBase<M> extends RenderLeafPropsBase {
|
|
8
8
|
mark: M;
|
|
9
9
|
}
|
|
10
|
-
export interface RenderElementPropsBase<E extends
|
|
10
|
+
export interface RenderElementPropsBase<E extends QuadratsElement = QuadratsElement> {
|
|
11
11
|
children: any;
|
|
12
12
|
element: E;
|
|
13
13
|
}
|
|
14
14
|
export interface CreateRenderMarkOptionsBase<M, P extends RenderMarkPropsBase<M>> extends WithMarkType {
|
|
15
15
|
render: (props: P) => JSX.Element;
|
|
16
16
|
}
|
|
17
|
-
export interface CreateRenderElementOptionsBase<P extends RenderElementPropsBase<
|
|
17
|
+
export interface CreateRenderElementOptionsBase<P extends RenderElementPropsBase<QuadratsElement>> extends WithElementType {
|
|
18
18
|
render: (props: P) => JSX.Element | null | undefined;
|
|
19
19
|
}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
|
|
3
3
|
import { JsxSerializeBlockquoteElementProps } from './typings';
|
|
4
4
|
export declare type CreateJsxSerializeBlockquoteOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeBlockquoteElementProps>>;
|
|
5
|
-
export declare function createJsxSerializeBlockquote(options?: CreateJsxSerializeBlockquoteOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("
|
|
5
|
+
export declare function createJsxSerializeBlockquote(options?: CreateJsxSerializeBlockquoteOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
package/bold/createReactBold.js
CHANGED
|
@@ -5,7 +5,7 @@ import { defaultRenderBold } from './defaultRenderBold.js';
|
|
|
5
5
|
|
|
6
6
|
const createReactBold = (variant) => createReactToggleMarkCreator(createBold(variant), {
|
|
7
7
|
hotkey: BOLD_HOTKEY,
|
|
8
|
-
render: defaultRenderBold
|
|
8
|
+
render: defaultRenderBold,
|
|
9
9
|
})();
|
|
10
10
|
|
|
11
11
|
export { createReactBold };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { RenderMarkPropsBase } from '@quadrats/react/_internal';
|
|
3
|
-
export declare const defaultRenderBold: (
|
|
3
|
+
export declare const defaultRenderBold: ({ children, leaf }: RenderMarkPropsBase<boolean>) => JSX.Element;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { BOLD_TYPE } from '@quadrats/common/bold';
|
|
2
3
|
|
|
3
|
-
const defaultRenderBold = (
|
|
4
|
+
const defaultRenderBold = ({ children, leaf }) => (React.createElement("strong", { className: leaf.boldVariant
|
|
5
|
+
? `${BOLD_TYPE}.${leaf.boldVariant}` : `${BOLD_TYPE}` }, children));
|
|
4
6
|
|
|
5
7
|
export { defaultRenderBold };
|
package/bold/index.cjs.js
CHANGED
|
@@ -17,11 +17,12 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
17
17
|
*/
|
|
18
18
|
const BOLD_HOTKEY = 'mod+b';
|
|
19
19
|
|
|
20
|
-
const defaultRenderBold = (
|
|
20
|
+
const defaultRenderBold = ({ children, leaf }) => (React__default.createElement("strong", { className: leaf.boldVariant
|
|
21
|
+
? `${bold.BOLD_TYPE}.${leaf.boldVariant}` : `${bold.BOLD_TYPE}` }, children));
|
|
21
22
|
|
|
22
23
|
const createReactBold = (variant) => toggleMark.createReactToggleMarkCreator(bold.createBold(variant), {
|
|
23
24
|
hotkey: BOLD_HOTKEY,
|
|
24
|
-
render: defaultRenderBold
|
|
25
|
+
render: defaultRenderBold,
|
|
25
26
|
})();
|
|
26
27
|
|
|
27
28
|
exports.BOLD_HOTKEY = BOLD_HOTKEY;
|
|
@@ -8,7 +8,7 @@ var jsxSerializer = require('@quadrats/react/toggle-mark/jsx-serializer');
|
|
|
8
8
|
|
|
9
9
|
const createJsxSerializeBold = jsxSerializer.createJsxSerializeToggleMarkCreator({
|
|
10
10
|
type: bold$1.BOLD_TYPE,
|
|
11
|
-
render: bold.defaultRenderBold
|
|
11
|
+
render: bold.defaultRenderBold,
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
exports.defaultRenderBold = bold.defaultRenderBold;
|
|
@@ -39,7 +39,8 @@ function Editable(props) {
|
|
|
39
39
|
}, [onCompositionStartProp, isEditorEmpty]);
|
|
40
40
|
const renderLeaf = useCallback((props) => {
|
|
41
41
|
const children = renderLeafProp ? renderLeafProp(props) : React.createElement(DefaultLeaf, Object.assign({}, props));
|
|
42
|
-
|
|
42
|
+
const { leaf } = props;
|
|
43
|
+
if (placeholderShowable && leaf[PLACEHOLDER_KEY]) {
|
|
43
44
|
return (React.createElement(React.Fragment, null,
|
|
44
45
|
React.createElement("span", { className: "qdr-editable__placeholder", contentEditable: false }, placeholder),
|
|
45
46
|
children));
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { ReactEditor } from 'slate-react';
|
|
2
|
-
import { HistoryEditor } from '@quadrats/core';
|
|
3
2
|
import { EventHandlerName, EventHandlers, Handler } from './typings/handler';
|
|
4
3
|
/**
|
|
5
4
|
* To compose sequential `event handlers` to single for each event types.
|
|
6
5
|
*/
|
|
7
6
|
export declare function composeHandlers<H extends EventHandlerName>(handlersList: {
|
|
8
7
|
[HH in H]?: Handler<HH>;
|
|
9
|
-
}[]): (editor: ReactEditor
|
|
8
|
+
}[]): (editor: ReactEditor) => EventHandlers;
|
|
@@ -3,4 +3,4 @@ import { RenderElementProps } from './typings/renderer';
|
|
|
3
3
|
/**
|
|
4
4
|
* To compose sequential `renderElement`s to single.
|
|
5
5
|
*/
|
|
6
|
-
export declare function composeRenderElements(renderElements: ((props: RenderElementProps) => JSX.Element | null | undefined)[]): (props: RenderElementProps<import("
|
|
6
|
+
export declare function composeRenderElements(renderElements: ((props: RenderElementProps) => JSX.Element | null | undefined)[]): (props: RenderElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReactEditor } from 'slate-react';
|
|
2
|
+
export declare function createReactEditor(): ReactEditor;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { CreateRenderElementOptions, RenderElementProps } from './typings/renderer';
|
|
3
|
-
export declare function createRenderElement<P extends RenderElementProps>(options: CreateRenderElementOptions<P>): (props: RenderElementProps<import("
|
|
3
|
+
export declare function createRenderElement<P extends RenderElementProps>(options: CreateRenderElementOptions<P>): (props: RenderElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { CreateRenderElementOptions, RenderElementProps } from './typings/renderer';
|
|
3
|
-
export declare function createRenderElements<P extends RenderElementProps>(options: CreateRenderElementOptions<P>[]): (props: RenderElementProps<import("
|
|
3
|
+
export declare function createRenderElements<P extends RenderElementProps>(options: CreateRenderElementOptions<P>[]): (props: RenderElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
package/core/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { BaseEditor, QuadratsElement, QuadratsText } from '@quadrats/core';
|
|
2
|
+
import { ReactEditor } from 'slate-react';
|
|
3
|
+
export { useSlateStatic, useFocused, useReadOnly, useSelected, useSlate as useQuadrats, ReactEditor, } from 'slate-react';
|
|
2
4
|
export * from './typings/handler';
|
|
3
5
|
export * from './typings/renderer';
|
|
4
6
|
export * from './typings/with';
|
|
@@ -13,3 +15,10 @@ export { createReactEditor } from './createReactEditor';
|
|
|
13
15
|
export { createRenderElement } from './createRenderElement';
|
|
14
16
|
export { createRenderElements } from './createRenderElements';
|
|
15
17
|
export { createRenderMark } from './createRenderMark';
|
|
18
|
+
declare module 'slate' {
|
|
19
|
+
interface CustomTypes {
|
|
20
|
+
Editor: BaseEditor & ReactEditor;
|
|
21
|
+
Element: QuadratsElement;
|
|
22
|
+
Text: QuadratsText;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { DOMAttributes, EventHandler } from 'react';
|
|
2
2
|
import { ReactEditor } from 'slate-react';
|
|
3
|
-
import { HistoryEditor } from '@quadrats/core';
|
|
4
3
|
export declare type EventHandlerName = {
|
|
5
4
|
[K in keyof Required<DOMAttributes<HTMLElement>>]: NonNullable<DOMAttributes<HTMLElement>[K]> extends EventHandler<any> ? K : never;
|
|
6
5
|
}[keyof DOMAttributes<HTMLElement>];
|
|
7
6
|
export declare type EventHandlers = Pick<DOMAttributes<HTMLElement>, EventHandlerName>;
|
|
8
7
|
export declare type GetEventHandlerByName<H extends EventHandlerName> = NonNullable<EventHandlers[H]>;
|
|
9
8
|
export declare type GetEventByName<H extends EventHandlerName> = GetEventHandlerByName<H> extends (event: infer E) => void ? E : never;
|
|
10
|
-
export declare type Handler<H extends EventHandlerName> = (event: GetEventByName<H>, editor: ReactEditor
|
|
9
|
+
export declare type Handler<H extends EventHandlerName> = (event: GetEventByName<H>, editor: ReactEditor, next: VoidFunction) => void;
|
|
11
10
|
export declare type Handlers = {
|
|
12
11
|
[H in EventHandlerName]?: Handler<H>;
|
|
13
12
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { RenderElementProps as SlateReactRenderElementProps, RenderLeafProps as SlateRenderLeafProps } from 'slate-react';
|
|
3
|
-
import {
|
|
3
|
+
import { QuadratsElement } from '@quadrats/core';
|
|
4
4
|
import { CreateRenderElementOptionsBase, CreateRenderMarkOptionsBase, RenderElementPropsBase, RenderLeafPropsBase, RenderMarkPropsBase } from '@quadrats/react/_internal';
|
|
5
5
|
export declare type RenderLeafProps = RenderLeafPropsBase & Pick<SlateRenderLeafProps, 'attributes'>;
|
|
6
6
|
export declare type RenderMarkProps<M> = RenderMarkPropsBase<M>;
|
|
7
|
-
export declare type RenderElementProps<E extends
|
|
7
|
+
export declare type RenderElementProps<E extends QuadratsElement = QuadratsElement> = RenderElementPropsBase<E> & Pick<SlateReactRenderElementProps, 'attributes'>;
|
|
8
8
|
export declare type CreateRenderMarkOptions<M> = CreateRenderMarkOptionsBase<M, RenderMarkProps<M>>;
|
|
9
|
-
export declare type CreateRenderElementOptions<P extends RenderElementProps<
|
|
9
|
+
export declare type CreateRenderElementOptions<P extends RenderElementProps<QuadratsElement>> = CreateRenderElementOptionsBase<P>;
|
|
10
10
|
export interface WithCreateRenderLeaf<P extends any[] = []> {
|
|
11
11
|
createRenderLeaf: (...params: P) => (props: RenderLeafProps) => JSX.Element;
|
|
12
12
|
}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
|
|
3
3
|
import { JsxSerializeDividerProps } from './typings';
|
|
4
4
|
export declare type CreateJsxSerializeDividerOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeDividerProps>>;
|
|
5
|
-
export declare function createJsxSerializeDivider(options?: CreateJsxSerializeDividerOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("
|
|
5
|
+
export declare function createJsxSerializeDivider(options?: CreateJsxSerializeDividerOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
|
@@ -12,7 +12,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
12
12
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
13
13
|
|
|
14
14
|
function useDividerTool(controller) {
|
|
15
|
-
const editor = react.
|
|
15
|
+
const editor = react.useSlateStatic();
|
|
16
16
|
return {
|
|
17
17
|
onClick: () => controller.insertDivider(editor),
|
|
18
18
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSlateStatic } from '@quadrats/react';
|
|
2
2
|
|
|
3
3
|
function useDividerTool(controller) {
|
|
4
|
-
const editor =
|
|
4
|
+
const editor = useSlateStatic();
|
|
5
5
|
return {
|
|
6
6
|
onClick: () => controller.insertDivider(editor),
|
|
7
7
|
};
|
|
@@ -6,4 +6,4 @@ export interface CreateJsxSerializeEmbedOptions<Provider extends string> {
|
|
|
6
6
|
strategies: EmbedStrategies<Provider>;
|
|
7
7
|
renderers: Record<Provider, (props: JsxSerializeEmbedElementProps<any, any>) => JSX.Element | null | undefined>;
|
|
8
8
|
}
|
|
9
|
-
export declare function createJsxSerializeEmbed<Provider extends string>(options: CreateJsxSerializeEmbedOptions<Provider>): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("
|
|
9
|
+
export declare function createJsxSerializeEmbed<Provider extends string>(options: CreateJsxSerializeEmbedOptions<Provider>): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
|
@@ -12,7 +12,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
12
12
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
13
13
|
|
|
14
14
|
function useEmbedTool(controller, providers, getPlaceholder, startToolInput) {
|
|
15
|
-
const editor = react.
|
|
15
|
+
const editor = react.useSlateStatic();
|
|
16
16
|
const defaultStartToolInput = toolbar.useStartToolInput();
|
|
17
17
|
const start = startToolInput
|
|
18
18
|
? (inputConfig) => startToolInput(editor, inputConfig)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSlateStatic } from '@quadrats/react';
|
|
2
2
|
import { useStartToolInput } from '@quadrats/react/toolbar';
|
|
3
3
|
|
|
4
4
|
function useEmbedTool(controller, providers, getPlaceholder, startToolInput) {
|
|
5
|
-
const editor =
|
|
5
|
+
const editor = useSlateStatic();
|
|
6
6
|
const defaultStartToolInput = useStartToolInput();
|
|
7
7
|
const start = startToolInput
|
|
8
8
|
? (inputConfig) => startToolInput(editor, inputConfig)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useState, useLayoutEffect } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { useSlateStatic, ReactEditor } from '@quadrats/react';
|
|
3
3
|
|
|
4
4
|
function useFileUploader(element) {
|
|
5
5
|
const [percentage, setPercentage] = useState(0);
|
|
6
|
-
const editor =
|
|
6
|
+
const editor = useSlateStatic();
|
|
7
7
|
useLayoutEffect(() => element.register(() => ReactEditor.findPath(editor, element), setPercentage), [element]);
|
|
8
8
|
return {
|
|
9
9
|
percentage,
|
|
@@ -13,7 +13,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
13
13
|
|
|
14
14
|
function useFileUploader(element) {
|
|
15
15
|
const [percentage, setPercentage] = React.useState(0);
|
|
16
|
-
const editor = react.
|
|
16
|
+
const editor = react.useSlateStatic();
|
|
17
17
|
React.useLayoutEffect(() => element.register(() => react.ReactEditor.findPath(editor, element), setPercentage), [element]);
|
|
18
18
|
return {
|
|
19
19
|
percentage,
|
|
@@ -12,7 +12,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
12
12
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
13
13
|
|
|
14
14
|
function useFileUploaderTool(controller, options) {
|
|
15
|
-
const editor = react.
|
|
15
|
+
const editor = react.useSlateStatic();
|
|
16
16
|
return {
|
|
17
17
|
onClick: () => controller.upload(editor, options),
|
|
18
18
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSlateStatic } from '@quadrats/react';
|
|
2
2
|
|
|
3
3
|
function useFileUploaderTool(controller, options) {
|
|
4
|
-
const editor =
|
|
4
|
+
const editor = useSlateStatic();
|
|
5
5
|
return {
|
|
6
6
|
onClick: () => controller.upload(editor, options),
|
|
7
7
|
};
|
|
@@ -6,17 +6,6 @@ function createReactFootnote(options = {}) {
|
|
|
6
6
|
const core = createFootnote(options);
|
|
7
7
|
const { type } = core;
|
|
8
8
|
return Object.assign(Object.assign({}, core), { createRenderElement: ({ render = defaultRenderFootnoteElement } = {}) => createRenderElement({ type, render }), with(editor) {
|
|
9
|
-
const { insertData, insertText } = editor;
|
|
10
|
-
editor.insertData = (data) => {
|
|
11
|
-
const text = data.getData('text/plain');
|
|
12
|
-
if (text) {
|
|
13
|
-
if (core.isSelectionInFootnote(editor)) {
|
|
14
|
-
insertText(text);
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
insertData(data);
|
|
19
|
-
};
|
|
20
9
|
return core.with(editor);
|
|
21
10
|
} });
|
|
22
11
|
}
|
|
@@ -8,7 +8,7 @@ const defaultRenderFootnoteElement = ({ attributes, children, element, placement
|
|
|
8
8
|
const { footnote, index } = element;
|
|
9
9
|
return (React.createElement(React.Fragment, null,
|
|
10
10
|
React.createElement(Tooltip, { placement: placement, popup: footnote },
|
|
11
|
-
React.createElement("
|
|
11
|
+
React.createElement("span", Object.assign({ style: { textDecoration: 'underline' } }, attributes), children)),
|
|
12
12
|
React.createElement("sup", Object.assign({}, attributes, { style: { color: 'var(--qdr-sup)', userSelect: 'none' }, contentEditable: false }), `[${index !== null && index !== void 0 ? index : 1}]`)));
|
|
13
13
|
};
|
|
14
14
|
|
package/footnote/index.cjs.js
CHANGED
|
@@ -6,6 +6,7 @@ var React = require('react');
|
|
|
6
6
|
var components = require('@quadrats/react/components');
|
|
7
7
|
var react = require('@quadrats/react');
|
|
8
8
|
var footnote = require('@quadrats/common/footnote');
|
|
9
|
+
var core = require('@quadrats/core');
|
|
9
10
|
|
|
10
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
|
|
11
12
|
|
|
@@ -18,7 +19,7 @@ const defaultRenderFootnoteElement = ({ attributes, children, element, placement
|
|
|
18
19
|
const { footnote, index } = element;
|
|
19
20
|
return (React__default.createElement(React__default.Fragment, null,
|
|
20
21
|
React__default.createElement(components.Tooltip, { placement: placement, popup: footnote },
|
|
21
|
-
React__default.createElement("
|
|
22
|
+
React__default.createElement("span", Object.assign({ style: { textDecoration: 'underline' } }, attributes), children)),
|
|
22
23
|
React__default.createElement("sup", Object.assign({}, attributes, { style: { color: 'var(--qdr-sup)', userSelect: 'none' }, contentEditable: false }), `[${index !== null && index !== void 0 ? index : 1}]`)));
|
|
23
24
|
};
|
|
24
25
|
|
|
@@ -26,20 +27,51 @@ function createReactFootnote(options = {}) {
|
|
|
26
27
|
const core = footnote.createFootnote(options);
|
|
27
28
|
const { type } = core;
|
|
28
29
|
return Object.assign(Object.assign({}, core), { createRenderElement: ({ render = defaultRenderFootnoteElement } = {}) => react.createRenderElement({ type, render }), with(editor) {
|
|
29
|
-
const { insertData, insertText } = editor;
|
|
30
|
-
editor.insertData = (data) => {
|
|
31
|
-
const text = data.getData('text/plain');
|
|
32
|
-
if (text) {
|
|
33
|
-
if (core.isSelectionInFootnote(editor)) {
|
|
34
|
-
insertText(text);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
insertData(data);
|
|
39
|
-
};
|
|
40
30
|
return core.with(editor);
|
|
41
31
|
} });
|
|
42
32
|
}
|
|
43
33
|
|
|
34
|
+
function useFootnotes(editor) {
|
|
35
|
+
const footnoteNodes = Array.from(core.getNodes(editor, {
|
|
36
|
+
at: [],
|
|
37
|
+
match: (node) => node.type === footnote.FOOTNOTE_TYPE,
|
|
38
|
+
}));
|
|
39
|
+
const footnotes = footnoteNodes.map((node) => {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const nodeData = node === null || node === void 0 ? void 0 : node[0];
|
|
42
|
+
return {
|
|
43
|
+
wrapperText: (_b = (_a = (nodeData === null || nodeData === void 0 ? void 0 : nodeData.children)) === null || _a === void 0 ? void 0 : _a.map((childNode) => childNode.text).join('')) !== null && _b !== void 0 ? _b : '',
|
|
44
|
+
footnote: nodeData === null || nodeData === void 0 ? void 0 : nodeData.footnote,
|
|
45
|
+
index: nodeData === null || nodeData === void 0 ? void 0 : nodeData.index,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
return footnotes;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function deepSearchFootnoteFromNodes(nodes) {
|
|
52
|
+
const result = nodes.flatMap((element) => {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
|
+
const curNode = core.Node.isNode(element)
|
|
55
|
+
&& element.type === footnote.FOOTNOTE_TYPE ? element : null;
|
|
56
|
+
const child = core.Node.isNodeList((_a = element) === null || _a === void 0 ? void 0 : _a.children)
|
|
57
|
+
? deepSearchFootnoteFromNodes((_c = (_b = element) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []) : null;
|
|
58
|
+
return (_d = curNode !== null && curNode !== void 0 ? curNode : child) !== null && _d !== void 0 ? _d : [];
|
|
59
|
+
});
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
function useFootnotesFromNodes(nodes) {
|
|
63
|
+
const filter = deepSearchFootnoteFromNodes(nodes);
|
|
64
|
+
return filter.map((element) => {
|
|
65
|
+
var _a;
|
|
66
|
+
return ({
|
|
67
|
+
wrapperText: (_a = (element === null || element === void 0 ? void 0 : element.children)) === null || _a === void 0 ? void 0 : _a.map((childNode) => childNode.text).join(''),
|
|
68
|
+
footnote: element.footnote,
|
|
69
|
+
index: element.index,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
44
74
|
exports.createReactFootnote = createReactFootnote;
|
|
45
75
|
exports.defaultRenderFootnoteElement = defaultRenderFootnoteElement;
|
|
76
|
+
exports.useFootnotes = useFootnotes;
|
|
77
|
+
exports.useFootnotesFromNodes = useFootnotesFromNodes;
|
package/footnote/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export * from './typings';
|
|
2
2
|
export { defaultRenderFootnoteElement } from './defaultRenderFootnoteElement';
|
|
3
3
|
export { CreateReactFootnoteOptions, createReactFootnote } from './createReactFootnote';
|
|
4
|
+
export { default as useFootnotes } from './useFootnotes';
|
|
5
|
+
export { default as useFootnotesFromNodes } from './useFootnotesFromNodes';
|
package/footnote/index.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
|
|
3
3
|
import { JsxSerializeFootnoteElementProps } from './typings';
|
|
4
4
|
export declare type CreateJsxSerializeFootnoteOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeFootnoteElementProps>>;
|
|
5
|
-
export declare function createJsxSerializeFootnote(options?: CreateJsxSerializeFootnoteOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("
|
|
5
|
+
export declare function createJsxSerializeFootnote(options?: CreateJsxSerializeFootnoteOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
const defaultRenderFootnoteElement = ({ children, element }) => {
|
|
4
4
|
var _a;
|
|
5
5
|
return (React.createElement(React.Fragment, null,
|
|
6
|
-
React.createElement("
|
|
6
|
+
React.createElement("span", { style: { textDecoration: 'underline' } }, children),
|
|
7
7
|
React.createElement("sup", { style: { color: 'var(--qdr-sup)' } }, `[${(_a = element.index) !== null && _a !== void 0 ? _a : 1}]`)));
|
|
8
8
|
};
|
|
9
9
|
|
|
@@ -13,7 +13,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
13
13
|
const defaultRenderFootnoteElement = ({ children, element }) => {
|
|
14
14
|
var _a;
|
|
15
15
|
return (React__default.createElement(React__default.Fragment, null,
|
|
16
|
-
React__default.createElement("
|
|
16
|
+
React__default.createElement("span", { style: { textDecoration: 'underline' } }, children),
|
|
17
17
|
React__default.createElement("sup", { style: { color: 'var(--qdr-sup)' } }, `[${(_a = element.index) !== null && _a !== void 0 ? _a : 1}]`)));
|
|
18
18
|
};
|
|
19
19
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getNodes } from '@quadrats/core';
|
|
2
|
+
import { FOOTNOTE_TYPE } from '@quadrats/common/footnote';
|
|
3
|
+
|
|
4
|
+
function useFootnotes(editor) {
|
|
5
|
+
const footnoteNodes = Array.from(getNodes(editor, {
|
|
6
|
+
at: [],
|
|
7
|
+
match: (node) => node.type === FOOTNOTE_TYPE,
|
|
8
|
+
}));
|
|
9
|
+
const footnotes = footnoteNodes.map((node) => {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const nodeData = node === null || node === void 0 ? void 0 : node[0];
|
|
12
|
+
return {
|
|
13
|
+
wrapperText: (_b = (_a = (nodeData === null || nodeData === void 0 ? void 0 : nodeData.children)) === null || _a === void 0 ? void 0 : _a.map((childNode) => childNode.text).join('')) !== null && _b !== void 0 ? _b : '',
|
|
14
|
+
footnote: nodeData === null || nodeData === void 0 ? void 0 : nodeData.footnote,
|
|
15
|
+
index: nodeData === null || nodeData === void 0 ? void 0 : nodeData.index,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
return footnotes;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { useFootnotes as default, useFootnotes };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Node } from '@quadrats/core';
|
|
2
|
+
import { FOOTNOTE_TYPE } from '@quadrats/common/footnote';
|
|
3
|
+
|
|
4
|
+
function deepSearchFootnoteFromNodes(nodes) {
|
|
5
|
+
const result = nodes.flatMap((element) => {
|
|
6
|
+
var _a, _b, _c, _d;
|
|
7
|
+
const curNode = Node.isNode(element)
|
|
8
|
+
&& element.type === FOOTNOTE_TYPE ? element : null;
|
|
9
|
+
const child = Node.isNodeList((_a = element) === null || _a === void 0 ? void 0 : _a.children)
|
|
10
|
+
? deepSearchFootnoteFromNodes((_c = (_b = element) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []) : null;
|
|
11
|
+
return (_d = curNode !== null && curNode !== void 0 ? curNode : child) !== null && _d !== void 0 ? _d : [];
|
|
12
|
+
});
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
function useFootnotesFromNodes(nodes) {
|
|
16
|
+
const filter = deepSearchFootnoteFromNodes(nodes);
|
|
17
|
+
return filter.map((element) => {
|
|
18
|
+
var _a;
|
|
19
|
+
return ({
|
|
20
|
+
wrapperText: (_a = (element === null || element === void 0 ? void 0 : element.children)) === null || _a === void 0 ? void 0 : _a.map((childNode) => childNode.text).join(''),
|
|
21
|
+
footnote: element.footnote,
|
|
22
|
+
index: element.index,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { useFootnotesFromNodes as default, useFootnotesFromNodes };
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
|
|
3
3
|
import { JsxSerializeHeadingElementProps } from './typings';
|
|
4
4
|
export declare type CreateJsxSerializeHeadingOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeHeadingElementProps>>;
|
|
5
|
-
export declare function createJsxSerializeHeading(options?: CreateJsxSerializeHeadingOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("
|
|
5
|
+
export declare function createJsxSerializeHeading(options?: CreateJsxSerializeHeadingOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
|
|
@@ -5,7 +5,7 @@ import { HIGHLIGHT_HOTKEY } from './constants.js';
|
|
|
5
5
|
|
|
6
6
|
const createReactHighlight = (variant) => createReactToggleMarkCreator(createHighlight(variant), {
|
|
7
7
|
hotkey: HIGHLIGHT_HOTKEY,
|
|
8
|
-
render: defaultRenderHighlight
|
|
8
|
+
render: defaultRenderHighlight,
|
|
9
9
|
})();
|
|
10
10
|
|
|
11
11
|
export { createReactHighlight };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { RenderMarkPropsBase } from '@quadrats/react/_internal';
|
|
3
|
-
export declare const defaultRenderHighlight: (
|
|
3
|
+
export declare const defaultRenderHighlight: ({ children, leaf }: RenderMarkPropsBase<boolean>) => JSX.Element;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { HIGHLIGHT_TYPE } from '@quadrats/common/highlight';
|
|
2
3
|
|
|
3
|
-
const defaultRenderHighlight = (
|
|
4
|
+
const defaultRenderHighlight = ({ children, leaf }) => (React.createElement("mark", { className: leaf.highlightVariant
|
|
5
|
+
? `${HIGHLIGHT_TYPE}.${leaf.highlightVariant}` : `${HIGHLIGHT_TYPE}` }, children));
|
|
4
6
|
|
|
5
7
|
export { defaultRenderHighlight };
|
package/highlight/index.cjs.js
CHANGED
|
@@ -17,11 +17,12 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
17
17
|
*/
|
|
18
18
|
const HIGHLIGHT_HOTKEY = 'mod+h';
|
|
19
19
|
|
|
20
|
-
const defaultRenderHighlight = (
|
|
20
|
+
const defaultRenderHighlight = ({ children, leaf }) => (React__default.createElement("mark", { className: leaf.highlightVariant
|
|
21
|
+
? `${highlight.HIGHLIGHT_TYPE}.${leaf.highlightVariant}` : `${highlight.HIGHLIGHT_TYPE}` }, children));
|
|
21
22
|
|
|
22
23
|
const createReactHighlight = (variant) => toggleMark.createReactToggleMarkCreator(highlight.createHighlight(variant), {
|
|
23
24
|
hotkey: HIGHLIGHT_HOTKEY,
|
|
24
|
-
render: defaultRenderHighlight
|
|
25
|
+
render: defaultRenderHighlight,
|
|
25
26
|
})();
|
|
26
27
|
|
|
27
28
|
exports.HIGHLIGHT_HOTKEY = HIGHLIGHT_HOTKEY;
|
|
@@ -4,7 +4,7 @@ import { defaultRenderHighlight } from '@quadrats/react/highlight';
|
|
|
4
4
|
|
|
5
5
|
const createJsxSerializeHighlight = createJsxSerializeToggleMarkCreator({
|
|
6
6
|
type: HIGHLIGHT_TYPE,
|
|
7
|
-
render: defaultRenderHighlight
|
|
7
|
+
render: defaultRenderHighlight,
|
|
8
8
|
});
|
|
9
9
|
|
|
10
10
|
export { createJsxSerializeHighlight };
|
|
@@ -8,7 +8,7 @@ var jsxSerializer = require('@quadrats/react/toggle-mark/jsx-serializer');
|
|
|
8
8
|
|
|
9
9
|
const createJsxSerializeHighlight = jsxSerializer.createJsxSerializeToggleMarkCreator({
|
|
10
10
|
type: highlight$1.HIGHLIGHT_TYPE,
|
|
11
|
-
render: highlight.defaultRenderHighlight
|
|
11
|
+
render: highlight.defaultRenderHighlight,
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
exports.defaultRenderHighlight = highlight.defaultRenderHighlight;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Transforms } from '@quadrats/core';
|
|
3
|
-
import {
|
|
3
|
+
import { useSlateStatic, ReactEditor } from '@quadrats/react';
|
|
4
4
|
import { useImageResizer } from '../hooks/useImageResizer.js';
|
|
5
5
|
|
|
6
6
|
function Image(props) {
|
|
7
7
|
const { attributes, children, element, resizeImage, src, } = props;
|
|
8
|
-
const editor =
|
|
8
|
+
const editor = useSlateStatic();
|
|
9
9
|
const { focusedAndSelected, imageRef, onResizeStart } = useImageResizer(element, resizeImage);
|
|
10
10
|
return (
|
|
11
11
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions
|