@quadrats/react 0.4.0 → 0.5.1

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 (156) hide show
  1. package/_internal/renderer/typings.d.ts +3 -3
  2. package/blockquote/constants.d.ts +6 -0
  3. package/blockquote/constants.js +8 -0
  4. package/blockquote/createReactBlockquote.d.ts +4 -0
  5. package/blockquote/createReactBlockquote.js +35 -0
  6. package/blockquote/defaultRenderBlockquoteElement.d.ts +12 -0
  7. package/blockquote/defaultRenderBlockquoteElement.js +5 -0
  8. package/blockquote/index.cjs.js +54 -0
  9. package/blockquote/index.d.ts +4 -0
  10. package/blockquote/index.js +3 -0
  11. package/blockquote/jsx-serializer/createJsxSerializeBlockquote.d.ts +5 -0
  12. package/blockquote/jsx-serializer/createJsxSerializeBlockquote.js +10 -0
  13. package/blockquote/jsx-serializer/defaultRenderBlockquoteElement.d.ts +1 -0
  14. package/blockquote/jsx-serializer/index.cjs.js +15 -0
  15. package/blockquote/jsx-serializer/index.d.ts +3 -0
  16. package/blockquote/jsx-serializer/index.js +2 -0
  17. package/blockquote/jsx-serializer/package.json +7 -0
  18. package/blockquote/jsx-serializer/typings.d.ts +3 -0
  19. package/blockquote/package.json +7 -0
  20. package/blockquote/toolbar/BlockquoteToolbarIcon.d.ts +8 -0
  21. package/blockquote/toolbar/BlockquoteToolbarIcon.js +12 -0
  22. package/blockquote/toolbar/index.cjs.js +29 -0
  23. package/blockquote/toolbar/index.d.ts +2 -0
  24. package/blockquote/toolbar/index.js +2 -0
  25. package/blockquote/toolbar/package.json +7 -0
  26. package/blockquote/toolbar/useBlockquoteTool.d.ts +5 -0
  27. package/blockquote/toolbar/useBlockquoteTool.js +11 -0
  28. package/blockquote/typings.d.ts +15 -0
  29. package/bold/createReactBold.js +1 -1
  30. package/bold/defaultRenderBold.d.ts +1 -1
  31. package/bold/defaultRenderBold.js +3 -1
  32. package/bold/index.cjs.js +3 -2
  33. package/bold/jsx-serializer/createJsxSerializeBold.js +1 -1
  34. package/bold/jsx-serializer/index.cjs.js +1 -1
  35. package/bold/typings.d.ts +5 -0
  36. package/core/components/Editable.js +2 -1
  37. package/core/composeHandlers.d.ts +1 -2
  38. package/core/composeRenderElements.d.ts +1 -1
  39. package/core/createReactEditor.d.ts +2 -1
  40. package/core/createRenderElement.d.ts +1 -1
  41. package/core/createRenderElements.d.ts +1 -1
  42. package/core/index.d.ts +10 -1
  43. package/core/typings/handler.d.ts +1 -2
  44. package/core/typings/renderer.d.ts +3 -3
  45. package/divider/jsx-serializer/createJsxSerializeDivider.d.ts +1 -1
  46. package/divider/toolbar/index.cjs.js +1 -1
  47. package/divider/toolbar/useDividerTool.js +2 -2
  48. package/embed/jsx-serializer/createJsxSerializeEmbed.d.ts +1 -1
  49. package/embed/toolbar/index.cjs.js +1 -1
  50. package/embed/toolbar/useEmbedTool.js +2 -2
  51. package/file-uploader/hooks/useFileUploader.js +2 -2
  52. package/file-uploader/index.cjs.js +1 -1
  53. package/file-uploader/toolbar/index.cjs.js +1 -1
  54. package/file-uploader/toolbar/useFileUploaderTool.js +2 -2
  55. package/footnote/createReactFootnote.js +0 -11
  56. package/footnote/defaultRenderFootnoteElement.js +1 -1
  57. package/footnote/index.cjs.js +44 -12
  58. package/footnote/index.d.ts +2 -0
  59. package/footnote/index.js +2 -0
  60. package/footnote/jsx-serializer/createJsxSerializeFootnote.d.ts +1 -1
  61. package/footnote/jsx-serializer/defaultRenderFootnoteElement.js +1 -1
  62. package/footnote/jsx-serializer/index.cjs.js +1 -1
  63. package/footnote/toolbar/FootnoteToolbarIcon.d.ts +10 -0
  64. package/footnote/toolbar/FootnoteToolbarIcon.js +12 -0
  65. package/footnote/toolbar/index.cjs.js +36 -0
  66. package/footnote/toolbar/index.d.ts +2 -0
  67. package/footnote/toolbar/index.js +2 -0
  68. package/footnote/toolbar/package.json +7 -0
  69. package/footnote/toolbar/useFootnoteTool.d.ts +7 -0
  70. package/footnote/toolbar/useFootnoteTool.js +19 -0
  71. package/footnote/useFootnotes.d.ts +4 -0
  72. package/footnote/useFootnotes.js +21 -0
  73. package/footnote/useFootnotesFromNodes.d.ts +4 -0
  74. package/footnote/useFootnotesFromNodes.js +27 -0
  75. package/heading/constants.d.ts +9 -0
  76. package/heading/constants.js +11 -0
  77. package/heading/createReactHeading.d.ts +4 -0
  78. package/heading/createReactHeading.js +47 -0
  79. package/heading/defaultRenderHeadingElement.d.ts +22 -0
  80. package/heading/defaultRenderHeadingElement.js +19 -0
  81. package/heading/index.cjs.js +83 -0
  82. package/heading/index.d.ts +4 -0
  83. package/heading/index.js +3 -0
  84. package/heading/jsx-serializer/createJsxSerializeHeading.d.ts +5 -0
  85. package/heading/jsx-serializer/createJsxSerializeHeading.js +10 -0
  86. package/heading/jsx-serializer/defaultRenderHeadingElement.d.ts +1 -0
  87. package/heading/jsx-serializer/index.cjs.js +15 -0
  88. package/heading/jsx-serializer/index.d.ts +3 -0
  89. package/heading/jsx-serializer/index.js +2 -0
  90. package/heading/jsx-serializer/package.json +7 -0
  91. package/heading/jsx-serializer/typings.d.ts +3 -0
  92. package/heading/package.json +7 -0
  93. package/heading/toolbar/HeadingToolbarIcon.d.ts +10 -0
  94. package/heading/toolbar/HeadingToolbarIcon.js +12 -0
  95. package/heading/toolbar/index.cjs.js +29 -0
  96. package/heading/toolbar/index.d.ts +2 -0
  97. package/heading/toolbar/index.js +2 -0
  98. package/heading/toolbar/package.json +7 -0
  99. package/heading/toolbar/useToggleHeadingTool.d.ts +6 -0
  100. package/heading/toolbar/useToggleHeadingTool.js +11 -0
  101. package/heading/typings.d.ts +15 -0
  102. package/highlight/createReactHighlight.js +1 -1
  103. package/highlight/defaultRenderHighlight.d.ts +1 -1
  104. package/highlight/defaultRenderHighlight.js +3 -1
  105. package/highlight/index.cjs.js +3 -2
  106. package/highlight/jsx-serializer/createJsxSerializeHighlight.js +1 -1
  107. package/highlight/jsx-serializer/index.cjs.js +1 -1
  108. package/highlight/typings.d.ts +5 -0
  109. package/image/components/Image.js +2 -2
  110. package/image/components/ImageCaption.js +2 -2
  111. package/image/hooks/useImageResizer.js +2 -2
  112. package/image/index.cjs.js +3 -3
  113. package/image/jsx-serializer/createJsxSerializeImage.d.ts +2 -1
  114. package/image/jsx-serializer/createJsxSerializeImage.js +5 -4
  115. package/image/jsx-serializer/index.cjs.js +5 -4
  116. package/index.cjs.js +3 -2
  117. package/index.js +1 -1
  118. package/input-block/hooks/useInputBlock.js +2 -1
  119. package/input-block/index.cjs.js +2 -1
  120. package/italic/createReactItalic.js +1 -1
  121. package/italic/defaultRenderItalic.d.ts +1 -1
  122. package/italic/defaultRenderItalic.js +3 -1
  123. package/italic/index.cjs.js +3 -2
  124. package/italic/jsx-serializer/createJsxSerializeItalic.js +1 -1
  125. package/italic/jsx-serializer/index.cjs.js +1 -1
  126. package/italic/typings.d.ts +5 -0
  127. package/jsx-serializer/createJsxSerializeElement.d.ts +1 -1
  128. package/jsx-serializer/createJsxSerializeElements.d.ts +1 -1
  129. package/jsx-serializer/createJsxSerializer.d.ts +2 -2
  130. package/jsx-serializer/createJsxSerializer.js +2 -2
  131. package/jsx-serializer/index.cjs.js +2 -2
  132. package/jsx-serializer/typings.d.ts +2 -2
  133. package/link/jsx-serializer/createJsxSerializeLink.d.ts +1 -1
  134. package/link/toolbar/index.cjs.js +1 -1
  135. package/link/toolbar/useUnlinkTool.js +2 -2
  136. package/list/jsx-serializer/createJsxSerializeList.d.ts +1 -1
  137. package/package.json +12 -12
  138. package/paragraph/createRenderParagraphElement.d.ts +1 -1
  139. package/paragraph/jsx-serializer/createJsxSerializeParagraph.d.ts +1 -1
  140. package/read-more/jsx-serializer/createJsxSerializeReadMore.d.ts +1 -1
  141. package/read-more/toolbar/index.cjs.js +1 -1
  142. package/read-more/toolbar/useReadMoreTool.js +2 -2
  143. package/strikethrough/createReactStrikethrough.js +1 -1
  144. package/strikethrough/defaultRenderStrikethrough.d.ts +1 -1
  145. package/strikethrough/defaultRenderStrikethrough.js +3 -1
  146. package/strikethrough/index.cjs.js +3 -2
  147. package/strikethrough/jsx-serializer/createJsxSerializeStrikethrough.js +1 -1
  148. package/strikethrough/jsx-serializer/index.cjs.js +1 -1
  149. package/strikethrough/typings.d.ts +5 -0
  150. package/underline/createReactUnderline.js +1 -1
  151. package/underline/defaultRenderUnderline.d.ts +1 -1
  152. package/underline/defaultRenderUnderline.js +3 -1
  153. package/underline/index.cjs.js +3 -2
  154. package/underline/jsx-serializer/createJsxSerializeUnderline.js +1 -1
  155. package/underline/jsx-serializer/index.cjs.js +1 -1
  156. package/underline/typings.d.ts +5 -0
