@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.
Files changed (96) hide show
  1. package/_internal/renderer/typings.d.ts +3 -3
  2. package/blockquote/jsx-serializer/createJsxSerializeBlockquote.d.ts +1 -1
  3. package/bold/createReactBold.js +1 -1
  4. package/bold/defaultRenderBold.d.ts +1 -1
  5. package/bold/defaultRenderBold.js +3 -1
  6. package/bold/index.cjs.js +3 -2
  7. package/bold/jsx-serializer/createJsxSerializeBold.js +1 -1
  8. package/bold/jsx-serializer/index.cjs.js +1 -1
  9. package/bold/typings.d.ts +5 -0
  10. package/core/components/Editable.js +2 -1
  11. package/core/composeHandlers.d.ts +1 -2
  12. package/core/composeRenderElements.d.ts +1 -1
  13. package/core/createReactEditor.d.ts +2 -1
  14. package/core/createRenderElement.d.ts +1 -1
  15. package/core/createRenderElements.d.ts +1 -1
  16. package/core/index.d.ts +10 -1
  17. package/core/typings/handler.d.ts +1 -2
  18. package/core/typings/renderer.d.ts +3 -3
  19. package/divider/jsx-serializer/createJsxSerializeDivider.d.ts +1 -1
  20. package/divider/toolbar/index.cjs.js +1 -1
  21. package/divider/toolbar/useDividerTool.js +2 -2
  22. package/embed/jsx-serializer/createJsxSerializeEmbed.d.ts +1 -1
  23. package/embed/toolbar/index.cjs.js +1 -1
  24. package/embed/toolbar/useEmbedTool.js +2 -2
  25. package/file-uploader/hooks/useFileUploader.js +2 -2
  26. package/file-uploader/index.cjs.js +1 -1
  27. package/file-uploader/toolbar/index.cjs.js +1 -1
  28. package/file-uploader/toolbar/useFileUploaderTool.js +2 -2
  29. package/footnote/createReactFootnote.js +0 -11
  30. package/footnote/defaultRenderFootnoteElement.js +1 -1
  31. package/footnote/index.cjs.js +44 -12
  32. package/footnote/index.d.ts +2 -0
  33. package/footnote/index.js +2 -0
  34. package/footnote/jsx-serializer/createJsxSerializeFootnote.d.ts +1 -1
  35. package/footnote/jsx-serializer/defaultRenderFootnoteElement.js +1 -1
  36. package/footnote/jsx-serializer/index.cjs.js +1 -1
  37. package/footnote/useFootnotes.d.ts +4 -0
  38. package/footnote/useFootnotes.js +21 -0
  39. package/footnote/useFootnotesFromNodes.d.ts +4 -0
  40. package/footnote/useFootnotesFromNodes.js +27 -0
  41. package/heading/jsx-serializer/createJsxSerializeHeading.d.ts +1 -1
  42. package/highlight/createReactHighlight.js +1 -1
  43. package/highlight/defaultRenderHighlight.d.ts +1 -1
  44. package/highlight/defaultRenderHighlight.js +3 -1
  45. package/highlight/index.cjs.js +3 -2
  46. package/highlight/jsx-serializer/createJsxSerializeHighlight.js +1 -1
  47. package/highlight/jsx-serializer/index.cjs.js +1 -1
  48. package/highlight/typings.d.ts +5 -0
  49. package/image/components/Image.js +2 -2
  50. package/image/components/ImageCaption.js +2 -2
  51. package/image/hooks/useImageResizer.js +2 -2
  52. package/image/index.cjs.js +3 -3
  53. package/image/jsx-serializer/createJsxSerializeImage.d.ts +2 -1
  54. package/image/jsx-serializer/createJsxSerializeImage.js +5 -4
  55. package/image/jsx-serializer/index.cjs.js +5 -4
  56. package/index.cjs.js +3 -2
  57. package/index.js +1 -1
  58. package/input-block/hooks/useInputBlock.js +2 -1
  59. package/input-block/index.cjs.js +2 -1
  60. package/italic/createReactItalic.js +1 -1
  61. package/italic/defaultRenderItalic.d.ts +1 -1
  62. package/italic/defaultRenderItalic.js +3 -1
  63. package/italic/index.cjs.js +3 -2
  64. package/italic/jsx-serializer/createJsxSerializeItalic.js +1 -1
  65. package/italic/jsx-serializer/index.cjs.js +1 -1
  66. package/italic/typings.d.ts +5 -0
  67. package/jsx-serializer/createJsxSerializeElement.d.ts +1 -1
  68. package/jsx-serializer/createJsxSerializeElements.d.ts +1 -1
  69. package/jsx-serializer/createJsxSerializer.d.ts +2 -2
  70. package/jsx-serializer/createJsxSerializer.js +2 -2
  71. package/jsx-serializer/index.cjs.js +2 -2
  72. package/jsx-serializer/typings.d.ts +2 -2
  73. package/link/jsx-serializer/createJsxSerializeLink.d.ts +1 -1
  74. package/link/toolbar/index.cjs.js +1 -1
  75. package/link/toolbar/useUnlinkTool.js +2 -2
  76. package/list/jsx-serializer/createJsxSerializeList.d.ts +1 -1
  77. package/package.json +12 -12
  78. package/paragraph/createRenderParagraphElement.d.ts +1 -1
  79. package/paragraph/jsx-serializer/createJsxSerializeParagraph.d.ts +1 -1
  80. package/read-more/jsx-serializer/createJsxSerializeReadMore.d.ts +1 -1
  81. package/read-more/toolbar/index.cjs.js +1 -1
  82. package/read-more/toolbar/useReadMoreTool.js +2 -2
  83. package/strikethrough/createReactStrikethrough.js +1 -1
  84. package/strikethrough/defaultRenderStrikethrough.d.ts +1 -1
  85. package/strikethrough/defaultRenderStrikethrough.js +3 -1
  86. package/strikethrough/index.cjs.js +3 -2
  87. package/strikethrough/jsx-serializer/createJsxSerializeStrikethrough.js +1 -1
  88. package/strikethrough/jsx-serializer/index.cjs.js +1 -1
  89. package/strikethrough/typings.d.ts +5 -0
  90. package/underline/createReactUnderline.js +1 -1
  91. package/underline/defaultRenderUnderline.d.ts +1 -1
  92. package/underline/defaultRenderUnderline.js +3 -1
  93. package/underline/index.cjs.js +3 -2
  94. package/underline/jsx-serializer/createJsxSerializeUnderline.js +1 -1
  95. package/underline/jsx-serializer/index.cjs.js +1 -1
  96. 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;
