@notectl/core 1.7.1 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AttrRegistry-Ci0qAvtS.mjs → AttrRegistry-D9Jx_RVb.mjs} +2 -2
- package/dist/chunks/{AttrRegistry-Ci0qAvtS.mjs.map → AttrRegistry-D9Jx_RVb.mjs.map} +1 -1
- package/dist/chunks/AttributedMarkCommands-BtLea72z.mjs +80 -0
- package/dist/chunks/AttributedMarkCommands-BtLea72z.mjs.map +1 -0
- package/dist/chunks/{CaretNavigation-qLfeL0So.mjs → CaretNavigation-7JYpIKbs.mjs} +3 -3
- package/dist/chunks/{CaretNavigation-qLfeL0So.mjs.map → CaretNavigation-7JYpIKbs.mjs.map} +1 -1
- package/dist/chunks/{ColorGrid-BBkN0AOb.mjs → ColorGrid--lBQ7jCK.mjs} +56 -55
- package/dist/chunks/ColorGrid--lBQ7jCK.mjs.map +1 -0
- package/dist/chunks/{ColorPickerPopup-D3ysvOH-.mjs → ColorPickerPopup-TpIRlXc8.mjs} +15 -15
- package/dist/chunks/ColorPickerPopup-TpIRlXc8.mjs.map +1 -0
- package/dist/chunks/{Document-DfZ1NOjs.mjs → Document-Brtw2jL1.mjs} +6 -6
- package/dist/chunks/Document-Brtw2jL1.mjs.map +1 -0
- package/dist/chunks/{MarkCommands-uybmkw9l.mjs → MarkCommands-6RUJ4L3r.mjs} +3 -3
- package/dist/chunks/MarkCommands-6RUJ4L3r.mjs.map +1 -0
- package/dist/chunks/{NodeResolver-CzLmmrph.mjs → NodeResolver-C2XYkeOi.mjs} +2 -2
- package/dist/chunks/{NodeResolver-CzLmmrph.mjs.map → NodeResolver-C2XYkeOi.mjs.map} +1 -1
- package/dist/chunks/NodeSpec-NZVvcCuH.mjs.map +1 -1
- package/dist/chunks/PopupPositioning-CgjgAKjp.mjs +34 -0
- package/dist/chunks/PopupPositioning-CgjgAKjp.mjs.map +1 -0
- package/dist/chunks/RangeIterator-Bh4Vl_6D.mjs +16 -0
- package/dist/chunks/{RangeIterator-Bye0UtbY.mjs.map → RangeIterator-Bh4Vl_6D.mjs.map} +1 -1
- package/dist/chunks/StyleRuntime-CP4NCwKT.mjs +235 -0
- package/dist/chunks/StyleRuntime-CP4NCwKT.mjs.map +1 -0
- package/dist/chunks/ToolbarItem-BpZggUGo.mjs.map +1 -1
- package/dist/chunks/{index-Bt_d4IqB.mjs → index--7pBhSF4.mjs} +74 -73
- package/dist/chunks/index--7pBhSF4.mjs.map +1 -0
- package/dist/chunks/{index-DayTn6Re.mjs → index-BXCkjDax.mjs} +78 -83
- package/dist/chunks/index-BXCkjDax.mjs.map +1 -0
- package/dist/chunks/{index-DGKQhSAl.mjs → index-BXtw5PNN.mjs} +2 -2
- package/dist/chunks/{index-DGKQhSAl.mjs.map → index-BXtw5PNN.mjs.map} +1 -1
- package/dist/chunks/{ToolbarPlugin-B7oJRzpl.mjs → index-BcDRT4K2.mjs} +110 -121
- package/dist/chunks/index-BcDRT4K2.mjs.map +1 -0
- package/dist/chunks/{index-DoCvDkfj.mjs → index-BjFBWBOC.mjs} +23 -25
- package/dist/chunks/index-BjFBWBOC.mjs.map +1 -0
- package/dist/chunks/{index-CrKz_IEn.mjs → index-C1opJocO.mjs} +2 -2
- package/dist/chunks/{index-CrKz_IEn.mjs.map → index-C1opJocO.mjs.map} +1 -1
- package/dist/chunks/{index-CfyS_pgH.mjs → index-CCyqQ0Dz.mjs} +32 -31
- package/dist/chunks/index-CCyqQ0Dz.mjs.map +1 -0
- package/dist/chunks/{index-E7OgN7hM.mjs → index-Cd3uJLP3.mjs} +2 -2
- package/dist/chunks/{index-E7OgN7hM.mjs.map → index-Cd3uJLP3.mjs.map} +1 -1
- package/dist/chunks/{index-yhz2qeeh.mjs → index-DSAuGP4n.mjs} +131 -127
- package/dist/chunks/index-DSAuGP4n.mjs.map +1 -0
- package/dist/chunks/{index-CH1r7DL-.mjs → index-DtRfqsq5.mjs} +211 -210
- package/dist/chunks/index-DtRfqsq5.mjs.map +1 -0
- package/dist/chunks/{index-CFPP456m.mjs → index-DxbQirny.mjs} +8 -8
- package/dist/chunks/{index-CFPP456m.mjs.map → index-DxbQirny.mjs.map} +1 -1
- package/dist/chunks/{index-DuRNETFv.mjs → index-ErZ5_a1o.mjs} +3 -3
- package/dist/chunks/{index-DuRNETFv.mjs.map → index-ErZ5_a1o.mjs.map} +1 -1
- package/dist/chunks/{index-Deag_lVi.mjs → index-WpbK_s_H.mjs} +29 -31
- package/dist/chunks/index-WpbK_s_H.mjs.map +1 -0
- package/dist/chunks/{index-DIvHQtE2.mjs → index-WrqH1wG8.mjs} +15 -14
- package/dist/chunks/index-WrqH1wG8.mjs.map +1 -0
- package/dist/chunks/{index-Dy6SllXW.mjs → index-fsVJLutn.mjs} +3 -3
- package/dist/chunks/{index-Dy6SllXW.mjs.map → index-fsVJLutn.mjs.map} +1 -1
- package/dist/chunks/{index-Ckzqtn5D.mjs → index-fx3KIap3.mjs} +15 -14
- package/dist/chunks/index-fx3KIap3.mjs.map +1 -0
- package/dist/chunks/{index-DmuuFS5D.mjs → index-oOJo-ywB.mjs} +4 -4
- package/dist/chunks/{index-DmuuFS5D.mjs.map → index-oOJo-ywB.mjs.map} +1 -1
- package/dist/chunks/{index-CFJFD4lF.mjs → index-toj88jtL.mjs} +19 -18
- package/dist/chunks/index-toj88jtL.mjs.map +1 -0
- package/dist/commands/AttributedMarkCommands.d.ts.map +1 -1
- package/dist/commands/MarkCommands.d.ts +3 -3
- package/dist/commands/MarkCommands.d.ts.map +1 -1
- package/dist/editor/CSSClassCollector.d.ts +36 -0
- package/dist/editor/CSSClassCollector.d.ts.map +1 -0
- package/dist/editor/ContentHTMLTypes.d.ts +29 -0
- package/dist/editor/ContentHTMLTypes.d.ts.map +1 -0
- package/dist/editor/ContentStyleInjector.d.ts +69 -0
- package/dist/editor/ContentStyleInjector.d.ts.map +1 -0
- package/dist/editor/DocumentParser.d.ts +9 -1
- package/dist/editor/DocumentParser.d.ts.map +1 -1
- package/dist/editor/DocumentSerializer.d.ts +6 -0
- package/dist/editor/DocumentSerializer.d.ts.map +1 -1
- package/dist/editor/EditorThemeController.d.ts +3 -0
- package/dist/editor/EditorThemeController.d.ts.map +1 -1
- package/dist/editor/MarkSerializer.d.ts +7 -0
- package/dist/editor/MarkSerializer.d.ts.map +1 -1
- package/dist/editor/NotectlEditor.d.ts +13 -3
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/editor/PaperLayoutController.d.ts.map +1 -1
- package/dist/editor/styles/font-select.d.ts +1 -1
- package/dist/editor/styles/font-select.d.ts.map +1 -1
- package/dist/editor/styles/font-size-select.d.ts +1 -1
- package/dist/editor/styles/font-size-select.d.ts.map +1 -1
- package/dist/editor/styles/heading-select.d.ts +1 -1
- package/dist/editor/styles/heading-select.d.ts.map +1 -1
- package/dist/editor/styles/toolbar.d.ts +1 -1
- package/dist/editor/styles/toolbar.d.ts.map +1 -1
- package/dist/index.d.ts +10 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/input/LegacyHTMLNormalizer.d.ts.map +1 -1
- package/dist/model/Document.d.ts +0 -4
- package/dist/model/Document.d.ts.map +1 -1
- package/dist/model/NodeSpec.d.ts +19 -2
- package/dist/model/NodeSpec.d.ts.map +1 -1
- package/dist/notectl-core.mjs +613 -477
- package/dist/notectl-core.mjs.map +1 -1
- package/dist/notectl-core.umd.js +1571 -1225
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
- package/dist/plugins/alignment.mjs +1 -1
- package/dist/plugins/caret-navigation.mjs +1 -1
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts +0 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
- package/dist/plugins/code-block/index.d.ts +2 -1
- package/dist/plugins/code-block/index.d.ts.map +1 -1
- package/dist/plugins/code-block.mjs +1 -1
- package/dist/plugins/font/FontPlugin.d.ts +0 -1
- package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePlugin.d.ts +0 -2
- package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePopup.d.ts +3 -1
- package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -1
- package/dist/plugins/font-size.mjs +1 -1
- package/dist/plugins/font.mjs +1 -1
- package/dist/plugins/gap-cursor.mjs +6 -6
- package/dist/plugins/hard-break.mjs +1 -1
- package/dist/plugins/heading/HeadingBlockTypePicker.d.ts.map +1 -1
- package/dist/plugins/heading.mjs +1 -1
- package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
- package/dist/plugins/highlight.mjs +1 -1
- package/dist/plugins/horizontal-rule.mjs +1 -1
- package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
- package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
- package/dist/plugins/image.mjs +1 -1
- package/dist/plugins/link.mjs +1 -1
- package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
- package/dist/plugins/list.mjs +1 -1
- package/dist/plugins/print/PrintContentPreparer.d.ts.map +1 -1
- package/dist/plugins/shared/ColorGrid.d.ts.map +1 -1
- package/dist/plugins/shared/ColorPickerPopup.d.ts +2 -1
- package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -1
- package/dist/plugins/shared/PopupManager.d.ts +12 -2
- package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
- package/dist/plugins/shared/PopupPositioning.d.ts.map +1 -1
- package/dist/plugins/strikethrough.mjs +1 -1
- package/dist/plugins/super-sub.mjs +1 -1
- package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
- package/dist/plugins/table/TableControls.d.ts.map +1 -1
- package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
- package/dist/plugins/table/TableControlsLayout.d.ts.map +1 -1
- package/dist/plugins/table/TableNodeViews.d.ts.map +1 -1
- package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
- package/dist/plugins/table.mjs +1 -1
- package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
- package/dist/plugins/text-color.mjs +1 -1
- package/dist/plugins/text-formatting.mjs +1 -1
- package/dist/plugins/toolbar/ToolbarItem.d.ts +3 -2
- package/dist/plugins/toolbar/ToolbarItem.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarPopupController.d.ts +0 -3
- package/dist/plugins/toolbar/ToolbarPopupController.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarRenderers.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarTooltip.d.ts.map +1 -1
- package/dist/plugins/toolbar.mjs +2 -2
- package/dist/presets/PresetTypes.d.ts +1 -1
- package/dist/presets/PresetTypes.d.ts.map +1 -1
- package/dist/style/StyleRuntime.d.ts +34 -0
- package/dist/style/StyleRuntime.d.ts.map +1 -0
- package/dist/view/Reconciler.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/AttributedMarkCommands-BETuHXj8.mjs +0 -58
- package/dist/chunks/AttributedMarkCommands-BETuHXj8.mjs.map +0 -1
- package/dist/chunks/ColorGrid-BBkN0AOb.mjs.map +0 -1
- package/dist/chunks/ColorPickerPopup-D3ysvOH-.mjs.map +0 -1
- package/dist/chunks/Document-DfZ1NOjs.mjs.map +0 -1
- package/dist/chunks/MarkCommands-uybmkw9l.mjs.map +0 -1
- package/dist/chunks/PopupPositioning-Cn6L_mO2.mjs +0 -30
- package/dist/chunks/PopupPositioning-Cn6L_mO2.mjs.map +0 -1
- package/dist/chunks/RangeIterator-Bye0UtbY.mjs +0 -16
- package/dist/chunks/ToolbarPlugin-B7oJRzpl.mjs.map +0 -1
- package/dist/chunks/index-Bt_d4IqB.mjs.map +0 -1
- package/dist/chunks/index-CFJFD4lF.mjs.map +0 -1
- package/dist/chunks/index-CH1r7DL-.mjs.map +0 -1
- package/dist/chunks/index-CfyS_pgH.mjs.map +0 -1
- package/dist/chunks/index-Ckzqtn5D.mjs.map +0 -1
- package/dist/chunks/index-DIvHQtE2.mjs.map +0 -1
- package/dist/chunks/index-DayTn6Re.mjs.map +0 -1
- package/dist/chunks/index-Deag_lVi.mjs.map +0 -1
- package/dist/chunks/index-DoCvDkfj.mjs.map +0 -1
- package/dist/chunks/index-yhz2qeeh.mjs.map +0 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
const e = "data-notectl-style-token", t = /* @__PURE__ */ new WeakMap(), n = /* @__PURE__ */ new WeakMap();
|
|
2
|
+
function s() {
|
|
3
|
+
if ("undefined" == typeof CSSStyleSheet) return null;
|
|
4
|
+
try {
|
|
5
|
+
return new CSSStyleSheet();
|
|
6
|
+
} catch {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function o(e2, s2) {
|
|
11
|
+
const o2 = n.get(e2);
|
|
12
|
+
o2 && (o2.destroy(), n.delete(e2)), t.set(e2, { nonce: s2.nonce, sheet: s2.sheet ?? null });
|
|
13
|
+
}
|
|
14
|
+
function i(e2) {
|
|
15
|
+
const s2 = n.get(e2);
|
|
16
|
+
s2 && (s2.destroy(), n.delete(e2)), t.delete(e2);
|
|
17
|
+
}
|
|
18
|
+
function r(e2, t2, n2) {
|
|
19
|
+
const s2 = f(e2);
|
|
20
|
+
s2 ? y(s2.root, s2.settings).setProperty(e2, t2, n2) : d(e2, t2, n2);
|
|
21
|
+
}
|
|
22
|
+
function l(e2, t2) {
|
|
23
|
+
r(e2, t2, "");
|
|
24
|
+
}
|
|
25
|
+
function c(e2, t2) {
|
|
26
|
+
const n2 = f(e2);
|
|
27
|
+
if (n2) y(n2.root, n2.settings).setProperties(e2, t2);
|
|
28
|
+
else for (const [n3, s2] of Object.entries(t2)) d(e2, n3, s2 ?? "");
|
|
29
|
+
}
|
|
30
|
+
function a(e2, t2) {
|
|
31
|
+
const n2 = f(e2);
|
|
32
|
+
n2 ? y(n2.root, n2.settings).setStyleText(e2, t2) : e2.style.cssText = t2;
|
|
33
|
+
}
|
|
34
|
+
function h(e2, t2) {
|
|
35
|
+
const n2 = f(e2);
|
|
36
|
+
if (!n2) {
|
|
37
|
+
const n3 = e2.style.cssText;
|
|
38
|
+
return void (e2.style.cssText = n3 ? `${n3}; ${t2}` : t2);
|
|
39
|
+
}
|
|
40
|
+
y(n2.root, n2.settings).appendStyleText(e2, t2);
|
|
41
|
+
}
|
|
42
|
+
function u(e2) {
|
|
43
|
+
const n2 = m(e2);
|
|
44
|
+
if (n2) return t.get(n2)?.nonce;
|
|
45
|
+
}
|
|
46
|
+
function d(e2, t2, n2) {
|
|
47
|
+
t2.startsWith("--") || t2.includes("-") ? n2 ? e2.style.setProperty(t2, n2) : e2.style.removeProperty(t2) : e2.style[t2] = n2;
|
|
48
|
+
}
|
|
49
|
+
function f(e2) {
|
|
50
|
+
const n2 = (function(e3) {
|
|
51
|
+
return m(e3);
|
|
52
|
+
})(e2);
|
|
53
|
+
if (!n2) return null;
|
|
54
|
+
const s2 = t.get(n2);
|
|
55
|
+
return s2 ? { root: n2, settings: s2 } : null;
|
|
56
|
+
}
|
|
57
|
+
function y(e2, t2) {
|
|
58
|
+
const s2 = n.get(e2);
|
|
59
|
+
if (s2) return s2;
|
|
60
|
+
const o2 = new p(e2, t2);
|
|
61
|
+
return n.set(e2, o2), o2;
|
|
62
|
+
}
|
|
63
|
+
function S(e2) {
|
|
64
|
+
return "undefined" != typeof ShadowRoot && e2 instanceof ShadowRoot;
|
|
65
|
+
}
|
|
66
|
+
function k(e2) {
|
|
67
|
+
return "undefined" != typeof Document && e2 instanceof Document;
|
|
68
|
+
}
|
|
69
|
+
function m(e2) {
|
|
70
|
+
const t2 = S(e2) || k(e2) ? e2 : e2.getRootNode();
|
|
71
|
+
return S(t2) || k(t2) ? t2 : "undefined" != typeof document ? document : null;
|
|
72
|
+
}
|
|
73
|
+
class p {
|
|
74
|
+
declarationByElement = /* @__PURE__ */ new WeakMap();
|
|
75
|
+
tokenByDeclaration = /* @__PURE__ */ new Map();
|
|
76
|
+
declarationByToken = /* @__PURE__ */ new Map();
|
|
77
|
+
tokenRefCount = /* @__PURE__ */ new Map();
|
|
78
|
+
tokenByElement = /* @__PURE__ */ new WeakMap();
|
|
79
|
+
tokenCounter = 0;
|
|
80
|
+
root;
|
|
81
|
+
nonce;
|
|
82
|
+
sheet;
|
|
83
|
+
fallbackStyleElement = null;
|
|
84
|
+
ownsAdoptedSheet = false;
|
|
85
|
+
constructor(e2, t2) {
|
|
86
|
+
this.root = e2, this.nonce = t2.nonce, this.sheet = t2.sheet ?? null;
|
|
87
|
+
}
|
|
88
|
+
destroy() {
|
|
89
|
+
this.clearRuntimeRules(), this.ownsAdoptedSheet && this.sheet && "adoptedStyleSheets" in this.root && (this.root.adoptedStyleSheets = this.root.adoptedStyleSheets.filter((e2) => e2 !== this.sheet)), this.fallbackStyleElement?.remove(), this.fallbackStyleElement = null, this.sheet = null, this.ownsAdoptedSheet = false, this.tokenByDeclaration.clear(), this.declarationByToken.clear(), this.tokenRefCount.clear(), this.tokenCounter = 0;
|
|
90
|
+
}
|
|
91
|
+
setProperty(e2, t2, n2) {
|
|
92
|
+
const s2 = this.getOrCreateDeclarations(e2), o2 = R(t2);
|
|
93
|
+
n2 ? s2.set(o2, n2) : s2.delete(o2), this.syncElementToken(e2, s2);
|
|
94
|
+
}
|
|
95
|
+
setProperties(e2, t2) {
|
|
96
|
+
const n2 = this.getOrCreateDeclarations(e2);
|
|
97
|
+
for (const [e3, s2] of Object.entries(t2)) {
|
|
98
|
+
const t3 = R(e3);
|
|
99
|
+
s2 ? n2.set(t3, s2) : n2.delete(t3);
|
|
100
|
+
}
|
|
101
|
+
this.syncElementToken(e2, n2);
|
|
102
|
+
}
|
|
103
|
+
setStyleText(e2, t2) {
|
|
104
|
+
const n2 = g(t2);
|
|
105
|
+
0 !== n2.size ? (this.declarationByElement.set(e2, n2), this.syncElementToken(e2, n2)) : this.clearElementStyles(e2);
|
|
106
|
+
}
|
|
107
|
+
appendStyleText(e2, t2) {
|
|
108
|
+
const n2 = g(t2);
|
|
109
|
+
if (0 === n2.size) return;
|
|
110
|
+
const s2 = this.getOrCreateDeclarations(e2);
|
|
111
|
+
for (const [e3, t3] of n2) s2.set(e3, t3);
|
|
112
|
+
this.syncElementToken(e2, s2);
|
|
113
|
+
}
|
|
114
|
+
getStyleText(e2) {
|
|
115
|
+
const t2 = this.declarationByElement.get(e2);
|
|
116
|
+
return t2 && 0 !== t2.size ? E(t2) : "";
|
|
117
|
+
}
|
|
118
|
+
getOrCreateDeclarations(e2) {
|
|
119
|
+
const t2 = this.declarationByElement.get(e2);
|
|
120
|
+
if (t2) return t2;
|
|
121
|
+
const n2 = /* @__PURE__ */ new Map();
|
|
122
|
+
return this.declarationByElement.set(e2, n2), n2;
|
|
123
|
+
}
|
|
124
|
+
syncElementToken(t2, n2) {
|
|
125
|
+
const s2 = this.tokenByElement.get(t2);
|
|
126
|
+
if (0 === n2.size) return void this.clearElementStyles(t2);
|
|
127
|
+
const o2 = E(n2);
|
|
128
|
+
let i2 = this.tokenByDeclaration.get(o2);
|
|
129
|
+
i2 || (i2 = `s${this.tokenCounter.toString(36)}`, this.tokenCounter += 1, this.tokenByDeclaration.set(o2, i2), this.declarationByToken.set(i2, o2), this.insertRule(i2, o2)), s2 !== i2 && (this.retainToken(i2), s2 && this.releaseToken(s2), this.tokenByElement.set(t2, i2)), t2.setAttribute(e, i2);
|
|
130
|
+
}
|
|
131
|
+
insertRule(e2, t2) {
|
|
132
|
+
const n2 = `${C(e2)} { ${t2}; }`, s2 = this.ensureSheet();
|
|
133
|
+
if (s2) try {
|
|
134
|
+
s2.insertRule(n2, s2.cssRules.length);
|
|
135
|
+
} catch {
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
ensureSheet() {
|
|
139
|
+
if (this.sheet) return this.sheet;
|
|
140
|
+
if ("undefined" != typeof CSSStyleSheet) try {
|
|
141
|
+
const e3 = new CSSStyleSheet();
|
|
142
|
+
if ("adoptedStyleSheets" in this.root) {
|
|
143
|
+
const t2 = this.root.adoptedStyleSheets;
|
|
144
|
+
return this.root.adoptedStyleSheets = [...t2, e3], this.sheet = e3, this.ownsAdoptedSheet = true, e3;
|
|
145
|
+
}
|
|
146
|
+
} catch {
|
|
147
|
+
}
|
|
148
|
+
const e2 = this.ensureFallbackStyleElement();
|
|
149
|
+
return this.sheet = e2.sheet ?? null, this.sheet;
|
|
150
|
+
}
|
|
151
|
+
clearElementStyles(t2) {
|
|
152
|
+
this.declarationByElement.delete(t2);
|
|
153
|
+
const n2 = this.tokenByElement.get(t2);
|
|
154
|
+
n2 && (this.tokenByElement.delete(t2), this.releaseToken(n2)), t2.removeAttribute(e);
|
|
155
|
+
}
|
|
156
|
+
retainToken(e2) {
|
|
157
|
+
const t2 = this.tokenRefCount.get(e2) ?? 0;
|
|
158
|
+
this.tokenRefCount.set(e2, t2 + 1);
|
|
159
|
+
}
|
|
160
|
+
releaseToken(e2) {
|
|
161
|
+
const t2 = this.tokenRefCount.get(e2);
|
|
162
|
+
if (!t2) return;
|
|
163
|
+
if (t2 > 1) return void this.tokenRefCount.set(e2, t2 - 1);
|
|
164
|
+
this.tokenRefCount.delete(e2);
|
|
165
|
+
const n2 = this.declarationByToken.get(e2);
|
|
166
|
+
n2 && (this.declarationByToken.delete(e2), this.tokenByDeclaration.delete(n2)), this.deleteRule(e2);
|
|
167
|
+
}
|
|
168
|
+
deleteRule(e2) {
|
|
169
|
+
const t2 = this.sheet;
|
|
170
|
+
if (!t2) return;
|
|
171
|
+
const n2 = C(e2);
|
|
172
|
+
for (let e3 = t2.cssRules.length - 1; e3 >= 0; e3 -= 1) {
|
|
173
|
+
const s2 = t2.cssRules[e3];
|
|
174
|
+
if (s2 && T(s2, n2)) {
|
|
175
|
+
try {
|
|
176
|
+
t2.deleteRule(e3);
|
|
177
|
+
} catch {
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
clearRuntimeRules() {
|
|
184
|
+
const t2 = this.sheet;
|
|
185
|
+
if (t2) for (let n2 = t2.cssRules.length - 1; n2 >= 0; n2 -= 1) {
|
|
186
|
+
const s2 = t2.cssRules[n2];
|
|
187
|
+
if (s2 && s2.cssText.includes(`[${e}="`)) try {
|
|
188
|
+
t2.deleteRule(n2);
|
|
189
|
+
} catch {
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
ensureFallbackStyleElement() {
|
|
194
|
+
if (this.fallbackStyleElement) return this.fallbackStyleElement;
|
|
195
|
+
const e2 = document.createElement("style");
|
|
196
|
+
return e2.setAttribute("data-notectl-runtime-styles", ""), this.nonce && e2.setAttribute("nonce", this.nonce), S(this.root) ? this.root.appendChild(e2) : (this.root.head ?? this.root.documentElement).appendChild(e2), this.fallbackStyleElement = e2, e2;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function g(e2) {
|
|
200
|
+
const t2 = /* @__PURE__ */ new Map();
|
|
201
|
+
for (const n2 of e2.split(";")) {
|
|
202
|
+
const e3 = n2.trim();
|
|
203
|
+
if (!e3) continue;
|
|
204
|
+
const s2 = e3.indexOf(":");
|
|
205
|
+
if (s2 <= 0) continue;
|
|
206
|
+
const o2 = R(e3.slice(0, s2)), i2 = e3.slice(s2 + 1).trim();
|
|
207
|
+
i2 ? t2.set(o2, i2) : t2.delete(o2);
|
|
208
|
+
}
|
|
209
|
+
return t2;
|
|
210
|
+
}
|
|
211
|
+
function E(e2) {
|
|
212
|
+
return Array.from(e2.entries()).sort(([e3], [t2]) => e3.localeCompare(t2)).map(([e3, t2]) => `${e3}: ${t2}`).join("; ");
|
|
213
|
+
}
|
|
214
|
+
function R(e2) {
|
|
215
|
+
const t2 = e2.trim();
|
|
216
|
+
return t2 ? t2.startsWith("--") ? t2 : t2.includes("-") ? t2.toLowerCase() : t2.replace(/[A-Z]/g, (e3) => `-${e3.toLowerCase()}`).toLowerCase() : "";
|
|
217
|
+
}
|
|
218
|
+
function C(t2) {
|
|
219
|
+
return `[${e}="${t2}"]`;
|
|
220
|
+
}
|
|
221
|
+
function T(e2, t2) {
|
|
222
|
+
return "undefined" != typeof CSSStyleRule && e2 instanceof CSSStyleRule ? e2.selectorText === t2 : e2.cssText.includes(t2);
|
|
223
|
+
}
|
|
224
|
+
export {
|
|
225
|
+
r as a,
|
|
226
|
+
a as b,
|
|
227
|
+
h as c,
|
|
228
|
+
s as d,
|
|
229
|
+
l as e,
|
|
230
|
+
u as g,
|
|
231
|
+
o as r,
|
|
232
|
+
c as s,
|
|
233
|
+
i as u
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=StyleRuntime-CP4NCwKT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleRuntime-CP4NCwKT.mjs","sources":["../../src/style/StyleRuntime.ts"],"sourcesContent":["/**\n * Runtime style abstraction.\n *\n * Writes no inline styles and instead assigns token attributes\n * backed by dynamic CSS rules in a stylesheet.\n * Elements outside a registered root fall back to inline styles.\n */\n\nexport interface StyleRootOptions {\n\treadonly nonce?: string;\n\treadonly sheet?: CSSStyleSheet | null;\n}\n\ntype StyleRoot = ShadowRoot | Document;\n\ninterface RootConfig {\n\treadonly nonce?: string;\n\treadonly sheet: CSSStyleSheet | null;\n}\n\nconst STYLE_TOKEN_ATTR = 'data-notectl-style-token';\nconst STYLE_ELEMENT_ATTR = 'data-notectl-runtime-styles';\n\nconst rootConfigs: WeakMap<StyleRoot, RootConfig> = new WeakMap();\nconst strictEngines: WeakMap<StyleRoot, StrictStyleEngine> = new WeakMap();\n\n/** Creates a constructable stylesheet when the environment supports it. */\nexport function createRuntimeStyleSheet(): CSSStyleSheet | null {\n\tif (typeof CSSStyleSheet === 'undefined') return null;\n\ttry {\n\t\treturn new CSSStyleSheet();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Registers styling mode for a root (shadow root or document). */\nexport function registerStyleRoot(root: StyleRoot, options: StyleRootOptions): void {\n\tconst previous = strictEngines.get(root);\n\tif (previous) {\n\t\tprevious.destroy();\n\t\tstrictEngines.delete(root);\n\t}\n\trootConfigs.set(root, {\n\t\tnonce: options.nonce,\n\t\tsheet: options.sheet ?? null,\n\t});\n}\n\n/** Unregisters root styling and tears down strict runtime state if present. */\nexport function unregisterStyleRoot(root: StyleRoot): void {\n\tconst engine = strictEngines.get(root);\n\tif (engine) {\n\t\tengine.destroy();\n\t\tstrictEngines.delete(root);\n\t}\n\trootConfigs.delete(root);\n}\n\n/** Sets a single style property. Empty value removes the property. */\nexport function setStyleProperty(el: HTMLElement, property: string, value: string): void {\n\tconst config = resolveConfig(el);\n\tif (!config) {\n\t\tsetInlineProperty(el, property, value);\n\t\treturn;\n\t}\n\tgetStrictEngine(config.root, config.settings).setProperty(el, property, value);\n}\n\n/** Removes a single style property. */\nexport function removeStyleProperty(el: HTMLElement, property: string): void {\n\tsetStyleProperty(el, property, '');\n}\n\n/** Sets multiple style properties in one call. */\nexport function setStyleProperties(\n\tel: HTMLElement,\n\tproperties: Readonly<Record<string, string | undefined | null>>,\n): void {\n\tconst config = resolveConfig(el);\n\tif (!config) {\n\t\tfor (const [property, value] of Object.entries(properties)) {\n\t\t\tsetInlineProperty(el, property, value ?? '');\n\t\t}\n\t\treturn;\n\t}\n\tgetStrictEngine(config.root, config.settings).setProperties(el, properties);\n}\n\n/** Replaces the element style text. */\nexport function setStyleText(el: HTMLElement, cssText: string): void {\n\tconst config = resolveConfig(el);\n\tif (!config) {\n\t\tel.style.cssText = cssText;\n\t\treturn;\n\t}\n\tgetStrictEngine(config.root, config.settings).setStyleText(el, cssText);\n}\n\n/** Merges a cssText fragment into current element styles. */\nexport function appendStyleText(el: HTMLElement, cssText: string): void {\n\tconst config = resolveConfig(el);\n\tif (!config) {\n\t\tconst current = el.style.cssText;\n\t\tel.style.cssText = current ? `${current}; ${cssText}` : cssText;\n\t\treturn;\n\t}\n\tgetStrictEngine(config.root, config.settings).appendStyleText(el, cssText);\n}\n\n/** Returns serialized styles for an element. */\nexport function getStyleText(el: HTMLElement): string {\n\tconst config = resolveConfig(el);\n\tif (!config) return el.style.cssText;\n\treturn getStrictEngine(config.root, config.settings).getStyleText(el);\n}\n\n/** Returns the configured CSP nonce for the node's style root (if any). */\nexport function getStyleNonceForNode(node: Node): string | undefined {\n\tconst root = resolveStyleRootFromNode(node);\n\tif (!root) return undefined;\n\treturn rootConfigs.get(root)?.nonce;\n}\n\nfunction setInlineProperty(el: HTMLElement, property: string, value: string): void {\n\tif (property.startsWith('--')) {\n\t\tif (value) {\n\t\t\tel.style.setProperty(property, value);\n\t\t} else {\n\t\t\tel.style.removeProperty(property);\n\t\t}\n\t\treturn;\n\t}\n\tif (property.includes('-')) {\n\t\tif (value) {\n\t\t\tel.style.setProperty(property, value);\n\t\t} else {\n\t\t\tel.style.removeProperty(property);\n\t\t}\n\t\treturn;\n\t}\n\t(el.style as CSSStyleDeclaration & Record<string, string>)[property] = value;\n}\n\nfunction resolveConfig(el: HTMLElement): { root: StyleRoot; settings: RootConfig } | null {\n\tconst root = resolveStyleRoot(el);\n\tif (!root) return null;\n\tconst settings = rootConfigs.get(root);\n\tif (!settings) return null;\n\treturn { root, settings };\n}\n\nfunction resolveStyleRoot(el: HTMLElement): StyleRoot | null {\n\treturn resolveStyleRootFromNode(el);\n}\n\nfunction getStrictEngine(root: StyleRoot, config: RootConfig): StrictStyleEngine {\n\tconst cached = strictEngines.get(root);\n\tif (cached) return cached;\n\tconst engine = new StrictStyleEngine(root, config);\n\tstrictEngines.set(root, engine);\n\treturn engine;\n}\n\nfunction isShadowRoot(value: unknown): value is ShadowRoot {\n\treturn typeof ShadowRoot !== 'undefined' && value instanceof ShadowRoot;\n}\n\nfunction isDocument(value: unknown): value is Document {\n\treturn typeof Document !== 'undefined' && value instanceof Document;\n}\n\nfunction resolveStyleRootFromNode(node: Node): StyleRoot | null {\n\tconst rootNode: Node = isShadowRoot(node) || isDocument(node) ? node : node.getRootNode();\n\tif (isShadowRoot(rootNode)) return rootNode;\n\tif (isDocument(rootNode)) return rootNode;\n\tif (typeof document !== 'undefined') return document;\n\treturn null;\n}\n\nclass StrictStyleEngine {\n\tprivate readonly declarationByElement: WeakMap<HTMLElement, Map<string, string>> = new WeakMap();\n\tprivate readonly tokenByDeclaration: Map<string, string> = new Map();\n\tprivate readonly declarationByToken: Map<string, string> = new Map();\n\tprivate readonly tokenRefCount: Map<string, number> = new Map();\n\tprivate readonly tokenByElement: WeakMap<HTMLElement, string> = new WeakMap();\n\tprivate tokenCounter = 0;\n\tprivate readonly root: StyleRoot;\n\tprivate readonly nonce?: string;\n\tprivate sheet: CSSStyleSheet | null;\n\tprivate fallbackStyleElement: HTMLStyleElement | null = null;\n\tprivate ownsAdoptedSheet = false;\n\n\tconstructor(root: StyleRoot, config: RootConfig) {\n\t\tthis.root = root;\n\t\tthis.nonce = config.nonce;\n\t\tthis.sheet = config.sheet ?? null;\n\t}\n\n\tdestroy(): void {\n\t\tthis.clearRuntimeRules();\n\t\tif (this.ownsAdoptedSheet && this.sheet && 'adoptedStyleSheets' in this.root) {\n\t\t\tthis.root.adoptedStyleSheets = this.root.adoptedStyleSheets.filter(\n\t\t\t\t(adoptedSheet: CSSStyleSheet): boolean => adoptedSheet !== this.sheet,\n\t\t\t);\n\t\t}\n\t\tthis.fallbackStyleElement?.remove();\n\t\tthis.fallbackStyleElement = null;\n\t\tthis.sheet = null;\n\t\tthis.ownsAdoptedSheet = false;\n\t\tthis.tokenByDeclaration.clear();\n\t\tthis.declarationByToken.clear();\n\t\tthis.tokenRefCount.clear();\n\t\tthis.tokenCounter = 0;\n\t}\n\n\tsetProperty(el: HTMLElement, property: string, value: string): void {\n\t\tconst declarations = this.getOrCreateDeclarations(el);\n\t\tconst name = normalizePropertyName(property);\n\t\tif (!value) {\n\t\t\tdeclarations.delete(name);\n\t\t} else {\n\t\t\tdeclarations.set(name, value);\n\t\t}\n\t\tthis.syncElementToken(el, declarations);\n\t}\n\n\tsetProperties(\n\t\tel: HTMLElement,\n\t\tproperties: Readonly<Record<string, string | undefined | null>>,\n\t): void {\n\t\tconst declarations = this.getOrCreateDeclarations(el);\n\t\tfor (const [property, value] of Object.entries(properties)) {\n\t\t\tconst name = normalizePropertyName(property);\n\t\t\tif (!value) {\n\t\t\t\tdeclarations.delete(name);\n\t\t\t} else {\n\t\t\t\tdeclarations.set(name, value);\n\t\t\t}\n\t\t}\n\t\tthis.syncElementToken(el, declarations);\n\t}\n\n\tsetStyleText(el: HTMLElement, cssText: string): void {\n\t\tconst declarations = parseStyleText(cssText);\n\t\tif (declarations.size === 0) {\n\t\t\tthis.clearElementStyles(el);\n\t\t\treturn;\n\t\t}\n\t\tthis.declarationByElement.set(el, declarations);\n\t\tthis.syncElementToken(el, declarations);\n\t}\n\n\tappendStyleText(el: HTMLElement, cssText: string): void {\n\t\tconst parsed = parseStyleText(cssText);\n\t\tif (parsed.size === 0) return;\n\t\tconst declarations = this.getOrCreateDeclarations(el);\n\t\tfor (const [property, value] of parsed) {\n\t\t\tdeclarations.set(property, value);\n\t\t}\n\t\tthis.syncElementToken(el, declarations);\n\t}\n\n\tgetStyleText(el: HTMLElement): string {\n\t\tconst declarations = this.declarationByElement.get(el);\n\t\tif (!declarations || declarations.size === 0) return '';\n\t\treturn serializeDeclarations(declarations);\n\t}\n\n\tprivate getOrCreateDeclarations(el: HTMLElement): Map<string, string> {\n\t\tconst existing = this.declarationByElement.get(el);\n\t\tif (existing) return existing;\n\t\tconst created = new Map<string, string>();\n\t\tthis.declarationByElement.set(el, created);\n\t\treturn created;\n\t}\n\n\tprivate syncElementToken(el: HTMLElement, declarations: Map<string, string>): void {\n\t\tconst previousToken = this.tokenByElement.get(el);\n\t\tif (declarations.size === 0) {\n\t\t\tthis.clearElementStyles(el);\n\t\t\treturn;\n\t\t}\n\n\t\tconst declarationText = serializeDeclarations(declarations);\n\t\tlet token = this.tokenByDeclaration.get(declarationText);\n\t\tif (!token) {\n\t\t\ttoken = `s${this.tokenCounter.toString(36)}`;\n\t\t\tthis.tokenCounter += 1;\n\t\t\tthis.tokenByDeclaration.set(declarationText, token);\n\t\t\tthis.declarationByToken.set(token, declarationText);\n\t\t\tthis.insertRule(token, declarationText);\n\t\t}\n\t\tif (previousToken !== token) {\n\t\t\tthis.retainToken(token);\n\t\t\tif (previousToken) {\n\t\t\t\tthis.releaseToken(previousToken);\n\t\t\t}\n\t\t\tthis.tokenByElement.set(el, token);\n\t\t}\n\t\tel.setAttribute(STYLE_TOKEN_ATTR, token);\n\t}\n\n\tprivate insertRule(token: string, declarationText: string): void {\n\t\tconst rule = `${buildTokenSelector(token)} { ${declarationText}; }`;\n\t\tconst sheet = this.ensureSheet();\n\t\tif (!sheet) return;\n\t\ttry {\n\t\t\tsheet.insertRule(rule, sheet.cssRules.length);\n\t\t} catch {\n\t\t\t// Ignore malformed declarations from third-party plugin attrs.\n\t\t}\n\t}\n\n\tprivate ensureSheet(): CSSStyleSheet | null {\n\t\tif (this.sheet) return this.sheet;\n\n\t\tif (typeof CSSStyleSheet !== 'undefined') {\n\t\t\ttry {\n\t\t\t\tconst sheet = new CSSStyleSheet();\n\t\t\t\tif ('adoptedStyleSheets' in this.root) {\n\t\t\t\t\tconst adopted = this.root.adoptedStyleSheets;\n\t\t\t\t\tthis.root.adoptedStyleSheets = [...adopted, sheet];\n\t\t\t\t\tthis.sheet = sheet;\n\t\t\t\t\tthis.ownsAdoptedSheet = true;\n\t\t\t\t\treturn sheet;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Fall through to style element fallback.\n\t\t\t}\n\t\t}\n\n\t\tconst style = this.ensureFallbackStyleElement();\n\t\tthis.sheet = (style.sheet as CSSStyleSheet | null) ?? null;\n\t\treturn this.sheet;\n\t}\n\n\tprivate clearElementStyles(el: HTMLElement): void {\n\t\tthis.declarationByElement.delete(el);\n\t\tconst token = this.tokenByElement.get(el);\n\t\tif (token) {\n\t\t\tthis.tokenByElement.delete(el);\n\t\t\tthis.releaseToken(token);\n\t\t}\n\t\tel.removeAttribute(STYLE_TOKEN_ATTR);\n\t}\n\n\tprivate retainToken(token: string): void {\n\t\tconst current = this.tokenRefCount.get(token) ?? 0;\n\t\tthis.tokenRefCount.set(token, current + 1);\n\t}\n\n\tprivate releaseToken(token: string): void {\n\t\tconst current = this.tokenRefCount.get(token);\n\t\tif (!current) return;\n\t\tif (current > 1) {\n\t\t\tthis.tokenRefCount.set(token, current - 1);\n\t\t\treturn;\n\t\t}\n\t\tthis.tokenRefCount.delete(token);\n\t\tconst declaration = this.declarationByToken.get(token);\n\t\tif (declaration) {\n\t\t\tthis.declarationByToken.delete(token);\n\t\t\tthis.tokenByDeclaration.delete(declaration);\n\t\t}\n\t\tthis.deleteRule(token);\n\t}\n\n\tprivate deleteRule(token: string): void {\n\t\tconst sheet = this.sheet;\n\t\tif (!sheet) return;\n\t\tconst selector = buildTokenSelector(token);\n\t\tfor (let index = sheet.cssRules.length - 1; index >= 0; index -= 1) {\n\t\t\tconst rule = sheet.cssRules[index];\n\t\t\tif (!rule || !isTokenSelectorMatch(rule, selector)) continue;\n\t\t\ttry {\n\t\t\t\tsheet.deleteRule(index);\n\t\t\t} catch {\n\t\t\t\t// Ignore parser/runtime discrepancies in unsupported environments.\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate clearRuntimeRules(): void {\n\t\tconst sheet = this.sheet;\n\t\tif (!sheet) return;\n\t\tfor (let index = sheet.cssRules.length - 1; index >= 0; index -= 1) {\n\t\t\tconst rule = sheet.cssRules[index];\n\t\t\tif (!rule || !rule.cssText.includes(`[${STYLE_TOKEN_ATTR}=\"`)) continue;\n\t\t\ttry {\n\t\t\t\tsheet.deleteRule(index);\n\t\t\t} catch {\n\t\t\t\t// Ignore parser/runtime discrepancies in unsupported environments.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ensureFallbackStyleElement(): HTMLStyleElement {\n\t\tif (this.fallbackStyleElement) return this.fallbackStyleElement;\n\t\tconst style: HTMLStyleElement = document.createElement('style');\n\t\tstyle.setAttribute(STYLE_ELEMENT_ATTR, '');\n\t\tif (this.nonce) {\n\t\t\tstyle.setAttribute('nonce', this.nonce);\n\t\t}\n\t\tif (isShadowRoot(this.root)) {\n\t\t\tthis.root.appendChild(style);\n\t\t} else {\n\t\t\tconst host = this.root.head ?? this.root.documentElement;\n\t\t\thost.appendChild(style);\n\t\t}\n\t\tthis.fallbackStyleElement = style;\n\t\treturn style;\n\t}\n}\n\nfunction parseStyleText(styleText: string): Map<string, string> {\n\tconst declarations = new Map<string, string>();\n\tfor (const rawPart of styleText.split(';')) {\n\t\tconst part = rawPart.trim();\n\t\tif (!part) continue;\n\t\tconst separator = part.indexOf(':');\n\t\tif (separator <= 0) continue;\n\t\tconst property = normalizePropertyName(part.slice(0, separator));\n\t\tconst value = part.slice(separator + 1).trim();\n\t\tif (!value) {\n\t\t\tdeclarations.delete(property);\n\t\t} else {\n\t\t\tdeclarations.set(property, value);\n\t\t}\n\t}\n\treturn declarations;\n}\n\nfunction serializeDeclarations(declarations: Map<string, string>): string {\n\tconst ordered: [string, string][] = Array.from(declarations.entries()).sort(([a], [b]) =>\n\t\ta.localeCompare(b),\n\t);\n\treturn ordered.map(([property, value]) => `${property}: ${value}`).join('; ');\n}\n\nfunction normalizePropertyName(property: string): string {\n\tconst trimmed = property.trim();\n\tif (!trimmed) return '';\n\tif (trimmed.startsWith('--')) return trimmed;\n\tif (trimmed.includes('-')) return trimmed.toLowerCase();\n\treturn trimmed.replace(/[A-Z]/g, (char: string) => `-${char.toLowerCase()}`).toLowerCase();\n}\n\nfunction buildTokenSelector(token: string): string {\n\treturn `[${STYLE_TOKEN_ATTR}=\"${token}\"]`;\n}\n\nfunction isTokenSelectorMatch(rule: CSSRule, selector: string): boolean {\n\tif (typeof CSSStyleRule !== 'undefined' && rule instanceof CSSStyleRule) {\n\t\treturn rule.selectorText === selector;\n\t}\n\treturn rule.cssText.includes(selector);\n}\n"],"names":["STYLE_TOKEN_ATTR","rootConfigs","WeakMap","strictEngines","createRuntimeStyleSheet","CSSStyleSheet","registerStyleRoot","root","options","previous","get","destroy","delete","set","nonce","sheet","unregisterStyleRoot","engine","setStyleProperty","el","property","value","config","resolveConfig","getStrictEngine","settings","setProperty","setInlineProperty","removeStyleProperty","setStyleProperties","properties","setProperties","Object","entries","setStyleText","cssText","style","appendStyleText","current","getStyleNonceForNode","node","resolveStyleRootFromNode","startsWith","includes","removeProperty","cached","StrictStyleEngine","isShadowRoot","ShadowRoot","isDocument","Document","rootNode","getRootNode","document","declarationByElement","tokenByDeclaration","Map","declarationByToken","tokenRefCount","tokenByElement","tokenCounter","fallbackStyleElement","ownsAdoptedSheet","this","clearRuntimeRules","adoptedStyleSheets","filter","adoptedSheet","remove","clear","declarations","getOrCreateDeclarations","name","normalizePropertyName","syncElementToken","parseStyleText","size","clearElementStyles","parsed","serializeDeclarations","existing","created","previousToken","declarationText","token","toString","insertRule","retainToken","releaseToken","setAttribute","rule","buildTokenSelector","ensureSheet","cssRules","length","adopted","ensureFallbackStyleElement","removeAttribute","declaration","deleteRule","selector","index","isTokenSelectorMatch","createElement","appendChild","head","documentElement","styleText","rawPart","split","part","trim","separator","indexOf","slice","Array","from","sort","a","b","localeCompare","map","join","trimmed","toLowerCase","replace","char","CSSStyleRule","selectorText"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarItem-BpZggUGo.mjs","sources":["../../src/plugins/toolbar/ToolbarItem.ts"],"sourcesContent":["/**\n * ToolbarItem: describes a toolbar button registered by a plugin.\n */\n\nimport type { EditorState } from '../../state/EditorState.js';\nimport { isMac } from '../../view/Platform.js';\nimport type { PluginContext } from '../Plugin.js';\n\nexport interface GridPickerConfig {\n\treadonly maxRows: number;\n\treadonly maxCols: number;\n\tonSelect(rows: number, cols: number): void;\n}\n\nexport interface DropdownConfig {\n\treadonly items: readonly { label: string; command: string; icon?: string }[];\n}\n\nexport type ToolbarGroup = 'format' | 'block' | 'insert' | (string & {});\nexport type PopupType = 'gridPicker' | 'dropdown' | 'custom' | 'combobox';\n\ninterface ToolbarItemBase {\n\treadonly id: string;\n\t/** Grouping key: 'format' | 'insert' | 'block' or custom. */\n\treadonly group: ToolbarGroup;\n\t/** Icon content: inline SVG markup or plain text. Rendered via innerHTML. */\n\treadonly icon: string;\n\treadonly label: string;\n\t/** Tooltip shown on hover, e.g. \"Bold (Ctrl+B)\". Falls back to label. */\n\treadonly tooltip?: string;\n\t/** Command name to execute on click. */\n\treadonly command: string;\n\t/**\n\t * Lower priority renders further left.\n\t * @deprecated Use the declarative `toolbar` config on `createEditor()` instead.\n\t */\n\treadonly priority?: number;\n\t/**\n\t * When true, a visual separator is rendered after this item.\n\t * @deprecated Use the declarative `toolbar` config on `createEditor()` instead.\n\t */\n\treadonly separatorAfter?: boolean;\n\tisActive?(state: EditorState): boolean;\n\tisEnabled?(state: EditorState): boolean;\n}\n\ninterface ToolbarItemNoPopup extends ToolbarItemBase {\n\treadonly popupType?: undefined;\n}\n\ninterface ToolbarItemGridPicker extends ToolbarItemBase {\n\treadonly popupType: 'gridPicker';\n\treadonly popupConfig: GridPickerConfig;\n}\n\ninterface ToolbarItemDropdown extends ToolbarItemBase {\n\treadonly popupType: 'dropdown';\n\treadonly popupConfig: DropdownConfig;\n}\n\ninterface ToolbarItemCustomPopup extends ToolbarItemBase {\n\treadonly popupType: 'custom';\n\trenderPopup(
|
|
1
|
+
{"version":3,"file":"ToolbarItem-BpZggUGo.mjs","sources":["../../src/plugins/toolbar/ToolbarItem.ts"],"sourcesContent":["/**\n * ToolbarItem: describes a toolbar button registered by a plugin.\n */\n\nimport type { EditorState } from '../../state/EditorState.js';\nimport { isMac } from '../../view/Platform.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupCloseOptions } from '../shared/PopupManager.js';\n\nexport interface GridPickerConfig {\n\treadonly maxRows: number;\n\treadonly maxCols: number;\n\tonSelect(rows: number, cols: number): void;\n}\n\nexport interface DropdownConfig {\n\treadonly items: readonly { label: string; command: string; icon?: string }[];\n}\n\nexport type ToolbarGroup = 'format' | 'block' | 'insert' | (string & {});\nexport type PopupType = 'gridPicker' | 'dropdown' | 'custom' | 'combobox';\n\ninterface ToolbarItemBase {\n\treadonly id: string;\n\t/** Grouping key: 'format' | 'insert' | 'block' or custom. */\n\treadonly group: ToolbarGroup;\n\t/** Icon content: inline SVG markup or plain text. Rendered via innerHTML. */\n\treadonly icon: string;\n\treadonly label: string;\n\t/** Tooltip shown on hover, e.g. \"Bold (Ctrl+B)\". Falls back to label. */\n\treadonly tooltip?: string;\n\t/** Command name to execute on click. */\n\treadonly command: string;\n\t/**\n\t * Lower priority renders further left.\n\t * @deprecated Use the declarative `toolbar` config on `createEditor()` instead.\n\t */\n\treadonly priority?: number;\n\t/**\n\t * When true, a visual separator is rendered after this item.\n\t * @deprecated Use the declarative `toolbar` config on `createEditor()` instead.\n\t */\n\treadonly separatorAfter?: boolean;\n\tisActive?(state: EditorState): boolean;\n\tisEnabled?(state: EditorState): boolean;\n}\n\ninterface ToolbarItemNoPopup extends ToolbarItemBase {\n\treadonly popupType?: undefined;\n}\n\ninterface ToolbarItemGridPicker extends ToolbarItemBase {\n\treadonly popupType: 'gridPicker';\n\treadonly popupConfig: GridPickerConfig;\n}\n\ninterface ToolbarItemDropdown extends ToolbarItemBase {\n\treadonly popupType: 'dropdown';\n\treadonly popupConfig: DropdownConfig;\n}\n\ninterface ToolbarItemCustomPopup extends ToolbarItemBase {\n\treadonly popupType: 'custom';\n\trenderPopup(\n\t\tcontainer: HTMLElement,\n\t\tcontext: PluginContext,\n\t\tonClose: (options?: PopupCloseOptions) => void,\n\t): void;\n}\n\nexport interface ToolbarItemCombobox extends Omit<ToolbarItemBase, 'icon'> {\n\treadonly popupType: 'combobox';\n\t/** Optional icon — combobox items typically display a text label instead. */\n\treadonly icon?: string;\n\t/** Pure function returning the current label text. Called on every state change. */\n\tgetLabel(state: EditorState): string;\n\t/** Renders the popup content when the combobox is opened. */\n\trenderPopup(\n\t\tcontainer: HTMLElement,\n\t\tcontext: PluginContext,\n\t\tonClose: (options?: PopupCloseOptions) => void,\n\t): void;\n}\n\nexport type ToolbarItem =\n\t| ToolbarItemNoPopup\n\t| ToolbarItemGridPicker\n\t| ToolbarItemDropdown\n\t| ToolbarItemCustomPopup\n\t| ToolbarItemCombobox;\n\n/**\n * Formats a keymap binding string into a human-readable shortcut,\n * using platform-appropriate modifier symbols (⌘ on Mac, Ctrl on others).\n *\n * @example formatShortcut('Mod-B') → \"Ctrl+B\" or \"⌘B\"\n * @example formatShortcut('Mod-Shift-X') → \"Ctrl+Shift+X\" or \"⌘⇧X\"\n */\nexport function formatShortcut(binding: string): string {\n\tif (isMac()) {\n\t\treturn binding\n\t\t\t.replace(/Mod/g, '⌘')\n\t\t\t.replace(/Shift/g, '⇧')\n\t\t\t.replace(/Alt/g, '⌥')\n\t\t\t.replace(/-/g, '');\n\t}\n\treturn binding.replace(/Mod/g, 'Ctrl').replace(/-/g, '+');\n}\n"],"names":["formatShortcut","binding","isMac","replace"],"mappings":";AAkGO,SAASA,EAAeC,IAAAA;AAC9B,SAAIC,EAAAA,IACID,GACLE,QAAQ,QAAQ,GAAA,EAChBA,QAAQ,UAAU,GAAA,EAClBA,QAAQ,QAAQ,GAAA,EAChBA,QAAQ,MAAM,EAAA,IAEVF,GAAQE,QAAQ,QAAQ,MAAA,EAAQA,QAAQ,MAAM,GAAA;AACtD;"}
|