@quadrats/react 0.4.4 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/_internal/renderer/typings.d.ts +3 -3
  2. package/blockquote/jsx-serializer/createJsxSerializeBlockquote.d.ts +1 -1
  3. package/blockquote/typings.d.ts +2 -2
  4. package/bold/createReactBold.js +1 -1
  5. package/bold/defaultRenderBold.d.ts +1 -1
  6. package/bold/defaultRenderBold.js +3 -1
  7. package/bold/index.cjs.js +3 -2
  8. package/bold/jsx-serializer/createJsxSerializeBold.js +1 -1
  9. package/bold/jsx-serializer/index.cjs.js +1 -1
  10. package/bold/typings.d.ts +5 -0
  11. package/core/components/Editable.js +2 -1
  12. package/core/composeHandlers.d.ts +1 -2
  13. package/core/composeHandlers.js +2 -2
  14. package/core/composeRenderElements.d.ts +1 -1
  15. package/core/composeRenderElements.js +1 -1
  16. package/core/composeRenderLeafs.js +1 -1
  17. package/core/createReactEditor.d.ts +2 -1
  18. package/core/createRenderElement.d.ts +1 -1
  19. package/core/createRenderElements.d.ts +1 -1
  20. package/core/index.d.ts +10 -1
  21. package/core/typings/handler.d.ts +1 -2
  22. package/core/typings/renderer.d.ts +3 -3
  23. package/divider/jsx-serializer/createJsxSerializeDivider.d.ts +1 -1
  24. package/divider/toolbar/index.cjs.js +1 -1
  25. package/divider/toolbar/useDividerTool.js +2 -2
  26. package/divider/typings.d.ts +2 -2
  27. package/embed/jsx-serializer/createJsxSerializeEmbed.d.ts +1 -1
  28. package/embed/toolbar/index.cjs.js +3 -3
  29. package/embed/toolbar/useEmbedTool.d.ts +2 -2
  30. package/embed/toolbar/useEmbedTool.js +4 -4
  31. package/embed/typings.d.ts +2 -2
  32. package/file-uploader/hooks/useFileUploader.js +2 -2
  33. package/file-uploader/index.cjs.js +1 -1
  34. package/file-uploader/toolbar/index.cjs.js +1 -1
  35. package/file-uploader/toolbar/useFileUploaderTool.js +2 -2
  36. package/file-uploader/typings.d.ts +2 -2
  37. package/footnote/createReactFootnote.js +0 -11
  38. package/footnote/defaultRenderFootnoteElement.js +1 -1
  39. package/footnote/index.cjs.js +44 -12
  40. package/footnote/index.d.ts +2 -0
  41. package/footnote/index.js +2 -0
  42. package/footnote/jsx-serializer/createJsxSerializeFootnote.d.ts +1 -1
  43. package/footnote/jsx-serializer/defaultRenderFootnoteElement.js +1 -1
  44. package/footnote/jsx-serializer/index.cjs.js +1 -1
  45. package/footnote/typings.d.ts +2 -2
  46. package/footnote/useFootnotes.d.ts +4 -0
  47. package/footnote/useFootnotes.js +21 -0
  48. package/footnote/useFootnotesFromNodes.d.ts +4 -0
  49. package/footnote/useFootnotesFromNodes.js +27 -0
  50. package/heading/jsx-serializer/createJsxSerializeHeading.d.ts +1 -1
  51. package/heading/typings.d.ts +2 -2
  52. package/highlight/createReactHighlight.js +1 -1
  53. package/highlight/defaultRenderHighlight.d.ts +1 -1
  54. package/highlight/defaultRenderHighlight.js +3 -1
  55. package/highlight/index.cjs.js +3 -2
  56. package/highlight/jsx-serializer/createJsxSerializeHighlight.js +1 -1
  57. package/highlight/jsx-serializer/index.cjs.js +1 -1
  58. package/highlight/typings.d.ts +5 -0
  59. package/image/components/Image.js +3 -5
  60. package/image/components/ImageCaption.js +2 -2
  61. package/image/createReactImage.js +1 -1
  62. package/image/hooks/useImageResizer.js +6 -6
  63. package/image/index.cjs.js +9 -11
  64. package/image/jsx-serializer/createJsxSerializeImage.d.ts +2 -1
  65. package/image/jsx-serializer/createJsxSerializeImage.js +5 -4
  66. package/image/jsx-serializer/index.cjs.js +5 -4
  67. package/image/typings.d.ts +2 -2
  68. package/index.cjs.js +7 -6
  69. package/index.js +1 -1
  70. package/input-block/hooks/useInputBlock.js +2 -1
  71. package/input-block/index.cjs.js +2 -1
  72. package/input-block/typings.d.ts +1 -1
  73. package/italic/createReactItalic.js +1 -1
  74. package/italic/defaultRenderItalic.d.ts +1 -1
  75. package/italic/defaultRenderItalic.js +3 -1
  76. package/italic/index.cjs.js +3 -2
  77. package/italic/jsx-serializer/createJsxSerializeItalic.js +1 -1
  78. package/italic/jsx-serializer/index.cjs.js +1 -1
  79. package/italic/typings.d.ts +5 -0
  80. package/jsx-serializer/createJsxSerializeElement.d.ts +1 -1
  81. package/jsx-serializer/createJsxSerializeElements.d.ts +1 -1
  82. package/jsx-serializer/createJsxSerializer.d.ts +2 -2
  83. package/jsx-serializer/createJsxSerializer.js +2 -2
  84. package/jsx-serializer/index.cjs.js +2 -2
  85. package/jsx-serializer/typings.d.ts +2 -2
  86. package/link/jsx-serializer/createJsxSerializeLink.d.ts +1 -1
  87. package/link/toolbar/index.cjs.js +1 -1
  88. package/link/toolbar/useUnlinkTool.js +2 -2
  89. package/link/typings.d.ts +2 -2
  90. package/list/createReactList.js +1 -1
  91. package/list/index.cjs.js +1 -1
  92. package/list/jsx-serializer/createJsxSerializeList.d.ts +1 -1
  93. package/list/typings.d.ts +2 -2
  94. package/package.json +12 -12
  95. package/paragraph/createRenderParagraphElement.d.ts +1 -1
  96. package/paragraph/jsx-serializer/createJsxSerializeParagraph.d.ts +1 -1
  97. package/read-more/jsx-serializer/createJsxSerializeReadMore.d.ts +1 -1
  98. package/read-more/toolbar/index.cjs.js +1 -1
  99. package/read-more/toolbar/useReadMoreTool.js +2 -2
  100. package/read-more/typings.d.ts +2 -2
  101. package/strikethrough/createReactStrikethrough.js +1 -1
  102. package/strikethrough/defaultRenderStrikethrough.d.ts +1 -1
  103. package/strikethrough/defaultRenderStrikethrough.js +3 -1
  104. package/strikethrough/index.cjs.js +3 -2
  105. package/strikethrough/jsx-serializer/createJsxSerializeStrikethrough.js +1 -1
  106. package/strikethrough/jsx-serializer/index.cjs.js +1 -1
  107. package/strikethrough/typings.d.ts +5 -0
  108. package/toggle-mark/typings.d.ts +2 -2
  109. package/toolbar/components/Toolbar.js +1 -1
  110. package/toolbar/components/ToolbarInput.js +1 -3
  111. package/toolbar/index.cjs.js +2 -4
  112. package/underline/createReactUnderline.js +1 -1
  113. package/underline/defaultRenderUnderline.d.ts +1 -1
  114. package/underline/defaultRenderUnderline.js +3 -1
  115. package/underline/index.cjs.js +3 -2
  116. package/underline/jsx-serializer/createJsxSerializeUnderline.js +1 -1
  117. package/underline/jsx-serializer/index.cjs.js +1 -1
  118. package/underline/typings.d.ts +5 -0
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { Element, Text, WithElementType, WithMarkType } from '@quadrats/core';
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 Element = Element> {
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<Element>> extends WithElementType {
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("slate").Element>) => JSX.Element | null | undefined;
5
+ export declare function createJsxSerializeBlockquote(options?: CreateJsxSerializeBlockquoteOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { BlockquoteElement, Blockquote } from '@quadrats/common/blockquote';
3
- import { WithCreateHandlers, WithCreateRenderElement, RenderElementProps } from '@quadrats/react';
3
+ import { WithCreateHandlers, WithCreateRenderElement, RenderElementProps, ReactEditor } from '@quadrats/react';
4
4
  export declare type RenderBlockquoteElementProps = RenderElementProps<BlockquoteElement>;
5
5
  export interface ReactBlockquoteCreateHandlersOptions {
6
6
  /**
@@ -11,5 +11,5 @@ export interface ReactBlockquoteCreateHandlersOptions {
11
11
  export interface ReactBlockquoteCreateRenderElementOptions {
12
12
  render?: (props: RenderBlockquoteElementProps) => JSX.Element | null | undefined;
13
13
  }
14
- export interface ReactBlockquote extends Blockquote, WithCreateHandlers<[ReactBlockquoteCreateHandlersOptions?]>, WithCreateRenderElement<[ReactBlockquoteCreateRenderElementOptions?]> {
14
+ export interface ReactBlockquote extends Blockquote<ReactEditor>, WithCreateHandlers<[ReactBlockquoteCreateHandlersOptions?]>, WithCreateRenderElement<[ReactBlockquoteCreateRenderElementOptions?]> {
15
15
  }
@@ -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(variant),
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: (variant?: string | undefined) => ({ children }: RenderMarkPropsBase<boolean>) => JSX.Element;
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 = (variant) => (({ children }) => (React.createElement("strong", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
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 = (variant) => (({ children }) => (React__default.createElement("strong", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
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(variant),
25
+ render: defaultRenderBold,
25
26
  })();
26
27
 
27
28
  exports.BOLD_HOTKEY = BOLD_HOTKEY;
@@ -4,7 +4,7 @@ import { defaultRenderBold } from '@quadrats/react/bold';
4
4
 
5
5
  const createJsxSerializeBold = createJsxSerializeToggleMarkCreator({
6
6
  type: BOLD_TYPE,
7
- render: defaultRenderBold(),
7
+ render: defaultRenderBold,
8
8
  });
9
9
 
10
10
  export { createJsxSerializeBold };
@@ -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;
@@ -0,0 +1,5 @@
1
+ import { Text } from 'slate';
2
+ export interface BoldLeaf extends Text {
3
+ bold: boolean;
4
+ boldVariant?: string;
5
+ }
@@ -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
- if (placeholderShowable && props.leaf[PLACEHOLDER_KEY]) {
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 & HistoryEditor) => EventHandlers;
8
+ }[]): (editor: ReactEditor) => EventHandlers;
@@ -1,6 +1,6 @@
1
1
  function createEventHandler(editor, handlers) {
2
2
  const [handler, ...restHandlers] = handlers;
3
- return (event) => handler(event, editor, () => {
3
+ return event => handler(event, editor, () => {
4
4
  const next = restHandlers.length > 0 ? createEventHandler(editor, restHandlers) : () => { };
5
5
  next(event);
6
6
  });
@@ -24,7 +24,7 @@ function composeHandlers(handlersList) {
24
24
  return acc;
25
25
  }, {});
26
26
  const handlersEntries = Object.entries(handlersListRecord);
27
- return (editor) => handlersEntries.reduce((acc, [name, handlers]) => {
27
+ return editor => handlersEntries.reduce((acc, [name, handlers]) => {
28
28
  acc[name] = createEventHandler(editor, handlers);
29
29
  return acc;
30
30
  }, {});
@@ -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("slate").Element>) => JSX.Element;
6
+ export declare function composeRenderElements(renderElements: ((props: RenderElementProps) => JSX.Element | null | undefined)[]): (props: RenderElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element;
@@ -6,7 +6,7 @@ import DefaultElement from './components/DefaultElement.js';
6
6
  * To compose sequential `renderElement`s to single.
7
7
  */
8
8
  function composeRenderElements(renderElements) {
9
- return composeRenderElementsBase((props) => React.createElement(DefaultElement, Object.assign({}, props)), renderElements);
9
+ return composeRenderElementsBase(props => React.createElement(DefaultElement, Object.assign({}, props)), renderElements);
10
10
  }
11
11
 
12
12
  export { composeRenderElements };
@@ -6,7 +6,7 @@ import DefaultLeaf from './components/DefaultLeaf.js';
6
6
  * To compose sequential `renderLeaf`s or `renderMark`s to single.
7
7
  */
8
8
  function composeRenderLeafs(renderLeafs) {
9
- return composeRenderLeafsBase((props) => React.createElement(DefaultLeaf, Object.assign({}, props)), renderLeafs);
9
+ return composeRenderLeafsBase(props => React.createElement(DefaultLeaf, Object.assign({}, props)), renderLeafs);
10
10
  }
11
11
 
12
12
  export { composeRenderLeafs };
@@ -1 +1,2 @@
1
- export declare function createReactEditor(): import("@quadrats/core").Editor & import("@quadrats/core").HistoryEditor & import("slate-react").ReactEditor;
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("slate").Element>) => JSX.Element | null | undefined;
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("slate").Element>) => JSX.Element | null | undefined;
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
- export { useEditor, useFocused, useReadOnly, useSelected, useSlate as useQuadrats, ReactEditor, } from 'slate-react';
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 & HistoryEditor, next: VoidFunction) => void;
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 { Element } from '@quadrats/core';
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 Element = Element> = RenderElementPropsBase<E> & Pick<SlateReactRenderElementProps, 'attributes'>;
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<Element>> = CreateRenderElementOptionsBase<P>;
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("slate").Element>) => JSX.Element | null | undefined;
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.useEditor();
15
+ const editor = react.useSlateStatic();
16
16
  return {
17
17
  onClick: () => controller.insertDivider(editor),
18
18
  };