@@ -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;
@@ -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;
@@ -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
  };
@@ -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,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.useEditor();
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 { 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
8
  ? (inputConfig) => startToolInput(editor, inputConfig)
@@ -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
  };
@@ -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
 
@@ -0,0 +1,4 @@
1
+ import { Editor } from '@quadrats/core';
2
+ import { FootnoteData } from '@quadrats/common/footnote';
3
+ export declare function useFootnotes(editor: Editor): FootnoteData[];
4
+ export default useFootnotes;
@@ -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,4 @@
1
+ import { Descendant } from '@quadrats/core';
2
+ import { FootnoteData } from '@quadrats/common/footnote';
3
+ export declare function useFootnotesFromNodes(nodes: Descendant[]): FootnoteData[];
4
+ export default useFootnotesFromNodes;
@@ -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("slate").Element>) => JSX.Element | null | undefined;
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(variant),
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: (variant?: string | undefined) => ({ children }: RenderMarkPropsBase<boolean>) => JSX.Element;
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 = (variant) => (({ children }) => (React.createElement("mark", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
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 };
@@ -17,11 +17,12 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
17
17
  */
18
18
  const HIGHLIGHT_HOTKEY = 'mod+h';
19
19
 
20
- const defaultRenderHighlight = (variant) => (({ children }) => (React__default.createElement("mark", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
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(variant),
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;
@@ -0,0 +1,5 @@
1
+ import { Text } from 'slate';
2
+ export interface HighlightLeaf extends Text {
3
+ highlight: boolean;
4
+ highlightVariant?: string;
5
+ }
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import { Transforms } from '@quadrats/core';
3
- import { useEditor, ReactEditor } from '@quadrats/react';
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 = useEditor();
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