@@ -0,0 +1,12 @@
1
+ import { __rest } from 'tslib';
2
+ import React from 'react';
3
+ import { ToolbarIcon } from '@quadrats/react/toolbar';
4
+ import { useToggleHeadingTool } from './useToggleHeadingTool.js';
5
+
6
+ function HeadingToolbarIcon(props) {
7
+ const { controller, level } = props, rest = __rest(props, ["controller", "level"]);
8
+ const { active, onClick } = useToggleHeadingTool(controller, level);
9
+ return React.createElement(ToolbarIcon, Object.assign({}, rest, { active: active, onClick: onClick }));
10
+ }
11
+
12
+ export { HeadingToolbarIcon as default };
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('@quadrats/react');
6
+ var tslib = require('tslib');
7
+ var React = require('react');
8
+ var toolbar = require('@quadrats/react/toolbar');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
13
+
14
+ function useToggleHeadingTool(controller, level) {
15
+ const editor = react.useQuadrats();
16
+ return {
17
+ active: controller.isSelectionInHeading(editor, level),
18
+ onClick: () => controller.toggleHeadingNodes(editor, level),
19
+ };
20
+ }
21
+
22
+ function HeadingToolbarIcon(props) {
23
+ const { controller, level } = props, rest = tslib.__rest(props, ["controller", "level"]);
24
+ const { active, onClick } = useToggleHeadingTool(controller, level);
25
+ return React__default.createElement(toolbar.ToolbarIcon, Object.assign({}, rest, { active: active, onClick: onClick }));
26
+ }
27
+
28
+ exports.HeadingToolbarIcon = HeadingToolbarIcon;
29
+ exports.useToggleHeadingTool = useToggleHeadingTool;
@@ -0,0 +1,2 @@
1
+ export * from './useToggleHeadingTool';
2
+ export { HeadingToolbarIconProps, default as HeadingToolbarIcon } from './HeadingToolbarIcon';
@@ -0,0 +1,2 @@
1
+ export { useToggleHeadingTool } from './useToggleHeadingTool.js';
2
+ export { default as HeadingToolbarIcon } from './HeadingToolbarIcon.js';
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@quadrats/react/heading/toolbar",
3
+ "sideEffects": false,
4
+ "main": "./index.cjs.js",
5
+ "module": "./index.js",
6
+ "typings": "./index.d.ts"
7
+ }
@@ -0,0 +1,6 @@
1
+ import { HeadingLevel } from '@quadrats/common/heading';
2
+ import { ReactHeading } from '@quadrats/react/heading';
3
+ export declare function useToggleHeadingTool<Level extends HeadingLevel, ValidLevel extends Level>(controller: ReactHeading<Level>, level: ValidLevel): {
4
+ active: boolean;
5
+ onClick: () => void;
6
+ };
@@ -0,0 +1,11 @@
1
+ import { useQuadrats } from '@quadrats/react';
2
+
3
+ function useToggleHeadingTool(controller, level) {
4
+ const editor = useQuadrats();
5
+ return {
6
+ active: controller.isSelectionInHeading(editor, level),
7
+ onClick: () => controller.toggleHeadingNodes(editor, level),
8
+ };
9
+ }
10
+
11
+ export { useToggleHeadingTool };
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ import { Heading, HeadingElement, HeadingLevel } from '@quadrats/common/heading';
3
+ import { WithCreateHandlers, WithCreateRenderElement, RenderElementProps } from '@quadrats/react';
4
+ export declare type RenderHeadingElementProps = RenderElementProps<HeadingElement>;
5
+ export interface ReactHeadingCreateHandlersOptions {
6
+ /**
7
+ * The hotkey to toggle heading w/ specific level.
8
+ */
9
+ hotkey?: string;
10
+ }
11
+ export interface ReactHeadingCreateRenderElementOptions {
12
+ render?: (props: RenderHeadingElementProps) => JSX.Element | null | undefined;
13
+ }
14
+ export interface ReactHeading<Level extends HeadingLevel> extends Heading<Level>, WithCreateHandlers<[ReactHeadingCreateHandlersOptions?]>, WithCreateRenderElement<[ReactHeadingCreateRenderElementOptions?]> {
15
+ }
@@ -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
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import clsx from 'clsx';
3
3
  import { Editor } from '@quadrats/core';
