@verbb/plugin-kit-web 2.0.16 → 2.0.17
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 +16 -0
- package/README.md +3 -3
- package/custom-elements.json +19620 -19410
- package/dist/chunks/{pk-autocomplete-kOT0Zlld.js → pk-autocomplete-IFL-u-RF.js} +2 -2
- package/dist/chunks/{pk-autocomplete-kOT0Zlld.js.map → pk-autocomplete-IFL-u-RF.js.map} +1 -1
- package/dist/chunks/{pk-combobox-Dn7UJ_CV.js → pk-combobox-CL9En0J-.js} +2 -2
- package/dist/chunks/{pk-combobox-Dn7UJ_CV.js.map → pk-combobox-CL9En0J-.js.map} +1 -1
- package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -1
- package/dist/chunks/{pk-date-picker-DfIvmoZ1.js → pk-date-picker-BEAd4Ngl.js} +2 -2
- package/dist/chunks/{pk-date-picker-DfIvmoZ1.js.map → pk-date-picker-BEAd4Ngl.js.map} +1 -1
- package/dist/chunks/pk-dialog-VMQqLW1f.js.map +1 -1
- package/dist/chunks/{pk-dropdown-item-BZQS87U0.js → pk-dropdown-item-D9OaG5o-.js} +8 -4
- package/dist/chunks/pk-dropdown-item-D9OaG5o-.js.map +1 -0
- package/dist/chunks/{pk-dropdown-menu-D60p2-9X.js → pk-dropdown-menu-DW1wI8xQ.js} +5 -3
- package/dist/chunks/pk-dropdown-menu-DW1wI8xQ.js.map +1 -0
- package/dist/chunks/{pk-editable-table-BQ47MXpu.js → pk-editable-table-BoqfveXO.js} +7 -7
- package/dist/chunks/pk-editable-table-BoqfveXO.js.map +1 -0
- package/dist/chunks/{pk-image-browser-BXFDfch3.js → pk-image-browser-DwiCFOIG.js} +3 -3
- package/dist/chunks/pk-image-browser-DwiCFOIG.js.map +1 -0
- package/dist/chunks/pk-input-CF_icEtR.js.map +1 -1
- package/dist/chunks/{pk-input-group-CWdoVhkH.js → pk-input-group-BLqKPnfc.js} +2 -2
- package/dist/chunks/{pk-input-group-CWdoVhkH.js.map → pk-input-group-BLqKPnfc.js.map} +1 -1
- package/dist/chunks/{pk-popover-KSIOYlbs.js → pk-popover-D3jkHfwB.js} +2 -2
- package/dist/chunks/pk-popover-D3jkHfwB.js.map +1 -0
- package/dist/chunks/{pk-popup-B9AgBC2V.js → pk-popup-B65tZMQH.js} +23 -1
- package/dist/chunks/pk-popup-B65tZMQH.js.map +1 -0
- package/dist/chunks/{pk-select-DQtORz-v.js → pk-select-CdQdhnZN.js} +2 -2
- package/dist/chunks/{pk-select-DQtORz-v.js.map → pk-select-CdQdhnZN.js.map} +1 -1
- package/dist/chunks/{pk-time-picker-DLUBYLFo.js → pk-time-picker-CebRqydV.js} +2 -2
- package/dist/chunks/{pk-time-picker-DLUBYLFo.js.map → pk-time-picker-CebRqydV.js.map} +1 -1
- package/dist/chunks/{pk-tiptap-content-BwkqYVJb.js → pk-tiptap-content-CL8smjGi.js} +5 -2
- package/dist/chunks/{pk-tiptap-content-BwkqYVJb.js.map → pk-tiptap-content-CL8smjGi.js.map} +1 -1
- package/dist/chunks/{pk-tiptap-editor-De8UUTis.js → pk-tiptap-editor-CTz-yfHL.js} +327 -11
- package/dist/chunks/pk-tiptap-editor-CTz-yfHL.js.map +1 -0
- package/dist/chunks/{pk-tooltip-Cmmc0916.js → pk-tooltip--QBV6puX.js} +2 -2
- package/dist/chunks/{pk-tooltip-Cmmc0916.js.map → pk-tooltip--QBV6puX.js.map} +1 -1
- package/dist/chunks/{register-posLyX3U.js → register-aJw-9RWi.js} +14 -14
- package/dist/chunks/{register-posLyX3U.js.map → register-aJw-9RWi.js.map} +1 -1
- package/dist/components/autocomplete/pk-autocomplete.js +1 -1
- package/dist/components/autocomplete.js +1 -1
- package/dist/components/combobox/pk-combobox.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/connect/pk-connect-oauth.d.ts +1 -1
- package/dist/components/connect/pk-connect-oauth.js.map +1 -1
- package/dist/components/copy-button/pk-copy-button.d.ts +1 -1
- package/dist/components/date-picker/pk-date-picker.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/dialog/pk-dialog.d.ts +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.d.ts +3 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.styles.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.styles.d.ts.map +1 -1
- package/dist/components/dropdown-menu.js +2 -2
- package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
- package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
- package/dist/components/editable-table/pk-editable-table.js +1 -1
- package/dist/components/editable-table.js +1 -1
- package/dist/components/image-browser/pk-image-browser.d.ts +1 -1
- package/dist/components/image-browser/pk-image-browser.js +1 -1
- package/dist/components/image-browser.js +1 -1
- package/dist/components/input/pk-input.d.ts +2 -2
- package/dist/components/input-group/pk-input-group.d.ts +2 -2
- package/dist/components/input-group/pk-input-group.d.ts.map +1 -1
- package/dist/components/input-group/pk-input-group.js +1 -1
- package/dist/components/input-group.js +1 -1
- package/dist/components/popover/pk-popover.d.ts +2 -2
- package/dist/components/popover/pk-popover.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/popup/pk-popup.d.ts +4 -0
- package/dist/components/popup/pk-popup.d.ts.map +1 -1
- package/dist/components/popup/pk-popup.js +1 -1
- package/dist/components/popup.js +1 -1
- package/dist/components/select/pk-select.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/time-picker/pk-time-picker.js +1 -1
- package/dist/components/time-picker.js +1 -1
- package/dist/components/tiptap/pk-tiptap-content.d.ts.map +1 -1
- package/dist/components/tiptap/pk-tiptap-content.js +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.d.ts +11 -1
- package/dist/components/tiptap/pk-tiptap-editor.d.ts.map +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.styles.d.ts.map +1 -1
- package/dist/components/tiptap/tiptap-toolbar.d.ts +1 -0
- package/dist/components/tiptap/tiptap-toolbar.d.ts.map +1 -1
- package/dist/components/tiptap-content.js +1 -1
- package/dist/components/tiptap-editor.js +1 -1
- package/dist/components/tooltip/pk-tooltip.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +14 -14
- package/dist/register.js +14 -14
- package/dist-loader/chunks/{option-filter-Z7bomRrK.js → option-filter-Bc5aNNT0.js} +1 -1
- package/dist-loader/chunks/{pk-button-dngp-vOd.js → pk-button-saBDszJV.js} +1 -1
- package/dist-loader/chunks/{pk-calendar-BE4HRfCq.js → pk-calendar-BrF8i3dW.js} +2 -2
- package/dist-loader/chunks/{pk-combobox-DMBKXPLB.js → pk-combobox-Cpx0w1KV.js} +6 -6
- package/dist-loader/chunks/{pk-date-picker-wntQmeIM.js → pk-date-picker-DEoiTOxN.js} +5 -5
- package/dist-loader/chunks/{pk-dialog-B6lzsRur.js → pk-dialog-C6aaPokv.js} +2 -2
- package/dist-loader/chunks/{pk-dropdown-item-DJ5TeF1r.js → pk-dropdown-item-D8RrwjxL.js} +9 -5
- package/dist-loader/chunks/pk-dropdown-label-Cg32UgRe.js +51 -0
- package/dist-loader/chunks/{pk-dropdown-menu-B87bsdlI.js → pk-dropdown-menu-CAHCltlX.js} +4 -2
- package/dist-loader/chunks/{pk-field-D_SNOJpl.js → pk-field-V7JOy26T.js} +2 -2
- package/dist-loader/chunks/{pk-icon-B5ob3JdK.js → pk-icon-Bph-EBqp.js} +1 -1
- package/dist-loader/chunks/{pk-option-Cc6QWw-0.js → pk-option-BrDMERSl.js} +2 -2
- package/dist-loader/chunks/{pk-popup-BooGjXgH.js → pk-popup-CrxxR-Hb.js} +23 -1
- package/dist-loader/chunks/{pk-select-BG8qPsBd.js → pk-select-Dok-JdSe.js} +5 -5
- package/dist-loader/chunks/{pk-time-picker-CDVFNhN7.js → pk-time-picker-h5Wgd4a_.js} +4 -4
- package/dist-loader/chunks/{pk-tooltip-BS2dNLOS.js → pk-tooltip-Dd_Q0Bn5.js} +1 -1
- package/dist-loader/chunks/{render-BKfL_WRl.js → render-Bnzcxfss.js} +1 -1
- package/dist-loader/chunks/{svg-BiAlXtCn.js → svg-Bz-bXZn7.js} +7 -1
- package/dist-loader/chunks/{tiptap-Db7MTUH1.js → tiptap-CgXkiK8d.js} +283 -13
- package/dist-loader/chunks/{tiptap.styles-BFGP4eTV.js → tiptap.styles-C0E1NpSx.js} +222 -3
- package/dist-loader/components/autocomplete/autocomplete.js +6 -6
- package/dist-loader/components/button/button.js +1 -1
- package/dist-loader/components/calendar/calendar.js +1 -1
- package/dist-loader/components/code-editor/code-editor.js +5 -5
- package/dist-loader/components/combobox/combobox.js +1 -1
- package/dist-loader/components/connect/connect-oauth.js +3 -3
- package/dist-loader/components/connect/connect.js +5 -5
- package/dist-loader/components/copy-button/copy-button.js +3 -3
- package/dist-loader/components/date-picker/date-picker.js +1 -1
- package/dist-loader/components/dialog/dialog.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -50
- package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
- package/dist-loader/components/editable-table/editable-table.js +11 -11
- package/dist-loader/components/field/field.js +1 -1
- package/dist-loader/components/icon/icon.js +2 -2
- package/dist-loader/components/image-browser/image-browser.js +5 -5
- package/dist-loader/components/input-group/input-group.js +1 -1
- package/dist-loader/components/lightswitch/lightswitch.js +1 -1
- package/dist-loader/components/popover/popover.js +2 -2
- package/dist-loader/components/popup/popup.js +1 -1
- package/dist-loader/components/select/option.js +1 -1
- package/dist-loader/components/select/select.js +1 -1
- package/dist-loader/components/status/status.js +1 -1
- package/dist-loader/components/time-picker/time-picker.js +1 -1
- package/dist-loader/components/tiptap/tiptap-content.js +6 -3
- package/dist-loader/components/tiptap/tiptap-editor.js +332 -16
- package/dist-loader/components/tiptap/tiptap-input.js +2 -2
- package/dist-loader/components/tooltip/tooltip.js +1 -1
- package/package.json +11 -8
- package/dist/chunks/pk-dropdown-item-BZQS87U0.js.map +0 -1
- package/dist/chunks/pk-dropdown-menu-D60p2-9X.js.map +0 -1
- package/dist/chunks/pk-editable-table-BQ47MXpu.js.map +0 -1
- package/dist/chunks/pk-image-browser-BXFDfch3.js.map +0 -1
- package/dist/chunks/pk-popover-KSIOYlbs.js.map +0 -1
- package/dist/chunks/pk-popup-B9AgBC2V.js.map +0 -1
- package/dist/chunks/pk-tiptap-editor-De8UUTis.js.map +0 -1
- /package/dist-loader/chunks/{floating-ui-DU6GNott.js → floating-ui-Cj0imr6d.js} +0 -0
- /package/dist-loader/chunks/{pk-connect.styles-Bfgwu0VH.js → pk-connect.styles-k61snd3X.js} +0 -0
- /package/dist-loader/chunks/{pk-lightswitch-DRxY8511.js → pk-lightswitch-m23Cy3_D.js} +0 -0
- /package/dist-loader/chunks/{pk-status-D3ArH2ui.js → pk-status-D2g_77m_.js} +0 -0
- /package/dist-loader/chunks/{popup-pointer-caPc8kwB.js → popup-pointer-Ck28WdVP.js} +0 -0
- /package/dist-loader/chunks/{sync-listbox-separators-Dk_E_IVa.js → sync-listbox-separators-Ch5krDUs.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { l as n, m as i, p as b, s as e, u as customElement } from "../../chunks/lit-DpLik9Rf.js";
|
|
2
2
|
import { c as __decorate, l as PkElement } from "../../chunks/pk-base-CyzwylQ7.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { A as Editor } from "../../chunks/tiptap-CgXkiK8d.js";
|
|
4
|
+
import { i as createVariableTagDomNodeView, j as createTiptapExtensions, k as valueToContent, t as tiptapContentProseMirrorStyles } from "../../chunks/tiptap.styles-C0E1NpSx.js";
|
|
5
5
|
//#region src/components/tiptap/pk-tiptap-content.styles.ts
|
|
6
6
|
var pkTiptapContentStyles = i`
|
|
7
7
|
@layer pk-component {
|
|
@@ -47,7 +47,10 @@ var PkTiptapContent = class PkTiptapContent extends PkElement {
|
|
|
47
47
|
mountEditor() {
|
|
48
48
|
this.editor = new Editor({
|
|
49
49
|
element: this.editorMount,
|
|
50
|
-
extensions: createTiptapExtensions({
|
|
50
|
+
extensions: createTiptapExtensions({
|
|
51
|
+
variableTagNodeView: createVariableTagDomNodeView(),
|
|
52
|
+
surface: "content"
|
|
53
|
+
}),
|
|
51
54
|
content: valueToContent(this.value),
|
|
52
55
|
editable: false
|
|
53
56
|
});
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { n as uniqueId } from "../../chunks/pk-a11y-CjB4-U-R.js";
|
|
2
2
|
import { a as o, c as r, f as A, l as n, m as i, p as b, s as e, u as customElement } from "../../chunks/lit-DpLik9Rf.js";
|
|
3
3
|
import { c as __decorate, i as PkFormAssociatedElement, n as formControlStyles } from "../../chunks/pk-base-CyzwylQ7.js";
|
|
4
|
-
import { A as heading, D as h4, E as h3, F as link, G as
|
|
5
|
-
import "../../chunks/pk-button-
|
|
4
|
+
import { A as heading, D as h4, E as h3, F as link, G as superscript, H as smallCaps, I as listOl, J as triangleExclamation, K as table, L as listUl, N as italic, O as h5, R as minus, T as h2, U as strikethrough, V as quoteRight, W as subscript, Y as underline, a as alignRight, c as arrowRotateRight, d as bold, f as bracketsCurly, h as chevronDown, i as alignLeft, j as highlighter, k as h6, n as alignCenter, q as textSlash, r as alignJustify, s as arrowRotateLeft, w as h1, x as fileDashedLine, y as code, z as paragraph } from "../../chunks/svg-Bz-bXZn7.js";
|
|
5
|
+
import "../../chunks/pk-button-saBDszJV.js";
|
|
6
6
|
import { t as MirrorValidator } from "../../chunks/mirror-validator-C5XrXPaq.js";
|
|
7
7
|
import "../../chunks/pk-checkbox-B3d4nkBx.js";
|
|
8
8
|
import "../../chunks/pk-input-BhU0PiCk.js";
|
|
9
|
-
import {
|
|
10
|
-
import { A as
|
|
11
|
-
import { n as renderIconHtml } from "../../chunks/render-
|
|
12
|
-
import "../../chunks/pk-field-
|
|
13
|
-
import "../../chunks/pk-dialog-
|
|
14
|
-
import "../../chunks/pk-dropdown-item-
|
|
15
|
-
import "../../chunks/pk-dropdown-
|
|
9
|
+
import { A as Editor, N as getMarkRange, P as posToDOMRect } from "../../chunks/tiptap-CgXkiK8d.js";
|
|
10
|
+
import { A as resolveTiptapTextStyleToolbarConfig, D as getFatalTiptapContentError, N as getRegisteredTiptapToolbarControl, O as normalizeContentArray, S as openCraftElementLinkSelector, _ as getLinkOpenInNewTab, a as getToolbarGroupDefaultIcon, b as getCraftLinkOptions, c as isFormattingToolbarPreset, d as parseToolbarConfig, f as runToolbarButton, g as getLinkEditState, h as applyLinkToEditor, i as createVariableTagDomNodeView, j as createTiptapExtensions, k as valueToContent, l as isHeadingsOnlyToolbarPreset, m as isTiptapButtonActive, o as getToolbarGroupMenuItems, p as toolbarIncludesButton, r as tiptapProseMirrorStyles, s as getToolbarGroupTriggerState, u as isToolbarButtonActive, v as getSelectedText, x as getLinkOptionsElementSiteId, y as unsetLinkFromEditor } from "../../chunks/tiptap.styles-C0E1NpSx.js";
|
|
11
|
+
import { n as renderIconHtml } from "../../chunks/render-Bnzcxfss.js";
|
|
12
|
+
import "../../chunks/pk-field-V7JOy26T.js";
|
|
13
|
+
import "../../chunks/pk-dialog-C6aaPokv.js";
|
|
14
|
+
import "../../chunks/pk-dropdown-item-D8RrwjxL.js";
|
|
15
|
+
import "../../chunks/pk-dropdown-label-Cg32UgRe.js";
|
|
16
|
+
import "../../chunks/pk-dropdown-menu-CAHCltlX.js";
|
|
16
17
|
import "../dropdown-menu/dropdown-separator.js";
|
|
17
|
-
import "../../chunks/pk-tooltip-
|
|
18
|
+
import "../../chunks/pk-tooltip-Dd_Q0Bn5.js";
|
|
18
19
|
//#region src/components/tiptap/tiptap-editor-host.ts
|
|
19
20
|
function serializeTiptapDocumentContent(content) {
|
|
20
21
|
return JSON.stringify(normalizeContentArray(content));
|
|
@@ -117,6 +118,7 @@ var TOOLBAR_ICONS = {
|
|
|
117
118
|
strikethrough: renderIconHtml(strikethrough),
|
|
118
119
|
subscript: renderIconHtml(subscript),
|
|
119
120
|
superscript: renderIconHtml(superscript),
|
|
121
|
+
"small-caps": renderIconHtml(smallCaps),
|
|
120
122
|
code: renderIconHtml(bracketsCurly),
|
|
121
123
|
"code-block": renderIconHtml(code),
|
|
122
124
|
highlight: renderIconHtml(highlighter),
|
|
@@ -150,6 +152,11 @@ var TOOLBAR_LABELS = {
|
|
|
150
152
|
strikethrough: "Strikethrough",
|
|
151
153
|
subscript: "Subscript",
|
|
152
154
|
superscript: "Superscript",
|
|
155
|
+
"small-caps": "Small caps",
|
|
156
|
+
"font-family": "Font family",
|
|
157
|
+
"font-size": "Font size",
|
|
158
|
+
"text-color": "Text and background color",
|
|
159
|
+
"line-height": "Line height",
|
|
153
160
|
code: "Inline code",
|
|
154
161
|
"code-block": "Code block",
|
|
155
162
|
highlight: "Highlight",
|
|
@@ -176,11 +183,15 @@ var TOOLBAR_LABELS = {
|
|
|
176
183
|
redo: "Redo"
|
|
177
184
|
};
|
|
178
185
|
function getToolbarMenuItemLabel(buttonName) {
|
|
179
|
-
return TOOLBAR_LABELS[buttonName] ?? buttonName;
|
|
186
|
+
return TOOLBAR_LABELS[buttonName] ?? getRegisteredTiptapToolbarControl(buttonName)?.label ?? buttonName;
|
|
187
|
+
}
|
|
188
|
+
function getToolbarButtonIcon(buttonName) {
|
|
189
|
+
const registeredIcon = getRegisteredTiptapToolbarControl(buttonName)?.icon;
|
|
190
|
+
return TOOLBAR_ICONS[buttonName] ?? (registeredIcon ? renderIconHtml(registeredIcon) : void 0);
|
|
180
191
|
}
|
|
181
192
|
/** Prefix icon for `pk-dropdown-item` — SVG must carry `slot="prefix"` directly. */
|
|
182
193
|
function createToolbarPrefixIcon(buttonName) {
|
|
183
|
-
const iconHtml =
|
|
194
|
+
const iconHtml = getToolbarButtonIcon(buttonName);
|
|
184
195
|
if (!iconHtml) return null;
|
|
185
196
|
const template = document.createElement("template");
|
|
186
197
|
template.innerHTML = iconHtml.trim();
|
|
@@ -311,6 +322,136 @@ var pkTiptapEditorStyles = i`
|
|
|
311
322
|
letter-spacing: 0.02em;
|
|
312
323
|
}
|
|
313
324
|
|
|
325
|
+
.toolbar-btn--text-style {
|
|
326
|
+
max-width: 9rem;
|
|
327
|
+
padding-inline: 0.5rem;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.toolbar-btn__text-style-value {
|
|
331
|
+
overflow: hidden;
|
|
332
|
+
font-size: var(--pk-font-size-xs);
|
|
333
|
+
line-height: 1;
|
|
334
|
+
text-overflow: ellipsis;
|
|
335
|
+
white-space: nowrap;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.toolbar-btn--color .toolbar-btn__text-style-value {
|
|
339
|
+
min-width: 1rem;
|
|
340
|
+
border-bottom: 2px solid var(--text-style-trigger-color, currentColor);
|
|
341
|
+
color: var(--text-style-trigger-color, currentColor);
|
|
342
|
+
font-weight: 700;
|
|
343
|
+
text-align: center;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
pk-dropdown-menu.text-style-palette::part(panel) {
|
|
347
|
+
display: grid;
|
|
348
|
+
grid-template-columns: repeat(5, 2rem);
|
|
349
|
+
gap: 0.625rem 0.75rem;
|
|
350
|
+
width: max-content;
|
|
351
|
+
min-width: 0;
|
|
352
|
+
padding: 1rem;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.text-style-palette__label {
|
|
356
|
+
grid-column: 1 / -1;
|
|
357
|
+
color: var(--pk-color-gray-900);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.text-style-palette__label::part(label) {
|
|
361
|
+
padding: 0 0 0.125rem;
|
|
362
|
+
font-size: var(--pk-font-size-base);
|
|
363
|
+
font-weight: 600;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.text-style-palette__label--highlight {
|
|
367
|
+
margin-top: 0.375rem;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.text-style-palette__option {
|
|
371
|
+
width: 2rem;
|
|
372
|
+
height: 2rem;
|
|
373
|
+
--pk-dropdown-item-gap: 0;
|
|
374
|
+
--pk-dropdown-item-icon-size: 1.625rem;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.text-style-palette__option::part(item) {
|
|
378
|
+
justify-content: center;
|
|
379
|
+
width: 2rem;
|
|
380
|
+
height: 2rem;
|
|
381
|
+
min-height: 0;
|
|
382
|
+
padding: 0;
|
|
383
|
+
border-radius: 50%;
|
|
384
|
+
background: transparent;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.text-style-palette__option:hover::part(item),
|
|
388
|
+
.text-style-palette__option:focus-within::part(item),
|
|
389
|
+
.text-style-palette__option[data-highlighted]::part(item),
|
|
390
|
+
.text-style-palette__option[checked]::part(item) {
|
|
391
|
+
background: transparent;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.text-style-palette__option::part(prefix) {
|
|
395
|
+
width: 1.625rem;
|
|
396
|
+
height: 1.625rem;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.text-style-palette__option::part(label) {
|
|
400
|
+
position: absolute;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.text-style-palette__option::part(check) {
|
|
404
|
+
display: none;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.text-style-palette__swatch {
|
|
408
|
+
display: inline-flex;
|
|
409
|
+
align-items: center;
|
|
410
|
+
justify-content: center;
|
|
411
|
+
width: 1.625rem;
|
|
412
|
+
height: 1.625rem;
|
|
413
|
+
box-sizing: border-box;
|
|
414
|
+
border: 1px solid rgba(15, 23, 42, 0.16);
|
|
415
|
+
border-radius: 50%;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/* Keep the state treatment concentric with the slotted swatch. The
|
|
419
|
+
dropdown item's shadow button is wider than its prefix in some hosts. */
|
|
420
|
+
.text-style-palette__option:hover .text-style-palette__swatch,
|
|
421
|
+
.text-style-palette__option:focus-within .text-style-palette__swatch,
|
|
422
|
+
.text-style-palette__option[data-highlighted] .text-style-palette__swatch,
|
|
423
|
+
.text-style-palette__option[checked] .text-style-palette__swatch {
|
|
424
|
+
box-shadow: 0 0 0 0.25rem var(--pk-color-slate-100);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
.text-style-palette__swatch--text {
|
|
428
|
+
border-color: var(--text-style-swatch, rgba(15, 23, 42, 0.35));
|
|
429
|
+
color: var(--text-style-swatch, #1f2937);
|
|
430
|
+
font-size: var(--pk-font-size-base);
|
|
431
|
+
font-weight: 500;
|
|
432
|
+
line-height: 1;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.text-style-palette__swatch--highlight {
|
|
436
|
+
background: var(--text-style-swatch, #fff);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.text-style-palette__accessible-label {
|
|
440
|
+
position: absolute;
|
|
441
|
+
width: 1px;
|
|
442
|
+
height: 1px;
|
|
443
|
+
padding: 0;
|
|
444
|
+
margin: -1px;
|
|
445
|
+
overflow: hidden;
|
|
446
|
+
clip: rect(0, 0, 0, 0);
|
|
447
|
+
white-space: nowrap;
|
|
448
|
+
border: 0;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.text-style-palette pk-tooltip {
|
|
452
|
+
display: contents;
|
|
453
|
+
}
|
|
454
|
+
|
|
314
455
|
/* Full toolbar replace (slot=toolbar on host when hasCustomToolbar). */
|
|
315
456
|
.toolbar ::slotted([slot='toolbar']) {
|
|
316
457
|
display: contents;
|
|
@@ -445,6 +586,7 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
445
586
|
this._value = null;
|
|
446
587
|
this.buttons = "bold,italic";
|
|
447
588
|
this.toolbar = null;
|
|
589
|
+
this.textStyleOptions = null;
|
|
448
590
|
this.linkOptions = null;
|
|
449
591
|
this.rows = 4;
|
|
450
592
|
this.placeholder = "";
|
|
@@ -621,6 +763,7 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
621
763
|
});
|
|
622
764
|
queueMicrotask(() => {
|
|
623
765
|
this.attachSelectionListeners();
|
|
766
|
+
this.requestUpdate();
|
|
624
767
|
});
|
|
625
768
|
}
|
|
626
769
|
attachSelectionListeners() {
|
|
@@ -837,7 +980,7 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
837
980
|
return id;
|
|
838
981
|
}
|
|
839
982
|
getToolbarButtonLabel(buttonName) {
|
|
840
|
-
return TOOLBAR_LABELS[buttonName] ?? buttonName;
|
|
983
|
+
return TOOLBAR_LABELS[buttonName] ?? getRegisteredTiptapToolbarControl(buttonName)?.label ?? buttonName;
|
|
841
984
|
}
|
|
842
985
|
renderToolbarTooltip(buttonId, label) {
|
|
843
986
|
if (!this.toolbarTooltips) return A;
|
|
@@ -847,7 +990,9 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
847
990
|
}
|
|
848
991
|
renderToolbarButton(buttonName) {
|
|
849
992
|
const editor = this.host.editor;
|
|
850
|
-
const
|
|
993
|
+
const registered = getRegisteredTiptapToolbarControl(buttonName);
|
|
994
|
+
if (registered?.isVisible && (!editor || !registered.isVisible(editor))) return A;
|
|
995
|
+
const icon = getToolbarButtonIcon(buttonName);
|
|
851
996
|
const label = this.getToolbarButtonLabel(buttonName);
|
|
852
997
|
const buttonId = this.getToolbarButtonId(buttonName);
|
|
853
998
|
const active = editor ? isTiptapButtonActive(editor, buttonName) : false;
|
|
@@ -868,6 +1013,152 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
868
1013
|
</div>
|
|
869
1014
|
`;
|
|
870
1015
|
}
|
|
1016
|
+
get textStyleToolbarConfig() {
|
|
1017
|
+
return resolveTiptapTextStyleToolbarConfig(this.textStyleOptions);
|
|
1018
|
+
}
|
|
1019
|
+
getTextStyleValue(attribute) {
|
|
1020
|
+
const value = this.host.editor?.getAttributes("textStyle")[attribute];
|
|
1021
|
+
return typeof value === "string" && value ? value : null;
|
|
1022
|
+
}
|
|
1023
|
+
setTextStyleValue(attribute, value) {
|
|
1024
|
+
const editor = this.host.editor;
|
|
1025
|
+
if (!editor) return;
|
|
1026
|
+
const chain = editor.chain().focus();
|
|
1027
|
+
switch (attribute) {
|
|
1028
|
+
case "fontFamily":
|
|
1029
|
+
value ? chain.setFontFamily(value).run() : chain.unsetFontFamily().run();
|
|
1030
|
+
break;
|
|
1031
|
+
case "fontSize":
|
|
1032
|
+
value ? chain.setFontSize(value).run() : chain.unsetFontSize().run();
|
|
1033
|
+
break;
|
|
1034
|
+
case "color":
|
|
1035
|
+
value ? chain.setColor(value).run() : chain.unsetColor().run();
|
|
1036
|
+
break;
|
|
1037
|
+
case "backgroundColor":
|
|
1038
|
+
value ? chain.setBackgroundColor(value).run() : chain.unsetBackgroundColor().run();
|
|
1039
|
+
break;
|
|
1040
|
+
case "lineHeight":
|
|
1041
|
+
value ? chain.setLineHeight(value).run() : chain.unsetLineHeight().run();
|
|
1042
|
+
break;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
getTextStyleOptionLabel(options, value) {
|
|
1046
|
+
return options.find((option) => option.value === value)?.label ?? options.find((option) => option.value === null)?.label ?? "Default";
|
|
1047
|
+
}
|
|
1048
|
+
renderTextStyleOptions(attribute, options) {
|
|
1049
|
+
const currentValue = this.getTextStyleValue(attribute);
|
|
1050
|
+
return options.map((option) => b`
|
|
1051
|
+
<pk-dropdown-item
|
|
1052
|
+
type="radio"
|
|
1053
|
+
radio-group=${attribute}
|
|
1054
|
+
value=${option.value ?? ""}
|
|
1055
|
+
?checked=${option.value === currentValue}
|
|
1056
|
+
@click=${() => this.setTextStyleValue(attribute, option.value)}
|
|
1057
|
+
>
|
|
1058
|
+
${option.label}
|
|
1059
|
+
</pk-dropdown-item>
|
|
1060
|
+
`);
|
|
1061
|
+
}
|
|
1062
|
+
renderTextStylePaletteOptions(attribute, options, idPrefix) {
|
|
1063
|
+
const currentValue = this.getTextStyleValue(attribute);
|
|
1064
|
+
const isTextColor = attribute === "color";
|
|
1065
|
+
return options.map((option, index) => {
|
|
1066
|
+
const optionId = `${idPrefix}-${attribute}-${index}`;
|
|
1067
|
+
const accessibleLabel = option.value ? `${option.label} ${isTextColor ? "text" : "highlight"}` : isTextColor ? "Default text color" : "No highlight";
|
|
1068
|
+
return b`
|
|
1069
|
+
<pk-dropdown-item
|
|
1070
|
+
id=${optionId}
|
|
1071
|
+
class="text-style-palette__option"
|
|
1072
|
+
type="radio"
|
|
1073
|
+
radio-group=${attribute}
|
|
1074
|
+
value=${option.value ?? ""}
|
|
1075
|
+
?checked=${option.value === currentValue}
|
|
1076
|
+
@click=${() => this.setTextStyleValue(attribute, option.value)}
|
|
1077
|
+
>
|
|
1078
|
+
<span
|
|
1079
|
+
slot="start"
|
|
1080
|
+
class="text-style-palette__swatch ${isTextColor ? "text-style-palette__swatch--text" : "text-style-palette__swatch--highlight"}"
|
|
1081
|
+
style=${option.value ? `--text-style-swatch:${option.value}` : ""}
|
|
1082
|
+
data-empty=${option.value === null ? "" : A}
|
|
1083
|
+
aria-hidden="true"
|
|
1084
|
+
>${isTextColor ? "A" : A}</span>
|
|
1085
|
+
<span class="text-style-palette__accessible-label">${accessibleLabel}</span>
|
|
1086
|
+
</pk-dropdown-item>
|
|
1087
|
+
${this.toolbarTooltips ? b`
|
|
1088
|
+
<pk-tooltip for=${optionId} content=${accessibleLabel} placement="top"></pk-tooltip>
|
|
1089
|
+
` : A}
|
|
1090
|
+
`;
|
|
1091
|
+
});
|
|
1092
|
+
}
|
|
1093
|
+
handleTextStylePaletteKeyDown(event) {
|
|
1094
|
+
const delta = {
|
|
1095
|
+
ArrowLeft: -1,
|
|
1096
|
+
ArrowRight: 1,
|
|
1097
|
+
ArrowUp: -5,
|
|
1098
|
+
ArrowDown: 5
|
|
1099
|
+
}[event.key];
|
|
1100
|
+
if (!delta) return;
|
|
1101
|
+
const menu = event.currentTarget;
|
|
1102
|
+
const item = event.composedPath().find((node) => node instanceof HTMLElement && node.localName === "pk-dropdown-item" && node.classList.contains("text-style-palette__option"));
|
|
1103
|
+
const items = menu.getItems().filter((candidate) => candidate.classList.contains("text-style-palette__option"));
|
|
1104
|
+
const index = item ? items.indexOf(item) : -1;
|
|
1105
|
+
if (index === -1) return;
|
|
1106
|
+
const target = items[Math.max(0, Math.min(index + delta, items.length - 1))];
|
|
1107
|
+
event.preventDefault();
|
|
1108
|
+
event.stopPropagation();
|
|
1109
|
+
target?.focusControl();
|
|
1110
|
+
}
|
|
1111
|
+
renderTextStyleToolbar(buttonName) {
|
|
1112
|
+
const config = this.textStyleToolbarConfig;
|
|
1113
|
+
const buttonId = this.getToolbarButtonId(buttonName);
|
|
1114
|
+
const triggerColor = buttonName === "text-color" ? this.getTextStyleValue("color") : null;
|
|
1115
|
+
let triggerLabel = "";
|
|
1116
|
+
let menuContent = A;
|
|
1117
|
+
if (buttonName === "font-family") {
|
|
1118
|
+
triggerLabel = this.getTextStyleOptionLabel(config.fontFamilies, this.getTextStyleValue("fontFamily"));
|
|
1119
|
+
menuContent = b`${this.renderTextStyleOptions("fontFamily", config.fontFamilies)}`;
|
|
1120
|
+
} else if (buttonName === "font-size") {
|
|
1121
|
+
triggerLabel = this.getTextStyleOptionLabel(config.fontSizes, this.getTextStyleValue("fontSize"));
|
|
1122
|
+
menuContent = b`${this.renderTextStyleOptions("fontSize", config.fontSizes)}`;
|
|
1123
|
+
} else if (buttonName === "line-height") {
|
|
1124
|
+
triggerLabel = this.getTextStyleOptionLabel(config.lineHeights, this.getTextStyleValue("lineHeight"));
|
|
1125
|
+
menuContent = b`${this.renderTextStyleOptions("lineHeight", config.lineHeights)}`;
|
|
1126
|
+
} else {
|
|
1127
|
+
triggerLabel = "A";
|
|
1128
|
+
menuContent = b`
|
|
1129
|
+
<pk-dropdown-label class="text-style-palette__label">Text color</pk-dropdown-label>
|
|
1130
|
+
${this.renderTextStylePaletteOptions("color", config.textColors, buttonId)}
|
|
1131
|
+
<pk-dropdown-label class="text-style-palette__label text-style-palette__label--highlight">Highlight color</pk-dropdown-label>
|
|
1132
|
+
${this.renderTextStylePaletteOptions("backgroundColor", config.backgroundColors, buttonId)}
|
|
1133
|
+
`;
|
|
1134
|
+
}
|
|
1135
|
+
const label = this.getToolbarButtonLabel(buttonName);
|
|
1136
|
+
return b`
|
|
1137
|
+
<div class="toolbar-item">
|
|
1138
|
+
<button
|
|
1139
|
+
id=${buttonId}
|
|
1140
|
+
type="button"
|
|
1141
|
+
class="toolbar-btn toolbar-btn--menu toolbar-btn--text-style ${buttonName === "text-color" ? "toolbar-btn--color" : ""}"
|
|
1142
|
+
aria-label=${label}
|
|
1143
|
+
aria-haspopup="menu"
|
|
1144
|
+
?disabled=${this.disabled || this.readonly}
|
|
1145
|
+
style=${triggerColor ? `--text-style-trigger-color:${triggerColor}` : ""}
|
|
1146
|
+
>
|
|
1147
|
+
<span class="toolbar-btn__text-style-value">${triggerLabel}</span>
|
|
1148
|
+
<span class="toolbar-btn__chevron">${o(TOOLBAR_CHEVRON_HTML)}</span>
|
|
1149
|
+
</button>
|
|
1150
|
+
${this.renderToolbarTooltip(buttonId, label)}
|
|
1151
|
+
<pk-dropdown-menu
|
|
1152
|
+
for=${buttonId}
|
|
1153
|
+
placement="bottom-start"
|
|
1154
|
+
class=${buttonName === "text-color" ? "text-style-palette" : ""}
|
|
1155
|
+
@keydown=${buttonName === "text-color" ? this.handleTextStylePaletteKeyDown : A}
|
|
1156
|
+
>
|
|
1157
|
+
${menuContent}
|
|
1158
|
+
</pk-dropdown-menu>
|
|
1159
|
+
</div>
|
|
1160
|
+
`;
|
|
1161
|
+
}
|
|
871
1162
|
handleCraftLink(config) {
|
|
872
1163
|
const editor = this.host.editor;
|
|
873
1164
|
if (!editor) return;
|
|
@@ -897,7 +1188,7 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
897
1188
|
return b`<span class="toolbar-separator" aria-hidden="true"></span>`;
|
|
898
1189
|
}
|
|
899
1190
|
renderGroupTriggerContent(group, triggerLabel, iconName) {
|
|
900
|
-
const icon =
|
|
1191
|
+
const icon = getToolbarButtonIcon(iconName);
|
|
901
1192
|
if (Boolean(group.label) && triggerLabel) return b`
|
|
902
1193
|
<span class="toolbar-btn__trigger-label">${triggerLabel}</span>
|
|
903
1194
|
<span class="toolbar-btn__chevron">${o(TOOLBAR_CHEVRON_HTML)}</span>
|
|
@@ -916,7 +1207,12 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
916
1207
|
isActive: false,
|
|
917
1208
|
icon: group.icon ?? getToolbarGroupDefaultIcon(group)
|
|
918
1209
|
};
|
|
919
|
-
const menuItems = getToolbarGroupMenuItems(group)
|
|
1210
|
+
const menuItems = getToolbarGroupMenuItems(group).filter((entry) => {
|
|
1211
|
+
if (entry.type === "separator") return true;
|
|
1212
|
+
const control = getRegisteredTiptapToolbarControl(entry.name);
|
|
1213
|
+
return !control?.isVisible || Boolean(editor && control.isVisible(editor));
|
|
1214
|
+
});
|
|
1215
|
+
if (!menuItems.some((entry) => entry.type === "item")) return A;
|
|
920
1216
|
const tooltipLabel = group.label ?? (isHeadingsOnlyToolbarPreset(group.preset) ? "Headings" : isFormattingToolbarPreset(group.preset) ? "Formatting" : group.preset === "lists" ? "Lists" : group.preset === "align" ? "Alignment" : "More");
|
|
921
1217
|
return b`
|
|
922
1218
|
<div class="toolbar-item">
|
|
@@ -958,6 +1254,12 @@ var PkTiptapEditor = class PkTiptapEditor extends PkFormAssociatedElement {
|
|
|
958
1254
|
if (node.type === "separator") return this.renderToolbarSeparator();
|
|
959
1255
|
if (node.type === "group") return this.renderToolbarGroup(node.group, `group-${index}`);
|
|
960
1256
|
if (node.name === "link") return this.renderLinkToolbarButton();
|
|
1257
|
+
if ([
|
|
1258
|
+
"font-family",
|
|
1259
|
+
"font-size",
|
|
1260
|
+
"text-color",
|
|
1261
|
+
"line-height"
|
|
1262
|
+
].includes(node.name)) return this.renderTextStyleToolbar(node.name);
|
|
961
1263
|
return this.renderToolbarButton(node.name);
|
|
962
1264
|
}
|
|
963
1265
|
renderDefaultToolbar() {
|
|
@@ -1051,6 +1353,20 @@ __decorate([n({
|
|
|
1051
1353
|
}
|
|
1052
1354
|
}
|
|
1053
1355
|
})], PkTiptapEditor.prototype, "toolbar", void 0);
|
|
1356
|
+
__decorate([n({
|
|
1357
|
+
attribute: "text-style-options",
|
|
1358
|
+
converter: {
|
|
1359
|
+
fromAttribute: (value) => {
|
|
1360
|
+
if (!value) return null;
|
|
1361
|
+
try {
|
|
1362
|
+
return JSON.parse(value);
|
|
1363
|
+
} catch {
|
|
1364
|
+
return null;
|
|
1365
|
+
}
|
|
1366
|
+
},
|
|
1367
|
+
toAttribute: (value) => value ? JSON.stringify(value) : null
|
|
1368
|
+
}
|
|
1369
|
+
})], PkTiptapEditor.prototype, "textStyleOptions", void 0);
|
|
1054
1370
|
__decorate([n({ attribute: "link-options" })], PkTiptapEditor.prototype, "linkOptions", void 0);
|
|
1055
1371
|
__decorate([n({ attribute: "link-selector-storage-key-prefix" })], PkTiptapEditor.prototype, "linkSelectorStorageKeyPrefix", void 0);
|
|
1056
1372
|
__decorate([n({ type: Number })], PkTiptapEditor.prototype, "rows", void 0);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { c as r, l as n, m as i, p as b, s as e, u as customElement } from "../../chunks/lit-DpLik9Rf.js";
|
|
2
2
|
import { c as __decorate, i as PkFormAssociatedElement, n as formControlStyles } from "../../chunks/pk-base-CyzwylQ7.js";
|
|
3
3
|
import { t as MirrorValidator } from "../../chunks/mirror-validator-C5XrXPaq.js";
|
|
4
|
-
import {
|
|
5
|
-
import { C as contentToValue, E as valueToContent,
|
|
4
|
+
import { A as Editor } from "../../chunks/tiptap-CgXkiK8d.js";
|
|
5
|
+
import { C as contentToValue, E as valueToContent, M as createTiptapInputExtensions, T as flattenVariableOptions, i as createVariableTagDomNodeView, n as tiptapInputProseMirrorStyles, w as dedupeVariableOptions } from "../../chunks/tiptap.styles-C0E1NpSx.js";
|
|
6
6
|
//#region src/components/tiptap/pk-tiptap-input.styles.ts
|
|
7
7
|
var pkTiptapInputStyles = i`
|
|
8
8
|
@layer pk-component {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as PkTooltip } from "../../chunks/pk-tooltip-
|
|
1
|
+
import { t as PkTooltip } from "../../chunks/pk-tooltip-Dd_Q0Bn5.js";
|
|
2
2
|
export { PkTooltip };
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verbb/plugin-kit-web",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.17",
|
|
4
|
+
"repository": {
|
|
5
|
+
"url": "git+https://github.com/verbb/plugin-kit.git"
|
|
6
|
+
},
|
|
4
7
|
"description": "Plugin Kit web components (shadow DOM, Craft design system)",
|
|
5
8
|
"type": "module",
|
|
6
9
|
"types": "dist/index.d.ts",
|
|
@@ -1024,18 +1027,18 @@
|
|
|
1024
1027
|
},
|
|
1025
1028
|
"peerDependencies": {
|
|
1026
1029
|
"@floating-ui/dom": "^1.7.3",
|
|
1027
|
-
"@verbb/plugin-kit-core": "^2.0.
|
|
1028
|
-
"@verbb/plugin-kit-icons": "^2.0.
|
|
1030
|
+
"@verbb/plugin-kit-core": "^2.0.17",
|
|
1031
|
+
"@verbb/plugin-kit-icons": "^2.0.17",
|
|
1029
1032
|
"lit": "^3.3.0"
|
|
1030
1033
|
},
|
|
1031
1034
|
"license": "MIT",
|
|
1032
1035
|
"dependencies": {
|
|
1033
1036
|
"@floating-ui/dom": "^1.7.3",
|
|
1034
|
-
"@tiptap/core": "
|
|
1035
|
-
"@verbb/plugin-kit-codemirror-core": "2.0.
|
|
1036
|
-
"@verbb/plugin-kit-core": "^2.0.
|
|
1037
|
-
"@verbb/plugin-kit-icons": "^2.0.
|
|
1038
|
-
"@verbb/plugin-kit-tiptap-core": "^2.0.
|
|
1037
|
+
"@tiptap/core": "3.22.4",
|
|
1038
|
+
"@verbb/plugin-kit-codemirror-core": "2.0.17",
|
|
1039
|
+
"@verbb/plugin-kit-core": "^2.0.17",
|
|
1040
|
+
"@verbb/plugin-kit-icons": "^2.0.17",
|
|
1041
|
+
"@verbb/plugin-kit-tiptap-core": "^2.0.17",
|
|
1039
1042
|
"composed-offset-position": "^0.0.6",
|
|
1040
1043
|
"lit": "^3.3.0"
|
|
1041
1044
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pk-dropdown-item-BZQS87U0.js","names":[],"sources":["../../src/components/dropdown-menu/dropdown-menu-size.styles.ts","../../src/components/dropdown-menu/pk-dropdown-item.styles.ts","../../src/components/dropdown-menu/pk-dropdown-item.ts"],"sourcesContent":["import { css } from 'lit';\n\nconst dropdownMenuSizeTokens = {\n default: css`\n --pk-dropdown-item-padding-block: 8px;\n --pk-dropdown-item-padding-inline: 12px;\n --pk-dropdown-item-gap: 0.625rem;\n --pk-dropdown-item-font-size: var(--pk-font-size-base);\n --pk-dropdown-item-line-height: 1.5;\n --pk-dropdown-item-icon-size: 12px;\n --pk-dropdown-label-padding-inline: 12px;\n --pk-dropdown-label-font-size: 13px;\n --pk-dropdown-details-font-size: var(--pk-font-size-sm);\n `,\n xs: css`\n --pk-dropdown-item-padding-block: 3px;\n --pk-dropdown-item-padding-inline: 8px;\n --pk-dropdown-item-gap: 0.375rem;\n --pk-dropdown-item-font-size: 12px;\n --pk-dropdown-item-line-height: 1.5;\n --pk-dropdown-item-icon-size: 10px;\n --pk-dropdown-label-padding-inline: 8px;\n --pk-dropdown-label-font-size: 11px;\n --pk-dropdown-details-font-size: 11px;\n `,\n sm: css`\n --pk-dropdown-item-padding-block: 4px;\n --pk-dropdown-item-padding-inline: 10px;\n --pk-dropdown-item-gap: 0.4375rem;\n --pk-dropdown-item-font-size: 13px;\n --pk-dropdown-item-line-height: 1.5;\n --pk-dropdown-item-icon-size: 12px;\n --pk-dropdown-label-padding-inline: 10px;\n --pk-dropdown-label-font-size: 11px;\n --pk-dropdown-details-font-size: 12px;\n `,\n lg: css`\n --pk-dropdown-item-padding-block: 10px;\n --pk-dropdown-item-padding-inline: 14px;\n --pk-dropdown-item-gap: 0.75rem;\n --pk-dropdown-item-font-size: 16px;\n --pk-dropdown-item-line-height: 1.5;\n --pk-dropdown-item-icon-size: 14px;\n --pk-dropdown-label-padding-inline: 14px;\n --pk-dropdown-label-font-size: 14px;\n --pk-dropdown-details-font-size: var(--pk-font-size-sm);\n `,\n xl: css`\n --pk-dropdown-item-padding-block: 12px;\n --pk-dropdown-item-padding-inline: 16px;\n --pk-dropdown-item-gap: 0.75rem;\n --pk-dropdown-item-font-size: 18px;\n --pk-dropdown-item-line-height: 1.5;\n --pk-dropdown-item-icon-size: 16px;\n --pk-dropdown-label-padding-inline: 16px;\n --pk-dropdown-label-font-size: 15px;\n --pk-dropdown-details-font-size: var(--pk-font-size-base);\n `,\n} as const;\n\n/** Size tokens on `pk-dropdown-menu` — cascades to light-DOM menu children. */\nexport const dropdownMenuHostSizeStyles = css`\n @layer pk-component {\n :host {\n ${dropdownMenuSizeTokens.default}\n }\n\n :host([size='xs']) {\n ${dropdownMenuSizeTokens.xs}\n }\n\n :host([size='sm']) {\n ${dropdownMenuSizeTokens.sm}\n }\n\n :host([size='lg']) {\n ${dropdownMenuSizeTokens.lg}\n }\n\n :host([size='xl']) {\n ${dropdownMenuSizeTokens.xl}\n }\n }\n`;\n\n/**\n * Size tokens on popup panels.\n * Do not include bare `:host` here; importing this in `pk-dropdown-item`\n * would reset every item back to the default size.\n */\nexport const dropdownMenuPanelSizeStyles = css`\n @layer pk-component {\n .panel[data-size='default'],\n .submenu-panel[data-size='default'] {\n ${dropdownMenuSizeTokens.default}\n }\n\n .panel[data-size='xs'],\n .submenu-panel[data-size='xs'] {\n ${dropdownMenuSizeTokens.xs}\n }\n\n .panel[data-size='sm'],\n .submenu-panel[data-size='sm'] {\n ${dropdownMenuSizeTokens.sm}\n }\n\n .panel[data-size='lg'],\n .submenu-panel[data-size='lg'] {\n ${dropdownMenuSizeTokens.lg}\n }\n\n .panel[data-size='xl'],\n .submenu-panel[data-size='xl'] {\n ${dropdownMenuSizeTokens.xl}\n }\n }\n`;\n\n/** @deprecated Use dropdownMenuHostSizeStyles + dropdownMenuPanelSizeStyles. */\nexport const dropdownMenuSizeStyles = css`\n ${dropdownMenuHostSizeStyles}\n ${dropdownMenuPanelSizeStyles}\n`;\n","import { css } from 'lit';\n\nimport { popupContentAnimationStyles } from '../../styles/popup-content-animation.styles.js';\nimport { dropdownMenuPanelSizeStyles } from './dropdown-menu-size.styles.js';\n\nexport const pkDropdownItemStyles = [\n popupContentAnimationStyles,\n dropdownMenuPanelSizeStyles,\n css`\n @layer pk-component {\n :host {\n display: block;\n position: relative;\n /*\n * Slotted label text inherits from this host (light DOM), not from\n * shadow .item — pin size-token metrics so Craft CP / Tailwind /\n * bare hosts all get the same item rhythm.\n */\n font-size: var(--pk-dropdown-item-font-size, var(--pk-font-size-base));\n line-height: var(--pk-dropdown-item-line-height, 1.5);\n color: var(--text-color, var(--pk-color-gray-700));\n }\n\n .item {\n display: flex;\n align-items: center;\n gap: var(--pk-dropdown-item-gap, 0.625rem);\n width: 100%;\n margin: 0;\n padding: var(--pk-dropdown-item-padding-block, 8px) var(--pk-dropdown-item-padding-inline, 12px);\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--pk-dropdown-item-font-size, var(--pk-font-size-base));\n /* Explicit — do not let font:inherit re-leak page line-height. */\n line-height: var(--pk-dropdown-item-line-height, 1.5);\n font-weight: normal;\n text-align: left;\n white-space: nowrap;\n cursor: default;\n user-select: none;\n outline: none;\n box-sizing: border-box;\n }\n\n .item:hover:not([disabled]):not([aria-disabled='true']),\n :host([data-highlighted]) .item,\n :host([submenu-open]) .item {\n background: var(--pk-color-slate-100);\n }\n\n .item:focus-visible {\n background: var(--pk-color-slate-100);\n }\n\n .item[aria-disabled='true'] {\n pointer-events: none;\n opacity: 0.5;\n }\n\n .label {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .prefix {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: var(--pk-dropdown-item-icon-size, 12px);\n height: var(--pk-dropdown-item-icon-size, 12px);\n line-height: 0;\n }\n\n .prefix--empty {\n display: none;\n }\n\n .prefix ::slotted(*) {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: var(--pk-dropdown-item-icon-size, 12px);\n height: var(--pk-dropdown-item-icon-size, 12px);\n /* Kill pk-icon text-baseline nudge inside the padded flex row. */\n vertical-align: 0;\n }\n\n .prefix ::slotted(svg),\n .prefix ::slotted(*) svg,\n .prefix ::slotted(.pk-dropdown-item__prefix-icon) {\n display: block;\n width: var(--pk-dropdown-item-icon-size, 12px) !important;\n height: var(--pk-dropdown-item-icon-size, 12px) !important;\n max-width: var(--pk-dropdown-item-icon-size, 12px);\n max-height: var(--pk-dropdown-item-icon-size, 12px);\n flex-shrink: 0;\n pointer-events: none;\n }\n\n .details {\n margin-left: auto;\n color: var(--pk-color-gray-500);\n font-size: var(--pk-dropdown-details-font-size, var(--pk-font-size-sm));\n letter-spacing: 0.04em;\n }\n\n .details:empty {\n display: none;\n }\n\n .check {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n color: var(--pk-color-gray-700);\n }\n\n .check svg {\n display: block;\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n .submenu-icon {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 1rem;\n color: var(--pk-color-gray-700);\n }\n\n .submenu-icon svg {\n display: block;\n width: 1em;\n height: 1em;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n .check {\n opacity: 0;\n }\n\n :host([checked]) .check {\n opacity: 1;\n }\n\n :host([type='checkbox']) .check,\n :host([type='radio']) .check {\n margin-left: auto;\n }\n\n :host([type='checkbox'][checked]) .check,\n :host([type='radio'][checked]) .check {\n opacity: 1;\n }\n\n .submenu-icon:empty {\n display: none;\n }\n\n :host([destructive]) .item {\n color: var(--pk-color-error);\n }\n\n :host([destructive]) .item:hover:not([disabled]):not([aria-disabled='true']),\n :host([destructive]) .item:focus-visible {\n color: var(--pk-color-error);\n }\n\n .submenu-panel {\n width: max-content;\n min-width: 8rem;\n overflow: hidden;\n padding: 4px 0;\n border-radius: var(--pk-radius-md);\n background: var(--pk-color-white);\n box-shadow: var(--pk-shadow-popup);\n /* Match root menu panel — Craft body text, not gray-900. */\n color: var(--text-color, var(--pk-color-gray-700));\n }\n\n .submenu-panel ::slotted(pk-dropdown-item),\n .submenu-panel ::slotted(pk-dropdown-separator),\n .submenu-panel ::slotted(pk-dropdown-label) {\n display: block;\n }\n\n .submenu-panel[hidden] {\n display: none !important;\n }\n }\n`,\n];\n","import { html, nothing } from 'lit';\nimport { customElement, property, query, state } from '../../decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { check, chevronRight } from '@verbb/plugin-kit-icons';\n\nimport { PkElement } from '../../base/pk-element.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport { renderIconHtml } from '../../icons/render.js';\nimport {\n syncPopupPlacementAnimation,\n waitForPopupReposition,\n} from '../../utils/popup-placement-animation.js';\nimport { pkDropdownItemStyles } from './pk-dropdown-item.styles.js';\n\nconst CHECK_ICON = renderIconHtml(check);\nconst SUBMENU_ICON = renderIconHtml(chevronRight);\n\nexport type PkDropdownItemType = 'normal' | 'checkbox' | 'radio';\n\ntype PkDropdownMenuSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';\n\n/**\n * Dropdown menu item — use inside `pk-dropdown-menu`.\n *\n * @slot - Item label\n * @slot start - Leading icon (preferred; matches pk-button)\n * @slot prefix - Alias for `start` (legacy)\n * @slot details - Trailing shortcut text\n * @slot submenu - Nested menu items (`pk-dropdown-item`, separators, labels)\n *\n * @csspart item - Menu item button\n * @csspart prefix - Leading icon wrapper (hidden when empty)\n */\n@customElement('pk-dropdown-item')\nexport class PkDropdownItem extends PkElement {\n static override styles = pkDropdownItemStyles;\n\n @property()\n value = '';\n\n @property({ reflect: true })\n type: PkDropdownItemType = 'normal';\n\n @property({ attribute: 'radio-group' })\n radioGroup = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n destructive = false;\n\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n @property({ attribute: 'submenu-open', type: Boolean, reflect: true })\n submenuOpen = false;\n\n /**\n * Roving highlight index for keyboard nav (`active`).\n * Visual chrome uses `:focus-visible` / hover — not this flag — so mouse-open\n * does not paint the first item selected (initial open).\n */\n @property({ type: Boolean })\n active = false;\n\n @state()\n private submenuAnimated = false;\n\n @query('.submenu-panel')\n private submenuPanelElement!: HTMLDivElement;\n\n @query('pk-popup')\n private submenuPopupElement!: HTMLElement;\n\n private readonly hasSlotController = new HasSlotController(this, 'submenu', 'details', 'start', 'prefix');\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncRole();\n this.syncSubmenuAria();\n this.addEventListener('click', this.handleHostClick);\n // Bind mouseenter on the host — covers the whole row, not just the button.\n this.addEventListener('mouseenter', this.handleMouseEnter);\n }\n\n override disconnectedCallback(): void {\n this.removeEventListener('click', this.handleHostClick);\n this.removeEventListener('mouseenter', this.handleMouseEnter);\n this.closeSubmenu();\n super.disconnectedCallback();\n }\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('type') || changed.has('checked')) {\n this.syncRole();\n }\n\n if (changed.has('submenuOpen') || changed.size === 0) {\n this.syncSubmenuAria();\n }\n\n // Keyboard / external callers set `submenuOpen`; mouse path goes through openSubmenu().\n if (changed.has('submenuOpen')) {\n if (this.submenuOpen) {\n this.ensureSubmenuSurface();\n } else {\n this.submenuAnimated = false;\n }\n }\n }\n\n /** Light-DOM `slot=\"submenu\"` — public for menu keyboard (`hasSubmenu`). */\n hasSubmenu(): boolean {\n return this.hasSlotController.test('submenu');\n }\n\n private syncSubmenuAria(): void {\n const hasSubmenu = this.hasSubmenu();\n\n if (hasSubmenu) {\n this.setAttribute('aria-haspopup', 'menu');\n } else {\n this.removeAttribute('aria-haspopup');\n }\n\n this.setAttribute('aria-expanded', hasSubmenu && this.submenuOpen ? 'true' : 'false');\n }\n\n focusControl(): void {\n this.shadowRoot?.querySelector<HTMLButtonElement>('.item')?.focus({ preventScroll: true });\n }\n\n /** Callers `item.focus()` — route into the shadow control button. */\n override focus(options?: FocusOptions): void {\n const button = this.shadowRoot?.querySelector<HTMLButtonElement>('.item');\n\n if (button) {\n button.focus(options);\n return;\n }\n\n super.focus(options);\n }\n\n /** Public for menu leave-detection (`submenuElement`). */\n get submenuElement(): HTMLDivElement | null {\n return this.submenuPanelElement ?? null;\n }\n\n closeSubmenu(): void {\n this.submenuAnimated = false;\n this.submenuOpen = false;\n }\n\n /**\n * Opens the nested submenu panel (mouse + keyboard).\n * notify parent first so siblings close, then set `submenuOpen`.\n */\n openSubmenu(): void {\n if (!this.hasSubmenu() || this.disabled || !this.isConnected) {\n return;\n }\n\n this.notifyParentOfOpening();\n this.submenuOpen = true;\n }\n\n /** `notifyParentOfOpening` — sibling close + bubble to the menu. */\n private notifyParentOfOpening(): void {\n this.dispatchEvent(new CustomEvent('pk-submenu-open', {\n bubbles: true,\n composed: true,\n detail: { item: this },\n }));\n\n const parent = this.parentElement;\n\n if (!parent) {\n return;\n }\n\n // Same slot + same light-DOM parent = siblings (top-level or nested submenu).\n for (const el of parent.children) {\n if (\n el !== this\n && el instanceof PkDropdownItem\n && el.getAttribute('slot') === this.getAttribute('slot')\n && el.submenuOpen\n ) {\n el.submenuOpen = false;\n }\n }\n }\n\n private ensureSubmenuSurface(): void {\n if (!this.hasSubmenu() || this.disabled) {\n return;\n }\n\n this.submenuAnimated = true;\n\n void this.updateComplete.then(() => {\n if (!this.submenuOpen || !this.submenuPanelElement) {\n return;\n }\n\n this.submenuPanelElement.hidden = false;\n syncPopupPlacementAnimation(this.submenuPanelElement, 'right-start');\n\n void waitForPopupReposition(this.submenuPopupElement, 'right-start').then((placement) => {\n syncPopupPlacementAnimation(this.submenuPanelElement, placement);\n });\n });\n }\n\n private syncRole(): void {\n if (this.type === 'checkbox') {\n this.setAttribute('role', 'menuitemcheckbox');\n this.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n return;\n }\n\n if (this.type === 'radio') {\n this.setAttribute('role', 'menuitemradio');\n this.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n return;\n }\n\n this.setAttribute('role', 'menuitem');\n this.removeAttribute('aria-checked');\n }\n\n /** `handleMouseEnter` — open on hover; siblings close via notify. */\n private handleMouseEnter = (): void => {\n if (!this.hasSubmenu() || this.disabled) {\n return;\n }\n\n this.notifyParentOfOpening();\n this.submenuOpen = true;\n };\n\n /** Host has `role=\"menuitem\"` — block disabled activation; selection is handled by `pk-dropdown-menu`. */\n private handleHostClick = (event: Event): void => {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n private handleClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n\n if (this.hasSubmenu()) {\n event.preventDefault();\n this.openSubmenu();\n }\n }\n\n override render() {\n const hasSubmenu = this.hasSubmenu();\n const showCheck = this.type === 'checkbox' || this.type === 'radio';\n // Prefer start (button parity); prefix kept as legacy alias.\n const hasLeadingIcon = this.hasSlotController.test('start') || this.hasSlotController.test('prefix');\n\n return html`\n <button\n part=\"item\"\n type=\"button\"\n class=\"item\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? 'true' : nothing}\n @click=${this.handleClick}\n >\n <span\n part=\"prefix\"\n class=${hasLeadingIcon ? 'prefix' : 'prefix prefix--empty'}\n >\n <slot name=\"start\"></slot>\n <slot name=\"prefix\"></slot>\n </span>\n <span class=\"label\"><slot></slot></span>\n <span class=\"details\"><slot name=\"details\"></slot></span>\n ${showCheck ? html`<span class=\"check\" aria-hidden=\"true\">${unsafeSVG(CHECK_ICON)}</span>` : nothing}\n ${hasSubmenu ? html`<span class=\"submenu-icon\" aria-hidden=\"true\">${unsafeSVG(SUBMENU_ICON)}</span>` : nothing}\n </button>\n ${hasSubmenu ? html`\n <pk-popup\n .active=${this.submenuOpen}\n .anchor=${this}\n placement=\"right-start\"\n .distance=${0}\n .skidding=${-4}\n flip\n shift\n hover-bridge\n style=\"--pk-popup-z-index: 1001\"\n >\n <div\n part=\"submenu\"\n class=\"submenu-panel pk-popup-content\"\n role=\"menu\"\n data-size=${resolveMenuSize(this)}\n ?hidden=${!this.submenuOpen}\n data-open=${this.submenuAnimated ? '' : nothing}\n aria-orientation=\"vertical\"\n >\n <slot name=\"submenu\"></slot>\n </div>\n </pk-popup>\n ` : nothing}\n `;\n }\n}\n\nfunction resolveMenuSize(item: PkDropdownItem): PkDropdownMenuSize {\n const panelSize = item.parentElement?.getAttribute('data-size');\n\n if (panelSize === 'xs' || panelSize === 'sm' || panelSize === 'default' || panelSize === 'lg' || panelSize === 'xl') {\n return panelSize;\n }\n\n const menu = item.closest('pk-dropdown-menu');\n const menuSize = menu?.getAttribute('size');\n\n if (menuSize === 'xs' || menuSize === 'sm' || menuSize === 'lg' || menuSize === 'xl') {\n return menuSize;\n }\n\n return 'default';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-dropdown-item': PkDropdownItem;\n }\n}\n"],"mappings":"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"}
|