@expressivecss/expressive 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +231 -1
- package/README.md +37 -1
- package/dist/css/expressive.css +5111 -36
- package/dist/css/expressive.css.map +1 -1
- package/dist/css/expressive.min.css +1 -1
- package/dist/css/expressive.min.css.map +1 -1
- package/dist/fonts/material-symbols-outlined.woff2 +0 -0
- package/dist/fonts/material-symbols-rounded.woff2 +0 -0
- package/dist/fonts/material-symbols-sharp.woff2 +0 -0
- package/dist/js/chunks/{chunk-HLDXZ7XB.mjs → chunk-3CLXLPYS.mjs} +2 -2
- package/dist/js/chunks/chunk-3DHK5CZU.mjs +105 -0
- package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +7 -0
- package/dist/js/chunks/chunk-4PWAPV6F.mjs +7 -0
- package/dist/js/chunks/chunk-4PWAPV6F.mjs.map +7 -0
- package/dist/js/chunks/{chunk-HB6IW7QQ.mjs → chunk-55IA2XUC.mjs} +2 -2
- package/dist/js/chunks/chunk-CCWDV5CR.mjs +292 -0
- package/dist/js/chunks/chunk-CCWDV5CR.mjs.map +7 -0
- package/dist/js/chunks/chunk-DTKR54I6.mjs +270 -0
- package/dist/js/chunks/chunk-DTKR54I6.mjs.map +7 -0
- package/dist/js/chunks/chunk-GVGT6MIU.mjs +47 -0
- package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +7 -0
- package/dist/js/chunks/chunk-HKT2S7VM.mjs +48 -0
- package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +7 -0
- package/dist/js/chunks/chunk-K4CJCRGE.mjs +262 -0
- package/dist/js/chunks/chunk-K4CJCRGE.mjs.map +7 -0
- package/dist/js/chunks/chunk-LNCCYGPC.mjs +163 -0
- package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +7 -0
- package/dist/js/chunks/chunk-NQLC3YMW.mjs +1 -0
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs +406 -0
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +7 -0
- package/dist/js/chunks/chunk-P3G3QHII.mjs +166 -0
- package/dist/js/chunks/chunk-P3G3QHII.mjs.map +7 -0
- package/dist/js/chunks/{chunk-H2WA4XHH.mjs → chunk-PLYXLSH3.mjs} +4 -4
- package/dist/js/chunks/chunk-QKWPQK5N.mjs +179 -0
- package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +7 -0
- package/dist/js/chunks/chunk-RHRQKTTX.mjs +139 -0
- package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +7 -0
- package/dist/js/chunks/chunk-SPETGK25.mjs +59 -0
- package/dist/js/chunks/chunk-SPETGK25.mjs.map +7 -0
- package/dist/js/chunks/{chunk-YSBCHYXP.mjs → chunk-U2OTHOTI.mjs} +116 -12
- package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +7 -0
- package/dist/js/chunks/chunk-VTLBW7QS.mjs +124 -0
- package/dist/js/chunks/chunk-VTLBW7QS.mjs.map +7 -0
- package/dist/js/chunks/{chunk-RFZZCYVU.mjs → chunk-XGHORT7J.mjs} +2 -2
- package/dist/js/chunks/{chunk-HNFSMIBY.mjs → chunk-XH6BEEMY.mjs} +69 -16
- package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +7 -0
- package/dist/js/expressive.cjs +2209 -32
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +2209 -32
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +10 -10
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +68 -20
- package/dist/js/expressive.mjs.map +1 -1
- package/dist/js/internal/behaviors/forms.mjs +1 -1
- package/dist/js/internal/components/autocomplete.mjs +2 -2
- package/dist/js/internal/components/barChart.mjs +10 -0
- package/dist/js/internal/components/barChart.mjs.map +7 -0
- package/dist/js/internal/components/chips.mjs +3 -3
- package/dist/js/internal/components/columnChart.mjs +9 -0
- package/dist/js/internal/components/columnChart.mjs.map +7 -0
- package/dist/js/internal/components/commandPalette.mjs +9 -0
- package/dist/js/internal/components/commandPalette.mjs.map +7 -0
- package/dist/js/internal/components/datepicker.mjs +3 -3
- package/dist/js/internal/components/heatmapChart.mjs +9 -0
- package/dist/js/internal/components/heatmapChart.mjs.map +7 -0
- package/dist/js/internal/components/index.mjs +65 -17
- package/dist/js/internal/components/lineChart.mjs +12 -0
- package/dist/js/internal/components/lineChart.mjs.map +7 -0
- package/dist/js/internal/components/menu.mjs +1 -1
- package/dist/js/internal/components/messageScroller.mjs +9 -0
- package/dist/js/internal/components/messageScroller.mjs.map +7 -0
- package/dist/js/internal/components/mixedChart.mjs +10 -0
- package/dist/js/internal/components/mixedChart.mjs.map +7 -0
- package/dist/js/internal/components/pieChart.mjs +9 -0
- package/dist/js/internal/components/pieChart.mjs.map +7 -0
- package/dist/js/internal/components/questionnaire.mjs +9 -0
- package/dist/js/internal/components/questionnaire.mjs.map +7 -0
- package/dist/js/internal/components/radarChart.mjs +9 -0
- package/dist/js/internal/components/radarChart.mjs.map +7 -0
- package/dist/js/internal/components/radialChart.mjs +9 -0
- package/dist/js/internal/components/radialChart.mjs.map +7 -0
- package/dist/js/internal/components/registry.mjs +23 -11
- package/dist/js/internal/components/richTextEditor.mjs +9 -0
- package/dist/js/internal/components/richTextEditor.mjs.map +7 -0
- package/dist/js/internal/components/select.mjs +2 -2
- package/dist/js/modular.mjs +68 -20
- package/dist/types/behaviors/forms.d.ts +22 -0
- package/dist/types/components/barChart.d.ts +24 -0
- package/dist/types/components/columnChart.d.ts +21 -0
- package/dist/types/components/commandPalette.d.ts +96 -0
- package/dist/types/components/heatmapChart.d.ts +49 -0
- package/dist/types/components/index.d.ts +12 -0
- package/dist/types/components/lineChart.d.ts +134 -0
- package/dist/types/components/menu.d.ts +31 -0
- package/dist/types/components/messageScroller.d.ts +111 -0
- package/dist/types/components/mixedChart.d.ts +25 -0
- package/dist/types/components/pieChart.d.ts +40 -0
- package/dist/types/components/questionnaire.d.ts +96 -0
- package/dist/types/components/radarChart.d.ts +39 -0
- package/dist/types/components/radialChart.d.ts +45 -0
- package/dist/types/components/registry.d.ts +44 -0
- package/dist/types/components/richTextEditor.d.ts +71 -0
- package/dist/types/modular.d.ts +10 -1
- package/package.json +4 -1
- package/src/sass/README.md +3 -6
- package/src/sass/abstracts/_index.scss +1 -1
- package/src/sass/abstracts/_mixins.scss +226 -0
- package/src/sass/abstracts/_variables.scss +14 -0
- package/src/sass/base/_typography.scss +45 -0
- package/src/sass/components/_accordion.scss +161 -0
- package/src/sass/components/_aura.scss +119 -0
- package/src/sass/components/_avatar.scss +86 -0
- package/src/sass/components/_bar-chart.scss +285 -0
- package/src/sass/components/_bottom-sheet.scss +1 -0
- package/src/sass/components/_button-groups.scss +13 -3
- package/src/sass/components/_cards.scss +16 -13
- package/src/sass/components/_column-chart.scss +134 -0
- package/src/sass/components/_command-palette.scss +140 -0
- package/src/sass/components/_countdown.scss +89 -0
- package/src/sass/components/_data-table.scss +188 -0
- package/src/sass/components/_dialog.scss +1 -0
- package/src/sass/components/_empty-state.scss +78 -0
- package/src/sass/components/_expanding-card.scss +3 -0
- package/src/sass/components/_heatmap-chart.scss +156 -0
- package/src/sass/components/_index.scss +27 -0
- package/src/sass/components/_kpi.scss +162 -0
- package/src/sass/components/_line-chart.scss +102 -0
- package/src/sass/components/_marquee.scss +111 -0
- package/src/sass/components/_menu.scss +10 -0
- package/src/sass/components/_message-scroller.scss +66 -0
- package/src/sass/components/_message.scss +202 -0
- package/src/sass/components/_mixed-chart.scss +157 -0
- package/src/sass/components/_navigation-bar.scss +1 -0
- package/src/sass/components/_navigation-rail.scss +9 -0
- package/src/sass/components/_pie-chart.scss +203 -0
- package/src/sass/components/_popover.scss +112 -0
- package/src/sass/components/_questionnaire.scss +144 -0
- package/src/sass/components/_radar-chart.scss +205 -0
- package/src/sass/components/_radial-chart.scss +174 -0
- package/src/sass/components/_rich-text-editor.scss +99 -0
- package/src/sass/components/_search.scss +1 -0
- package/src/sass/components/_side-sheet.scss +1 -0
- package/src/sass/components/_skeleton.scss +81 -0
- package/src/sass/components/_snackbar.scss +1 -0
- package/src/sass/components/_stat.scss +86 -0
- package/src/sass/components/_stepper.scss +190 -0
- package/src/sass/components/_timeline.scss +114 -0
- package/src/sass/components/_toolbar.scss +1 -0
- package/src/sass/components/_tooltip.scss +2 -0
- package/src/sass/components/_tree.scss +139 -0
- package/src/sass/components/forms/_drop-zone.scss +128 -0
- package/src/sass/components/forms/_index.scss +2 -0
- package/src/sass/components/forms/_input-fields.scss +133 -2
- package/src/sass/components/forms/_rating.scss +165 -0
- package/src/sass/tokens/_reference.scss +3 -15
- package/src/sass/utilities/_index.scss +2 -0
- package/src/sass/utilities/_scroll-area.scss +35 -0
- package/src/sass/utilities/_shapes.scss +164 -0
- package/dist/js/chunks/chunk-G3I5H2U3.mjs +0 -7
- package/dist/js/chunks/chunk-G3I5H2U3.mjs.map +0 -7
- package/dist/js/chunks/chunk-HNFSMIBY.mjs.map +0 -7
- package/dist/js/chunks/chunk-PSSHQWCX.mjs +0 -100
- package/dist/js/chunks/chunk-PSSHQWCX.mjs.map +0 -7
- package/dist/js/chunks/chunk-WWPAPHMA.mjs +0 -1
- package/dist/js/chunks/chunk-YSBCHYXP.mjs.map +0 -7
- /package/dist/js/chunks/{chunk-HLDXZ7XB.mjs.map → chunk-3CLXLPYS.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-HB6IW7QQ.mjs.map → chunk-55IA2XUC.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-WWPAPHMA.mjs.map → chunk-NQLC3YMW.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-H2WA4XHH.mjs.map → chunk-PLYXLSH3.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-RFZZCYVU.mjs.map → chunk-XGHORT7J.mjs.map} +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Utils
|
|
3
|
+
} from "./chunk-6OMRGML6.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Component
|
|
6
|
+
} from "./chunk-LTWPGFBR.mjs";
|
|
7
|
+
|
|
8
|
+
// src/ts/components/richTextEditor.ts
|
|
9
|
+
var _defaults = {
|
|
10
|
+
Editor: null,
|
|
11
|
+
extensions: []
|
|
12
|
+
};
|
|
13
|
+
var NAMING = ["aria-label", "aria-labelledby", "aria-describedby"];
|
|
14
|
+
var RichTextEditor = class _RichTextEditor extends Component {
|
|
15
|
+
constructor(el, options) {
|
|
16
|
+
super(el, options, _RichTextEditor);
|
|
17
|
+
/** The Tiptap editor. */
|
|
18
|
+
this.editor = null;
|
|
19
|
+
/** The element the editor is mounted in. */
|
|
20
|
+
this.content = null;
|
|
21
|
+
this._actions = /* @__PURE__ */ new Map();
|
|
22
|
+
this._label = null;
|
|
23
|
+
this._handleClick = (e) => {
|
|
24
|
+
const button = e.target.closest("button[data-command]");
|
|
25
|
+
const action = this._actions.get(button);
|
|
26
|
+
if (action && !button.disabled) this.editor.chain().focus()[action.command](action.attributes).run();
|
|
27
|
+
};
|
|
28
|
+
this._handleLabelClick = () => {
|
|
29
|
+
this.editor.chain().focus().run();
|
|
30
|
+
};
|
|
31
|
+
this._handleUpdate = () => {
|
|
32
|
+
this.textarea.value = this.editor.isEmpty ? "" : this.editor.getHTML();
|
|
33
|
+
this.textarea.dispatchEvent(new Event("input", { bubbles: true }));
|
|
34
|
+
};
|
|
35
|
+
this._handleTransaction = () => {
|
|
36
|
+
const can = this.editor.isEditable && this.editor.can();
|
|
37
|
+
for (const [button, { command, attributes, active }] of this._actions) {
|
|
38
|
+
button.disabled = !can || !(command in this.editor.commands) || !can[command](attributes);
|
|
39
|
+
if (!active) continue;
|
|
40
|
+
const on = this.editor.isActive(active, attributes);
|
|
41
|
+
button.setAttribute("aria-pressed", String(on));
|
|
42
|
+
button.classList.toggle("active", on);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
this.el["Expressive_RichTextEditor"] = this;
|
|
46
|
+
this.options = {
|
|
47
|
+
..._RichTextEditor.defaults,
|
|
48
|
+
...options
|
|
49
|
+
};
|
|
50
|
+
this.textarea = el.querySelector(":scope > textarea");
|
|
51
|
+
if (!this.textarea || !this.options.Editor) {
|
|
52
|
+
console.error("RichTextEditor needs a <textarea> child and the Tiptap Editor class in options.Editor.");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
for (const button of el.querySelectorAll("button[data-command]")) {
|
|
56
|
+
const command = button.dataset.command;
|
|
57
|
+
const attributes2 = button.dataset.attributes ? JSON.parse(button.dataset.attributes) : void 0;
|
|
58
|
+
const active = command.startsWith("toggle") ? command[6].toLowerCase() + command.slice(7) : void 0;
|
|
59
|
+
this._actions.set(button, { command, attributes: attributes2, active });
|
|
60
|
+
}
|
|
61
|
+
const attributes = { role: "textbox", "aria-multiline": "true" };
|
|
62
|
+
for (const name of NAMING) {
|
|
63
|
+
const value = this.textarea.getAttribute(name);
|
|
64
|
+
if (value) attributes[name] = value;
|
|
65
|
+
}
|
|
66
|
+
this._label = this.textarea.labels?.[0] ?? null;
|
|
67
|
+
if (this._label && !attributes["aria-labelledby"]) {
|
|
68
|
+
if (!this._label.id) this._label.id = `rich-text-editor-label-${Utils.guid()}`;
|
|
69
|
+
attributes["aria-labelledby"] = this._label.id;
|
|
70
|
+
this._label.addEventListener("click", this._handleLabelClick);
|
|
71
|
+
}
|
|
72
|
+
this.content = document.createElement("div");
|
|
73
|
+
this.content.className = "rich-text-editor-content";
|
|
74
|
+
this.textarea.after(this.content);
|
|
75
|
+
this.textarea.hidden = true;
|
|
76
|
+
this.editor = new this.options.Editor({
|
|
77
|
+
element: this.content,
|
|
78
|
+
extensions: this.options.extensions,
|
|
79
|
+
content: this.textarea.value,
|
|
80
|
+
editable: !(this.textarea.disabled || this.textarea.readOnly),
|
|
81
|
+
editorProps: { attributes }
|
|
82
|
+
});
|
|
83
|
+
this.editor.on("update", this._handleUpdate);
|
|
84
|
+
this.editor.on("transaction", this._handleTransaction);
|
|
85
|
+
this._handleTransaction();
|
|
86
|
+
el.addEventListener("click", this._handleClick);
|
|
87
|
+
}
|
|
88
|
+
static get defaults() {
|
|
89
|
+
return _defaults;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Initializes instances of RichTextEditor.
|
|
93
|
+
* @param els HTML elements.
|
|
94
|
+
* @param options Component options.
|
|
95
|
+
*/
|
|
96
|
+
static init(els, options = {}) {
|
|
97
|
+
return super.init(els, options, _RichTextEditor);
|
|
98
|
+
}
|
|
99
|
+
static getInstance(el) {
|
|
100
|
+
return el["Expressive_RichTextEditor"];
|
|
101
|
+
}
|
|
102
|
+
destroy() {
|
|
103
|
+
this.el["Expressive_RichTextEditor"] = void 0;
|
|
104
|
+
if (!this.editor) return;
|
|
105
|
+
this.el.removeEventListener("click", this._handleClick);
|
|
106
|
+
this._label?.removeEventListener("click", this._handleLabelClick);
|
|
107
|
+
this.editor.off("update", this._handleUpdate);
|
|
108
|
+
this.editor.off("transaction", this._handleTransaction);
|
|
109
|
+
this.editor.destroy();
|
|
110
|
+
this.editor = null;
|
|
111
|
+
this.content.remove();
|
|
112
|
+
this.textarea.hidden = false;
|
|
113
|
+
for (const button of this._actions.keys()) {
|
|
114
|
+
button.disabled = false;
|
|
115
|
+
button.classList.remove("active");
|
|
116
|
+
button.removeAttribute("aria-pressed");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export {
|
|
122
|
+
RichTextEditor
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=chunk-VTLBW7QS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/richTextEditor.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils } from '../core/utils';\nimport { Component, BaseOptions, InitElements, InitElement } from '../core/component';\n\n/**\n * The parts of a Tiptap `Editor` this component uses. Declared here so the\n * published types do not depend on Tiptap.\n */\nexport interface RichTextEditorInstance {\n commands: object;\n isEditable: boolean;\n isEmpty: boolean;\n chain(): any;\n can(): any;\n isActive(name: string, attributes?: object): boolean;\n getHTML(): string;\n on(event: string, callback: () => void): unknown;\n off(event: string, callback: () => void): unknown;\n destroy(): void;\n}\n\nexport interface RichTextEditorOptions extends BaseOptions {\n /**\n * Tiptap's `Editor` class. ExpressiveCSS does not bundle Tiptap, so the\n * page imports it and passes it in.\n * @default null\n */\n Editor: (new (options: any) => RichTextEditorInstance) | null;\n /**\n * Tiptap extensions, usually `[StarterKit]`.\n * @default []\n */\n extensions: unknown[];\n}\n\nconst _defaults: RichTextEditorOptions = {\n Editor: null,\n extensions: []\n};\n\ntype Action = { command: string; attributes?: object; active?: string };\n\n// Copied from the textarea onto the editable element.\nconst NAMING = ['aria-label', 'aria-labelledby', 'aria-describedby'];\n\n/**\n * A rich text editor built on Tiptap: a `.rich-text-editor` holding a\n * `<textarea>` and, usually, a `.toolbar` of `[data-command]` buttons.\n *\n * The textarea's value is the starting HTML. The component hides it, mounts\n * the editor after it and writes the editor's HTML back on every change, so\n * the textarea still submits with its form. A button's `data-command` names a\n * Tiptap command and `data-attributes` holds its JSON argument. Buttons are\n * disabled when their command cannot run, and `toggle*` commands report their\n * state with `aria-pressed` and `.active`.\n */\nexport class RichTextEditor extends Component<RichTextEditorOptions> {\n /** The Tiptap editor. */\n editor: RichTextEditorInstance | null = null;\n /** The form value. */\n textarea: HTMLTextAreaElement | null;\n /** The element the editor is mounted in. */\n content: HTMLElement | null = null;\n private _actions = new Map<HTMLButtonElement, Action>();\n private _label: HTMLLabelElement | null = null;\n\n constructor(el: HTMLElement, options: Partial<RichTextEditorOptions>) {\n super(el, options, RichTextEditor);\n this.el['Expressive_RichTextEditor'] = this;\n this.options = {\n ...RichTextEditor.defaults,\n ...options\n };\n this.textarea = el.querySelector(':scope > textarea');\n if (!this.textarea || !this.options.Editor) {\n console.error('RichTextEditor needs a <textarea> child and the Tiptap Editor class in options.Editor.');\n return;\n }\n\n for (const button of el.querySelectorAll<HTMLButtonElement>('button[data-command]')) {\n const command = button.dataset.command;\n const attributes = button.dataset.attributes ? JSON.parse(button.dataset.attributes) : undefined;\n // toggleBulletList is active while the selection is in a bulletList.\n const active = command.startsWith('toggle') ? command[6].toLowerCase() + command.slice(7) : undefined;\n this._actions.set(button, { command, attributes, active });\n }\n\n const attributes: Record<string, string> = { role: 'textbox', 'aria-multiline': 'true' };\n for (const name of NAMING) {\n const value = this.textarea.getAttribute(name);\n if (value) attributes[name] = value;\n }\n // A <label for> names the hidden textarea, so it has to name the editor\n // instead, and a click on it has to focus the editor.\n this._label = this.textarea.labels?.[0] ?? null;\n if (this._label && !attributes['aria-labelledby']) {\n if (!this._label.id) this._label.id = `rich-text-editor-label-${Utils.guid()}`;\n attributes['aria-labelledby'] = this._label.id;\n this._label.addEventListener('click', this._handleLabelClick);\n }\n\n this.content = document.createElement('div');\n this.content.className = 'rich-text-editor-content';\n this.textarea.after(this.content);\n this.textarea.hidden = true;\n this.editor = new this.options.Editor({\n element: this.content,\n extensions: this.options.extensions,\n content: this.textarea.value,\n editable: !(this.textarea.disabled || this.textarea.readOnly),\n editorProps: { attributes }\n });\n this.editor.on('update', this._handleUpdate);\n this.editor.on('transaction', this._handleTransaction);\n this._handleTransaction();\n el.addEventListener('click', this._handleClick);\n }\n\n static get defaults(): RichTextEditorOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of RichTextEditor.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<RichTextEditorOptions>): RichTextEditor;\n /**\n * Initializes instances of RichTextEditor.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: InitElements<InitElement>,\n options?: Partial<RichTextEditorOptions>\n ): RichTextEditor[];\n /**\n * Initializes instances of RichTextEditor.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<RichTextEditorOptions> = {}\n ): RichTextEditor | RichTextEditor[] {\n return super.init(els, options, RichTextEditor);\n }\n\n static getInstance(el: HTMLElement): RichTextEditor {\n return el['Expressive_RichTextEditor'];\n }\n\n destroy() {\n this.el['Expressive_RichTextEditor'] = undefined;\n if (!this.editor) return;\n this.el.removeEventListener('click', this._handleClick);\n this._label?.removeEventListener('click', this._handleLabelClick);\n this.editor.off('update', this._handleUpdate);\n this.editor.off('transaction', this._handleTransaction);\n this.editor.destroy();\n this.editor = null;\n this.content.remove();\n this.textarea.hidden = false;\n for (const button of this._actions.keys()) {\n button.disabled = false;\n button.classList.remove('active');\n button.removeAttribute('aria-pressed');\n }\n }\n\n private _handleClick = (e: MouseEvent) => {\n const button = (e.target as Element).closest<HTMLButtonElement>('button[data-command]');\n const action = this._actions.get(button);\n if (action && !button.disabled) this.editor.chain().focus()[action.command](action.attributes).run();\n };\n\n private _handleLabelClick = () => {\n this.editor.chain().focus().run();\n };\n\n private _handleUpdate = () => {\n this.textarea.value = this.editor.isEmpty ? '' : this.editor.getHTML();\n this.textarea.dispatchEvent(new Event('input', { bubbles: true }));\n };\n\n private _handleTransaction = () => {\n const can = this.editor.isEditable && this.editor.can();\n for (const [button, { command, attributes, active }] of this._actions) {\n button.disabled = !can || !(command in this.editor.commands) || !can[command](attributes);\n if (!active) continue;\n const on = this.editor.isActive(active, attributes);\n button.setAttribute('aria-pressed', String(on));\n button.classList.toggle('active', on);\n }\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["attributes"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Autocomplete
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3CLXLPYS.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Utils
|
|
6
6
|
} from "./chunk-6OMRGML6.mjs";
|
|
@@ -342,4 +342,4 @@ var Chips = _Chips;
|
|
|
342
342
|
export {
|
|
343
343
|
Chips
|
|
344
344
|
};
|
|
345
|
-
//# sourceMappingURL=chunk-
|
|
345
|
+
//# sourceMappingURL=chunk-XGHORT7J.mjs.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tooltip
|
|
3
|
+
} from "./chunk-CKQP6P76.mjs";
|
|
4
|
+
import {
|
|
5
|
+
ScrollSpy
|
|
6
|
+
} from "./chunk-QV2JAWIZ.mjs";
|
|
1
7
|
import {
|
|
2
8
|
Tabs
|
|
3
9
|
} from "./chunk-3VOK6J7U.mjs";
|
|
@@ -5,21 +11,54 @@ import {
|
|
|
5
11
|
Timepicker
|
|
6
12
|
} from "./chunk-IFXVDDDH.mjs";
|
|
7
13
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
14
|
+
MessageScroller
|
|
15
|
+
} from "./chunk-CCWDV5CR.mjs";
|
|
16
|
+
import {
|
|
17
|
+
MixedChart
|
|
18
|
+
} from "./chunk-HKT2S7VM.mjs";
|
|
19
|
+
import {
|
|
20
|
+
NavigationRail
|
|
21
|
+
} from "./chunk-6N2XAEFK.mjs";
|
|
22
|
+
import {
|
|
23
|
+
PieChart
|
|
24
|
+
} from "./chunk-P3G3QHII.mjs";
|
|
25
|
+
import {
|
|
26
|
+
Questionnaire
|
|
27
|
+
} from "./chunk-DTKR54I6.mjs";
|
|
28
|
+
import {
|
|
29
|
+
RadarChart
|
|
30
|
+
} from "./chunk-3DHK5CZU.mjs";
|
|
31
|
+
import {
|
|
32
|
+
RadialChart
|
|
33
|
+
} from "./chunk-RHRQKTTX.mjs";
|
|
34
|
+
import {
|
|
35
|
+
CommandPalette
|
|
36
|
+
} from "./chunk-K4CJCRGE.mjs";
|
|
37
|
+
import {
|
|
38
|
+
Datepicker
|
|
39
|
+
} from "./chunk-PLYXLSH3.mjs";
|
|
40
|
+
import {
|
|
41
|
+
FormSelect
|
|
42
|
+
} from "./chunk-55IA2XUC.mjs";
|
|
10
43
|
import {
|
|
11
44
|
EXPANDING_CARD_SELECTOR,
|
|
12
45
|
ExpandingCard
|
|
13
46
|
} from "./chunk-QVVEWBOF.mjs";
|
|
47
|
+
import {
|
|
48
|
+
HeatmapChart
|
|
49
|
+
} from "./chunk-LNCCYGPC.mjs";
|
|
14
50
|
import {
|
|
15
51
|
Lightbox
|
|
16
52
|
} from "./chunk-UNEMYWEW.mjs";
|
|
17
53
|
import {
|
|
18
|
-
|
|
19
|
-
} from "./chunk-
|
|
54
|
+
BarChart
|
|
55
|
+
} from "./chunk-GVGT6MIU.mjs";
|
|
20
56
|
import {
|
|
21
|
-
|
|
22
|
-
} from "./chunk-
|
|
57
|
+
ColumnChart
|
|
58
|
+
} from "./chunk-SPETGK25.mjs";
|
|
59
|
+
import {
|
|
60
|
+
LineChart
|
|
61
|
+
} from "./chunk-O5XPWXIQ.mjs";
|
|
23
62
|
import {
|
|
24
63
|
ButtonGroup
|
|
25
64
|
} from "./chunk-YDCS5S3J.mjs";
|
|
@@ -36,19 +75,13 @@ import {
|
|
|
36
75
|
} from "./chunk-LWBQIX5J.mjs";
|
|
37
76
|
import {
|
|
38
77
|
Chips
|
|
39
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-XGHORT7J.mjs";
|
|
40
79
|
import {
|
|
41
80
|
Autocomplete
|
|
42
|
-
} from "./chunk-
|
|
43
|
-
import {
|
|
44
|
-
Datepicker
|
|
45
|
-
} from "./chunk-H2WA4XHH.mjs";
|
|
46
|
-
import {
|
|
47
|
-
FormSelect
|
|
48
|
-
} from "./chunk-HB6IW7QQ.mjs";
|
|
81
|
+
} from "./chunk-3CLXLPYS.mjs";
|
|
49
82
|
import {
|
|
50
83
|
Menu
|
|
51
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-U2OTHOTI.mjs";
|
|
52
85
|
import {
|
|
53
86
|
AppBar
|
|
54
87
|
} from "./chunk-UEZUJQ66.mjs";
|
|
@@ -76,11 +109,31 @@ var AUTO_INIT_COMPONENTS = {
|
|
|
76
109
|
},
|
|
77
110
|
Carousel: { component: Carousel, selector: ".carousel" },
|
|
78
111
|
Chips: { component: Chips, selector: ".chips" },
|
|
112
|
+
ColumnChart: { component: ColumnChart, selector: ".column-chart" },
|
|
113
|
+
BarChart: { component: BarChart, selector: ".bar-chart" },
|
|
114
|
+
PieChart: { component: PieChart, selector: ".pie-chart" },
|
|
115
|
+
HeatmapChart: { component: HeatmapChart, selector: ".heatmap-chart" },
|
|
116
|
+
RadarChart: { component: RadarChart, selector: ".radar-chart" },
|
|
117
|
+
RadialChart: { component: RadialChart, selector: ".radial-chart" },
|
|
118
|
+
MixedChart: { component: MixedChart, selector: ".mixed-chart" },
|
|
119
|
+
CommandPalette: {
|
|
120
|
+
component: CommandPalette,
|
|
121
|
+
selector: "dialog.command-palette"
|
|
122
|
+
},
|
|
123
|
+
Questionnaire: {
|
|
124
|
+
component: Questionnaire,
|
|
125
|
+
selector: "form.questionnaire"
|
|
126
|
+
},
|
|
79
127
|
Datepicker: {
|
|
80
128
|
component: Datepicker,
|
|
81
129
|
selector: ".datepicker, .date-picker"
|
|
82
130
|
},
|
|
131
|
+
LineChart: { component: LineChart, selector: ".line-chart" },
|
|
83
132
|
Menu: { component: Menu, selector: ".menu-trigger" },
|
|
133
|
+
MessageScroller: {
|
|
134
|
+
component: MessageScroller,
|
|
135
|
+
selector: ".message-scroller"
|
|
136
|
+
},
|
|
84
137
|
Lightbox: { component: Lightbox, selector: ".lightboxed" },
|
|
85
138
|
ScrollSpy: { component: ScrollSpy, selector: ".scrollspy" },
|
|
86
139
|
FormSelect: { component: FormSelect, selector: "select" },
|
|
@@ -117,4 +170,4 @@ export {
|
|
|
117
170
|
AUTO_INIT_COMPONENTS,
|
|
118
171
|
AutoInit
|
|
119
172
|
};
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-XH6BEEMY.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/registry.ts"],
|
|
4
|
+
"sourcesContent": ["import { InitElements, InitElement } from \"../core/component\";\nimport * as Components from \"./index\";\nimport { CARDS_SELECTOR, isCardReveal } from \"./cards\";\nimport { EXPANDING_CARD_SELECTOR } from \"./expandingCard\";\n\n/**\n * The components `AutoInit()` starts, in initialization order, with the\n * selector each one claims.\n *\n * This table is the single source of truth: the options type below and the\n * init calls in `AutoInit()` are both derived from it, so wiring up a new\n * auto-initialized component means adding one line here (plus its export in\n * ./index.ts) - not four hand-synchronized edits that fail silently when one\n * is forgotten.\n *\n * A component that should only ever be constructed explicitly (Snackbar,\n * CharacterCounter, Range, ...) simply stays out of this table.\n */\nexport const AUTO_INIT_COMPONENTS = {\n AppBar: {\n component: Components.AppBar,\n selector:\n \"header.medium, header.large, header:has(> :is(nav:not(.tabs, .navigation-bar, .navigation-rail), .bar) > :is(.search-bar, .searchbar))\",\n },\n Autocomplete: {\n component: Components.Autocomplete,\n selector: \".autocomplete\",\n },\n ButtonGroup: {\n component: Components.ButtonGroup,\n selector: \".button-group\",\n },\n // Shared with Cards.Init() - see CARDS_SELECTOR. This entry used to read\n // '.cards', which no card markup uses.\n Cards: { component: Components.Cards, selector: CARDS_SELECTOR, filter: isCardReveal },\n ExpandingCard: {\n component: Components.ExpandingCard,\n selector: EXPANDING_CARD_SELECTOR,\n },\n Carousel: { component: Components.Carousel, selector: \".carousel\" },\n Chips: { component: Components.Chips, selector: \".chips\" },\n ColumnChart: { component: Components.ColumnChart, selector: \".column-chart\" },\n BarChart: { component: Components.BarChart, selector: \".bar-chart\" },\n PieChart: { component: Components.PieChart, selector: \".pie-chart\" },\n HeatmapChart: { component: Components.HeatmapChart, selector: \".heatmap-chart\" },\n RadarChart: { component: Components.RadarChart, selector: \".radar-chart\" },\n RadialChart: { component: Components.RadialChart, selector: \".radial-chart\" },\n MixedChart: { component: Components.MixedChart, selector: \".mixed-chart\" },\n CommandPalette: {\n component: Components.CommandPalette,\n selector: \"dialog.command-palette\",\n },\n Questionnaire: {\n component: Components.Questionnaire,\n selector: \"form.questionnaire\",\n },\n Datepicker: {\n component: Components.Datepicker,\n selector: \".datepicker, .date-picker\",\n },\n LineChart: { component: Components.LineChart, selector: \".line-chart\" },\n Menu: { component: Components.Menu, selector: \".menu-trigger\" },\n MessageScroller: {\n component: Components.MessageScroller,\n selector: \".message-scroller\",\n },\n Lightbox: { component: Components.Lightbox, selector: \".lightboxed\" },\n ScrollSpy: { component: Components.ScrollSpy, selector: \".scrollspy\" },\n FormSelect: { component: Components.FormSelect, selector: \"select\" },\n NavigationRail: {\n component: Components.NavigationRail,\n selector: \".navigation-rail\",\n },\n Tabs: { component: Components.Tabs, selector: \".tabs\" },\n Timepicker: {\n component: Components.Timepicker,\n selector: \".timepicker, .time-picker\",\n },\n Tooltip: { component: Components.Tooltip, selector: \".tooltipped\" },\n FloatingActionButton: {\n component: Components.FloatingActionButton,\n selector: \".fab-menu\",\n },\n};\n\ntype Registry = typeof AUTO_INIT_COMPONENTS;\n\n/**\n * Per-component options accepted by {@link AutoInit}, derived from the table\n * above - each key takes that component's own options type.\n */\nexport type AutoInitOptions = {\n [K in keyof Registry]?: Partial<\n InstanceType<Registry[K][\"component\"]>[\"options\"]\n >;\n};\n\n/** The shape every entry in the table satisfies; see the cast in AutoInit. */\ntype AutoInitable = {\n init(els: InitElement | InitElements<InitElement>, options: Partial<object>): unknown;\n};\n\ntype AutoInitEntry = {\n component: AutoInitable;\n selector: string;\n filter?: (el: Element) => boolean;\n};\n\n/**\n * Automatically initialize components.\n * @param context Root element to initialize. Defaults to `document.body`.\n * @param options Options for each component.\n */\nexport function AutoInit(\n context: HTMLElement = document.body,\n options?: Partial<AutoInitOptions>,\n) {\n for (const name of Object.keys(AUTO_INIT_COMPONENTS) as (keyof Registry)[]) {\n const { component, selector, filter } = AUTO_INIT_COMPONENTS[\n name\n ] as unknown as AutoInitEntry;\n // `:is()` so that `:not(.no-autoinit)` applies to the whole selector. A\n // bare `${selector}:not(...)` binds the negation to the last alternative\n // only, which would silently break the opt-out for any comma-separated\n // entry (Cards is the first).\n const els = context.querySelectorAll(`:is(${selector}):not(.no-autoinit)`);\n // Each component's static `init` is overloaded; indexing the table widens\n // it to a union TypeScript cannot call, so narrow it once, here.\n if (filter) {\n els.forEach((el) => {\n if (filter(el)) component.init(el, options?.[name] ?? {});\n });\n } else {\n component.init(els, options?.[name] ?? {});\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,uBAAuB;AAAA,EAClC,QAAQ;AAAA,IACN,WAAsB;AAAA,IACtB,UACE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACX,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA;AAAA;AAAA,EAGA,OAAO,EAAE,WAAsB,OAAO,UAAU,gBAAgB,QAAQ,aAAa;AAAA,EACrF,eAAe;AAAA,IACb,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,UAAU,EAAE,WAAsB,UAAU,UAAU,YAAY;AAAA,EAClE,OAAO,EAAE,WAAsB,OAAO,UAAU,SAAS;AAAA,EACzD,aAAa,EAAE,WAAsB,aAAa,UAAU,gBAAgB;AAAA,EAC5E,UAAU,EAAE,WAAsB,UAAU,UAAU,aAAa;AAAA,EACnE,UAAU,EAAE,WAAsB,UAAU,UAAU,aAAa;AAAA,EACnE,cAAc,EAAE,WAAsB,cAAc,UAAU,iBAAiB;AAAA,EAC/E,YAAY,EAAE,WAAsB,YAAY,UAAU,eAAe;AAAA,EACzE,aAAa,EAAE,WAAsB,aAAa,UAAU,gBAAgB;AAAA,EAC5E,YAAY,EAAE,WAAsB,YAAY,UAAU,eAAe;AAAA,EACzE,gBAAgB;AAAA,IACd,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,IACV,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,WAAW,EAAE,WAAsB,WAAW,UAAU,cAAc;AAAA,EACtE,MAAM,EAAE,WAAsB,MAAM,UAAU,gBAAgB;AAAA,EAC9D,iBAAiB;AAAA,IACf,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,UAAU,EAAE,WAAsB,UAAU,UAAU,cAAc;AAAA,EACpE,WAAW,EAAE,WAAsB,WAAW,UAAU,aAAa;AAAA,EACrE,YAAY,EAAE,WAAsB,YAAY,UAAU,SAAS;AAAA,EACnE,gBAAgB;AAAA,IACd,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,MAAM,EAAE,WAAsB,MAAM,UAAU,QAAQ;AAAA,EACtD,YAAY;AAAA,IACV,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AAAA,EACA,SAAS,EAAE,WAAsB,SAAS,UAAU,cAAc;AAAA,EAClE,sBAAsB;AAAA,IACpB,WAAsB;AAAA,IACtB,UAAU;AAAA,EACZ;AACF;AA8BO,SAAS,SACd,UAAuB,SAAS,MAChC,SACA;AACA,aAAW,QAAQ,OAAO,KAAK,oBAAoB,GAAyB;AAC1E,UAAM,EAAE,WAAW,UAAU,OAAO,IAAI,qBACtC,IACF;AAKA,UAAM,MAAM,QAAQ,iBAAiB,OAAO,QAAQ,qBAAqB;AAGzE,QAAI,QAAQ;AACV,UAAI,QAAQ,CAAC,OAAO;AAClB,YAAI,OAAO,EAAE,EAAG,WAAU,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAAA,MAC1D,CAAC;AAAA,IACH,OAAO;AACL,gBAAU,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,CAAC;AAAA,IAC3C;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|