@vonage/vivid 4.28.0 → 4.30.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/custom-elements.json +707 -86
- package/lib/accordion-item/accordion-item.d.ts +3 -1
- package/lib/audio-player/audio-player.d.ts +4 -3
- package/lib/data-grid/data-grid.d.ts +2 -0
- package/lib/data-grid/locale.d.ts +1 -0
- package/lib/date-picker/date-picker.d.ts +4 -2
- package/lib/date-time-picker/date-time-picker.d.ts +6 -3
- package/lib/divider/definition.d.ts +1 -0
- package/lib/divider/divider.d.ts +5 -1
- package/lib/option/option.d.ts +4 -7
- package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +2 -1
- package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +2 -2
- package/lib/rich-text-editor/image-placeholder/definition.d.ts +2 -0
- package/lib/rich-text-editor/image-placeholder/image-placeholder.d.ts +7 -0
- package/lib/rich-text-editor/image-placeholder/image-placeholder.template.d.ts +4 -0
- package/lib/rich-text-editor/menubar/consts.d.ts +2 -2
- package/lib/rich-text-editor/menubar/definition.d.ts +2 -2
- package/lib/rich-text-editor/menubar/menubar.d.ts +2 -2
- package/lib/rich-text-editor/menubar/menubar.template.d.ts +2 -2
- package/lib/rich-text-editor/rich-text-editor.d.ts +1 -0
- package/lib/selectable-box/selectable-box.d.ts +2 -0
- package/lib/split-button/split-button.d.ts +1 -1
- package/lib/tag/tag.d.ts +1 -1
- package/lib/time-picker/time-picker.d.ts +4 -2
- package/locales/de-DE.cjs +2 -1
- package/locales/de-DE.js +2 -1
- package/locales/en-GB.cjs +2 -1
- package/locales/en-GB.js +2 -1
- package/locales/en-US.cjs +2 -1
- package/locales/en-US.js +2 -1
- package/locales/ja-JP.cjs +2 -1
- package/locales/ja-JP.js +2 -1
- package/locales/zh-CN.cjs +2 -1
- package/locales/zh-CN.js +2 -1
- package/package.json +2 -1
- package/shared/calendar-picker.template.cjs +6 -5
- package/shared/calendar-picker.template.js +6 -5
- package/shared/definition.cjs +11 -2
- package/shared/definition.js +11 -2
- package/shared/definition16.cjs +33 -30
- package/shared/definition16.js +33 -30
- package/shared/definition17.cjs +137 -1
- package/shared/definition17.js +138 -2
- package/shared/definition23.cjs +12 -7
- package/shared/definition23.js +12 -7
- package/shared/definition28.cjs +1 -2
- package/shared/definition28.js +2 -2
- package/shared/definition36.cjs +1 -1
- package/shared/definition36.js +1 -1
- package/shared/definition44.cjs +194 -77
- package/shared/definition44.js +194 -77
- package/shared/definition45.cjs +12 -5
- package/shared/definition45.js +12 -5
- package/shared/definition47.cjs +11 -5
- package/shared/definition47.js +11 -5
- package/shared/definition5.cjs +86 -30
- package/shared/definition5.js +86 -30
- package/shared/definition50.cjs +1 -1
- package/shared/definition50.js +1 -1
- package/shared/definition56.cjs +1 -1
- package/shared/definition56.js +1 -1
- package/shared/definition58.cjs +10 -29
- package/shared/definition58.js +12 -31
- package/shared/definition61.cjs +11 -0
- package/shared/definition61.js +11 -0
- package/shared/definition64.cjs +1 -1
- package/shared/definition64.js +1 -1
- package/shared/definition67.cjs +27 -16
- package/shared/definition67.js +27 -16
- package/shared/divider.cjs +7 -2
- package/shared/divider.js +7 -2
- package/shared/option.cjs +36 -38
- package/shared/option.js +37 -39
- package/shared/picker-field/mixins/single-date-picker.d.ts +4 -2
- package/shared/picker-field/mixins/single-value-picker.d.ts +2 -1
- package/shared/picker-field/mixins/time-selection-picker.d.ts +4 -2
- package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -2
- package/shared/single-value-picker.cjs +40 -6
- package/shared/single-value-picker.js +40 -6
- package/shared/text-field.cjs +1 -1
- package/shared/text-field.js +1 -1
- package/shared/time-selection-picker.template.cjs +2 -2
- package/shared/time-selection-picker.template.js +2 -2
- package/shared/vivid-element.cjs +2 -1
- package/shared/vivid-element.js +2 -2
- package/styles/core/all.css +1 -1
- package/styles/core/theme.css +1 -1
- 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/vivid.api.json +294 -129
package/shared/definition44.js
CHANGED
|
@@ -11,11 +11,13 @@ import { L as ListboxOption } from './option.js';
|
|
|
11
11
|
import { r as repeat } from './repeat.js';
|
|
12
12
|
import { c as classNames } from './class-names.js';
|
|
13
13
|
import { L as Localized } from './localized.js';
|
|
14
|
+
import { I as Icon, i as iconDefinition } from './definition28.js';
|
|
15
|
+
import { w as when } from './when.js';
|
|
14
16
|
|
|
15
|
-
const styles$
|
|
17
|
+
const styles$2 = "@charset \"UTF-8\";.ProseMirror li{position:relative}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror [draggable][contenteditable=false]{user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\"\";position:absolute;inset:-2px -2px -2px -32px;border:2px solid #8cf;pointer-events:none}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important}.ProseMirror-textblock-dropdown{min-width:3em}.ProseMirror-menu{margin:0 -4px;line-height:1}.ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProseMirror-menuitem{margin-right:3px;display:inline-block}.ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProseMirror-menu-dropdown,.ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProseMirror-menu-dropdown{vertical-align:1px;cursor:pointer;position:relative;padding-right:15px}.ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 4px;display:inline-block;position:relative}.ProseMirror-menu-dropdown:after{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProseMirror-menu-dropdown-menu,.ProseMirror-menu-submenu{position:absolute;background:#fff;color:#666;border:1px solid #aaa;padding:2px}.ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em}.ProseMirror-menu-dropdown-item{cursor:pointer;padding:2px 8px 2px 4px}.ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProseMirror-menu-submenu-wrap{position:relative;margin-right:-4px}.ProseMirror-menu-submenu-label:after{content:\"\";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:-3px}.ProseMirror-menu-active{background:#eee;border-radius:4px}.ProseMirror-menu-disabled{opacity:.3}.ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProseMirror-menubar{border-top-left-radius:inherit;border-top-right-radius:inherit;position:relative;min-height:1em;color:#666;padding:1px 6px;top:0;left:0;right:0;border-bottom:1px solid silver;background:#fff;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:2px 8px;cursor:pointer}.ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProseMirror-icon svg{fill:currentColor;height:1em}.ProseMirror-icon span{vertical-align:text-top}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:\"\";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProseMirror-example-setup-style hr:after{content:\"\";display:block;height:1px;background-color:silver;line-height:2px}.ProseMirror ul,.ProseMirror ol{padding-left:30px}.ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProseMirror-example-setup-style img{cursor:default}.ProseMirror-prompt{background:#fff;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;z-index:11;box-shadow:-.5px 2px 5px #0003}.ProseMirror-prompt h5{margin:0;font-weight:400;font-size:100%;color:#444}.ProseMirror-prompt input[type=text],.ProseMirror-prompt textarea{background:#eee;border:none;outline:none}.ProseMirror-prompt input[type=text]{padding:0 4px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:\"✕\";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin-top:5px;display:none}.placeholder:before{position:absolute;color:var(--vvd-color-neutral-600);content:attr(data-placeholder);font:var(--vvd-typography-base);pointer-events:none}.editor{box-sizing:border-box;background:var(--vvd-color-canvas);background-clip:padding-box;color:var(--vvd-color-canvas-text)}.ProseMirror{position:relative;box-sizing:border-box;padding:10px 16px;block-size:120px;font:var(--vvd-typography-base);font-feature-settings:\"liga\" 0;font-variant-ligatures:none;line-height:1.2;outline:none;overflow-y:auto;white-space:break-spaces;word-wrap:break-word}.ProseMirror pre{white-space:pre-wrap}.ProseMirror p{margin-bottom:1em}.ProseMirror p:first-child,.ProseMirror h1:first-child,.ProseMirror h2:first-child,.ProseMirror h3:first-child,.ProseMirror h4:first-child,.ProseMirror h5:first-child,.ProseMirror h6:first-child{margin-top:10px}h2{font:var(--vvd-typography-heading-4)}h3{font:var(--vvd-typography-base-extended)}p{font:var(--vvd-typography-base)}:host{display:block}#editor{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}#editor{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}#editor ::-webkit-scrollbar{width:4px}#editor ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}#editor ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}#editor{position:relative;display:flex;flex-direction:column;block-size:100%;overflow-y:auto}[contenteditable=true]{overflow:unset;block-size:unset}#attachments-wrapper{order:1}#attachments-wrapper .divider{padding:0 12px}.hidden{display:none}.drag-overlay{position:absolute;z-index:10;display:none;align-items:center;justify-content:center;border:1px dashed var(--vvd-color-cta-400);border-radius:8px;background:var(--vvd-color-cta-100);font:var(--vvd-typography-base);inset:0;opacity:.8;pointer-events:none;transition:opacity .2s}.drag-over .drag-overlay{display:flex}";
|
|
16
18
|
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
+
function notifyMenubarChange(menubar, eventName, payload) {
|
|
20
|
+
menubar.$emit(eventName, payload, { bubbles: false, composed: false });
|
|
19
21
|
return true;
|
|
20
22
|
}
|
|
21
23
|
const TEXT_DECORATION_ITEMS = [
|
|
@@ -106,8 +108,8 @@ const textSizeEventHandler = (event) => {
|
|
|
106
108
|
};
|
|
107
109
|
const MENU_BAR_ITEMS = {
|
|
108
110
|
textBlock: {
|
|
109
|
-
registerStateProperty: function(
|
|
110
|
-
|
|
111
|
+
registerStateProperty: function(menubar) {
|
|
112
|
+
menubar.addEventListener("text-styles-changed", textBlockEventHandler);
|
|
111
113
|
},
|
|
112
114
|
render: function(context) {
|
|
113
115
|
const selectTag = context.tagFor(Select);
|
|
@@ -125,7 +127,7 @@ const MENU_BAR_ITEMS = {
|
|
|
125
127
|
aria-label="Text Block"
|
|
126
128
|
placement="bottom-end"
|
|
127
129
|
value="${(_, { parent }) => parent.textBlockType}"
|
|
128
|
-
@change="${(_, { parent, event }) =>
|
|
130
|
+
@change="${(_, { parent, event }) => notifyMenubarChange(
|
|
129
131
|
parent,
|
|
130
132
|
"text-block-selected",
|
|
131
133
|
event.target.value
|
|
@@ -158,8 +160,8 @@ const MENU_BAR_ITEMS = {
|
|
|
158
160
|
}
|
|
159
161
|
},
|
|
160
162
|
textDecoration: {
|
|
161
|
-
registerStateProperty: function(
|
|
162
|
-
|
|
163
|
+
registerStateProperty: function(menubar) {
|
|
164
|
+
menubar.addEventListener(
|
|
163
165
|
"text-styles-changed",
|
|
164
166
|
textDecorationEventHandler
|
|
165
167
|
);
|
|
@@ -181,7 +183,7 @@ const MENU_BAR_ITEMS = {
|
|
|
181
183
|
appearance="ghost-light"
|
|
182
184
|
shape="rounded"
|
|
183
185
|
icon="${(x) => x.icon}"
|
|
184
|
-
@click="${(x, c) =>
|
|
186
|
+
@click="${(x, c) => notifyMenubarChange(
|
|
185
187
|
c.parentContext.parent,
|
|
186
188
|
"text-decoration-selected",
|
|
187
189
|
x.value
|
|
@@ -195,8 +197,8 @@ const MENU_BAR_ITEMS = {
|
|
|
195
197
|
}
|
|
196
198
|
},
|
|
197
199
|
textSize: {
|
|
198
|
-
registerStateProperty: function(
|
|
199
|
-
|
|
200
|
+
registerStateProperty: function(menubar) {
|
|
201
|
+
menubar.addEventListener("text-styles-changed", textSizeEventHandler);
|
|
200
202
|
},
|
|
201
203
|
render: function(context) {
|
|
202
204
|
const menuTag = context.tagFor(Menu);
|
|
@@ -232,7 +234,7 @@ const MENU_BAR_ITEMS = {
|
|
|
232
234
|
internal-part
|
|
233
235
|
class="menubar-selector-menuitem"
|
|
234
236
|
connotation="cta"
|
|
235
|
-
@click="${(x, c) =>
|
|
237
|
+
@click="${(x, c) => notifyMenubarChange(
|
|
236
238
|
c.parentContext.parent,
|
|
237
239
|
"text-size-selected",
|
|
238
240
|
x.value
|
|
@@ -254,16 +256,16 @@ const MENU_BAR_ITEMS = {
|
|
|
254
256
|
}
|
|
255
257
|
};
|
|
256
258
|
|
|
257
|
-
var __defProp$
|
|
258
|
-
var __decorateClass$
|
|
259
|
+
var __defProp$2 = Object.defineProperty;
|
|
260
|
+
var __decorateClass$2 = (decorators, target, key, kind) => {
|
|
259
261
|
var result = void 0 ;
|
|
260
262
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
261
263
|
if (decorator = decorators[i])
|
|
262
264
|
result = (decorator(target, key, result) ) || result;
|
|
263
|
-
if (result) __defProp$
|
|
265
|
+
if (result) __defProp$2(target, key, result);
|
|
264
266
|
return result;
|
|
265
267
|
};
|
|
266
|
-
class
|
|
268
|
+
class Menubar extends Localized(VividElement) {
|
|
267
269
|
get #textEditorElement() {
|
|
268
270
|
return this.parentElement;
|
|
269
271
|
}
|
|
@@ -297,13 +299,13 @@ class MenuBar extends Localized(VividElement) {
|
|
|
297
299
|
);
|
|
298
300
|
}
|
|
299
301
|
}
|
|
300
|
-
__decorateClass$
|
|
302
|
+
__decorateClass$2([
|
|
301
303
|
attr({ attribute: "menu-items" })
|
|
302
|
-
],
|
|
304
|
+
], Menubar.prototype, "menuItems");
|
|
303
305
|
|
|
304
|
-
const getClasses$
|
|
306
|
+
const getClasses$2 = (menubar) => classNames("control", [
|
|
305
307
|
"hide-menubar",
|
|
306
|
-
getValidMenuItems(
|
|
308
|
+
getValidMenuItems(menubar).length === 0
|
|
307
309
|
]);
|
|
308
310
|
const validItems = ["textBlock", "textDecoration", "textSize", "divider"];
|
|
309
311
|
function getPropertyStateRgistrationFunction(item) {
|
|
@@ -324,18 +326,18 @@ function renderMenuItems(context) {
|
|
|
324
326
|
}}`
|
|
325
327
|
)}`;
|
|
326
328
|
}
|
|
327
|
-
const
|
|
328
|
-
return html`<template class="${getClasses$
|
|
329
|
+
const MenubarTemplate = (context) => {
|
|
330
|
+
return html`<template class="${getClasses$2}">
|
|
329
331
|
${renderMenuItems(context)}
|
|
330
332
|
</template>`;
|
|
331
333
|
};
|
|
332
334
|
|
|
333
|
-
const styles = ":host{display:flex;align-items:center;background-color:var(--vvd-color-neutral-50);gap:4px}:host .hide-menubar{display:none}.title{--_text-primary-custom-size: var(--vvd-typography-heading-4)}.subtitle{--_text-primary-custom-size: var(--vvd-typography-base-extended)}.body{--_text-primary-custom-size: var(--vvd-typography-base)}.divider{height:28px}#text-block{width:104px}";
|
|
335
|
+
const styles$1 = ":host{display:flex;align-items:center;background-color:var(--vvd-color-neutral-50);gap:4px}:host .hide-menubar{display:none}.title{--_text-primary-custom-size: var(--vvd-typography-heading-4)}.subtitle{--_text-primary-custom-size: var(--vvd-typography-base-extended)}.body{--_text-primary-custom-size: var(--vvd-typography-base)}.divider{height:28px}#text-block{width:104px}";
|
|
334
336
|
|
|
335
|
-
const
|
|
337
|
+
const menubarDefinition = defineVividComponent(
|
|
336
338
|
"menubar",
|
|
337
|
-
|
|
338
|
-
|
|
339
|
+
Menubar,
|
|
340
|
+
MenubarTemplate,
|
|
339
341
|
[
|
|
340
342
|
buttonDefinition,
|
|
341
343
|
selectDefinition,
|
|
@@ -346,7 +348,7 @@ const menuBarDefinition = defineVividComponent(
|
|
|
346
348
|
menuItemDefinition
|
|
347
349
|
],
|
|
348
350
|
{
|
|
349
|
-
styles,
|
|
351
|
+
styles: styles$1,
|
|
350
352
|
shadowOptions: {
|
|
351
353
|
delegatesFocus: true
|
|
352
354
|
}
|
|
@@ -761,7 +763,7 @@ class Fragment {
|
|
|
761
763
|
position in this fragment. The result object will be reused
|
|
762
764
|
(overwritten) the next time the function is called. @internal
|
|
763
765
|
*/
|
|
764
|
-
findIndex(pos
|
|
766
|
+
findIndex(pos) {
|
|
765
767
|
if (pos == 0)
|
|
766
768
|
return retIndex(0, pos);
|
|
767
769
|
if (pos == this.size)
|
|
@@ -771,7 +773,7 @@ class Fragment {
|
|
|
771
773
|
for (let i = 0, curPos = 0;; i++) {
|
|
772
774
|
let cur = this.child(i), end = curPos + cur.nodeSize;
|
|
773
775
|
if (end >= pos) {
|
|
774
|
-
if (end == pos
|
|
776
|
+
if (end == pos)
|
|
775
777
|
return retIndex(i + 1, end);
|
|
776
778
|
return retIndex(i, curPos);
|
|
777
779
|
}
|
|
@@ -1732,7 +1734,7 @@ class Node {
|
|
|
1732
1734
|
`blockSeparator` is given, it will be inserted to separate text
|
|
1733
1735
|
from different block nodes. If `leafText` is given, it'll be
|
|
1734
1736
|
inserted for every non-text leaf node encountered, otherwise
|
|
1735
|
-
[`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec
|
|
1737
|
+
[`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.
|
|
1736
1738
|
*/
|
|
1737
1739
|
textBetween(from, to, blockSeparator, leafText) {
|
|
1738
1740
|
return this.content.textBetween(from, to, blockSeparator, leafText);
|
|
@@ -2942,8 +2944,8 @@ class Schema {
|
|
|
2942
2944
|
let type = this.marks[prop], excl = type.spec.excludes;
|
|
2943
2945
|
type.excluded = excl == null ? [type] : excl == "" ? [] : gatherMarks(this, excl.split(" "));
|
|
2944
2946
|
}
|
|
2945
|
-
this.nodeFromJSON =
|
|
2946
|
-
this.markFromJSON =
|
|
2947
|
+
this.nodeFromJSON = json => Node.fromJSON(this, json);
|
|
2948
|
+
this.markFromJSON = json => Mark.fromJSON(this, json);
|
|
2947
2949
|
this.topNodeType = this.nodes[this.spec.topNode || "doc"];
|
|
2948
2950
|
this.cached.wrappings = Object.create(null);
|
|
2949
2951
|
}
|
|
@@ -2979,20 +2981,6 @@ class Schema {
|
|
|
2979
2981
|
return type.create(attrs);
|
|
2980
2982
|
}
|
|
2981
2983
|
/**
|
|
2982
|
-
Deserialize a node from its JSON representation. This method is
|
|
2983
|
-
bound.
|
|
2984
|
-
*/
|
|
2985
|
-
nodeFromJSON(json) {
|
|
2986
|
-
return Node.fromJSON(this, json);
|
|
2987
|
-
}
|
|
2988
|
-
/**
|
|
2989
|
-
Deserialize a mark from its JSON representation. This method is
|
|
2990
|
-
bound.
|
|
2991
|
-
*/
|
|
2992
|
-
markFromJSON(json) {
|
|
2993
|
-
return Mark.fromJSON(this, json);
|
|
2994
|
-
}
|
|
2995
|
-
/**
|
|
2996
2984
|
@internal
|
|
2997
2985
|
*/
|
|
2998
2986
|
nodeType(name) {
|
|
@@ -3174,7 +3162,7 @@ class DOMParser {
|
|
|
3174
3162
|
/**
|
|
3175
3163
|
Construct a DOM parser using the parsing rules listed in a
|
|
3176
3164
|
schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by
|
|
3177
|
-
[priority](https://prosemirror.net/docs/ref/#model.
|
|
3165
|
+
[priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).
|
|
3178
3166
|
*/
|
|
3179
3167
|
static fromSchema(schema) {
|
|
3180
3168
|
return schema.cached.domParser ||
|
|
@@ -3925,6 +3913,8 @@ function renderSpec(doc, structure, xmlNS, blockArraysIn) {
|
|
|
3925
3913
|
let space = name.indexOf(" ");
|
|
3926
3914
|
if (space > 0)
|
|
3927
3915
|
dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);
|
|
3916
|
+
else if (name == "style" && dom.style)
|
|
3917
|
+
dom.style.cssText = attrs[name];
|
|
3928
3918
|
else
|
|
3929
3919
|
dom.setAttribute(name, attrs[name]);
|
|
3930
3920
|
}
|
|
@@ -7444,7 +7434,7 @@ function posFromCaret(view, node, offset, coords) {
|
|
|
7444
7434
|
if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&
|
|
7445
7435
|
// Ignore elements with zero-size bounding rectangles
|
|
7446
7436
|
((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {
|
|
7447
|
-
if (desc.node.isBlock && desc.parent) {
|
|
7437
|
+
if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {
|
|
7448
7438
|
// Only apply the horizontal test to the innermost block. Vertical for any parent.
|
|
7449
7439
|
if (!sawBlock && rect.left > coords.left || rect.top > coords.top)
|
|
7450
7440
|
outsideBlock = desc.posBefore;
|
|
@@ -11958,7 +11948,7 @@ function ruleFromNode(dom) {
|
|
|
11958
11948
|
}
|
|
11959
11949
|
return null;
|
|
11960
11950
|
}
|
|
11961
|
-
const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
|
|
11951
|
+
const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
|
|
11962
11952
|
function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
11963
11953
|
let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);
|
|
11964
11954
|
view.input.compositionPendingChanges = 0;
|
|
@@ -13881,13 +13871,51 @@ const customMarks = {
|
|
|
13881
13871
|
}
|
|
13882
13872
|
}
|
|
13883
13873
|
};
|
|
13884
|
-
const
|
|
13885
|
-
nodes:
|
|
13874
|
+
const dynamicSchema = (prefix = "vwc") => new Schema({
|
|
13875
|
+
nodes: {
|
|
13876
|
+
...schema.spec.nodes.toObject(),
|
|
13877
|
+
imageError: {
|
|
13878
|
+
inline: true,
|
|
13879
|
+
group: "inline",
|
|
13880
|
+
atom: true,
|
|
13881
|
+
attrs: {
|
|
13882
|
+
alt: { default: "" },
|
|
13883
|
+
icon: { default: "" },
|
|
13884
|
+
errorMessage: { default: "Failed to attach" },
|
|
13885
|
+
fileName: { default: "" }
|
|
13886
|
+
},
|
|
13887
|
+
toDOM(node) {
|
|
13888
|
+
return [
|
|
13889
|
+
`${prefix}-text-editor-image-placeholder`,
|
|
13890
|
+
{
|
|
13891
|
+
alt: node.attrs.alt,
|
|
13892
|
+
icon: node.attrs.icon,
|
|
13893
|
+
"error-message": node.attrs.errorMessage,
|
|
13894
|
+
"file-name": node.attrs.fileName
|
|
13895
|
+
}
|
|
13896
|
+
];
|
|
13897
|
+
},
|
|
13898
|
+
parseDOM: [
|
|
13899
|
+
{
|
|
13900
|
+
tag: `${prefix}-text-editor-image-placeholder`,
|
|
13901
|
+
getAttrs(dom) {
|
|
13902
|
+
return {
|
|
13903
|
+
alt: dom.getAttribute("alt"),
|
|
13904
|
+
icon: dom.getAttribute("icon"),
|
|
13905
|
+
errorMessage: dom.getAttribute("error-message"),
|
|
13906
|
+
fileName: dom.getAttribute("file-name")
|
|
13907
|
+
};
|
|
13908
|
+
}
|
|
13909
|
+
}
|
|
13910
|
+
]
|
|
13911
|
+
}
|
|
13912
|
+
},
|
|
13886
13913
|
marks: {
|
|
13887
13914
|
...schema.spec.marks.toObject(),
|
|
13888
13915
|
...customMarks
|
|
13889
13916
|
}
|
|
13890
13917
|
});
|
|
13918
|
+
dynamicSchema();
|
|
13891
13919
|
|
|
13892
13920
|
const NEGATIVE_SELECTION = {
|
|
13893
13921
|
start: -1,
|
|
@@ -13986,6 +14014,16 @@ function convertSelectionToVividFormat({
|
|
|
13986
14014
|
end: to
|
|
13987
14015
|
};
|
|
13988
14016
|
}
|
|
14017
|
+
function getImageErrorNode(schema, file, errorMessage = "Image loading failed") {
|
|
14018
|
+
const nodeType = schema.nodes.imageError;
|
|
14019
|
+
const imageErrorNode = nodeType.create({
|
|
14020
|
+
alt: `inline image from file ${file.name}`,
|
|
14021
|
+
fileName: file.name,
|
|
14022
|
+
icon: file.type.split("/")[1],
|
|
14023
|
+
errorMessage
|
|
14024
|
+
});
|
|
14025
|
+
return imageErrorNode;
|
|
14026
|
+
}
|
|
13989
14027
|
const isEmptyParagraph = (node) => {
|
|
13990
14028
|
return node.type.name === "paragraph" && node.nodeSize === 2;
|
|
13991
14029
|
};
|
|
@@ -14035,7 +14073,9 @@ class ProseMirrorFacade {
|
|
|
14035
14073
|
}
|
|
14036
14074
|
this.#dispatchEvent("change");
|
|
14037
14075
|
};
|
|
14038
|
-
|
|
14076
|
+
#vwcPrefix = "vwc";
|
|
14077
|
+
init(element, vwcPrefix = "vwc") {
|
|
14078
|
+
this.#vwcPrefix = vwcPrefix;
|
|
14039
14079
|
if (!(element instanceof HTMLElement)) {
|
|
14040
14080
|
throw new Error(
|
|
14041
14081
|
"ProseMirror Facade init accepts a valid HTMLElement as its first parameter"
|
|
@@ -14048,7 +14088,7 @@ class ProseMirrorFacade {
|
|
|
14048
14088
|
keymap(baseKeymap)
|
|
14049
14089
|
];
|
|
14050
14090
|
const state = EditorState.create({
|
|
14051
|
-
schema:
|
|
14091
|
+
schema: dynamicSchema(this.#vwcPrefix),
|
|
14052
14092
|
plugins
|
|
14053
14093
|
});
|
|
14054
14094
|
this.#view = new EditorView(element, { state });
|
|
@@ -14069,7 +14109,7 @@ class ProseMirrorFacade {
|
|
|
14069
14109
|
}
|
|
14070
14110
|
replaceContent(content) {
|
|
14071
14111
|
this.#verifyViewInitiation();
|
|
14072
|
-
const parser = DOMParser.fromSchema(
|
|
14112
|
+
const parser = DOMParser.fromSchema(this.#view.state.schema);
|
|
14073
14113
|
const doc = parser.parse(
|
|
14074
14114
|
new window.DOMParser().parseFromString(content, "text/html").body
|
|
14075
14115
|
);
|
|
@@ -14254,7 +14294,8 @@ class ProseMirrorFacade {
|
|
|
14254
14294
|
async addInlineImage({
|
|
14255
14295
|
file,
|
|
14256
14296
|
position,
|
|
14257
|
-
alt
|
|
14297
|
+
alt,
|
|
14298
|
+
error
|
|
14258
14299
|
}) {
|
|
14259
14300
|
this.#verifyViewInitiation();
|
|
14260
14301
|
const reader = new FileReader();
|
|
@@ -14266,7 +14307,7 @@ class ProseMirrorFacade {
|
|
|
14266
14307
|
const { state, dispatch } = this.#view;
|
|
14267
14308
|
const { schema } = state;
|
|
14268
14309
|
const imageAlt = alt ?? `inline image from file ${file.name}`;
|
|
14269
|
-
const imageNode = schema.nodes.image.create({ src, alt: imageAlt });
|
|
14310
|
+
const imageNode = error ? getImageErrorNode(schema, file, error) : schema.nodes.image.create({ src, alt: imageAlt });
|
|
14270
14311
|
let insertPos = position;
|
|
14271
14312
|
if (typeof insertPos !== "number") {
|
|
14272
14313
|
insertPos = state.selection.from;
|
|
@@ -14276,13 +14317,13 @@ class ProseMirrorFacade {
|
|
|
14276
14317
|
}
|
|
14277
14318
|
}
|
|
14278
14319
|
|
|
14279
|
-
var __defProp = Object.defineProperty;
|
|
14280
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
14320
|
+
var __defProp$1 = Object.defineProperty;
|
|
14321
|
+
var __decorateClass$1 = (decorators, target, key, kind) => {
|
|
14281
14322
|
var result = void 0 ;
|
|
14282
14323
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14283
14324
|
if (decorator = decorators[i])
|
|
14284
14325
|
result = (decorator(target, key, result) ) || result;
|
|
14285
|
-
if (result) __defProp(target, key, result);
|
|
14326
|
+
if (result) __defProp$1(target, key, result);
|
|
14286
14327
|
return result;
|
|
14287
14328
|
};
|
|
14288
14329
|
const RichTextEditorTextBlocks = {
|
|
@@ -14420,17 +14461,17 @@ class RichTextEditor extends Localized(VividElement) {
|
|
|
14420
14461
|
}
|
|
14421
14462
|
}
|
|
14422
14463
|
}
|
|
14423
|
-
__decorateClass([
|
|
14464
|
+
__decorateClass$1([
|
|
14424
14465
|
attr({ converter: nullableNumberConverter, attribute: "selection-start" })
|
|
14425
14466
|
], RichTextEditor.prototype, "selectionStart");
|
|
14426
|
-
__decorateClass([
|
|
14467
|
+
__decorateClass$1([
|
|
14427
14468
|
attr({ converter: nullableNumberConverter, attribute: "selection-end" })
|
|
14428
14469
|
], RichTextEditor.prototype, "selectionEnd");
|
|
14429
|
-
__decorateClass([
|
|
14470
|
+
__decorateClass$1([
|
|
14430
14471
|
attr
|
|
14431
14472
|
], RichTextEditor.prototype, "placeholder");
|
|
14432
14473
|
|
|
14433
|
-
const getClasses = (_) => classNames("control");
|
|
14474
|
+
const getClasses$1 = (_) => classNames("control");
|
|
14434
14475
|
const VALID_MENU_ELEMEMENT_SUFFIX = "menubar";
|
|
14435
14476
|
const menuParent = (target) => target.parentElement;
|
|
14436
14477
|
function textBlockSelectedHandler(event) {
|
|
@@ -14458,29 +14499,29 @@ function handleAttachmentsSlotChange(_, { event }) {
|
|
|
14458
14499
|
slotElement.assignedElements().length < 1
|
|
14459
14500
|
);
|
|
14460
14501
|
}
|
|
14461
|
-
function
|
|
14502
|
+
function handleMenubarSlotChange(_, { event }) {
|
|
14462
14503
|
const slot = event.target;
|
|
14463
14504
|
const assignedElements = slot.assignedElements({ flatten: true });
|
|
14464
|
-
const
|
|
14505
|
+
const menubar = assignedElements.find(
|
|
14465
14506
|
(element) => element.tagName.toLowerCase().endsWith(VALID_MENU_ELEMEMENT_SUFFIX)
|
|
14466
14507
|
);
|
|
14467
14508
|
assignedElements.forEach((element) => {
|
|
14468
|
-
if (element ===
|
|
14509
|
+
if (element === menubar) {
|
|
14469
14510
|
element.style.removeProperty("display");
|
|
14470
14511
|
} else {
|
|
14471
14512
|
element.style.display = "none";
|
|
14472
14513
|
}
|
|
14473
14514
|
});
|
|
14474
|
-
if (
|
|
14475
|
-
|
|
14515
|
+
if (menubar) {
|
|
14516
|
+
menubar.addEventListener(
|
|
14476
14517
|
"text-block-selected",
|
|
14477
14518
|
textBlockSelectedHandler
|
|
14478
14519
|
);
|
|
14479
|
-
|
|
14520
|
+
menubar.addEventListener(
|
|
14480
14521
|
"text-decoration-selected",
|
|
14481
14522
|
selectionDecorationSelectedHandler
|
|
14482
14523
|
);
|
|
14483
|
-
|
|
14524
|
+
menubar.addEventListener(
|
|
14484
14525
|
"text-size-selected",
|
|
14485
14526
|
textSizeSelectedHandler
|
|
14486
14527
|
);
|
|
@@ -14504,9 +14545,9 @@ function handleDragLeave(_, { event }) {
|
|
|
14504
14545
|
}
|
|
14505
14546
|
const RichTextEditorTemplate = (context) => {
|
|
14506
14547
|
const dividerTag = context.tagFor(Divider);
|
|
14507
|
-
return html`<template class="${getClasses}">
|
|
14508
|
-
<div id="editor"
|
|
14509
|
-
class="editor"
|
|
14548
|
+
return html`<template class="${getClasses$1}">
|
|
14549
|
+
<div id="editor"
|
|
14550
|
+
class="editor"
|
|
14510
14551
|
@drop="${handleFileDrop}"
|
|
14511
14552
|
@dragenter="${handleDragEnter}"
|
|
14512
14553
|
@dragleave="${handleDragLeave}"
|
|
@@ -14521,18 +14562,94 @@ const RichTextEditorTemplate = (context) => {
|
|
|
14521
14562
|
</slot>
|
|
14522
14563
|
</div>
|
|
14523
14564
|
</div>
|
|
14524
|
-
<slot name="menu-bar"
|
|
14525
|
-
@slotchange="${
|
|
14565
|
+
<slot name="menu-bar"
|
|
14566
|
+
@slotchange="${handleMenubarSlotChange}"></slot>
|
|
14526
14567
|
</template>`;
|
|
14527
14568
|
};
|
|
14528
14569
|
|
|
14570
|
+
const styles = ":host{white-space:normal}.image-placeholder{display:flex;width:250px;height:64px;box-sizing:border-box;align-items:center;padding:16px;border:1px solid var(--vvd-color-neutral-200);border-radius:12px;background-color:var(--vvd-color-canvas);gap:16px}.icon{display:flex;width:40px;height:40px;box-sizing:border-box;flex-shrink:0;align-items:center;justify-content:center;border-radius:8px;background-color:color-mix(in srgb,var(--vvd-color-neutral-950),transparent 90%);color:var(--vvd-color-neutral-600)}.info{display:flex;flex-direction:column;min-inline-size:0}.filename{display:flex;overflow:hidden;width:100%;max-width:220px;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-condensed-bold);white-space:nowrap}.name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis}.suffix{flex:0 0 auto;margin-left:4px}.error{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed);gap:6px}";
|
|
14571
|
+
|
|
14572
|
+
var __defProp = Object.defineProperty;
|
|
14573
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
14574
|
+
var result = void 0 ;
|
|
14575
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14576
|
+
if (decorator = decorators[i])
|
|
14577
|
+
result = (decorator(target, key, result) ) || result;
|
|
14578
|
+
if (result) __defProp(target, key, result);
|
|
14579
|
+
return result;
|
|
14580
|
+
};
|
|
14581
|
+
class ImagePlaceholder extends VividElement {
|
|
14582
|
+
}
|
|
14583
|
+
__decorateClass([
|
|
14584
|
+
attr({ attribute: "file-name" })
|
|
14585
|
+
], ImagePlaceholder.prototype, "fileName");
|
|
14586
|
+
__decorateClass([
|
|
14587
|
+
attr({ attribute: "size" })
|
|
14588
|
+
], ImagePlaceholder.prototype, "size");
|
|
14589
|
+
__decorateClass([
|
|
14590
|
+
attr({ attribute: "error-message" })
|
|
14591
|
+
], ImagePlaceholder.prototype, "errorMessage");
|
|
14592
|
+
__decorateClass([
|
|
14593
|
+
attr({ attribute: "icon" })
|
|
14594
|
+
], ImagePlaceholder.prototype, "icon");
|
|
14595
|
+
|
|
14596
|
+
const getClasses = (_) => classNames("base");
|
|
14597
|
+
const getIconName = ({ icon }) => {
|
|
14598
|
+
if (!icon) {
|
|
14599
|
+
return "clear-file-solid";
|
|
14600
|
+
}
|
|
14601
|
+
return `file-${icon}-solid`;
|
|
14602
|
+
};
|
|
14603
|
+
const getFileSuffix = (x) => {
|
|
14604
|
+
return x.fileName?.split(".").pop() || "";
|
|
14605
|
+
};
|
|
14606
|
+
const getFileName = (x) => {
|
|
14607
|
+
return x.fileName?.replace(/\.[^/.]+$/, "") || "";
|
|
14608
|
+
};
|
|
14609
|
+
const ImagePlaceholderTemplate = (context) => {
|
|
14610
|
+
const iconTag = context.tagFor(Icon);
|
|
14611
|
+
return html`<template class="${getClasses}">
|
|
14612
|
+
<div class="image-placeholder">
|
|
14613
|
+
<div class="icon">
|
|
14614
|
+
<${iconTag} name="${getIconName}" size="-5"></${iconTag}>
|
|
14615
|
+
</div>
|
|
14616
|
+
<div class="info">
|
|
14617
|
+
<div class="filename" title="${(x) => x.fileName}">
|
|
14618
|
+
<div class="name">${getFileName}</div>
|
|
14619
|
+
<div class="suffix">${getFileSuffix}</div>
|
|
14620
|
+
</div>
|
|
14621
|
+
${when(
|
|
14622
|
+
(x) => x.errorMessage,
|
|
14623
|
+
html`<div class="error">
|
|
14624
|
+
<span class="error-icon"><${iconTag} name="error-solid" size="-6"></${iconTag}></span>
|
|
14625
|
+
<span class="error-text">${(x) => x.errorMessage}</span>
|
|
14626
|
+
</div>`
|
|
14627
|
+
)}
|
|
14628
|
+
</div>
|
|
14629
|
+
</div>
|
|
14630
|
+
</template>`;
|
|
14631
|
+
};
|
|
14632
|
+
|
|
14633
|
+
const imagePlaceholderDefinition = defineVividComponent(
|
|
14634
|
+
"text-editor-image-placeholder",
|
|
14635
|
+
ImagePlaceholder,
|
|
14636
|
+
ImagePlaceholderTemplate,
|
|
14637
|
+
[iconDefinition],
|
|
14638
|
+
{
|
|
14639
|
+
styles,
|
|
14640
|
+
shadowOptions: {
|
|
14641
|
+
delegatesFocus: true
|
|
14642
|
+
}
|
|
14643
|
+
}
|
|
14644
|
+
);
|
|
14645
|
+
|
|
14529
14646
|
const richTextEditorDefinition = defineVividComponent(
|
|
14530
14647
|
"rich-text-editor",
|
|
14531
14648
|
RichTextEditor,
|
|
14532
14649
|
RichTextEditorTemplate,
|
|
14533
|
-
[
|
|
14650
|
+
[menubarDefinition, dividerDefinition, imagePlaceholderDefinition],
|
|
14534
14651
|
{
|
|
14535
|
-
styles: styles$
|
|
14652
|
+
styles: styles$2,
|
|
14536
14653
|
shadowOptions: {
|
|
14537
14654
|
delegatesFocus: true
|
|
14538
14655
|
}
|
package/shared/definition45.cjs
CHANGED
|
@@ -21,9 +21,9 @@ const slotted = require('./slotted.cjs');
|
|
|
21
21
|
const classNames = require('./class-names.cjs');
|
|
22
22
|
const repeat = require('./repeat.cjs');
|
|
23
23
|
|
|
24
|
-
const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.fieldset:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.fieldset:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}.fieldset:focus-within{box-shadow:0 0 0 4px color-mix(in srgb,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}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:min(100px,40%);outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.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}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
|
|
24
|
+
const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.fieldset:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.fieldset:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}@supports selector(:has(*)){.fieldset:not(.has-highlighted-option):has(input:focus){box-shadow:0 0 0 4px color-mix(in srgb,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}}@supports not selector(:has(*)){.fieldset:not(.has-highlighted-option):focus-within{box-shadow:0 0 0 4px color-mix(in srgb,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}}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:min(100px,40%);outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.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}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}::slotted([data-vvd-component=option][data-highlighted]){border-radius:8px;box-shadow:0 0 0 4px color-mix(in srgb,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}";
|
|
25
25
|
|
|
26
|
-
const optionTagStyles = ".base.connotation-cta{--_connotation-color-contrast: var(--vvd-option-tag-cta-contrast, var(--vvd-color-cta-800))}.base:not(.connotation-cta){--_connotation-color-contrast: var(--vvd-option-tag-accent-contrast, var(--vvd-color-neutral-800))}.base{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;background-color:var(--fill-color);block-size:calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)));box-shadow:inset 0 0 0 1px var(--outline-color);color:var(--text-color);column-gap:8px;font:var(--vvd-typography-base-bold);max-inline-size:100%;padding-inline:8px;user-select:none;vertical-align:middle}.base:not(.disabled){--text-color: var(--_connotation-color-contrast);--fill-color: color-mix( in srgb, var(--_connotation-color-contrast), transparent 87.5% )
|
|
26
|
+
const optionTagStyles = ".base.connotation-cta{--_connotation-color-contrast: var(--vvd-option-tag-cta-contrast, var(--vvd-color-cta-800))}.base:not(.connotation-cta){--_connotation-color-contrast: var(--vvd-option-tag-accent-contrast, var(--vvd-color-neutral-800))}.base{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;background-color:var(--fill-color);block-size:calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)));box-shadow:inset 0 0 0 1px var(--outline-color);color:var(--text-color);column-gap:8px;font:var(--vvd-typography-base-bold);max-inline-size:100%;padding-inline:8px;user-select:none;vertical-align:middle}.base:not(.disabled){--text-color: var(--_connotation-color-contrast);--fill-color: var(--_connotation-color-soft);--outline-color: transparent}@supports (background-color: color-mix(in srgb,black 50%,white)){.base:not(.disabled){--fill-color: color-mix( in srgb, var(--_connotation-color-contrast), transparent 87.5% )}}.base.disabled{--text-color: var(--vvd-color-neutral-300);--fill-color: var(--vvd-color-neutral-200);--outline-color: transparent}@supports (background-color: color-mix(in srgb,black 50%,white)){.base.disabled{--fill-color: color-mix( in srgb, var(--vvd-color-neutral-800), transparent 87.5% )}}.base:not(.shape-pill){border-radius:4px}.base.shape-pill{border-radius:16px}.label{overflow:hidden;max-inline-size:100%;text-overflow:ellipsis;white-space:nowrap}slot[name=icon]{font-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5);line-height:1}.icon-placeholder{inline-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5)}.remove-button{display:flex;align-items:center;border-radius:inherit;cursor:pointer;outline:none}.disabled .remove-button{pointer-events:none}.remove-button:focus-visible:before{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,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));position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}";
|
|
27
27
|
|
|
28
28
|
var __defProp$1 = Object.defineProperty;
|
|
29
29
|
var __decorateClass$1 = (decorators, target, key, kind) => {
|
|
@@ -451,7 +451,9 @@ class SearchableSelect extends mixins.WithFeedback(
|
|
|
451
451
|
}
|
|
452
452
|
#transitionHighlightedOptionTo(index) {
|
|
453
453
|
if (typeof this._highlightedOptionIndex === "number") {
|
|
454
|
-
this._filteredEnabledOptions[this._highlightedOptionIndex]
|
|
454
|
+
const prevOption = this._filteredEnabledOptions[this._highlightedOptionIndex];
|
|
455
|
+
prevOption._highlighted = false;
|
|
456
|
+
prevOption.removeAttribute("data-highlighted");
|
|
455
457
|
}
|
|
456
458
|
if (typeof index === "number") {
|
|
457
459
|
if (!this._filteredEnabledOptions.length) {
|
|
@@ -467,6 +469,7 @@ class SearchableSelect extends mixins.WithFeedback(
|
|
|
467
469
|
if (typeof this._highlightedOptionIndex === "number") {
|
|
468
470
|
const highlightedOption = this._filteredEnabledOptions[this._highlightedOptionIndex];
|
|
469
471
|
highlightedOption._highlighted = true;
|
|
472
|
+
highlightedOption.setAttribute("data-highlighted", "");
|
|
470
473
|
scrollIntoView.scrollIntoView(highlightedOption, this._listbox, "nearest");
|
|
471
474
|
this._changeDescription = this.locale.searchableSelect.optionFocusedMessage(
|
|
472
475
|
highlightedOption.text,
|
|
@@ -541,7 +544,10 @@ class SearchableSelect extends mixins.WithFeedback(
|
|
|
541
544
|
return this.disabled || option.disabled;
|
|
542
545
|
}
|
|
543
546
|
#textForValue(value) {
|
|
544
|
-
|
|
547
|
+
const option = this._slottedOptions?.find(
|
|
548
|
+
(option2) => option2.value === value
|
|
549
|
+
);
|
|
550
|
+
return option?.label;
|
|
545
551
|
}
|
|
546
552
|
/**
|
|
547
553
|
* @internal
|
|
@@ -968,7 +974,8 @@ const getStateClasses = (x) => classNames.classNames(
|
|
|
968
974
|
[`appearance-${x.appearance}`, Boolean(x.appearance)],
|
|
969
975
|
[`shape-${x.shape}`, Boolean(x.shape)],
|
|
970
976
|
["error", Boolean(x.errorValidationMessage)],
|
|
971
|
-
["success", !!x.successText]
|
|
977
|
+
["success", !!x.successText],
|
|
978
|
+
["has-highlighted-option", x._highlightedOptionIndex !== null]
|
|
972
979
|
);
|
|
973
980
|
function renderLabel() {
|
|
974
981
|
return vividElement.html`
|