@@ -1,7 +1,7 @@
1
- import { useEditor } from '@quadrats/react';
1
+ import { useSlateStatic } from '@quadrats/react';
2
2
 
3
3
  function useDividerTool(controller) {
4
- const editor = useEditor();
4
+ const editor = useSlateStatic();
5
5
  return {
6
6
  onClick: () => controller.insertDivider(editor),
7
7
  };
@@ -1,9 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { Divider, DividerElement } from '@quadrats/common/divider';
3
- import { WithCreateRenderElement, RenderElementProps } from '@quadrats/react';
3
+ import { WithCreateRenderElement, RenderElementProps, ReactEditor } from '@quadrats/react';
4
4
  export declare type RenderDividerElementProps = RenderElementProps<DividerElement>;
5
5
  export interface ReactDividerCreateRenderElementOptions {
6
6
  render?: (props: RenderDividerElementProps) => JSX.Element | null | undefined;
7
7
  }
8
- export interface ReactDivider extends Divider, WithCreateRenderElement<[ReactDividerCreateRenderElementOptions?]> {
8
+ export interface ReactDivider extends Divider<ReactEditor>, WithCreateRenderElement<[ReactDividerCreateRenderElementOptions?]> {
9
9
  }
@@ -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("slate").Element>) => JSX.Element | null | undefined;
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,15 +12,15 @@ 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.useEditor();
15
+ const editor = react.useSlateStatic();
16
16
  const defaultStartToolInput = toolbar.useStartToolInput();
17
17
  const start = startToolInput
18
- ? (inputConfig) => startToolInput(editor, inputConfig)
18
+ ? inputConfig => startToolInput(editor, inputConfig)
19
19
  : defaultStartToolInput;
20
20
  return {
21
21
  onClick: () => start({
22
22
  getPlaceholder,
23
- confirm: (embedCode) => controller.insertEmbed(editor, providers, embedCode),
23
+ confirm: embedCode => controller.insertEmbed(editor, providers, embedCode),
24
24
  }),
25
25
  };
26
26
  }
