@limetech/lime-elements 37.39.1 → 37.40.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.
- package/CHANGELOG.md +30 -0
- package/dist/cjs/limel-dock-button.cjs.entry.js +17 -3
- package/dist/cjs/limel-dock-button.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +127 -81
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
- package/dist/collection/components/dock/dock-button/dock-button.js +17 -3
- package/dist/collection/components/dock/dock-button/dock-button.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js +70 -65
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-items.js +9 -8
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-items.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/types.js +32 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/types.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +19 -8
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
- package/dist/esm/limel-dock-button.entry.js +17 -3
- package/dist/esm/limel-dock-button.entry.js.map +1 -1
- package/dist/esm/limel-prosemirror-adapter.entry.js +127 -81
- package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-5983b027.entry.js → p-1367c295.entry.js} +2 -2
- package/dist/lime-elements/p-1367c295.entry.js.map +1 -0
- package/dist/lime-elements/{p-fecf1bf1.entry.js → p-e9f943ac.entry.js} +2 -2
- package/dist/lime-elements/p-e9f943ac.entry.js.map +1 -0
- package/dist/types/components/dock/dock-button/dock-button.d.ts +2 -0
- package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-commands.d.ts +10 -6
- package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-items.d.ts +2 -1
- package/dist/types/components/text-editor/prosemirror-adapter/prosemirror-adapter.d.ts +2 -0
- package/package.json +1 -1
- package/dist/lime-elements/p-5983b027.entry.js.map +0 -1
- package/dist/lime-elements/p-fecf1bf1.entry.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## [37.40.1](https://github.com/Lundalogik/lime-elements/compare/v37.40.0...v37.40.1) (2024-05-20)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Performance Improvements
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
* **dock:** avoid re-creating observer whenever menu is opened ([1495948](https://github.com/Lundalogik/lime-elements/commit/149594822df8e5cefb7844a2613592a2c582203c))
|
|
8
|
+
|
|
9
|
+
## [37.40.0](https://github.com/Lundalogik/lime-elements/compare/v37.39.1...v37.40.0) (2024-05-20)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
* **editor menu:** add menu items ([694fa37](https://github.com/Lundalogik/lime-elements/commit/694fa375920e854e855ca6fb7864df9e303446f6))
|
|
16
|
+
* **text editor:** add command mapping to menu factory ([4224f51](https://github.com/Lundalogik/lime-elements/commit/4224f5193c4c94720c4ab7a2704a6b7d95e50a2d))
|
|
17
|
+
* **text editor:** add editor menu types ([a6ff827](https://github.com/Lundalogik/lime-elements/commit/a6ff82716620a91d1a7338820855cf0be21ac521))
|
|
18
|
+
* **text editor:** add target _blank to external links ([9c0e996](https://github.com/Lundalogik/lime-elements/commit/9c0e996febb26f8662e0c373bbadc6d4562eebe2))
|
|
19
|
+
* **text editor:** add tests for menu command factory ([62ed73c](https://github.com/Lundalogik/lime-elements/commit/62ed73cb48868d11a3612fc3ee76a3e3e0daaec3))
|
|
20
|
+
* **text editor:** implement new menu command handling in adapter ([9ba2779](https://github.com/Lundalogik/lime-elements/commit/9ba277936f8b110ad69ce32635bc9e88d9b4f42e))
|
|
21
|
+
* **text editor:** set getCommand as public function ([8cfb783](https://github.com/Lundalogik/lime-elements/commit/8cfb783370c8c272017b2cdd1059f52e02d5dd4c))
|
|
22
|
+
* **text editor:** use object for types instead of enums ([72b5323](https://github.com/Lundalogik/lime-elements/commit/72b53233511e3f4a95c8c0bb398522f5b0841819))
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
* **menu command mapping:** adjust heading level mapping types ([3109707](https://github.com/Lundalogik/lime-elements/commit/31097074495cf0eb337f5c091011e3f33efafa48))
|
|
28
|
+
* **text editor:** slight refactor of set focus ([8b40f3a](https://github.com/Lundalogik/lime-elements/commit/8b40f3af1ae43b12e15be0b17249370c5a426528))
|
|
29
|
+
* **text editor:** update menu command tests ([9fbd2ae](https://github.com/Lundalogik/lime-elements/commit/9fbd2aecb46205e734775e07765bafac27490fde))
|
|
30
|
+
|
|
1
31
|
## [37.39.1](https://github.com/Lundalogik/lime-elements/compare/v37.39.0...v37.39.1) (2024-05-17)
|
|
2
32
|
|
|
3
33
|
|
|
@@ -34,8 +34,15 @@ const DockButton = class {
|
|
|
34
34
|
event.stopPropagation();
|
|
35
35
|
this.itemSelected.emit(this.item);
|
|
36
36
|
};
|
|
37
|
-
this.focusCustomComponentElement = () => {
|
|
37
|
+
this.focusCustomComponentElement = (entries) => {
|
|
38
38
|
var _a, _b, _c;
|
|
39
|
+
const entry = entries.find((e) => e.target === this.customComponentElement);
|
|
40
|
+
if (!entry) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (!entry.isIntersecting) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
39
46
|
if ((_b = (_a = this.customComponentElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.delegatesFocus) {
|
|
40
47
|
(_c = this.customComponentElement) === null || _c === void 0 ? void 0 : _c.focus();
|
|
41
48
|
}
|
|
@@ -63,8 +70,15 @@ const DockButton = class {
|
|
|
63
70
|
if (!this.isOpen) {
|
|
64
71
|
return;
|
|
65
72
|
}
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
if (!this.intersectionObserver) {
|
|
74
|
+
this.intersectionObserver = new IntersectionObserver(this.focusCustomComponentElement);
|
|
75
|
+
this.intersectionObserver.observe(this.customComponentElement);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
disconnectedCallback() {
|
|
79
|
+
var _a;
|
|
80
|
+
(_a = this.intersectionObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
81
|
+
this.intersectionObserver = undefined;
|
|
68
82
|
}
|
|
69
83
|
renderPopover() {
|
|
70
84
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"limel-dock-button.entry.cjs.js","mappings":"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","names":["h","createRandomString"],"sources":["./src/components/dock/dock-button/dock-button.scss?tag=limel-dock-button","./src/components/dock/dock-button/dock-button.tsx"],"sourcesContent":["@use '../../../style/mixins';\n@use '../../../style/functions';\n@use '../../../style/internal/variables';\n\n.button {\n all: unset;\n isolation: isolate;\n position: relative;\n\n @include mixins.is-flat-inset-clickable(\n $color: var(--limel-dock-item-text-color),\n $background-color: var(--dock-background-color)\n );\n @include mixins.visualize-keyboard-focus;\n\n box-sizing: border-box;\n display: flex;\n align-items: center;\n\n width: 100%;\n height: var(--dock-item-height);\n\n border-radius: functions.pxToRem(6);\n font-size: functions.pxToRem(14);\n padding: 0 0.5rem;\n min-width: var(--dock-item-height);\n\n &:hover {\n z-index: 1;\n }\n\n &.selected {\n color: var(--limel-dock-item-text-color--selected);\n background-color: var(\n --dock-item-background-color--selected,\n rgb(var(--contrast-200))\n );\n\n box-shadow: var(--button-shadow-inset);\n\n &:focus-visible {\n box-shadow: var(--button-shadow-inset),\n var(--shadow-depth-8-focused);\n }\n\n .icon {\n color: var(--limel-dock-item-text--selected);\n }\n }\n}\n\nlimel-popover {\n // makes buttons that are wrapped in a popover become fullwidth\n display: grid;\n grid-template-columns: 100%;\n\n button[slot='trigger'][aria-expanded='true'] {\n box-shadow: var(--button-shadow-inset);\n }\n}\n\n.text {\n @include mixins.truncate-text();\n padding-left: 0.5rem;\n padding-right: 0.75rem;\n}\n\n.icon {\n flex-shrink: 0;\n width: calc(var(--dock-item-height) - 1rem);\n height: calc(var(--dock-item-height) - 1rem);\n color: var(--dock-item-icon-color, var(--limel-dock-item-text-color));\n}\n\nlimel-badge {\n position: absolute;\n top: -0.125rem;\n right: -0.125rem;\n}\n\n// 👇 Below is a hidden and private hack\n// only for usage in Lime CRM components.\n// It enables our customers to override\n// the default Home icon, using an external URL\n// or an SVG code.\n.icon {\n position: relative;\n\n &:before {\n text-align: center;\n pointer-events: none;\n position: absolute;\n inset: 0;\n background: {\n color: var(--dock-background-color, rgb(var(--contrast-100)));\n position: center;\n repeat: no-repeat;\n size: contain;\n image: var(--limel-custom-home-icon);\n }\n // Since `content` defaults to `undefined`\n // no pseudo element will be rendered, unless\n // the consumer defines something.\n content: var(--limel-custom-home-icon-enabler);\n\n .button.selected & {\n background-color: var(\n --dock-item-background-color--selected,\n rgb(var(--contrast-200))\n );\n }\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { DockItem } from '../dock.types';\nimport { createRandomString } from '../../../util/random-string';\n\n/**\n * @private\n */\n@Component({\n tag: 'limel-dock-button',\n shadow: false,\n styleUrl: 'dock-button.scss',\n})\nexport class DockButton {\n /**\n * Item that is placed in the dock.\n */\n @Prop()\n public item!: DockItem;\n\n /**\n * When the dock is expanded or collapsed, dock items\n * show labels and tooltips as suitable for the layout.\n */\n @Prop({ reflect: true })\n public expanded? = false;\n\n /**\n * When dock is using mobile layout, dock items\n * show labels and tooltips as suitable for the layout.\n */\n @Prop({ reflect: true })\n public useMobileLayout? = false;\n\n /**\n * Fired when a dock item has been selected from the dock.\n */\n @Event()\n public itemSelected: EventEmitter<DockItem>;\n\n /**\n * Fired when a dock menu is opened.\n */\n @Event()\n public menuOpen: EventEmitter<DockItem>;\n\n /**\n * Indicated whether the popover that renders a component is open.\n */\n @State()\n private isOpen = false;\n\n /**\n * Fired when the popover is closed.\n */\n @Event()\n public close: EventEmitter<void>;\n\n private tooltipId: string;\n private customComponentElement: HTMLElement;\n\n constructor() {\n this.tooltipId = createRandomString();\n }\n\n public render() {\n if (this.item?.dockMenu?.componentName) {\n return this.renderPopover();\n }\n\n return this.renderButton(this.handleClick);\n }\n\n @Watch('isOpen')\n protected openWatcher() {\n if (!this.isOpen) {\n return;\n }\n\n const observer = new IntersectionObserver(\n this.focusCustomComponentElement,\n );\n observer.observe(this.customComponentElement);\n }\n\n private renderPopover() {\n const CustomComponent = this.item?.dockMenu.componentName;\n\n return (\n <limel-popover\n openDirection={this.useMobileLayout ? 'top' : 'right-start'}\n open={this.isOpen || this.item.dockMenu.menuOpen}\n onClose={this.onPopoverClose}\n >\n {this.renderButton(this.openPopover, 'trigger')}\n <CustomComponent\n ref={this.setCustomComponentElement}\n {...(this.item.dockMenu.props || {})}\n onClose={this.onPopoverClose}\n />\n </limel-popover>\n );\n }\n\n private renderButton(\n handleClick: (event: MouseEvent) => void,\n slot?: string,\n ) {\n return (\n <button\n slot={slot}\n tabindex=\"0\"\n id={this.tooltipId}\n type=\"button\"\n class={{\n button: true,\n selected: this.item?.selected,\n }}\n onClick={handleClick}\n aria-live=\"polite\"\n >\n {this.renderIcon()}\n {this.renderLabel()}\n {this.renderTooltip()}\n {this.renderNotification()}\n </button>\n );\n }\n\n private renderNotification = () => {\n if (this.item.badge !== undefined) {\n return <limel-badge label={this.item.badge} />;\n }\n };\n\n private openPopover = (event: MouseEvent) => {\n event.stopPropagation();\n this.isOpen = true;\n this.menuOpen.emit(this.item);\n };\n\n private setCustomComponentElement = (element: HTMLElement) => {\n this.customComponentElement = element;\n };\n\n private onPopoverClose = () => {\n this.isOpen = false;\n this.close.emit();\n };\n\n private handleClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.itemSelected.emit(this.item);\n };\n\n private renderIcon() {\n if (!this.item.icon) {\n return;\n }\n\n return <limel-icon name={this.item.icon} class=\"icon\" />;\n }\n\n private renderLabel() {\n if (this.expanded) {\n return <span class=\"text\">{this.item.label}</span>;\n }\n }\n\n private renderTooltip() {\n if (!this.expanded && this.item.label) {\n return (\n <limel-tooltip\n elementId={this.tooltipId}\n label={this.item.label}\n helperLabel={this.item.helperLabel}\n openDirection={this.getOpenDirection()}\n />\n );\n }\n\n if (this.expanded && this.item.helperLabel) {\n return (\n <limel-tooltip\n elementId={this.tooltipId}\n label={this.item.helperLabel}\n openDirection={this.getOpenDirection()}\n />\n );\n }\n }\n\n private focusCustomComponentElement = () => {\n if (this.customComponentElement?.shadowRoot?.delegatesFocus) {\n this.customComponentElement?.focus();\n }\n };\n\n private getOpenDirection = () => {\n if (this.useMobileLayout) {\n return 'top';\n }\n\n return 'right';\n };\n}\n"],"version":3}
|
|
1
|
+
{"file":"limel-dock-button.entry.cjs.js","mappings":"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","names":["h","createRandomString"],"sources":["./src/components/dock/dock-button/dock-button.scss?tag=limel-dock-button","./src/components/dock/dock-button/dock-button.tsx"],"sourcesContent":["@use '../../../style/mixins';\n@use '../../../style/functions';\n@use '../../../style/internal/variables';\n\n.button {\n all: unset;\n isolation: isolate;\n position: relative;\n\n @include mixins.is-flat-inset-clickable(\n $color: var(--limel-dock-item-text-color),\n $background-color: var(--dock-background-color)\n );\n @include mixins.visualize-keyboard-focus;\n\n box-sizing: border-box;\n display: flex;\n align-items: center;\n\n width: 100%;\n height: var(--dock-item-height);\n\n border-radius: functions.pxToRem(6);\n font-size: functions.pxToRem(14);\n padding: 0 0.5rem;\n min-width: var(--dock-item-height);\n\n &:hover {\n z-index: 1;\n }\n\n &.selected {\n color: var(--limel-dock-item-text-color--selected);\n background-color: var(\n --dock-item-background-color--selected,\n rgb(var(--contrast-200))\n );\n\n box-shadow: var(--button-shadow-inset);\n\n &:focus-visible {\n box-shadow: var(--button-shadow-inset),\n var(--shadow-depth-8-focused);\n }\n\n .icon {\n color: var(--limel-dock-item-text--selected);\n }\n }\n}\n\nlimel-popover {\n // makes buttons that are wrapped in a popover become fullwidth\n display: grid;\n grid-template-columns: 100%;\n\n button[slot='trigger'][aria-expanded='true'] {\n box-shadow: var(--button-shadow-inset);\n }\n}\n\n.text {\n @include mixins.truncate-text();\n padding-left: 0.5rem;\n padding-right: 0.75rem;\n}\n\n.icon {\n flex-shrink: 0;\n width: calc(var(--dock-item-height) - 1rem);\n height: calc(var(--dock-item-height) - 1rem);\n color: var(--dock-item-icon-color, var(--limel-dock-item-text-color));\n}\n\nlimel-badge {\n position: absolute;\n top: -0.125rem;\n right: -0.125rem;\n}\n\n// 👇 Below is a hidden and private hack\n// only for usage in Lime CRM components.\n// It enables our customers to override\n// the default Home icon, using an external URL\n// or an SVG code.\n.icon {\n position: relative;\n\n &:before {\n text-align: center;\n pointer-events: none;\n position: absolute;\n inset: 0;\n background: {\n color: var(--dock-background-color, rgb(var(--contrast-100)));\n position: center;\n repeat: no-repeat;\n size: contain;\n image: var(--limel-custom-home-icon);\n }\n // Since `content` defaults to `undefined`\n // no pseudo element will be rendered, unless\n // the consumer defines something.\n content: var(--limel-custom-home-icon-enabler);\n\n .button.selected & {\n background-color: var(\n --dock-item-background-color--selected,\n rgb(var(--contrast-200))\n );\n }\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { DockItem } from '../dock.types';\nimport { createRandomString } from '../../../util/random-string';\n\n/**\n * @private\n */\n@Component({\n tag: 'limel-dock-button',\n shadow: false,\n styleUrl: 'dock-button.scss',\n})\nexport class DockButton {\n /**\n * Item that is placed in the dock.\n */\n @Prop()\n public item!: DockItem;\n\n /**\n * When the dock is expanded or collapsed, dock items\n * show labels and tooltips as suitable for the layout.\n */\n @Prop({ reflect: true })\n public expanded? = false;\n\n /**\n * When dock is using mobile layout, dock items\n * show labels and tooltips as suitable for the layout.\n */\n @Prop({ reflect: true })\n public useMobileLayout? = false;\n\n /**\n * Fired when a dock item has been selected from the dock.\n */\n @Event()\n public itemSelected: EventEmitter<DockItem>;\n\n /**\n * Fired when a dock menu is opened.\n */\n @Event()\n public menuOpen: EventEmitter<DockItem>;\n\n /**\n * Indicated whether the popover that renders a component is open.\n */\n @State()\n private isOpen = false;\n\n /**\n * Fired when the popover is closed.\n */\n @Event()\n public close: EventEmitter<void>;\n\n private tooltipId: string;\n private customComponentElement: HTMLElement;\n private intersectionObserver?: IntersectionObserver;\n\n constructor() {\n this.tooltipId = createRandomString();\n }\n\n public render() {\n if (this.item?.dockMenu?.componentName) {\n return this.renderPopover();\n }\n\n return this.renderButton(this.handleClick);\n }\n\n @Watch('isOpen')\n protected openWatcher() {\n if (!this.isOpen) {\n return;\n }\n\n if (!this.intersectionObserver) {\n this.intersectionObserver = new IntersectionObserver(\n this.focusCustomComponentElement,\n );\n this.intersectionObserver.observe(this.customComponentElement);\n }\n }\n\n public disconnectedCallback() {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = undefined;\n }\n\n private renderPopover() {\n const CustomComponent = this.item?.dockMenu.componentName;\n\n return (\n <limel-popover\n openDirection={this.useMobileLayout ? 'top' : 'right-start'}\n open={this.isOpen || this.item.dockMenu.menuOpen}\n onClose={this.onPopoverClose}\n >\n {this.renderButton(this.openPopover, 'trigger')}\n <CustomComponent\n ref={this.setCustomComponentElement}\n {...(this.item.dockMenu.props || {})}\n onClose={this.onPopoverClose}\n />\n </limel-popover>\n );\n }\n\n private renderButton(\n handleClick: (event: MouseEvent) => void,\n slot?: string,\n ) {\n return (\n <button\n slot={slot}\n tabindex=\"0\"\n id={this.tooltipId}\n type=\"button\"\n class={{\n button: true,\n selected: this.item?.selected,\n }}\n onClick={handleClick}\n aria-live=\"polite\"\n >\n {this.renderIcon()}\n {this.renderLabel()}\n {this.renderTooltip()}\n {this.renderNotification()}\n </button>\n );\n }\n\n private renderNotification = () => {\n if (this.item.badge !== undefined) {\n return <limel-badge label={this.item.badge} />;\n }\n };\n\n private openPopover = (event: MouseEvent) => {\n event.stopPropagation();\n this.isOpen = true;\n this.menuOpen.emit(this.item);\n };\n\n private setCustomComponentElement = (element: HTMLElement) => {\n this.customComponentElement = element;\n };\n\n private onPopoverClose = () => {\n this.isOpen = false;\n this.close.emit();\n };\n\n private handleClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.itemSelected.emit(this.item);\n };\n\n private renderIcon() {\n if (!this.item.icon) {\n return;\n }\n\n return <limel-icon name={this.item.icon} class=\"icon\" />;\n }\n\n private renderLabel() {\n if (this.expanded) {\n return <span class=\"text\">{this.item.label}</span>;\n }\n }\n\n private renderTooltip() {\n if (!this.expanded && this.item.label) {\n return (\n <limel-tooltip\n elementId={this.tooltipId}\n label={this.item.label}\n helperLabel={this.item.helperLabel}\n openDirection={this.getOpenDirection()}\n />\n );\n }\n\n if (this.expanded && this.item.helperLabel) {\n return (\n <limel-tooltip\n elementId={this.tooltipId}\n label={this.item.helperLabel}\n openDirection={this.getOpenDirection()}\n />\n );\n }\n }\n\n private focusCustomComponentElement = (\n entries: IntersectionObserverEntry[],\n ) => {\n const entry = entries.find(\n (e) => e.target === this.customComponentElement,\n );\n if (!entry) {\n return;\n }\n\n if (!entry.isIntersecting) {\n return;\n }\n\n if (this.customComponentElement?.shadowRoot?.delegatesFocus) {\n this.customComponentElement?.focus();\n }\n };\n\n private getOpenDirection = () => {\n if (this.useMobileLayout) {\n return 'top';\n }\n\n return 'right';\n };\n}\n"],"version":3}
|
|
@@ -15911,78 +15911,114 @@ function exampleSetup(options) {
|
|
|
15911
15911
|
}));
|
|
15912
15912
|
}
|
|
15913
15913
|
|
|
15914
|
-
|
|
15915
|
-
|
|
15916
|
-
|
|
15917
|
-
|
|
15918
|
-
|
|
15919
|
-
|
|
15920
|
-
|
|
15921
|
-
|
|
15922
|
-
|
|
15923
|
-
|
|
15924
|
-
|
|
15925
|
-
|
|
15926
|
-
|
|
15914
|
+
/**
|
|
15915
|
+
* The `EditorMenuType` type is used to specify the type of menu items that can be added to the editor toolbar.
|
|
15916
|
+
* Each one represents a different type to be used for creating the prosemirror commands relevant to the button.
|
|
15917
|
+
* The values correspond to the types that can be used with the `prosemirror-commands` library.
|
|
15918
|
+
* @beta
|
|
15919
|
+
*/
|
|
15920
|
+
const EditorMenuTypes = {
|
|
15921
|
+
Bold: 'strong',
|
|
15922
|
+
Italic: 'em',
|
|
15923
|
+
Blockquote: 'blockquote',
|
|
15924
|
+
HeaderLevel1: 'headerlevel1',
|
|
15925
|
+
HeaderLevel2: 'headerlevel2',
|
|
15926
|
+
HeaderLevel3: 'headerlevel3',
|
|
15927
|
+
Link: 'link',
|
|
15928
|
+
OrderedList: 'ordered_list',
|
|
15929
|
+
BulletList: 'bullet_list',
|
|
15930
|
+
};
|
|
15931
|
+
/**
|
|
15932
|
+
* `LevelMapping` is used to map string identifiers to numerical header levels.
|
|
15933
|
+
* It provides a way to represent different levels of headings in ProseMirror commands.
|
|
15934
|
+
*
|
|
15935
|
+
* The `Heading` identifier is not a valid level and is used to identify the node type.
|
|
15936
|
+
* The numerical values are used for creating ProseMirror commands to set the level of a heading node in the editor.
|
|
15937
|
+
* @beta
|
|
15938
|
+
*/
|
|
15939
|
+
const LevelMapping = {
|
|
15940
|
+
Heading: 'heading',
|
|
15941
|
+
one: 1,
|
|
15942
|
+
two: 2,
|
|
15943
|
+
three: 3,
|
|
15944
|
+
};
|
|
15945
|
+
|
|
15946
|
+
const createToggleMarkCommand = (schema, markName, url) => {
|
|
15947
|
+
const markType = schema.marks[markName];
|
|
15948
|
+
if (!markType) {
|
|
15949
|
+
throw new Error(`Mark "${markName}" not found in schema`);
|
|
15950
|
+
}
|
|
15951
|
+
if (markName === EditorMenuTypes.Link && url) {
|
|
15952
|
+
const attrs = {
|
|
15953
|
+
href: url,
|
|
15954
|
+
target: isExternalLink(url) ? '_blank' : null,
|
|
15927
15955
|
};
|
|
15928
|
-
|
|
15956
|
+
return toggleMark(markType, attrs);
|
|
15929
15957
|
}
|
|
15930
|
-
|
|
15931
|
-
|
|
15932
|
-
|
|
15933
|
-
|
|
15934
|
-
|
|
15935
|
-
|
|
15936
|
-
|
|
15937
|
-
|
|
15938
|
-
|
|
15939
|
-
case 'paragraph':
|
|
15940
|
-
return this.createSetNodeTypeCommand(mark);
|
|
15941
|
-
case 'headerlevel1':
|
|
15942
|
-
case 'headerlevel2':
|
|
15943
|
-
case 'headerlevel3':
|
|
15944
|
-
return this.createSetNodeTypeCommand('heading', parseInt(mark[mark.length - 1], 10));
|
|
15945
|
-
case 'blockquote':
|
|
15946
|
-
return this.createWrapInCommand(mark);
|
|
15947
|
-
case 'ordered_list':
|
|
15948
|
-
case 'bullet_list':
|
|
15949
|
-
return this.createListCommand(mark);
|
|
15950
|
-
default:
|
|
15951
|
-
throw new Error(`The Mark "${mark}" is not supported`);
|
|
15952
|
-
}
|
|
15958
|
+
return toggleMark(markType);
|
|
15959
|
+
};
|
|
15960
|
+
const isExternalLink = (url) => {
|
|
15961
|
+
return !url.startsWith(window.location.origin);
|
|
15962
|
+
};
|
|
15963
|
+
const createSetNodeTypeCommand = (schema, nodeType, level) => {
|
|
15964
|
+
const type = schema.nodes[nodeType];
|
|
15965
|
+
if (!type) {
|
|
15966
|
+
throw new Error(`Node type "${nodeType}" not found in schema`);
|
|
15953
15967
|
}
|
|
15954
|
-
|
|
15955
|
-
|
|
15956
|
-
if (!markType) {
|
|
15957
|
-
throw new Error(`Mark "${markName}" not found in schema`);
|
|
15958
|
-
}
|
|
15959
|
-
return toggleMark(markType);
|
|
15968
|
+
if (nodeType === 'heading' && level) {
|
|
15969
|
+
return setBlockType(type, { level: level });
|
|
15960
15970
|
}
|
|
15961
|
-
|
|
15962
|
-
|
|
15963
|
-
if (!type) {
|
|
15964
|
-
throw new Error(`Node type "${nodeType}" not found in schema`);
|
|
15965
|
-
}
|
|
15966
|
-
if (nodeType === 'heading' && level) {
|
|
15967
|
-
return setBlockType(type, { level: level });
|
|
15968
|
-
}
|
|
15969
|
-
else {
|
|
15970
|
-
return setBlockType(type);
|
|
15971
|
-
}
|
|
15971
|
+
else {
|
|
15972
|
+
return setBlockType(type);
|
|
15972
15973
|
}
|
|
15973
|
-
|
|
15974
|
-
|
|
15975
|
-
|
|
15976
|
-
|
|
15977
|
-
}
|
|
15978
|
-
return wrapIn(type);
|
|
15974
|
+
};
|
|
15975
|
+
const createWrapInCommand = (schema, nodeType) => {
|
|
15976
|
+
const type = schema.nodes[nodeType];
|
|
15977
|
+
if (!type) {
|
|
15978
|
+
throw new Error(`Node type "${nodeType}" not found in schema`);
|
|
15979
15979
|
}
|
|
15980
|
-
|
|
15981
|
-
|
|
15982
|
-
|
|
15983
|
-
|
|
15980
|
+
return wrapIn(type);
|
|
15981
|
+
};
|
|
15982
|
+
const createListCommand = (schema, listType) => {
|
|
15983
|
+
const type = schema.nodes[listType];
|
|
15984
|
+
if (!type) {
|
|
15985
|
+
throw new Error(`List type "${listType}" not found in schema`);
|
|
15986
|
+
}
|
|
15987
|
+
return wrapInList(type);
|
|
15988
|
+
};
|
|
15989
|
+
const commandMapping = {
|
|
15990
|
+
strong: createToggleMarkCommand,
|
|
15991
|
+
em: createToggleMarkCommand,
|
|
15992
|
+
underline: createToggleMarkCommand,
|
|
15993
|
+
headerlevel1: (schema) => createSetNodeTypeCommand(schema, LevelMapping.Heading, LevelMapping.one),
|
|
15994
|
+
headerlevel2: (schema) => createSetNodeTypeCommand(schema, LevelMapping.Heading, LevelMapping.two),
|
|
15995
|
+
headerlevel3: (schema) => createSetNodeTypeCommand(schema, LevelMapping.Heading, LevelMapping.three),
|
|
15996
|
+
blockquote: createWrapInCommand,
|
|
15997
|
+
/* eslint-disable camelcase */
|
|
15998
|
+
ordered_list: createListCommand,
|
|
15999
|
+
bullet_list: createListCommand,
|
|
16000
|
+
/* eslint-enable camelcase */
|
|
16001
|
+
link: createToggleMarkCommand,
|
|
16002
|
+
};
|
|
16003
|
+
class MenuCommandFactory {
|
|
16004
|
+
constructor(schema) {
|
|
16005
|
+
this.schema = schema;
|
|
16006
|
+
}
|
|
16007
|
+
getCommand(mark, url) {
|
|
16008
|
+
const commandFunc = commandMapping[mark];
|
|
16009
|
+
if (!commandFunc) {
|
|
16010
|
+
throw new Error(`The Mark "${mark}" is not supported`);
|
|
15984
16011
|
}
|
|
15985
|
-
return
|
|
16012
|
+
return commandFunc(this.schema, mark, url);
|
|
16013
|
+
}
|
|
16014
|
+
buildKeymap() {
|
|
16015
|
+
return {
|
|
16016
|
+
'Mod-B': this.getCommand(EditorMenuTypes.Bold),
|
|
16017
|
+
'Mod-I': this.getCommand(EditorMenuTypes.Italic),
|
|
16018
|
+
'Mod-Shift-1': this.getCommand(EditorMenuTypes.HeaderLevel1),
|
|
16019
|
+
'Mod-Shift-2': this.getCommand(EditorMenuTypes.HeaderLevel2),
|
|
16020
|
+
'Mod-Shift-3': this.getCommand(EditorMenuTypes.HeaderLevel3),
|
|
16021
|
+
};
|
|
15986
16022
|
}
|
|
15987
16023
|
}
|
|
15988
16024
|
|
|
@@ -15996,14 +16032,14 @@ const getCommandSymbols = () => {
|
|
|
15996
16032
|
const { mod, shift } = getCommandSymbols();
|
|
15997
16033
|
const textEditorMenuItems = [
|
|
15998
16034
|
{
|
|
15999
|
-
value:
|
|
16035
|
+
value: EditorMenuTypes.Bold,
|
|
16000
16036
|
text: 'Bold',
|
|
16001
16037
|
commandText: `${mod} B`,
|
|
16002
16038
|
icon: '-lime-text-bold',
|
|
16003
16039
|
iconOnly: true,
|
|
16004
16040
|
},
|
|
16005
16041
|
{
|
|
16006
|
-
value:
|
|
16042
|
+
value: EditorMenuTypes.Italic,
|
|
16007
16043
|
text: 'Italic',
|
|
16008
16044
|
commandText: `${mod} I`,
|
|
16009
16045
|
icon: '-lime-text-italic',
|
|
@@ -16011,21 +16047,21 @@ const textEditorMenuItems = [
|
|
|
16011
16047
|
},
|
|
16012
16048
|
{ separator: true },
|
|
16013
16049
|
{
|
|
16014
|
-
value:
|
|
16050
|
+
value: EditorMenuTypes.HeaderLevel1,
|
|
16015
16051
|
text: 'Header Level 1',
|
|
16016
16052
|
commandText: `${mod} ${shift} 1`,
|
|
16017
16053
|
icon: '-lime-text-h-heading-1',
|
|
16018
16054
|
iconOnly: true,
|
|
16019
16055
|
},
|
|
16020
16056
|
{
|
|
16021
|
-
value:
|
|
16057
|
+
value: EditorMenuTypes.HeaderLevel2,
|
|
16022
16058
|
text: 'Header Level 2',
|
|
16023
16059
|
commandText: `${mod} ${shift} 2`,
|
|
16024
16060
|
icon: '-lime-text-h-heading-2',
|
|
16025
16061
|
iconOnly: true,
|
|
16026
16062
|
},
|
|
16027
16063
|
{
|
|
16028
|
-
value:
|
|
16064
|
+
value: EditorMenuTypes.HeaderLevel3,
|
|
16029
16065
|
text: 'Header Level 3',
|
|
16030
16066
|
commandText: `${mod} ${shift} 3`,
|
|
16031
16067
|
icon: '-lime-text-h-heading-3',
|
|
@@ -16033,19 +16069,19 @@ const textEditorMenuItems = [
|
|
|
16033
16069
|
},
|
|
16034
16070
|
{ separator: true },
|
|
16035
16071
|
{
|
|
16036
|
-
value:
|
|
16072
|
+
value: EditorMenuTypes.BulletList,
|
|
16037
16073
|
text: 'Bullet list',
|
|
16038
16074
|
icon: '-lime-text-bulleted-list',
|
|
16039
16075
|
iconOnly: true,
|
|
16040
16076
|
},
|
|
16041
16077
|
{
|
|
16042
|
-
value:
|
|
16078
|
+
value: EditorMenuTypes.OrderedList,
|
|
16043
16079
|
text: 'Numbered list',
|
|
16044
16080
|
icon: '-lime-text-ordered-list',
|
|
16045
16081
|
iconOnly: true,
|
|
16046
16082
|
},
|
|
16047
16083
|
{
|
|
16048
|
-
value:
|
|
16084
|
+
value: EditorMenuTypes.Blockquote,
|
|
16049
16085
|
text: 'Blockquote',
|
|
16050
16086
|
icon: '-lime-text-blockquote',
|
|
16051
16087
|
iconOnly: true,
|
|
@@ -24718,6 +24754,7 @@ const ProsemirrorAdapter = class {
|
|
|
24718
24754
|
constructor(hostRef) {
|
|
24719
24755
|
index.registerInstance(this, hostRef);
|
|
24720
24756
|
this.change = index.createEvent(this, "change", 7);
|
|
24757
|
+
this.editorKeyMap = {};
|
|
24721
24758
|
this.initializeTextEditor = async () => {
|
|
24722
24759
|
this.actionBarItems = textEditorMenuItems;
|
|
24723
24760
|
const mySchema = new Schema({
|
|
@@ -24732,13 +24769,19 @@ const ProsemirrorAdapter = class {
|
|
|
24732
24769
|
await this.contentConverter.parseAsHTML(this.value, schema$1);
|
|
24733
24770
|
}
|
|
24734
24771
|
const initialDoc = DOMParser.fromSchema(mySchema).parse(initialContentElement);
|
|
24772
|
+
this.menuCommandFactory = new MenuCommandFactory(mySchema);
|
|
24773
|
+
this.editorKeyMap = this.menuCommandFactory.buildKeymap();
|
|
24774
|
+
const keymapPlugin = keymap(this.editorKeyMap);
|
|
24735
24775
|
this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
|
|
24736
24776
|
state: EditorState.create({
|
|
24737
24777
|
doc: initialDoc,
|
|
24738
|
-
plugins:
|
|
24739
|
-
|
|
24740
|
-
|
|
24741
|
-
|
|
24778
|
+
plugins: [
|
|
24779
|
+
...exampleSetup({
|
|
24780
|
+
schema: mySchema,
|
|
24781
|
+
menuBar: false,
|
|
24782
|
+
}),
|
|
24783
|
+
keymapPlugin,
|
|
24784
|
+
],
|
|
24742
24785
|
}),
|
|
24743
24786
|
dispatchTransaction: (transaction) => {
|
|
24744
24787
|
const newState = this.view.state.apply(transaction);
|
|
@@ -24753,10 +24796,9 @@ const ProsemirrorAdapter = class {
|
|
|
24753
24796
|
};
|
|
24754
24797
|
this.handleActionBarItem = (event) => {
|
|
24755
24798
|
event.preventDefault();
|
|
24756
|
-
const {
|
|
24757
|
-
const mark = text.replace(/\s/g, '').toLowerCase();
|
|
24799
|
+
const { value } = event.detail;
|
|
24758
24800
|
try {
|
|
24759
|
-
const command = this.menuCommandFactory.
|
|
24801
|
+
const command = this.menuCommandFactory.getCommand(value);
|
|
24760
24802
|
this.executeCommand(command);
|
|
24761
24803
|
}
|
|
24762
24804
|
catch (error) {
|
|
@@ -24816,7 +24858,11 @@ const ProsemirrorAdapter = class {
|
|
|
24816
24858
|
transaction = tr;
|
|
24817
24859
|
});
|
|
24818
24860
|
this.view.dispatch(transaction);
|
|
24819
|
-
this.
|
|
24861
|
+
this.setFocus();
|
|
24862
|
+
}
|
|
24863
|
+
setFocus() {
|
|
24864
|
+
var _a;
|
|
24865
|
+
(_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
|
|
24820
24866
|
}
|
|
24821
24867
|
get host() { return index.getElement(this); }
|
|
24822
24868
|
static get watchers() { return {
|