@pallasoft/ps-input-components 2.2.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ps-combobox-input.d.ts +3 -1
- package/dist/components/ps-combobox-input.js +2 -2
- package/dist/components/ps-portable-text-editor.d.ts +1 -1
- package/dist/components/ps-portable-text-editor.js +1 -2
- package/dist/components/ps-portable-text-link-dialog.d.ts +2 -1
- package/dist/components/ps-portable-text-link-dialog.js +2 -2
- package/dist/components/ps-portable-text-toolbar.js +2 -7
- package/dist/constants/ps-portable-text-editor-config.d.ts +8 -0
- package/dist/constants/ps-portable-text-editor-config.js +8 -0
- package/dist/esm/components/ps-combobox-input.js +2 -2
- package/dist/esm/components/ps-portable-text-editor.js +1 -2
- package/dist/esm/components/ps-portable-text-link-dialog.js +2 -2
- package/dist/esm/components/ps-portable-text-toolbar.js +2 -7
- package/dist/esm/constants/ps-portable-text-editor-config.js +8 -0
- package/dist/esm/portable-text-core/components/ps-portable-text-core-editor-stub.js +2 -0
- package/dist/esm/portable-text-core/components/ps-portable-text-core-editor.js +64 -0
- package/dist/esm/portable-text-core/components/ps-portable-text-core.js +5 -26
- package/dist/esm/portable-text-core/constants/ps-portable-text-core-config.js +29 -9
- package/dist/esm/portable-text-core/contexts/ps-portable-text-core-context.js +9 -0
- package/dist/esm/portable-text-core/hooks/use-ps-portable-text-link-form.js +11 -5
- package/dist/esm/portable-text-core/hooks/use-ps-portable-text-toolbar.js +17 -49
- package/dist/esm/portable-text-core/index.js +4 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-active-formats.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-block-draft.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-core-class-names.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-core-context-data.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-core-props.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-extension-options.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-span-draft.js +1 -0
- package/dist/esm/portable-text-core/interfaces/ps-portable-text-toolbar-state.js +1 -0
- package/dist/esm/portable-text-core/services/ps-portable-text-command-service.js +73 -0
- package/dist/esm/portable-text-core/services/ps-portable-text-converter-service.js +196 -0
- package/dist/esm/portable-text-core/services/ps-portable-text-editor-service.js +4 -0
- package/dist/esm/portable-text-core/services/ps-portable-text-extension-service.js +89 -0
- package/dist/esm/portable-text-engine/index.js +1 -0
- package/dist/esm/portable-text-engine/worker.js +1 -0
- package/dist/portable-text/index.d.ts +1 -1
- package/dist/portable-text-core/components/ps-portable-text-core-editor-stub.d.ts +2 -0
- package/dist/portable-text-core/components/ps-portable-text-core-editor-stub.js +6 -0
- package/dist/portable-text-core/components/ps-portable-text-core-editor.d.ts +2 -0
- package/dist/portable-text-core/components/ps-portable-text-core-editor.js +68 -0
- package/dist/portable-text-core/components/ps-portable-text-core.d.ts +2 -17
- package/dist/portable-text-core/components/ps-portable-text-core.js +3 -24
- package/dist/portable-text-core/constants/ps-portable-text-core-config.d.ts +36 -19
- package/dist/portable-text-core/constants/ps-portable-text-core-config.js +29 -9
- package/dist/portable-text-core/contexts/ps-portable-text-core-context.d.ts +2 -0
- package/dist/portable-text-core/contexts/ps-portable-text-core-context.js +12 -0
- package/dist/portable-text-core/hooks/use-ps-portable-text-link-form.d.ts +3 -1
- package/dist/portable-text-core/hooks/use-ps-portable-text-link-form.js +10 -4
- package/dist/portable-text-core/hooks/use-ps-portable-text-toolbar.d.ts +5 -10
- package/dist/portable-text-core/hooks/use-ps-portable-text-toolbar.js +17 -49
- package/dist/portable-text-core/index.d.ts +5 -1
- package/dist/portable-text-core/index.js +4 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-active-formats.d.ts +10 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-active-formats.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-block-draft.d.ts +7 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-block-draft.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-class-names.d.ts +8 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-class-names.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-context-data.d.ts +9 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-context-data.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-props.d.ts +16 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-core-props.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-editor-labels.d.ts +1 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-extension-options.d.ts +6 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-extension-options.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-span-draft.d.ts +4 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-span-draft.js +2 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-toolbar-state.d.ts +5 -0
- package/dist/portable-text-core/interfaces/ps-portable-text-toolbar-state.js +2 -0
- package/dist/portable-text-core/services/ps-portable-text-command-service.d.ts +14 -0
- package/dist/portable-text-core/services/ps-portable-text-command-service.js +77 -0
- package/dist/portable-text-core/services/ps-portable-text-converter-service.d.ts +18 -0
- package/dist/portable-text-core/services/ps-portable-text-converter-service.js +200 -0
- package/dist/portable-text-core/services/ps-portable-text-editor-service.d.ts +1 -0
- package/dist/portable-text-core/services/ps-portable-text-editor-service.js +4 -0
- package/dist/portable-text-core/services/ps-portable-text-extension-service.d.ts +8 -0
- package/dist/portable-text-core/services/ps-portable-text-extension-service.js +93 -0
- package/dist/portable-text-engine/index.d.ts +1 -0
- package/dist/portable-text-engine/index.js +17 -0
- package/dist/portable-text-engine/worker.d.ts +1 -0
- package/dist/portable-text-engine/worker.js +17 -0
- package/package.json +29 -5
- package/dist/constants/ps-portable-text-editor-renderers.d.ts +0 -6
- package/dist/constants/ps-portable-text-editor-renderers.js +0 -32
- package/dist/esm/constants/ps-portable-text-editor-renderers.js +0 -29
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PsPortableTextCoreConfig = void 0;
|
|
4
4
|
const ps_models_1 = require("@pallasoft/ps-models");
|
|
5
|
-
const editor_1 = require("@portabletext/editor");
|
|
6
5
|
const Models = ps_models_1.Common.PortableTextConfig;
|
|
7
6
|
exports.PsPortableTextCoreConfig = {
|
|
8
7
|
linkAnnotation: Models.linkType,
|
|
9
8
|
mailtoPrefix: 'mailto:',
|
|
10
9
|
emailPattern: /^[^\s@/:]+@[^\s@/:]+\.[^\s@/:]+$/,
|
|
11
10
|
lineHeightRem: 1.5,
|
|
11
|
+
lineBreak: '\n',
|
|
12
|
+
defaultLinkProtocol: 'https',
|
|
13
|
+
keyPrefix: { block: 'b', link: 'l', span: 's' },
|
|
12
14
|
decorators: {
|
|
13
15
|
bold: Models.decorators[0],
|
|
14
16
|
code: Models.decorators[3],
|
|
@@ -17,19 +19,37 @@ exports.PsPortableTextCoreConfig = {
|
|
|
17
19
|
},
|
|
18
20
|
styles: { blockquote: Models.styles[1], normal: Models.styles[0] },
|
|
19
21
|
listItems: { bullet: Models.listItems[0], number: Models.listItems[1] },
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
decoratorMarks: {
|
|
23
|
+
[Models.decorators[0]]: 'bold',
|
|
24
|
+
[Models.decorators[1]]: 'italic',
|
|
25
|
+
[Models.decorators[2]]: 'underline',
|
|
26
|
+
[Models.decorators[3]]: 'code',
|
|
27
|
+
},
|
|
28
|
+
listNodes: {
|
|
29
|
+
[Models.listItems[0]]: 'bulletList',
|
|
30
|
+
[Models.listItems[1]]: 'orderedList',
|
|
31
|
+
},
|
|
32
|
+
nodes: {
|
|
33
|
+
blockquote: 'blockquote',
|
|
34
|
+
bulletList: 'bulletList',
|
|
35
|
+
document: 'doc',
|
|
36
|
+
hardBreak: 'hardBreak',
|
|
37
|
+
listItem: 'listItem',
|
|
38
|
+
orderedList: 'orderedList',
|
|
39
|
+
paragraph: 'paragraph',
|
|
40
|
+
text: 'text',
|
|
41
|
+
},
|
|
42
|
+
linkMark: 'link',
|
|
43
|
+
linkShortcutExtension: 'psLinkShortcut',
|
|
44
|
+
listItemContent: 'paragraph (bulletList | orderedList)*',
|
|
45
|
+
blockquoteContent: 'paragraph+',
|
|
46
|
+
shortcuts: { link: 'Mod-k', nest: 'Tab', unnest: 'Shift-Tab' },
|
|
28
47
|
labels: {
|
|
29
48
|
bold: 'Bold',
|
|
30
49
|
bulletedList: 'Bulleted list',
|
|
31
50
|
cancel: 'Cancel',
|
|
32
51
|
code: 'Code',
|
|
52
|
+
editor: 'Text',
|
|
33
53
|
invalidLink: 'Enter a web address or email address',
|
|
34
54
|
italic: 'Italic',
|
|
35
55
|
link: 'Link',
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsPortableTextCoreContext = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const ps_portable_text_command_service_1 = require("../services/ps-portable-text-command-service");
|
|
6
|
+
exports.PsPortableTextCoreContext = (0, react_1.createContext)({
|
|
7
|
+
closeLink: () => undefined,
|
|
8
|
+
editor: null,
|
|
9
|
+
isLinkOpen: false,
|
|
10
|
+
openLink: () => undefined,
|
|
11
|
+
state: ps_portable_text_command_service_1.PsPortableTextCommandService.state(null),
|
|
12
|
+
});
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type FormEvent } from 'react';
|
|
2
2
|
export interface UsePsPortableTextLinkFormOptions {
|
|
3
|
+
href?: string;
|
|
4
|
+
isOpen?: boolean;
|
|
3
5
|
onClose: () => void;
|
|
4
6
|
onSubmit: (href: string) => void;
|
|
5
7
|
}
|
|
6
|
-
export declare const usePsPortableTextLinkForm: ({ onClose, onSubmit, }: UsePsPortableTextLinkFormOptions) => {
|
|
8
|
+
export declare const usePsPortableTextLinkForm: ({ href, isOpen, onClose, onSubmit, }: UsePsPortableTextLinkFormOptions) => {
|
|
7
9
|
address: string;
|
|
8
10
|
close: () => void;
|
|
9
11
|
hasError: boolean;
|
|
@@ -3,9 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.usePsPortableTextLinkForm = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const ps_portable_text_editor_service_1 = require("../services/ps-portable-text-editor-service");
|
|
6
|
-
const usePsPortableTextLinkForm = ({ onClose, onSubmit, }) => {
|
|
6
|
+
const usePsPortableTextLinkForm = ({ href, isOpen = false, onClose, onSubmit, }) => {
|
|
7
7
|
const [address, setAddress] = (0, react_1.useState)('');
|
|
8
8
|
const [hasError, setHasError] = (0, react_1.useState)(false);
|
|
9
|
+
(0, react_1.useEffect)(() => {
|
|
10
|
+
if (!isOpen)
|
|
11
|
+
return;
|
|
12
|
+
setAddress(href === undefined ? '' : href);
|
|
13
|
+
setHasError(false);
|
|
14
|
+
}, [isOpen]);
|
|
9
15
|
return {
|
|
10
16
|
address,
|
|
11
17
|
close: () => {
|
|
@@ -22,14 +28,14 @@ const usePsPortableTextLinkForm = ({ onClose, onSubmit, }) => {
|
|
|
22
28
|
submit: (event) => {
|
|
23
29
|
event.preventDefault();
|
|
24
30
|
event.stopPropagation();
|
|
25
|
-
const
|
|
26
|
-
if (
|
|
31
|
+
const normalized = ps_portable_text_editor_service_1.PsPortableTextEditorService.normalizeLink(address);
|
|
32
|
+
if (normalized === null) {
|
|
27
33
|
setHasError(true);
|
|
28
34
|
return;
|
|
29
35
|
}
|
|
30
36
|
setAddress('');
|
|
31
37
|
setHasError(false);
|
|
32
|
-
onSubmit(
|
|
38
|
+
onSubmit(normalized);
|
|
33
39
|
},
|
|
34
40
|
};
|
|
35
41
|
};
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
export declare const usePsPortableTextToolbar: () => {
|
|
2
|
-
active:
|
|
3
|
-
bold: boolean;
|
|
4
|
-
bulletedList: boolean;
|
|
5
|
-
code: boolean;
|
|
6
|
-
italic: boolean;
|
|
7
|
-
link: boolean;
|
|
8
|
-
numberedList: boolean;
|
|
9
|
-
quote: boolean;
|
|
10
|
-
underline: boolean;
|
|
11
|
-
};
|
|
2
|
+
active: import("..").PsPortableTextActiveFormats;
|
|
12
3
|
addLink: (href: string) => void;
|
|
4
|
+
closeLink: () => void;
|
|
13
5
|
focus: () => void;
|
|
6
|
+
isLinkOpen: boolean;
|
|
7
|
+
linkHref: string;
|
|
8
|
+
openLink: () => void;
|
|
14
9
|
removeLink: () => void;
|
|
15
10
|
toggleDecorator: (decorator: string) => void;
|
|
16
11
|
toggleListItem: (listItem: string) => void;
|
|
@@ -1,58 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.usePsPortableTextToolbar = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const ps_portable_text_core_context_1 = require("../contexts/ps-portable-text-core-context");
|
|
6
|
+
const ps_portable_text_command_service_1 = require("../services/ps-portable-text-command-service");
|
|
7
7
|
const usePsPortableTextToolbar = () => {
|
|
8
|
-
const editor = (0,
|
|
9
|
-
const isBold = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveDecorator)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.decorators.bold));
|
|
10
|
-
const isItalic = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveDecorator)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.decorators.italic));
|
|
11
|
-
const isUnderline = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveDecorator)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.decorators.underline));
|
|
12
|
-
const isCode = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveDecorator)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.decorators.code));
|
|
13
|
-
const isBulletedList = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveListItem)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.listItems.bullet));
|
|
14
|
-
const isNumberedList = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveListItem)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.listItems.number));
|
|
15
|
-
const isQuote = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveStyle)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.styles.blockquote));
|
|
16
|
-
const isLink = (0, editor_1.useEditorSelector)(editor, (0, selectors_1.isActiveAnnotation)(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkAnnotation));
|
|
17
|
-
const focus = () => editor.send({ type: 'focus' });
|
|
8
|
+
const { closeLink, editor, isLinkOpen, openLink, state } = (0, react_1.useContext)(ps_portable_text_core_context_1.PsPortableTextCoreContext);
|
|
18
9
|
return {
|
|
19
|
-
active:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
link: isLink,
|
|
25
|
-
numberedList: isNumberedList,
|
|
26
|
-
quote: isQuote,
|
|
27
|
-
underline: isUnderline,
|
|
28
|
-
},
|
|
29
|
-
addLink: (href) => {
|
|
30
|
-
editor.send({
|
|
31
|
-
type: 'annotation.add',
|
|
32
|
-
annotation: { name: ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkAnnotation, value: { href } },
|
|
33
|
-
});
|
|
34
|
-
focus();
|
|
35
|
-
},
|
|
36
|
-
focus,
|
|
37
|
-
removeLink: () => {
|
|
38
|
-
editor.send({
|
|
39
|
-
type: 'annotation.remove',
|
|
40
|
-
annotation: { name: ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkAnnotation },
|
|
41
|
-
});
|
|
42
|
-
focus();
|
|
43
|
-
},
|
|
44
|
-
toggleDecorator: (decorator) => {
|
|
45
|
-
editor.send({ type: 'decorator.toggle', decorator });
|
|
46
|
-
focus();
|
|
47
|
-
},
|
|
48
|
-
toggleListItem: (listItem) => {
|
|
49
|
-
editor.send({ type: 'list item.toggle', listItem });
|
|
50
|
-
focus();
|
|
51
|
-
},
|
|
52
|
-
toggleQuote: () => {
|
|
53
|
-
editor.send({ type: 'style.toggle', style: ps_portable_text_core_config_1.PsPortableTextCoreConfig.styles.blockquote });
|
|
54
|
-
focus();
|
|
10
|
+
active: state.active,
|
|
11
|
+
addLink: (href) => ps_portable_text_command_service_1.PsPortableTextCommandService.setLink(editor, href),
|
|
12
|
+
closeLink: () => {
|
|
13
|
+
closeLink();
|
|
14
|
+
ps_portable_text_command_service_1.PsPortableTextCommandService.focus(editor);
|
|
55
15
|
},
|
|
16
|
+
focus: () => ps_portable_text_command_service_1.PsPortableTextCommandService.focus(editor),
|
|
17
|
+
isLinkOpen,
|
|
18
|
+
linkHref: state.linkHref,
|
|
19
|
+
openLink,
|
|
20
|
+
removeLink: () => ps_portable_text_command_service_1.PsPortableTextCommandService.removeLink(editor),
|
|
21
|
+
toggleDecorator: (decorator) => ps_portable_text_command_service_1.PsPortableTextCommandService.toggleDecorator(editor, decorator),
|
|
22
|
+
toggleListItem: (listItem) => ps_portable_text_command_service_1.PsPortableTextCommandService.toggleListItem(editor, listItem),
|
|
23
|
+
toggleQuote: () => ps_portable_text_command_service_1.PsPortableTextCommandService.toggleQuote(editor),
|
|
56
24
|
};
|
|
57
25
|
};
|
|
58
26
|
exports.usePsPortableTextToolbar = usePsPortableTextToolbar;
|
|
@@ -2,6 +2,10 @@ export * from './components/ps-portable-text-core';
|
|
|
2
2
|
export * from './constants/ps-portable-text-core-config';
|
|
3
3
|
export * from './hooks/use-ps-portable-text-link-form';
|
|
4
4
|
export * from './hooks/use-ps-portable-text-toolbar';
|
|
5
|
+
export * from './interfaces/ps-portable-text-active-formats';
|
|
6
|
+
export * from './interfaces/ps-portable-text-core-class-names';
|
|
7
|
+
export * from './interfaces/ps-portable-text-core-props';
|
|
5
8
|
export * from './interfaces/ps-portable-text-editor-labels';
|
|
9
|
+
export * from './services/ps-portable-text-converter-service';
|
|
6
10
|
export * from './services/ps-portable-text-editor-service';
|
|
7
|
-
export type {
|
|
11
|
+
export type { PortableTextBlock } from '@portabletext/schema';
|
|
@@ -18,5 +18,9 @@ __exportStar(require("./components/ps-portable-text-core"), exports);
|
|
|
18
18
|
__exportStar(require("./constants/ps-portable-text-core-config"), exports);
|
|
19
19
|
__exportStar(require("./hooks/use-ps-portable-text-link-form"), exports);
|
|
20
20
|
__exportStar(require("./hooks/use-ps-portable-text-toolbar"), exports);
|
|
21
|
+
__exportStar(require("./interfaces/ps-portable-text-active-formats"), exports);
|
|
22
|
+
__exportStar(require("./interfaces/ps-portable-text-core-class-names"), exports);
|
|
23
|
+
__exportStar(require("./interfaces/ps-portable-text-core-props"), exports);
|
|
21
24
|
__exportStar(require("./interfaces/ps-portable-text-editor-labels"), exports);
|
|
25
|
+
__exportStar(require("./services/ps-portable-text-converter-service"), exports);
|
|
22
26
|
__exportStar(require("./services/ps-portable-text-editor-service"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import type { PsPortableTextToolbarState } from './ps-portable-text-toolbar-state';
|
|
3
|
+
export interface PsPortableTextCoreContextData {
|
|
4
|
+
closeLink: () => void;
|
|
5
|
+
editor: Editor | null;
|
|
6
|
+
isLinkOpen: boolean;
|
|
7
|
+
openLink: () => void;
|
|
8
|
+
state: PsPortableTextToolbarState;
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { PortableTextBlock } from '@portabletext/schema';
|
|
3
|
+
import type { PsPortableTextCoreClassNames } from './ps-portable-text-core-class-names';
|
|
4
|
+
export interface PsPortableTextCoreProps {
|
|
5
|
+
className?: string;
|
|
6
|
+
classNames: PsPortableTextCoreClassNames;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
editableClassName?: string;
|
|
9
|
+
fallback?: ReactNode;
|
|
10
|
+
label?: string;
|
|
11
|
+
minRows?: number;
|
|
12
|
+
onChange: (value: PortableTextBlock[]) => void;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
toolbar?: ReactNode;
|
|
15
|
+
value: PortableTextBlock[];
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import type { PsPortableTextActiveFormats } from '../interfaces/ps-portable-text-active-formats';
|
|
3
|
+
import type { PsPortableTextToolbarState } from '../interfaces/ps-portable-text-toolbar-state';
|
|
4
|
+
export declare class PsPortableTextCommandService {
|
|
5
|
+
static state(editor: Editor | null): PsPortableTextToolbarState;
|
|
6
|
+
static active(editor: Editor | null): PsPortableTextActiveFormats;
|
|
7
|
+
static linkHref(editor: Editor | null): string;
|
|
8
|
+
static toggleDecorator(editor: Editor | null, decorator: string): void;
|
|
9
|
+
static toggleListItem(editor: Editor | null, listItem: string): void;
|
|
10
|
+
static toggleQuote(editor: Editor | null): void;
|
|
11
|
+
static setLink(editor: Editor | null, href: string): void;
|
|
12
|
+
static removeLink(editor: Editor | null): void;
|
|
13
|
+
static focus(editor: Editor | null): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsPortableTextCommandService = void 0;
|
|
4
|
+
const ps_portable_text_core_config_1 = require("../constants/ps-portable-text-core-config");
|
|
5
|
+
const ps_portable_text_editor_service_1 = require("./ps-portable-text-editor-service");
|
|
6
|
+
class PsPortableTextCommandService {
|
|
7
|
+
static state(editor) {
|
|
8
|
+
return { active: this.active(editor), linkHref: this.linkHref(editor) };
|
|
9
|
+
}
|
|
10
|
+
static active(editor) {
|
|
11
|
+
const isActive = (name) => (editor === null ? false : editor.isActive(name));
|
|
12
|
+
const marks = ps_portable_text_core_config_1.PsPortableTextCoreConfig.decoratorMarks;
|
|
13
|
+
const decorators = ps_portable_text_core_config_1.PsPortableTextCoreConfig.decorators;
|
|
14
|
+
return {
|
|
15
|
+
bold: isActive(marks[decorators.bold]),
|
|
16
|
+
bulletedList: isActive(ps_portable_text_core_config_1.PsPortableTextCoreConfig.nodes.bulletList),
|
|
17
|
+
code: isActive(marks[decorators.code]),
|
|
18
|
+
italic: isActive(marks[decorators.italic]),
|
|
19
|
+
link: isActive(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark),
|
|
20
|
+
numberedList: isActive(ps_portable_text_core_config_1.PsPortableTextCoreConfig.nodes.orderedList),
|
|
21
|
+
quote: isActive(ps_portable_text_core_config_1.PsPortableTextCoreConfig.nodes.blockquote),
|
|
22
|
+
underline: isActive(marks[decorators.underline]),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
static linkHref(editor) {
|
|
26
|
+
const href = editor === null ? undefined : editor.getAttributes(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark).href;
|
|
27
|
+
return typeof href === 'string' ? href : '';
|
|
28
|
+
}
|
|
29
|
+
static toggleDecorator(editor, decorator) {
|
|
30
|
+
const mark = ps_portable_text_editor_service_1.PsPortableTextEditorService.lookup(ps_portable_text_core_config_1.PsPortableTextCoreConfig.decoratorMarks, decorator);
|
|
31
|
+
if (editor !== null && mark !== null)
|
|
32
|
+
editor.chain().focus().toggleMark(mark).run();
|
|
33
|
+
}
|
|
34
|
+
static toggleListItem(editor, listItem) {
|
|
35
|
+
const list = ps_portable_text_editor_service_1.PsPortableTextEditorService.lookup(ps_portable_text_core_config_1.PsPortableTextCoreConfig.listNodes, listItem);
|
|
36
|
+
if (editor !== null && list !== null) {
|
|
37
|
+
editor.chain().focus().toggleList(list, ps_portable_text_core_config_1.PsPortableTextCoreConfig.nodes.listItem).run();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static toggleQuote(editor) {
|
|
41
|
+
if (editor !== null)
|
|
42
|
+
editor.chain().focus().toggleBlockquote().run();
|
|
43
|
+
}
|
|
44
|
+
static setLink(editor, href) {
|
|
45
|
+
if (editor === null)
|
|
46
|
+
return;
|
|
47
|
+
if (editor.state.selection.empty && !editor.isActive(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark)) {
|
|
48
|
+
editor
|
|
49
|
+
.chain()
|
|
50
|
+
.focus()
|
|
51
|
+
.insertContent({
|
|
52
|
+
type: ps_portable_text_core_config_1.PsPortableTextCoreConfig.nodes.text,
|
|
53
|
+
text: href.replace(ps_portable_text_core_config_1.PsPortableTextCoreConfig.mailtoPrefix, ''),
|
|
54
|
+
marks: [{ type: ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark, attrs: { href } }],
|
|
55
|
+
})
|
|
56
|
+
.unsetMark(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark)
|
|
57
|
+
.run();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
editor
|
|
61
|
+
.chain()
|
|
62
|
+
.focus()
|
|
63
|
+
.extendMarkRange(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark)
|
|
64
|
+
.setLink({ href })
|
|
65
|
+
.run();
|
|
66
|
+
}
|
|
67
|
+
static removeLink(editor) {
|
|
68
|
+
if (editor !== null) {
|
|
69
|
+
editor.chain().focus().extendMarkRange(ps_portable_text_core_config_1.PsPortableTextCoreConfig.linkMark).unsetLink().run();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
static focus(editor) {
|
|
73
|
+
if (editor !== null)
|
|
74
|
+
editor.commands.focus();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.PsPortableTextCommandService = PsPortableTextCommandService;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PortableTextBlock } from '@portabletext/schema';
|
|
2
|
+
import type { JSONContent } from '@tiptap/core';
|
|
3
|
+
export declare class PsPortableTextConverterService {
|
|
4
|
+
static toDocument(blocks: PortableTextBlock[]): JSONContent;
|
|
5
|
+
static toBlocks(document: JSONContent): PortableTextBlock[];
|
|
6
|
+
private static drafts;
|
|
7
|
+
private static block;
|
|
8
|
+
private static spans;
|
|
9
|
+
private static spanMarks;
|
|
10
|
+
private static paragraph;
|
|
11
|
+
private static listNode;
|
|
12
|
+
private static listItem;
|
|
13
|
+
private static level;
|
|
14
|
+
private static href;
|
|
15
|
+
private static marks;
|
|
16
|
+
private static children;
|
|
17
|
+
private static isSame;
|
|
18
|
+
}
|