@@ -1,6 +1,6 @@
1
- import { Editor } from '@quadrats/core';
2
1
  import { InputWidgetConfig } from '@quadrats/common/input-widget';
2
+ import { ReactEditor } from '@quadrats/react';
3
3
  import { ReactEmbed } from '@quadrats/react/embed';
4
- export declare function useEmbedTool<P extends string>(controller: ReactEmbed<P>, providers: P[], getPlaceholder: InputWidgetConfig['getPlaceholder'], startToolInput?: (editor: Editor, inputConfig: InputWidgetConfig) => void): {
4
+ export declare function useEmbedTool<P extends string>(controller: ReactEmbed<P>, providers: P[], getPlaceholder: InputWidgetConfig['getPlaceholder'], startToolInput?: (editor: ReactEditor, inputConfig: InputWidgetConfig) => void): {
5
5
  onClick: () => void;
6
6
  };
@@ -1,16 +1,16 @@
1
- import { useEditor } from '@quadrats/react';
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 = useEditor();
5
+ const editor = useSlateStatic();
6
6
  const defaultStartToolInput = useStartToolInput();
7
7
  const start = startToolInput
8
- ? (inputConfig) => startToolInput(editor, inputConfig)
8
+ ? inputConfig => startToolInput(editor, inputConfig)
9
9
  : defaultStartToolInput;
10
10
  return {
11
11
  onClick: () => start({
12
12
  getPlaceholder,
13
- confirm: (embedCode) => controller.insertEmbed(editor, providers, embedCode),
13
+ confirm: embedCode => controller.insertEmbed(editor, providers, embedCode),
14
14
  }),
15
15
  };
16
16
  }
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { Embed, EmbedElement } from '@quadrats/common/embed';
3
- import { WithCreateRenderElement, RenderElementProps } from '@quadrats/react';
3
+ import { WithCreateRenderElement, RenderElementProps, ReactEditor } from '@quadrats/react';
4
4
  export interface WithEmbedRenderData<RenderData> {
5
5
  /**
6
6
  * The data deserialized from element by corresponding strategy.
@@ -10,5 +10,5 @@ export interface WithEmbedRenderData<RenderData> {
10
10
  export interface RenderEmbedElementProps<EmbedData extends Record<string, unknown>, RenderData> extends RenderElementProps<EmbedElement & EmbedData>, WithEmbedRenderData<RenderData> {
11
11
  }
12
12
  export declare type ReactEmbedCreateRenderElementOptions<Provider extends string> = Record<Provider, (props: RenderEmbedElementProps<any, any>) => JSX.Element | null | undefined>;
13
- export interface ReactEmbed<Provider extends string> extends Embed<Provider>, WithCreateRenderElement<[ReactEmbedCreateRenderElementOptions<Provider>]> {
13
+ export interface ReactEmbed<Provider extends string> extends Embed<Provider, ReactEditor>, WithCreateRenderElement<[ReactEmbedCreateRenderElementOptions<Provider>]> {
14
14
  }
@@ -1,9 +1,9 @@
1
1
  import { useState, useLayoutEffect } from 'react';
2
- import { useEditor, ReactEditor } from '@quadrats/react';
2
+ import { useSlateStatic, ReactEditor } from '@quadrats/react';
3
3
 
4
4
  function useFileUploader(element) {
5
5
  const [percentage, setPercentage] = useState(0);
6
- const editor = useEditor();
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.useEditor();
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.useEditor();
15
+ const editor = react.useSlateStatic();
16
16
  return {
17
17
  onClick: () => controller.upload(editor, options),
18
18
  };
@@ -1,7 +1,7 @@
1
- import { useEditor } from '@quadrats/react';
1
+ import { useSlateStatic } from '@quadrats/react';
2
2
 
3
3
  function useFileUploaderTool(controller, options) {
4
- const editor = useEditor();
4
+ const editor = useSlateStatic();
5
5
  return {
6
6
  onClick: () => controller.upload(editor, options),
7
7
  };
@@ -1,9 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { FileUploader, FileUploaderElement } from '@quadrats/common/file-uploader';
3
- import { RenderElementProps, WithCreateRenderElement } from '@quadrats/react';
3
+ import { ReactEditor, RenderElementProps, WithCreateRenderElement } from '@quadrats/react';
4
4
  export declare type RenderFileUploaderElementProps = RenderElementProps<FileUploaderElement>;
5
5
  export declare type RenderFileUploaderElement = (props: RenderFileUploaderElementProps) => JSX.Element | null | undefined;
6
6
  export interface FileUploaderCreateRenderElementOptions {
7
7
  render?: RenderFileUploaderElement;
8
8
  }
9
- export declare type ReactFileUploader = FileUploader & WithCreateRenderElement<[FileUploaderCreateRenderElementOptions?]>;
9
+ export declare type ReactFileUploader = FileUploader<ReactEditor> & WithCreateRenderElement<[FileUploaderCreateRenderElementOptions?]>;
@@ -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("a", Object.assign({}, attributes, { href: "./#", target: "_blank" }), children)),
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
 
@@ -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("a", Object.assign({}, attributes, { href: "./#", target: "_blank" }), children)),
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;
@@ -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
@@ -1,2 +1,4 @@
1
1
  export { defaultRenderFootnoteElement } from './defaultRenderFootnoteElement.js';
2
2
  export { createReactFootnote } from './createReactFootnote.js';
3
+ export { useFootnotes } from './useFootnotes.js';
4
+ export { useFootnotesFromNodes } from './useFootnotesFromNodes.js';
@@ -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("slate").Element>) => JSX.Element | null | undefined;
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("a", { href: "./#" }, children),
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("a", { href: "./#" }, children),
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
 
@@ -1,9 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { Footnote, FootnoteElement } from '@quadrats/common/footnote';
3
- import { RenderElementProps, ReactWithable, WithCreateRenderElement } from '@quadrats/react';
3
+ import { RenderElementProps, ReactWithable, WithCreateRenderElement, ReactEditor } from '@quadrats/react';
4
4
  export declare type RenderFootnoteElementProps = RenderElementProps<FootnoteElement>;
5
5
  export interface ReactFootnoteCreateRenderElementOptions {
6
6
  render?: (props: RenderFootnoteElementProps) => JSX.Element | null | undefined;
7
7
  }
8
- export interface ReactFootnote extends Omit<Footnote, 'with'>, WithCreateRenderElement<[ReactFootnoteCreateRenderElementOptions?]>, ReactWithable {
8
+ export interface ReactFootnote extends Omit<Footnote<ReactEditor>, 'with'>, WithCreateRenderElement<[ReactFootnoteCreateRenderElementOptions?]>, ReactWithable {
9
9
  }
@@ -0,0 +1,4 @@
1
+ import { FootnoteData } from '@quadrats/common/footnote';
2
+ import { ReactEditor } from 'slate-react';
3
+ export declare function useFootnotes(editor: ReactEditor): FootnoteData[];
4
+ export default useFootnotes;