@vonage/vivid 5.14.0 → 5.15.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/bundled/base-color-picker.js +2 -2
- package/bundled/definition2.cjs +1 -1
- package/bundled/definition2.js +1 -1
- package/bundled/localized.js +1 -0
- package/bundled/slottable-request.js +1 -0
- package/bundled/vivid-element.cjs +1 -1
- package/bundled/vivid-element.js +1 -1
- package/custom-elements.json +477 -203
- package/icon/definition.cjs +1 -1
- package/icon/definition.js +1 -1
- package/index.cjs +1 -0
- package/index.js +1 -1
- package/lib/rich-text-editor/rte/exports.d.ts +1 -0
- package/lib/rich-text-editor/rte/features/keyboard-shortcuts.d.ts +16 -0
- package/lib/rich-text-editor/rte/instance.d.ts +2 -1
- package/package.json +4 -4
- package/rich-text-editor/definition.cjs +49 -20
- package/rich-text-editor/definition.js +49 -21
- package/rich-text-editor/index.cjs +7 -7
- package/rich-text-editor/index.js +444 -424
- package/styles/core/all.css +2 -2
- package/styles/core/theme.css +2 -2
- package/styles/core/typography.css +1 -1
- package/styles/tokens/theme-dark.css +4 -4
- package/styles/tokens/theme-light.css +4 -4
- package/styles/tokens/vivid-2-compat.css +1 -1
- package/unbundled/base-color-picker.cjs +2 -2
- package/unbundled/base-color-picker.js +2 -2
- package/unbundled/localized.cjs +1 -0
- package/unbundled/localized.js +1 -0
- package/unbundled/slottable-request.cjs +1 -0
- package/unbundled/slottable-request.js +1 -0
- package/unbundled/vivid-element.cjs +1 -1
- package/unbundled/vivid-element.js +1 -1
- package/vivid.api.json +32 -0
package/icon/definition.cjs
CHANGED
|
@@ -10,7 +10,7 @@ const fastWebUtilities = require('@microsoft/fast-web-utilities');
|
|
|
10
10
|
const styles = ":host{display:inline-block;vertical-align:sub}.control.connotation-accent{--_connotation-color-primary: var(--vvd-icon-accent-primary, var(--vvd-color-canvas-text))}.control.connotation-announcement{--_connotation-color-primary: var(--vvd-icon-announcement-primary, var(--vvd-color-announcement-500))}.control.connotation-cta{--_connotation-color-primary: var(--vvd-icon-cta-primary, var(--vvd-color-cta-500))}.control.connotation-success{--_connotation-color-primary: var(--vvd-icon-success-primary, var(--vvd-color-success-500))}.control.connotation-warning{--_connotation-color-primary: var(--vvd-icon-warning-primary, var(--vvd-color-warning-300))}.control.connotation-alert{--_connotation-color-primary: var(--vvd-icon-alert-primary, var(--vvd-color-alert-500))}.control.connotation-information{--_connotation-color-primary: var(--vvd-icon-information-primary, var(--vvd-color-information-500))}.control.size--6{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2)) - (1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))) }.control.size--5{--_icon-block-size: calc(1px*(20 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--4{--_icon-block-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--3{--_icon-block-size: calc(1px*(28 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--2{--_icon-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--1{--_icon-block-size: calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-0{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-1{--_icon-block-size: calc(1px*(44 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-2{--_icon-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-3{--_icon-block-size: calc(1px*(52 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-4{--_icon-block-size: calc(1px*(56 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-5{--_icon-block-size: calc(1px*(60 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control:not(.size--6,.size--5,.size--4,.size--3,.size--2,.size--1,.size-0,.size-1,.size-2,.size-3,.size-4,.size-5){--_icon-block-size: 1em}.control{display:flex;margin:unset;block-size:var(--_icon-block-size);color:currentColor;contain:strict;inline-size:var(--_icon-block-size)}.control[class*=connotation]{color:var(--_connotation-color-primary)}slot,svg,::slotted(:where(svg,img)){margin:auto;block-size:inherit;inline-size:inherit}";
|
|
11
11
|
|
|
12
12
|
const ICONS_BASE_URL = 'https://icon.resources.vonage.com';
|
|
13
|
-
const ICONS_VERSION = '4.
|
|
13
|
+
const ICONS_VERSION = '4.8.0';
|
|
14
14
|
|
|
15
15
|
const numberConverter = {
|
|
16
16
|
toView(value) {
|
package/icon/definition.js
CHANGED
|
@@ -6,7 +6,7 @@ import { classNames } from '@microsoft/fast-web-utilities';
|
|
|
6
6
|
const styles = ":host{display:inline-block;vertical-align:sub}.control.connotation-accent{--_connotation-color-primary: var(--vvd-icon-accent-primary, var(--vvd-color-canvas-text))}.control.connotation-announcement{--_connotation-color-primary: var(--vvd-icon-announcement-primary, var(--vvd-color-announcement-500))}.control.connotation-cta{--_connotation-color-primary: var(--vvd-icon-cta-primary, var(--vvd-color-cta-500))}.control.connotation-success{--_connotation-color-primary: var(--vvd-icon-success-primary, var(--vvd-color-success-500))}.control.connotation-warning{--_connotation-color-primary: var(--vvd-icon-warning-primary, var(--vvd-color-warning-300))}.control.connotation-alert{--_connotation-color-primary: var(--vvd-icon-alert-primary, var(--vvd-color-alert-500))}.control.connotation-information{--_connotation-color-primary: var(--vvd-icon-information-primary, var(--vvd-color-information-500))}.control.size--6{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2)) - (1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))) }.control.size--5{--_icon-block-size: calc(1px*(20 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--4{--_icon-block-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--3{--_icon-block-size: calc(1px*(28 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--2{--_icon-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--1{--_icon-block-size: calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-0{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-1{--_icon-block-size: calc(1px*(44 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-2{--_icon-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-3{--_icon-block-size: calc(1px*(52 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-4{--_icon-block-size: calc(1px*(56 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-5{--_icon-block-size: calc(1px*(60 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control:not(.size--6,.size--5,.size--4,.size--3,.size--2,.size--1,.size-0,.size-1,.size-2,.size-3,.size-4,.size-5){--_icon-block-size: 1em}.control{display:flex;margin:unset;block-size:var(--_icon-block-size);color:currentColor;contain:strict;inline-size:var(--_icon-block-size)}.control[class*=connotation]{color:var(--_connotation-color-primary)}slot,svg,::slotted(:where(svg,img)){margin:auto;block-size:inherit;inline-size:inherit}";
|
|
7
7
|
|
|
8
8
|
const ICONS_BASE_URL = 'https://icon.resources.vonage.com';
|
|
9
|
-
const ICONS_VERSION = '4.
|
|
9
|
+
const ICONS_VERSION = '4.8.0';
|
|
10
10
|
|
|
11
11
|
const numberConverter = {
|
|
12
12
|
toView(value) {
|
package/index.cjs
CHANGED
|
@@ -270,6 +270,7 @@ exports.RteHtmlSerializer = richTextEditor_definition.RteHtmlSerializer;
|
|
|
270
270
|
exports.RteInlineImageFeature = richTextEditor_definition.RteInlineImageFeature;
|
|
271
271
|
exports.RteInputRuleFeature = richTextEditor_definition.RteInputRuleFeature;
|
|
272
272
|
exports.RteItalicFeature = richTextEditor_definition.RteItalicFeature;
|
|
273
|
+
exports.RteKeyboardShortcutsFeature = richTextEditor_definition.RteKeyboardShortcutsFeature;
|
|
273
274
|
exports.RteLinkFeature = richTextEditor_definition.RteLinkFeature;
|
|
274
275
|
exports.RteListFeature = richTextEditor_definition.RteListFeature;
|
|
275
276
|
exports.RteMonospaceFeature = richTextEditor_definition.RteMonospaceFeature;
|
package/index.js
CHANGED
|
@@ -51,7 +51,7 @@ export { VwcProgressElement, progressDefinition, registerProgress } from './prog
|
|
|
51
51
|
export { VwcRadioGroupElement, radioGroupDefinition, registerRadioGroup } from './radio-group/definition.js';
|
|
52
52
|
export { VwcRadioElement, radioDefinition, registerRadio } from './radio/definition.js';
|
|
53
53
|
export { VwcRangeSliderElement, rangeSliderDefinition, registerRangeSlider } from './range-slider/definition.js';
|
|
54
|
-
export { RteAlignmentFeature, RteAtomFeature, RteBase, RteBoldFeature, RteConfig, RteDropHandlerFeature, RteFileHandlerFeature, RteFontSizePickerFeature, RteHardBreakFeature, RteHtmlParser, RteHtmlSerializer, RteInlineImageFeature, RteInputRuleFeature, RteItalicFeature, RteLinkFeature, RteListFeature, RteMonospaceFeature, RtePlaceholderFeature, RteStrikethroughFeature, RteSuggestFeature, RteTextBlockPickerFeature, RteTextColorPickerFeature, RteToolbarButtonFeature, RteToolbarFeature, RteUnderlineFeature, VwcRichTextEditorElement, registerRichTextEditor, richTextEditorDefinition } from './rich-text-editor/definition.js';
|
|
54
|
+
export { RteAlignmentFeature, RteAtomFeature, RteBase, RteBoldFeature, RteConfig, RteDropHandlerFeature, RteFileHandlerFeature, RteFontSizePickerFeature, RteHardBreakFeature, RteHtmlParser, RteHtmlSerializer, RteInlineImageFeature, RteInputRuleFeature, RteItalicFeature, RteKeyboardShortcutsFeature, RteLinkFeature, RteListFeature, RteMonospaceFeature, RtePlaceholderFeature, RteStrikethroughFeature, RteSuggestFeature, RteTextBlockPickerFeature, RteTextColorPickerFeature, RteToolbarButtonFeature, RteToolbarFeature, RteUnderlineFeature, VwcRichTextEditorElement, registerRichTextEditor, richTextEditorDefinition } from './rich-text-editor/definition.js';
|
|
55
55
|
export { VwcRichTextViewElement, registerRichTextView, richTextViewDefinition } from './rich-text-view/definition.js';
|
|
56
56
|
export { VwcSearchableSelectElement, registerSearchableSelect } from './searchable-select/definition.js';
|
|
57
57
|
export { VwcSelectElement, registerSelect, selectDefinition } from './select/definition.js';
|
|
@@ -20,6 +20,7 @@ export { RteDropHandlerFeature } from './features/drop-handler';
|
|
|
20
20
|
export { RteToolbarButtonFeature } from './features/toolbar-button';
|
|
21
21
|
export { RteAtomFeature } from './features/atom';
|
|
22
22
|
export { RteInputRuleFeature } from './features/input-rule';
|
|
23
|
+
export { RteKeyboardShortcutsFeature } from './features/keyboard-shortcuts';
|
|
23
24
|
export { RteSuggestFeature } from './features/suggest';
|
|
24
25
|
export { RteHtmlParser } from './html-parser';
|
|
25
26
|
export { RteHtmlSerializer } from './html-serializer';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PluginContribution, RteFeatureImpl } from '../feature';
|
|
2
|
+
import { RteInstance, RteInstanceImpl } from '../instance';
|
|
3
|
+
export type KeyboardShortcutHandler = (rteInstance: RteInstance) => boolean;
|
|
4
|
+
export interface RteKeyboardShortcutsFeatureOptions {
|
|
5
|
+
shortcuts: Record<string, KeyboardShortcutHandler>;
|
|
6
|
+
}
|
|
7
|
+
export declare class RteKeyboardShortcutsFeatureImpl extends RteFeatureImpl {
|
|
8
|
+
featureId: string;
|
|
9
|
+
protected readonly options: RteKeyboardShortcutsFeatureOptions;
|
|
10
|
+
name: string;
|
|
11
|
+
constructor(featureId: string, options: RteKeyboardShortcutsFeatureOptions);
|
|
12
|
+
getPlugins(rte: RteInstanceImpl): PluginContribution[];
|
|
13
|
+
}
|
|
14
|
+
export declare const RteKeyboardShortcutsFeature: {
|
|
15
|
+
new (featureId: string, options: RteKeyboardShortcutsFeatureOptions): {};
|
|
16
|
+
};
|
|
@@ -35,6 +35,7 @@ export declare class RteInstance {
|
|
|
35
35
|
}
|
|
36
36
|
export declare class RteInstanceImpl {
|
|
37
37
|
readonly options?: RteInstanceOptions | undefined;
|
|
38
|
+
readonly facade: RteInstance;
|
|
38
39
|
state: EditorState;
|
|
39
40
|
readonly config: RteConfigImpl;
|
|
40
41
|
readonly schema: Schema;
|
|
@@ -45,7 +46,7 @@ export declare class RteInstanceImpl {
|
|
|
45
46
|
readonly foreignHtmlSerializer: RteHtmlSerializer;
|
|
46
47
|
getFeature<T extends RteFeatureImpl>(name: string): T;
|
|
47
48
|
getPublicInterface(Feature: Constructor<RteFeature>, featureId?: string): any;
|
|
48
|
-
constructor(configFacade: RteConfig, options?: RteInstanceOptions | undefined);
|
|
49
|
+
constructor(instanceFacade: RteInstance, configFacade: RteConfig, options?: RteInstanceOptions | undefined);
|
|
49
50
|
protected initState(initialDoc?: RteDocument): void;
|
|
50
51
|
reset(initialDocument?: RteDocument): void;
|
|
51
52
|
view: EditorView | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vonage/vivid",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0",
|
|
4
4
|
"homepage": "https://vivid.deno.dev",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/Vonage/vivid-3/issues"
|
|
@@ -88,14 +88,14 @@
|
|
|
88
88
|
"vitest-axe": "^0.1.0",
|
|
89
89
|
"vitest-fetch-mock": "^0.4.5",
|
|
90
90
|
"wait-on": "^8.0.5",
|
|
91
|
-
"@repo/consts": "1.0.0",
|
|
92
91
|
"@repo/eslint-config": "1.0.0",
|
|
93
|
-
"@repo/shared": "1.0.0",
|
|
94
|
-
"@repo/stylelint-config": "1.0.0",
|
|
95
92
|
"@repo/cem-analyzer-plugins": "1.0.0",
|
|
96
93
|
"@repo/eslint-plugin-repo": "1.0.0",
|
|
94
|
+
"@repo/stylelint-config": "1.0.0",
|
|
95
|
+
"@repo/shared": "1.0.0",
|
|
97
96
|
"@repo/styles": "1.0.0",
|
|
98
97
|
"@repo/tokens": "1.0.0",
|
|
98
|
+
"@repo/consts": "1.0.0",
|
|
99
99
|
"@repo/tools": "1.0.0",
|
|
100
100
|
"@repo/typescript-config": "1.0.0",
|
|
101
101
|
"@repo/vitest-config": "1.0.0"
|
|
@@ -20,7 +20,7 @@ const divider = require('../unbundled/divider.cjs');
|
|
|
20
20
|
const DOMPurify = require('dompurify');
|
|
21
21
|
const mixins = require('../unbundled/mixins.cjs');
|
|
22
22
|
|
|
23
|
-
const styles = ":host{display:
|
|
23
|
+
const styles = ":host{display:flex;flex-direction:column}.rte{display:flex;flex-direction:column;block-size:100%;min-block-size:0}.editor{display:contents}.editor-viewport{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;contain:layout;min-block-size:0}.editor-scroll-area{--editor-padding-inline: var( --rich-text-editor-padding-inline, 16px );--editor-padding-block: var( --rich-text-editor-padding-block, 8px );display:flex;flex:1;flex-direction:column;background-color:var(--vvd-color-canvas);color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);min-block-size:0;overflow-y:auto;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.editor-scroll-area{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.editor-scroll-area ::-webkit-scrollbar{width:4px}.editor-scroll-area ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.editor-scroll-area ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.popovers--disabled>*{display:none!important}";
|
|
24
24
|
|
|
25
25
|
// Recovery values encode a range index and an offset. They are
|
|
26
26
|
// represented as numbers, because tons of them will be created when
|
|
@@ -11504,6 +11504,22 @@ class RteCoreImpl extends slottableRequest.RteFeatureImpl {
|
|
|
11504
11504
|
];
|
|
11505
11505
|
}
|
|
11506
11506
|
getPlugins(rte) {
|
|
11507
|
+
const enterKeyChainCommands = chainCommands(
|
|
11508
|
+
newlineInCode,
|
|
11509
|
+
createParagraphNear,
|
|
11510
|
+
liftEmptyBlock,
|
|
11511
|
+
splitBlockAs((node, atEnd, $from) => {
|
|
11512
|
+
if (!atEnd) {
|
|
11513
|
+
return { type: node.type, attrs: node.attrs };
|
|
11514
|
+
}
|
|
11515
|
+
return {
|
|
11516
|
+
type: defaultTextblockForMatch(
|
|
11517
|
+
$from.node($from.depth - 1).contentMatchAt($from.indexAfter($from.depth - 1))
|
|
11518
|
+
),
|
|
11519
|
+
attrs: rte.textblockAttrs.extractFromNode(node)
|
|
11520
|
+
};
|
|
11521
|
+
})
|
|
11522
|
+
);
|
|
11507
11523
|
return [
|
|
11508
11524
|
this.contribution(this.disabled.plugin),
|
|
11509
11525
|
this.contribution(
|
|
@@ -11540,22 +11556,8 @@ class RteCoreImpl extends slottableRequest.RteFeatureImpl {
|
|
|
11540
11556
|
this.contribution(
|
|
11541
11557
|
keymap({
|
|
11542
11558
|
...baseKeymap,
|
|
11543
|
-
Enter:
|
|
11544
|
-
|
|
11545
|
-
createParagraphNear,
|
|
11546
|
-
liftEmptyBlock,
|
|
11547
|
-
splitBlockAs((node, atEnd, $from) => {
|
|
11548
|
-
if (!atEnd) {
|
|
11549
|
-
return { type: node.type, attrs: node.attrs };
|
|
11550
|
-
}
|
|
11551
|
-
return {
|
|
11552
|
-
type: defaultTextblockForMatch(
|
|
11553
|
-
$from.node($from.depth - 1).contentMatchAt($from.indexAfter($from.depth - 1))
|
|
11554
|
-
),
|
|
11555
|
-
attrs: rte.textblockAttrs.extractFromNode(node)
|
|
11556
|
-
};
|
|
11557
|
-
})
|
|
11558
|
-
)
|
|
11559
|
+
Enter: enterKeyChainCommands,
|
|
11560
|
+
"Shift-Enter": enterKeyChainCommands
|
|
11559
11561
|
})
|
|
11560
11562
|
),
|
|
11561
11563
|
this.contribution(dropCursor()),
|
|
@@ -11769,7 +11771,7 @@ class RteInstance {
|
|
|
11769
11771
|
this.feature = (Feature, featureId) => {
|
|
11770
11772
|
return this[slottableRequest.impl].getPublicInterface(Feature, featureId);
|
|
11771
11773
|
};
|
|
11772
|
-
this[slottableRequest.impl] = new RteInstanceImpl(config, options);
|
|
11774
|
+
this[slottableRequest.impl] = new RteInstanceImpl(this, config, options);
|
|
11773
11775
|
}
|
|
11774
11776
|
/**
|
|
11775
11777
|
* Returns the current document state.
|
|
@@ -11825,7 +11827,7 @@ class RteInstance {
|
|
|
11825
11827
|
}
|
|
11826
11828
|
}
|
|
11827
11829
|
class RteInstanceImpl {
|
|
11828
|
-
constructor(configFacade, options) {
|
|
11830
|
+
constructor(instanceFacade, configFacade, options) {
|
|
11829
11831
|
this.options = options;
|
|
11830
11832
|
this.view = null;
|
|
11831
11833
|
this.dispatchTransaction = (tr) => {
|
|
@@ -11837,6 +11839,7 @@ class RteInstanceImpl {
|
|
|
11837
11839
|
}
|
|
11838
11840
|
return this.state;
|
|
11839
11841
|
};
|
|
11842
|
+
this.facade = instanceFacade;
|
|
11840
11843
|
const config = configFacade[slottableRequest.impl];
|
|
11841
11844
|
this.config = config;
|
|
11842
11845
|
this.schema = config.schema;
|
|
@@ -12752,7 +12755,7 @@ class RteHardBreakFeatureImpl extends slottableRequest.RteFeatureImpl {
|
|
|
12752
12755
|
const keyBindings = {
|
|
12753
12756
|
"Shift-Enter": forceBreak
|
|
12754
12757
|
};
|
|
12755
|
-
return [this.contribution(keymap(keyBindings))];
|
|
12758
|
+
return [this.contribution(keymap(keyBindings), slottableRequest.contributionPriority.high)];
|
|
12756
12759
|
}
|
|
12757
12760
|
}
|
|
12758
12761
|
const RteHardBreakFeature = slottableRequest.featureFacade(RteHardBreakFeatureImpl);
|
|
@@ -15179,6 +15182,31 @@ class RteInputRuleFeatureImpl extends slottableRequest.RteFeatureImpl {
|
|
|
15179
15182
|
}
|
|
15180
15183
|
const RteInputRuleFeature = slottableRequest.featureFacade(RteInputRuleFeatureImpl);
|
|
15181
15184
|
|
|
15185
|
+
function toCommand(handler, rteInstance) {
|
|
15186
|
+
if (handler.length === 0) {
|
|
15187
|
+
return (_state, _dispatch) => handler();
|
|
15188
|
+
}
|
|
15189
|
+
return (_state, _dispatch) => handler(rteInstance);
|
|
15190
|
+
}
|
|
15191
|
+
class RteKeyboardShortcutsFeatureImpl extends slottableRequest.RteFeatureImpl {
|
|
15192
|
+
constructor(featureId, options) {
|
|
15193
|
+
super();
|
|
15194
|
+
this.featureId = featureId;
|
|
15195
|
+
this.options = options;
|
|
15196
|
+
this.name = `RteKeyboardShortcutsFeature[${featureId}]`;
|
|
15197
|
+
}
|
|
15198
|
+
getPlugins(rte) {
|
|
15199
|
+
const bindings = {};
|
|
15200
|
+
for (const [key, handler] of Object.entries(this.options.shortcuts)) {
|
|
15201
|
+
bindings[key] = toCommand(handler, rte.facade);
|
|
15202
|
+
}
|
|
15203
|
+
return [this.contribution(keymap(bindings), slottableRequest.contributionPriority.high)];
|
|
15204
|
+
}
|
|
15205
|
+
}
|
|
15206
|
+
const RteKeyboardShortcutsFeature = slottableRequest.featureFacade(
|
|
15207
|
+
RteKeyboardShortcutsFeatureImpl
|
|
15208
|
+
);
|
|
15209
|
+
|
|
15182
15210
|
const suggestCss = ".suggest-popover{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:408px;max-inline-size:248px;min-inline-size:128px}.suggest-loading-widget{display:inline-flex;align-items:center;margin-inline-start:2px;vertical-align:middle;white-space:normal}.suggest-empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}.suggest-item--visible-focus{box-shadow:0 0 0 4px color-mix(in srgb,var(--focus-stroke-color, var(--vvd-color-cta-500)),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent}";
|
|
15183
15211
|
|
|
15184
15212
|
const isPopoverOpen = (state) => Boolean(state?.suggestions && !state.dismissed);
|
|
@@ -15564,6 +15592,7 @@ exports.RteHtmlSerializer = RteHtmlSerializer;
|
|
|
15564
15592
|
exports.RteInlineImageFeature = RteInlineImageFeature;
|
|
15565
15593
|
exports.RteInputRuleFeature = RteInputRuleFeature;
|
|
15566
15594
|
exports.RteItalicFeature = RteItalicFeature;
|
|
15595
|
+
exports.RteKeyboardShortcutsFeature = RteKeyboardShortcutsFeature;
|
|
15567
15596
|
exports.RteLinkFeature = RteLinkFeature;
|
|
15568
15597
|
exports.RteListFeature = RteListFeature;
|
|
15569
15598
|
exports.RteMonospaceFeature = RteMonospaceFeature;
|
|
@@ -16,7 +16,7 @@ import { D as Divider } from '../unbundled/divider.js';
|
|
|
16
16
|
import DOMPurify from 'dompurify';
|
|
17
17
|
import { g as generateRandomId } from '../unbundled/mixins.js';
|
|
18
18
|
|
|
19
|
-
const styles = ":host{display:
|
|
19
|
+
const styles = ":host{display:flex;flex-direction:column}.rte{display:flex;flex-direction:column;block-size:100%;min-block-size:0}.editor{display:contents}.editor-viewport{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;contain:layout;min-block-size:0}.editor-scroll-area{--editor-padding-inline: var( --rich-text-editor-padding-inline, 16px );--editor-padding-block: var( --rich-text-editor-padding-block, 8px );display:flex;flex:1;flex-direction:column;background-color:var(--vvd-color-canvas);color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);min-block-size:0;overflow-y:auto;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.editor-scroll-area{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.editor-scroll-area ::-webkit-scrollbar{width:4px}.editor-scroll-area ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.editor-scroll-area ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.popovers--disabled>*{display:none!important}";
|
|
20
20
|
|
|
21
21
|
// Recovery values encode a range index and an offset. They are
|
|
22
22
|
// represented as numbers, because tons of them will be created when
|
|
@@ -11500,6 +11500,22 @@ class RteCoreImpl extends RteFeatureImpl {
|
|
|
11500
11500
|
];
|
|
11501
11501
|
}
|
|
11502
11502
|
getPlugins(rte) {
|
|
11503
|
+
const enterKeyChainCommands = chainCommands(
|
|
11504
|
+
newlineInCode,
|
|
11505
|
+
createParagraphNear,
|
|
11506
|
+
liftEmptyBlock,
|
|
11507
|
+
splitBlockAs((node, atEnd, $from) => {
|
|
11508
|
+
if (!atEnd) {
|
|
11509
|
+
return { type: node.type, attrs: node.attrs };
|
|
11510
|
+
}
|
|
11511
|
+
return {
|
|
11512
|
+
type: defaultTextblockForMatch(
|
|
11513
|
+
$from.node($from.depth - 1).contentMatchAt($from.indexAfter($from.depth - 1))
|
|
11514
|
+
),
|
|
11515
|
+
attrs: rte.textblockAttrs.extractFromNode(node)
|
|
11516
|
+
};
|
|
11517
|
+
})
|
|
11518
|
+
);
|
|
11503
11519
|
return [
|
|
11504
11520
|
this.contribution(this.disabled.plugin),
|
|
11505
11521
|
this.contribution(
|
|
@@ -11536,22 +11552,8 @@ class RteCoreImpl extends RteFeatureImpl {
|
|
|
11536
11552
|
this.contribution(
|
|
11537
11553
|
keymap({
|
|
11538
11554
|
...baseKeymap,
|
|
11539
|
-
Enter:
|
|
11540
|
-
|
|
11541
|
-
createParagraphNear,
|
|
11542
|
-
liftEmptyBlock,
|
|
11543
|
-
splitBlockAs((node, atEnd, $from) => {
|
|
11544
|
-
if (!atEnd) {
|
|
11545
|
-
return { type: node.type, attrs: node.attrs };
|
|
11546
|
-
}
|
|
11547
|
-
return {
|
|
11548
|
-
type: defaultTextblockForMatch(
|
|
11549
|
-
$from.node($from.depth - 1).contentMatchAt($from.indexAfter($from.depth - 1))
|
|
11550
|
-
),
|
|
11551
|
-
attrs: rte.textblockAttrs.extractFromNode(node)
|
|
11552
|
-
};
|
|
11553
|
-
})
|
|
11554
|
-
)
|
|
11555
|
+
Enter: enterKeyChainCommands,
|
|
11556
|
+
"Shift-Enter": enterKeyChainCommands
|
|
11555
11557
|
})
|
|
11556
11558
|
),
|
|
11557
11559
|
this.contribution(dropCursor()),
|
|
@@ -11765,7 +11767,7 @@ class RteInstance {
|
|
|
11765
11767
|
this.feature = (Feature, featureId) => {
|
|
11766
11768
|
return this[impl].getPublicInterface(Feature, featureId);
|
|
11767
11769
|
};
|
|
11768
|
-
this[impl] = new RteInstanceImpl(config, options);
|
|
11770
|
+
this[impl] = new RteInstanceImpl(this, config, options);
|
|
11769
11771
|
}
|
|
11770
11772
|
/**
|
|
11771
11773
|
* Returns the current document state.
|
|
@@ -11821,7 +11823,7 @@ class RteInstance {
|
|
|
11821
11823
|
}
|
|
11822
11824
|
}
|
|
11823
11825
|
class RteInstanceImpl {
|
|
11824
|
-
constructor(configFacade, options) {
|
|
11826
|
+
constructor(instanceFacade, configFacade, options) {
|
|
11825
11827
|
this.options = options;
|
|
11826
11828
|
this.view = null;
|
|
11827
11829
|
this.dispatchTransaction = (tr) => {
|
|
@@ -11833,6 +11835,7 @@ class RteInstanceImpl {
|
|
|
11833
11835
|
}
|
|
11834
11836
|
return this.state;
|
|
11835
11837
|
};
|
|
11838
|
+
this.facade = instanceFacade;
|
|
11836
11839
|
const config = configFacade[impl];
|
|
11837
11840
|
this.config = config;
|
|
11838
11841
|
this.schema = config.schema;
|
|
@@ -12748,7 +12751,7 @@ class RteHardBreakFeatureImpl extends RteFeatureImpl {
|
|
|
12748
12751
|
const keyBindings = {
|
|
12749
12752
|
"Shift-Enter": forceBreak
|
|
12750
12753
|
};
|
|
12751
|
-
return [this.contribution(keymap(keyBindings))];
|
|
12754
|
+
return [this.contribution(keymap(keyBindings), contributionPriority.high)];
|
|
12752
12755
|
}
|
|
12753
12756
|
}
|
|
12754
12757
|
const RteHardBreakFeature = featureFacade(RteHardBreakFeatureImpl);
|
|
@@ -15175,6 +15178,31 @@ class RteInputRuleFeatureImpl extends RteFeatureImpl {
|
|
|
15175
15178
|
}
|
|
15176
15179
|
const RteInputRuleFeature = featureFacade(RteInputRuleFeatureImpl);
|
|
15177
15180
|
|
|
15181
|
+
function toCommand(handler, rteInstance) {
|
|
15182
|
+
if (handler.length === 0) {
|
|
15183
|
+
return (_state, _dispatch) => handler();
|
|
15184
|
+
}
|
|
15185
|
+
return (_state, _dispatch) => handler(rteInstance);
|
|
15186
|
+
}
|
|
15187
|
+
class RteKeyboardShortcutsFeatureImpl extends RteFeatureImpl {
|
|
15188
|
+
constructor(featureId, options) {
|
|
15189
|
+
super();
|
|
15190
|
+
this.featureId = featureId;
|
|
15191
|
+
this.options = options;
|
|
15192
|
+
this.name = `RteKeyboardShortcutsFeature[${featureId}]`;
|
|
15193
|
+
}
|
|
15194
|
+
getPlugins(rte) {
|
|
15195
|
+
const bindings = {};
|
|
15196
|
+
for (const [key, handler] of Object.entries(this.options.shortcuts)) {
|
|
15197
|
+
bindings[key] = toCommand(handler, rte.facade);
|
|
15198
|
+
}
|
|
15199
|
+
return [this.contribution(keymap(bindings), contributionPriority.high)];
|
|
15200
|
+
}
|
|
15201
|
+
}
|
|
15202
|
+
const RteKeyboardShortcutsFeature = featureFacade(
|
|
15203
|
+
RteKeyboardShortcutsFeatureImpl
|
|
15204
|
+
);
|
|
15205
|
+
|
|
15178
15206
|
const suggestCss = ".suggest-popover{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:408px;max-inline-size:248px;min-inline-size:128px}.suggest-loading-widget{display:inline-flex;align-items:center;margin-inline-start:2px;vertical-align:middle;white-space:normal}.suggest-empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}.suggest-item--visible-focus{box-shadow:0 0 0 4px color-mix(in srgb,var(--focus-stroke-color, var(--vvd-color-cta-500)),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent}";
|
|
15179
15207
|
|
|
15180
15208
|
const isPopoverOpen = (state) => Boolean(state?.suggestions && !state.dismissed);
|
|
@@ -15546,4 +15574,4 @@ const registerRichTextEditor = createRegisterFunction(
|
|
|
15546
15574
|
richTextEditorDefinition
|
|
15547
15575
|
);
|
|
15548
15576
|
|
|
15549
|
-
export { RteAlignmentFeature, RteAtomFeature, RteBase, RteBoldFeature, RteConfig, RteDropHandlerFeature, RteFileHandlerFeature, RteFontSizePickerFeature, RteHardBreakFeature, RteHtmlParser, RteHtmlSerializer, RteInlineImageFeature, RteInputRuleFeature, RteItalicFeature, RteLinkFeature, RteListFeature, RteMonospaceFeature, RtePlaceholderFeature, RteStrikethroughFeature, RteSuggestFeature, RteTextBlockPickerFeature, RteTextColorPickerFeature, RteToolbarButtonFeature, RteToolbarFeature, RteUnderlineFeature, RichTextEditor as VwcRichTextEditorElement, registerRichTextEditor, richTextEditorDefinition };
|
|
15577
|
+
export { RteAlignmentFeature, RteAtomFeature, RteBase, RteBoldFeature, RteConfig, RteDropHandlerFeature, RteFileHandlerFeature, RteFontSizePickerFeature, RteHardBreakFeature, RteHtmlParser, RteHtmlSerializer, RteInlineImageFeature, RteInputRuleFeature, RteItalicFeature, RteKeyboardShortcutsFeature, RteLinkFeature, RteListFeature, RteMonospaceFeature, RtePlaceholderFeature, RteStrikethroughFeature, RteSuggestFeature, RteTextBlockPickerFeature, RteTextColorPickerFeature, RteToolbarButtonFeature, RteToolbarFeature, RteUnderlineFeature, RichTextEditor as VwcRichTextEditorElement, registerRichTextEditor, richTextEditorDefinition };
|