4
- import { useEditor, ReactEditor, useLocale } from '@quadrats/react';
4
+ import { useSlateStatic, ReactEditor, useLocale } from '@quadrats/react';
5
5
 
6
6
  function ImageCaption(props) {
7
7
  const { attributes, children, element } = props;
8
- const editor = useEditor();
8
+ const editor = useSlateStatic();
9
9
  const path = ReactEditor.findPath(editor, element);
10
10
  const text = Editor.string(editor, path);
11
11
  const isEmpty = !text;
@@ -1,5 +1,5 @@
1
1
  import { useRef, useState, useEffect } from 'react';
2
- import { useEditor, useFocused, useSelected, ReactEditor } from '@quadrats/react';
2
+ import { useSlateStatic, useFocused, useSelected, ReactEditor } from '@quadrats/react';
3
3
 
4
4
  function isTouchEvent(event) {
5
5
  const { touches } = event;
@@ -15,7 +15,7 @@ function getEditorWidth(editor) {
15
15
  const moveEvents = ['mousemove', 'touchmove'];
16
16
  const endEvents = ['mouseup', 'touchend'];
17
17
  function useImageResizer(element, resizeImage) {
18
- const editor = useEditor();
18
+ const editor = useSlateStatic();
19
19
  const focused = useFocused();
20
20
  const selected = useSelected();
21
21
  const focusedAndSelected = focused && selected;
@@ -41,7 +41,7 @@ function getEditorWidth(editor) {
41
41
  const moveEvents = ['mousemove', 'touchmove'];
42
42
  const endEvents = ['mouseup', 'touchend'];
43
43
  function useImageResizer(element, resizeImage) {
44
- const editor = react.useEditor();
44
+ const editor = react.useSlateStatic();
45
45
  const focused = react.useFocused();
46
46
  const selected = react.useSelected();
47
47
  const focusedAndSelected = focused && selected;
@@ -120,7 +120,7 @@ function useImageResizer(element, resizeImage) {
120
120
 
121
121
  function Image(props) {
122
122
  const { attributes, children, element, resizeImage, src, } = props;
123
- const editor = react.useEditor();
123
+ const editor = react.useSlateStatic();
124
124
  const { focusedAndSelected, imageRef, onResizeStart } = useImageResizer(element, resizeImage);
125
125
  return (
126
126
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions
@@ -135,7 +135,7 @@ function Image(props) {
135
135
 
136
136
  function ImageCaption(props) {
137
137
  const { attributes, children, element } = props;
138
- const editor = react.useEditor();
138
+ const editor = react.useSlateStatic();
139
139
  const path = react.ReactEditor.findPath(editor, element);
140
140
  const text = core.Editor.string(editor, path);
141
141
  const isEmpty = !text;
@@ -1,8 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { ImageCaptionTypeKey, ImageFigureTypeKey, ImageHostingResolvers, ImageTypeKey } from '@quadrats/common/image';
3
+ import { QuadratsElement } from '@quadrats/core';
3
4
  import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
4
5
  import { JsxSerializeImageCaptionElementProps, JsxSerializeImageElementProps, JsxSerializeImageFigureElementProps } from './typings';
5
6
  export declare type CreateJsxSerializeImageOptions<H extends string> = Partial<Record<ImageFigureTypeKey, Partial<CreateJsxSerializeElementOptions<JsxSerializeImageFigureElementProps>>> & Record<ImageTypeKey, Partial<CreateJsxSerializeElementOptions<JsxSerializeImageElementProps>>> & Record<ImageCaptionTypeKey, Partial<CreateJsxSerializeElementOptions<JsxSerializeImageCaptionElementProps>>> & {
6
7
  hostingResolvers?: ImageHostingResolvers<H>;
7
8
  }>;
8
- export declare function createJsxSerializeImage<H extends string>(options?: CreateJsxSerializeImageOptions<H>): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
9
+ export declare function createJsxSerializeImage<H extends string>(options?: CreateJsxSerializeImageOptions<H>): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<QuadratsElement>) => JSX.Element | null | undefined;
@@ -23,17 +23,18 @@ function createJsxSerializeImage(options = {}) {
23
23
  {
24
24
  type: image.type || IMAGE_TYPES.image,
25
25
  render: (props) => {
26
+ var _a, _b;
26
27
  const { children } = props;
27
28
  const element = props.element;
28
- const figure = getFirstAncestor(element, (node) => node.type === figureType);
29
- const caption = figure === null || figure === void 0 ? void 0 : figure.children[1];
30
- return renderImage(Object.assign(Object.assign({}, getImageElementCommonProps(element, hostingResolvers)), { caption: (caption === null || caption === void 0 ? void 0 : caption.type) === captionType ? getMergedNodeTexts(caption) : '', children,
29
+ const figure = getFirstAncestor(element, node => node.type === figureType);
30
+ const caption = (_a = figure === null || figure === void 0 ? void 0 : figure.children) === null || _a === void 0 ? void 0 : _a[1];
31
+ return renderImage(Object.assign(Object.assign({}, getImageElementCommonProps(element, hostingResolvers)), { caption: ((_b = caption) === null || _b === void 0 ? void 0 : _b.type) === captionType ? getMergedNodeTexts(caption) : '', children,
31
32
  element }));
32
33
  },
33
34
  },
34
35
  {
35
36
  type: captionType,
36
- render: (props) => renderCaption(Object.assign(Object.assign({}, props), { isEmpty: !getMergedNodeTexts(props.element) })),
37
+ render: props => renderCaption(Object.assign(Object.assign({}, props), { isEmpty: !getMergedNodeTexts(props.element) })),
37
38
  },
38
39
  ]);
39
40
  }
@@ -37,17 +37,18 @@ function createJsxSerializeImage(options = {}) {
37
37
  {
38
38
  type: image$1.type || image.IMAGE_TYPES.image,
39
39
  render: (props) => {
40
+ var _a, _b;
40
41
  const { children } = props;
41
42
  const element = props.element;
42
- const figure = serializers.getFirstAncestor(element, (node) => node.type === figureType);
43
- const caption = figure === null || figure === void 0 ? void 0 : figure.children[1];
44
- return renderImage(Object.assign(Object.assign({}, image.getImageElementCommonProps(element, hostingResolvers)), { caption: (caption === null || caption === void 0 ? void 0 : caption.type) === captionType ? serializers.getMergedNodeTexts(caption) : '', children,
43
+ const figure = serializers.getFirstAncestor(element, node => node.type === figureType);
44
+ const caption = (_a = figure === null || figure === void 0 ? void 0 : figure.children) === null || _a === void 0 ? void 0 : _a[1];
45
+ return renderImage(Object.assign(Object.assign({}, image.getImageElementCommonProps(element, hostingResolvers)), { caption: ((_b = caption) === null || _b === void 0 ? void 0 : _b.type) === captionType ? serializers.getMergedNodeTexts(caption) : '', children,
45
46
  element }));
46
47
  },
47
48
  },
48
49
  {
49
50
  type: captionType,
50
- render: (props) => renderCaption(Object.assign(Object.assign({}, props), { isEmpty: !serializers.getMergedNodeTexts(props.element) })),
51
+ render: props => renderCaption(Object.assign(Object.assign({}, props), { isEmpty: !serializers.getMergedNodeTexts(props.element) })),
51
52
  },
52
53
  ]);
53
54
  }
package/index.cjs.js CHANGED
@@ -50,7 +50,8 @@ function Editable(props) {
50
50
  }, [onCompositionStartProp, isEditorEmpty]);
51
51
  const renderLeaf = React.useCallback((props) => {
52
52
  const children = renderLeafProp ? renderLeafProp(props) : React__default.createElement(DefaultLeaf, Object.assign({}, props));
53
- if (placeholderShowable && props.leaf[PLACEHOLDER_KEY]) {
53
+ const { leaf } = props;
54
+ if (placeholderShowable && leaf[PLACEHOLDER_KEY]) {
54
55
  return (React__default.createElement(React__default.Fragment, null,
55
56
  React__default.createElement("span", { className: "qdr-editable__placeholder", contentEditable: false }, placeholder),
56
57
  children));
@@ -134,11 +135,11 @@ function createRenderMark(options) {
134
135
  }
135
136
 
136
137
  exports.ReactEditor = slateReact.ReactEditor;
137
- exports.useEditor = slateReact.useEditor;
138
138
  exports.useFocused = slateReact.useFocused;
139
139
  exports.useQuadrats = slateReact.useSlate;
140
140
  exports.useReadOnly = slateReact.useReadOnly;
141
141
  exports.useSelected = slateReact.useSelected;
142
+ exports.useSlateStatic = slateReact.useSlateStatic;
142
143
  exports.DefaultElement = DefaultElement;
143
144
  exports.DefaultLeaf = DefaultLeaf;
144
145
  exports.Editable = Editable;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from '@quadrats/react/configs';
2
- export { ReactEditor, useEditor, useFocused, useSlate as useQuadrats, useReadOnly, useSelected } from 'slate-react';
2
+ export { ReactEditor, useFocused, useSlate as useQuadrats, useReadOnly, useSelected, useSlateStatic } from 'slate-react';
3
3
  export { default as Editable } from './core/components/Editable.js';
4
4
  export { default as DefaultElement } from './core/components/DefaultElement.js';
5
5
  export { default as DefaultLeaf } from './core/components/DefaultLeaf.js';
@@ -2,10 +2,11 @@ import { useRef, useLayoutEffect } from 'react';
2
2
  import { useQuadrats, useLocale } from '@quadrats/react';
3
3
 
4
4
  function useInputBlock({ confirm, element, remove }) {
5
+ var _a, _b;
5
6
  const inputRef = useRef(null);
6
7
  const editor = useQuadrats();
7
8
  const locale = useLocale();
8
- const placeholder = element.getPlaceholder(locale);
9
+ const placeholder = (_b = (_a = element.getPlaceholder) === null || _a === void 0 ? void 0 : _a.call(element, locale)) !== null && _b !== void 0 ? _b : '';
9
10
  /**
10
11
  * Since keying `Enter` or `Escape` will also cause input blurred
11
12
  * Add a `removeable` flag to avoid.
@@ -11,10 +11,11 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
11
11
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
12
 
13
13
  function useInputBlock({ confirm, element, remove }) {
14
+ var _a, _b;
14
15
  const inputRef = React.useRef(null);
15
16
  const editor = react.useQuadrats();
16
17
  const locale = react.useLocale();
17
- const placeholder = element.getPlaceholder(locale);
18
+ const placeholder = (_b = (_a = element.getPlaceholder) === null || _a === void 0 ? void 0 : _a.call(element, locale)) !== null && _b !== void 0 ? _b : '';
18
19
  /**
19
20
  * Since keying `Enter` or `Escape` will also cause input blurred
20
21
  * Add a `removeable` flag to avoid.
@@ -5,7 +5,7 @@ import { ITALIC_HOTKEY } from './constants.js';
5
5
 
6
6
  const createReactItalic = (variant) => createReactToggleMarkCreator(createItalic(variant), {
7
7
  hotkey: ITALIC_HOTKEY,
8
- render: defaultRenderItalic(variant),
8
+ render: defaultRenderItalic,
9
9
  })();
10
10
 
11
11
  export { createReactItalic };
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { RenderMarkPropsBase } from '@quadrats/react/_internal';
3
- export declare const defaultRenderItalic: (variant?: string | undefined) => ({ children }: RenderMarkPropsBase<boolean>) => JSX.Element;
3
+ export declare const defaultRenderItalic: ({ children, leaf }: RenderMarkPropsBase<boolean>) => JSX.Element;
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
+ import { ITALIC_TYPE } from '@quadrats/common/italic';
2
3
 
3
- const defaultRenderItalic = (variant) => (({ children }) => (React.createElement("i", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
4
+ const defaultRenderItalic = ({ children, leaf }) => (React.createElement("i", { className: leaf.italicVariant
5
+ ? `${ITALIC_TYPE}.${leaf.italicVariant}` : `${ITALIC_TYPE}` }, children));
4
6
 
5
7
  export { defaultRenderItalic };
@@ -17,11 +17,12 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
17
17
  */
18
18
  const ITALIC_HOTKEY = 'mod+i';
19
19
 
20
- const defaultRenderItalic = (variant) => (({ children }) => (React__default.createElement("i", { className: variant !== null && variant !== void 0 ? variant : '' }, children)));
20
+ const defaultRenderItalic = ({ children, leaf }) => (React__default.createElement("i", { className: leaf.italicVariant
21
+ ? `${italic.ITALIC_TYPE}.${leaf.italicVariant}` : `${italic.ITALIC_TYPE}` }, children));
21
22
 
22
23
  const createReactItalic = (variant) => toggleMark.createReactToggleMarkCreator(italic.createItalic(variant), {
23
24
  hotkey: ITALIC_HOTKEY,
24
- render: defaultRenderItalic(variant),
25
+ render: defaultRenderItalic,
25
26
  })();
26
27
 
27
28
  exports.ITALIC_HOTKEY = ITALIC_HOTKEY;
@@ -4,7 +4,7 @@ import { defaultRenderItalic } from '@quadrats/react/italic';
4
4
 
5
5
  const createJsxSerializeItalic = createJsxSerializeToggleMarkCreator({
6
6
  type: ITALIC_TYPE,
7
- render: defaultRenderItalic(),
7
+ render: defaultRenderItalic,
8
8
  });
9
9
 
10
10
  export { createJsxSerializeItalic };
@@ -8,7 +8,7 @@ var jsxSerializer = require('@quadrats/react/toggle-mark/jsx-serializer');
8
8
 
9
9
  const createJsxSerializeItalic = jsxSerializer.createJsxSerializeToggleMarkCreator({
10
10
  type: italic$1.ITALIC_TYPE,
11
- render: italic.defaultRenderItalic(),
11
+ render: italic.defaultRenderItalic,
12
12
  });
13
13
 
14
14
  exports.defaultRenderItalic = italic.defaultRenderItalic;
@@ -0,0 +1,5 @@
1
+ import { Text } from 'slate';
2
+ export interface ItalicLeaf extends Text {
3
+ italic: boolean;
4
+ italicVariant?: string;
5
+ }
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { CreateJsxSerializeElementOptions, JsxSerializeElementProps } from './typings';
3
- export declare function createJsxSerializeElement<P extends JsxSerializeElementProps>(options: CreateJsxSerializeElementOptions<P>): (props: JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
3
+ export declare function createJsxSerializeElement<P extends JsxSerializeElementProps>(options: CreateJsxSerializeElementOptions<P>): (props: JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { CreateJsxSerializeElementOptions, JsxSerializeElementProps } from './typings';
3
- export declare function createJsxSerializeElements<P extends JsxSerializeElementProps>(options: CreateJsxSerializeElementOptions<P>[]): (props: JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
3
+ export declare function createJsxSerializeElements<P extends JsxSerializeElementProps>(options: CreateJsxSerializeElementOptions<P>[]): (props: JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { Node } from '@quadrats/core';
2
+ import { Descendant } from '@quadrats/core';
3
3
  import { JsxSerializeElementProps, JsxSerializeLeafProps } from './typings';
4
4
  export interface CreateJsxSerializerOptioons {
5
5
  /**
@@ -14,5 +14,5 @@ export interface CreateJsxSerializerOptioons {
14
14
  leafs?: ((props: JsxSerializeLeafProps) => JSX.Element)[];
15
15
  }
16
16
  export declare function createJsxSerializer(options: CreateJsxSerializerOptioons): {
17
- serialize: (nodes: Node[]) => JSX.Element;
17
+ serialize: (nodes: Descendant[]) => JSX.Element;
18
18
  };
@@ -29,7 +29,7 @@ function createJsxSerializer(options) {
29
29
  leaf: node,
30
30
  children: (React.createElement("span", { style: leafStyle }, node.text
31
31
  .split('\n')
32
- .map((t) => t || ' ')
32
+ .map(t => t || ' ')
33
33
  .join('\n'))),
34
34
  });
35
35
  }
@@ -39,7 +39,7 @@ function createJsxSerializer(options) {
39
39
  return addKey(result);
40
40
  }
41
41
  function serializeNodes(nodes, parent) {
42
- return React.createElement(React.Fragment, null, nodes.map((node) => serializeNode(Object.assign(Object.assign({}, node), { parent }))));
42
+ return React.createElement(React.Fragment, null, nodes.map(node => serializeNode(Object.assign(Object.assign({}, node), { parent }))));
43
43
  }
44
44
  return {
45
45
  serialize: (nodes) => serializeNodes(nodes, undefined),
@@ -49,7 +49,7 @@ function createJsxSerializer(options) {
49
49
  leaf: node,
50
50
  children: (React__default.createElement("span", { style: leafStyle }, node.text
51
51
  .split('\n')
52
- .map((t) => t || ' ')
52
+ .map(t => t || ' ')
53
53
  .join('\n'))),
54
54
  });
55
55
  }
@@ -59,7 +59,7 @@ function createJsxSerializer(options) {
59
59
  return addKey(result);
60
60
  }
61
61
  function serializeNodes(nodes, parent) {
62
- return React__default.createElement(React__default.Fragment, null, nodes.map((node) => serializeNode(Object.assign(Object.assign({}, node), { parent }))));
62
+ return React__default.createElement(React__default.Fragment, null, nodes.map(node => serializeNode(Object.assign(Object.assign({}, node), { parent }))));
63
63
  }
64
64
  return {
65
65
  serialize: (nodes) => serializeNodes(nodes, undefined),
@@ -1,8 +1,8 @@
1
- import { Element } from '@quadrats/core';
1
+ import { QuadratsElement } from '@quadrats/core';
2
2
  import { WithElementParent } from '@quadrats/core/serializers';
3
3
  import { CreateRenderElementOptionsBase, CreateRenderMarkOptionsBase, RenderElementPropsBase, RenderLeafPropsBase, RenderMarkPropsBase } from '@quadrats/react/_internal';
4
4
  export declare type JsxSerializeLeafProps = RenderLeafPropsBase;
5
5
  export declare type JsxSerializeMarkProps<M> = RenderMarkPropsBase<M>;
6
- export declare type JsxSerializeElementProps<E extends Element = Element> = RenderElementPropsBase<E & WithElementParent>;
6
+ export declare type JsxSerializeElementProps<E extends QuadratsElement = QuadratsElement> = RenderElementPropsBase<E & WithElementParent>;
7
7
  export declare type CreateJsxSerializeMarkOptions<M> = CreateRenderMarkOptionsBase<M, JsxSerializeMarkProps<M>>;
8
8
  export declare type CreateJsxSerializeElementOptions<P extends JsxSerializeElementProps> = CreateRenderElementOptionsBase<P>;
@@ -2,4 +2,4 @@
2
2
  import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
3
3
  import { JsxSerializeLinkElementProps } from './typings';
4
4
  export declare type CreateJsxSerializeLinkOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeLinkElementProps>>;
5
- export declare function createJsxSerializeLink(options?: CreateJsxSerializeLinkOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
5
+ export declare function createJsxSerializeLink(options?: CreateJsxSerializeLinkOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -28,7 +28,7 @@ function useLinkTool(controller, options = {}) {
28
28
  }
29
29
 
30
30
  function useUnlinkTool(controller) {
31
- const editor = react.useEditor();
31
+ const editor = react.useSlateStatic();
32
32
  return {
33
33
  onClick: () => controller.unwrapLink(editor),
34
34
  };
@@ -1,7 +1,7 @@
1
- import { useEditor } from '@quadrats/react';
1
+ import { useSlateStatic } from '@quadrats/react';
2
2
 
3
3
  function useUnlinkTool(controller) {
4
- const editor = useEditor();
4
+ const editor = useSlateStatic();
5
5
  return {
6
6
  onClick: () => controller.unwrapLink(editor),
7
7
  };
@@ -5,4 +5,4 @@ import { JsxSerializeListElementProps } from './typings';
5
5
  export declare type CreateJsxSerializeListOptions = {
6
6
  [key in ListTypeKey]?: CreateJsxSerializeElementOptions<JsxSerializeListElementProps>;
7
7
  };
8
- export declare function createJsxSerializeList(options?: CreateJsxSerializeListOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
8
+ export declare function createJsxSerializeList(options?: CreateJsxSerializeListOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quadrats/react",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "",
5
5
  "author": "Rytass",
6
6
  "homepage": "https://github.com/Quadrats/quadrats#readme",
@@ -20,19 +20,19 @@
20
20
  "url": "https://github.com/Quadrats/quadrats/issues"
21
21
  },
22
22
  "dependencies": {
23
- "@quadrats/common": "^0.4.0",
24
- "@quadrats/core": "^0.4.0",
25
- "@quadrats/icons": "^0.4.0",
26
- "@quadrats/locales": "^0.4.0",
27
- "@quadrats/theme": "^0.4.0",
28
- "@quadrats/utils": "^0.4.0",
29
- "@types/is-hotkey": "^0.1.2",
30
- "@types/react-transition-group": "^4.2.4",
23
+ "@quadrats/common": "^0.5.1",
24
+ "@quadrats/core": "^0.5.1",
25
+ "@quadrats/icons": "^0.5.0",
26
+ "@quadrats/locales": "^0.5.0",
27
+ "@quadrats/theme": "^0.5.0",
28
+ "@quadrats/utils": "^0.5.0",
29
+ "@types/is-hotkey": "^0.1.7",
30
+ "@types/react-transition-group": "^4.4.4",
31
31
  "clsx": "^1.1.1",
32
32
  "is-hotkey": "^0.2.0",
33
- "react-transition-group": "^4.3.0",
34
- "slate-react": "^0.59.0",
35
- "tslib": "^2.0.3"
33
+ "react-transition-group": "^4.4.2",
34
+ "slate-react": "^0.72.1",
35
+ "tslib": "^2.3.1"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": "^16.8.6",
@@ -5,4 +5,4 @@ export declare type RenderParagraphElementProps = RenderElementProps<ParagraphEl
5
5
  export interface CreateRenderParagraphElementOptions {
6
6
  render?: (props: RenderParagraphElementProps) => JSX.Element | null | undefined;
7
7
  }
8
- export declare function createRenderParagraphElement(options?: CreateRenderParagraphElementOptions): (props: RenderElementProps<import("@quadrats/core").Element>) => JSX.Element | null | undefined;
8
+ export declare function createRenderParagraphElement(options?: CreateRenderParagraphElementOptions): (props: RenderElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -2,4 +2,4 @@
2
2
  import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
3
3
  import { JsxSerializeParagraphProps } from './typings';
4
4
  export declare type CreateJsxSerializeParagraphOptions = Partial<Omit<CreateJsxSerializeElementOptions<JsxSerializeParagraphProps>, 'type'>>;
5
- export declare function createJsxSerializeParagraph(options?: CreateJsxSerializeParagraphOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").Element>) => JSX.Element | null | undefined;
5
+ export declare function createJsxSerializeParagraph(options?: CreateJsxSerializeParagraphOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;
@@ -2,4 +2,4 @@
2
2
  import { CreateJsxSerializeElementOptions } from '@quadrats/react/jsx-serializer';
3
3
  import { JsxSerializeReadMoreProps } from './typings';
4
4
  export declare type CreateJsxSerializeReadMoreOptions = Partial<CreateJsxSerializeElementOptions<JsxSerializeReadMoreProps>>;
5
- export declare function createJsxSerializeReadMore(options?: CreateJsxSerializeReadMoreOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("slate").Element>) => JSX.Element | null | undefined;
5
+ export declare function createJsxSerializeReadMore(options?: CreateJsxSerializeReadMoreOptions): (props: import("@quadrats/react/jsx-serializer").JsxSerializeElementProps<import("@quadrats/core").QuadratsElement>) => JSX.Element | null | undefined;