@echozedlabs/react 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ import type { HostServices, MarkdownEditorProps } from '@echozedlabs/core';
2
+ /** Optional toolbar controls backed by host services (link search + asset upload). */
3
+ export declare function HostServiceToolbar({ services, onInsertMarkdown, onDiagnostics, }: {
4
+ services?: HostServices;
5
+ onInsertMarkdown(markdown: string): void;
6
+ onDiagnostics(diagnostics: Parameters<NonNullable<MarkdownEditorProps['onDiagnostics']>>[0]): void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=HostServiceToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostServiceToolbar.d.ts","sourceRoot":"","sources":["../src/HostServiceToolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,gBAAgB,EAChB,aAAa,GACd,EAAE;IACD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACpG,2CA2IA"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ /** Optional toolbar controls backed by host services (link search + asset upload). */
4
+ export function HostServiceToolbar({ services, onInsertMarkdown, onDiagnostics, }) {
5
+ const [query, setQuery] = React.useState('');
6
+ const [suggestions, setSuggestions] = React.useState([]);
7
+ const [searching, setSearching] = React.useState(false);
8
+ const [uploading, setUploading] = React.useState(false);
9
+ const fileInputId = React.useId();
10
+ React.useEffect(() => {
11
+ if (!services?.searchLinks || query.trim().length === 0) {
12
+ setSuggestions([]);
13
+ setSearching(false);
14
+ return;
15
+ }
16
+ const controller = new AbortController();
17
+ setSearching(true);
18
+ services.searchLinks(query.trim(), controller.signal)
19
+ .then((nextSuggestions) => {
20
+ if (!controller.signal.aborted) {
21
+ setSuggestions(nextSuggestions);
22
+ }
23
+ })
24
+ .catch((error) => {
25
+ if (controller.signal.aborted) {
26
+ return;
27
+ }
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ onDiagnostics([{
30
+ code: 'host.searchLinks.failed',
31
+ message,
32
+ severity: 'error',
33
+ source: 'host-service',
34
+ }]);
35
+ setSuggestions([]);
36
+ })
37
+ .finally(() => {
38
+ if (!controller.signal.aborted) {
39
+ setSearching(false);
40
+ }
41
+ });
42
+ return () => controller.abort();
43
+ }, [onDiagnostics, query, services]);
44
+ async function uploadFile(file) {
45
+ if (!services?.uploadAsset) {
46
+ return;
47
+ }
48
+ const controller = new AbortController();
49
+ setUploading(true);
50
+ try {
51
+ const asset = await services.uploadAsset(file, controller.signal);
52
+ const alt = (asset.alt ?? file.name.replace(/\.[^.]+$/, '')) || 'Uploaded image';
53
+ onInsertMarkdown(`\n\n![${escapeMarkdownLabel(alt)}](${asset.url})\n`);
54
+ }
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : String(error);
57
+ onDiagnostics([{
58
+ code: 'host.uploadAsset.failed',
59
+ message,
60
+ severity: 'error',
61
+ source: 'host-service',
62
+ }]);
63
+ }
64
+ finally {
65
+ setUploading(false);
66
+ }
67
+ }
68
+ return (_jsxs("div", { className: "me-host-tools", "aria-label": "Host services", children: [services?.searchLinks ? (_jsxs("div", { className: "me-link-search", children: [_jsx("label", { className: "me-visually-hidden", htmlFor: `${fileInputId}-link-search`, children: "Search pages" }), _jsx("input", { id: `${fileInputId}-link-search`, type: "search", value: query, placeholder: "Search pages", "aria-label": "Search pages", "aria-controls": `${fileInputId}-link-suggestions`, "aria-expanded": suggestions.length > 0, onChange: (event) => setQuery(event.target.value) }), query.trim().length > 0 ? (_jsxs("div", { id: `${fileInputId}-link-suggestions`, className: "me-link-suggestions", role: "listbox", "aria-label": "Page suggestions", children: [searching ? _jsx("div", { className: "me-link-suggestion-status", children: "Searching..." }) : null, !searching && suggestions.length === 0 ? (_jsx("div", { className: "me-link-suggestion-status", children: "No matches" })) : null, suggestions.map((suggestion) => (_jsxs("button", { type: "button", role: "option", className: "me-link-suggestion", onClick: () => {
69
+ onInsertMarkdown(suggestion.insertText);
70
+ setQuery('');
71
+ setSuggestions([]);
72
+ }, children: [_jsx("span", { children: suggestion.label }), suggestion.description ? _jsx("small", { children: suggestion.description }) : null] }, suggestion.id)))] })) : null] })) : null, services?.uploadAsset ? (_jsxs("div", { className: "me-upload-control", children: [_jsx("input", { id: `${fileInputId}-asset-upload`, type: "file", accept: "image/*", "aria-label": "Upload image", onChange: (event) => {
73
+ const file = event.currentTarget.files?.[0];
74
+ event.currentTarget.value = '';
75
+ if (file) {
76
+ void uploadFile(file);
77
+ }
78
+ } }), _jsx("label", { className: "me-upload-button", htmlFor: `${fileInputId}-asset-upload`, children: uploading ? 'Uploading...' : 'Upload image' })] })) : null] }));
79
+ }
80
+ function escapeMarkdownLabel(value) {
81
+ return value.replace(/\\/g, '\\\\').replace(/]/g, '\\]');
82
+ }
83
+ //# sourceMappingURL=HostServiceToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostServiceToolbar.js","sourceRoot":"","sources":["../src/HostServiceToolbar.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAEV,UAAU,EAGV,oBAAoB,EACpB,mBAAmB,EAGpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAUxE,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,kBAAkB,GAAG,WAAW,CAAC;IAClF,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,wGAAwG;IACxG,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,2GAkXzB,CAAC"}
1
+ {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAEV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EAGpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAaxE,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,kBAAkB,GAAG,WAAW,CAAC;IAClF,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,wGAAwG;IACxG,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,2GA6ZzB,CAAC"}
@@ -3,6 +3,9 @@ import React from 'react';
3
3
  import { createMarkdownEditorView, } from '@echozedlabs/codemirror';
4
4
  import { createDefaultRendererRegistry, renderMarkdownToHtml, } from '@echozedlabs/renderers';
5
5
  import { sanitizePreviewHtml } from './sanitizeHtml.js';
6
+ import { PreviewSurface } from './PreviewSurface.js';
7
+ import { HostServiceToolbar } from './HostServiceToolbar.js';
8
+ import { IconSvg, LIST_ICON_PATH, SLIDERS_ICON_PATH } from './icons.js';
6
9
  const CODEMIRROR_MODES = new Set(['markdown', 'hybrid']);
7
10
  const DEFAULT_MODES = ['hybrid', 'markdown', 'preview'];
8
11
  const LazyWysiwygLexicalEditor = React.lazy(async () => {
@@ -14,10 +17,21 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
14
17
  const firstMode = initialMode ?? defaultMode ?? preferredInitialMode(allowedModes);
15
18
  const [internalMarkdown, setInternalMarkdown] = React.useState(defaultValue);
16
19
  const [internalMode, setInternalMode] = React.useState(allowedModes.includes(firstMode) ? firstMode : preferredInitialMode(allowedModes));
20
+ // If `modes` changes so the current internal mode is no longer permitted — e.g.
21
+ // a host reuses this editor instance for a different surface, or React
22
+ // reconciles one usage into another — fall back to a valid mode rather than
23
+ // rendering a mode outside `modes` (which would show no surface at all).
24
+ const fallbackMode = allowedModes.includes(firstMode) ? firstMode : preferredInitialMode(allowedModes);
25
+ const resolvedInternalMode = allowedModes.includes(internalMode) ? internalMode : fallbackMode;
26
+ React.useEffect(() => {
27
+ if (!allowedModes.includes(internalMode)) {
28
+ setInternalMode(fallbackMode);
29
+ }
30
+ }, [allowedModes, internalMode, fallbackMode]);
17
31
  const normalizedFrontmatterDisplay = frontmatterDisplay ?? 'expanded';
18
32
  const [showProperties, setShowProperties] = React.useState(normalizedFrontmatterDisplay !== 'hidden');
19
33
  const markdown = value ?? internalMarkdown;
20
- const activeMode = mode ?? internalMode;
34
+ const activeMode = mode ?? resolvedInternalMode;
21
35
  const hasFrontmatter = /^---\r?\n/.test(markdown);
22
36
  const hasHostServiceControls = !readOnly && hostServiceToolbar && activeMode !== 'preview' && (hostServices?.searchLinks !== undefined || hostServices?.uploadAsset !== undefined);
23
37
  const showToolbar = allowedModes.length > 1 || (activeMode === 'hybrid' && hasFrontmatter) || hasHostServiceControls;
@@ -29,12 +43,14 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
29
43
  const onSaveShortcutRef = React.useRef(onSaveShortcut);
30
44
  const onCancelShortcutRef = React.useRef(onCancelShortcut);
31
45
  const onDiagnosticsRef = React.useRef(onDiagnostics);
46
+ const hostServicesRef = React.useRef(hostServices);
32
47
  markdownRef.current = markdown;
33
48
  modeRef.current = activeMode;
34
49
  onChangeRef.current = onChange;
35
50
  onSaveShortcutRef.current = onSaveShortcut;
36
51
  onCancelShortcutRef.current = onCancelShortcut;
37
52
  onDiagnosticsRef.current = onDiagnostics;
53
+ hostServicesRef.current = hostServices;
38
54
  const isCodeMirrorMode = CODEMIRROR_MODES.has(activeMode);
39
55
  const hybridRenderMarkdown = React.useCallback(async (blockMarkdown, context) => {
40
56
  const activeRegistry = renderers ?? createDefaultRendererRegistry();
@@ -43,7 +59,10 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
43
59
  signal: context.signal,
44
60
  });
45
61
  onDiagnosticsRef.current?.(result.diagnostics);
46
- return { html: result.html };
62
+ // Sanitize before the hybrid widget injects it, exactly as the preview
63
+ // surface does — otherwise hybrid would be an unsanitized XSS path while
64
+ // preview is protected.
65
+ return { html: sanitizePreviewHtml(result.html) };
47
66
  }, [renderers]);
48
67
  const wysiwygRenderServices = React.useMemo(() => ({
49
68
  renderPlantUml: async (source, context) => {
@@ -59,8 +78,12 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
59
78
  return { html: result.html, diagnostics: result.diagnostics };
60
79
  },
61
80
  }), [hostServices, renderers]);
81
+ // Single diagnostics dispatch: both public channels (the onDiagnostics prop and
82
+ // the optional hostServices.reportDiagnostics) receive every diagnostic, so a
83
+ // host can use either without ambiguity.
62
84
  const emitDiagnostics = React.useCallback((diagnostics) => {
63
85
  onDiagnosticsRef.current?.(diagnostics);
86
+ hostServicesRef.current?.reportDiagnostics?.(diagnostics);
64
87
  }, []);
65
88
  React.useEffect(() => {
66
89
  if (!isCodeMirrorMode || !hostRef.current) {
@@ -103,7 +126,12 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
103
126
  cmRef.current = null;
104
127
  }
105
128
  };
106
- }, [ariaLabel, activeMode, hybridRenderMarkdown, isCodeMirrorMode, normalizedFrontmatterDisplay, propertySchema, readOnly, showProperties]);
129
+ // Recreate ONLY for true surface changes (entering/leaving CodeMirror, a new
130
+ // aria-label, a new property schema, or a new hybrid renderer). markdown<->hybrid,
131
+ // read-only, and show/hide-properties are reconfigured in place below so they
132
+ // keep selection, scroll, and undo history. `readOnly`/`activeMode`/properties
133
+ // values are read at creation and corrected by the in-place effects.
134
+ }, [ariaLabel, hybridRenderMarkdown, isCodeMirrorMode, propertySchema]);
107
135
  React.useEffect(() => {
108
136
  setShowProperties(normalizedFrontmatterDisplay !== 'hidden');
109
137
  }, [normalizedFrontmatterDisplay]);
@@ -116,6 +144,21 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
116
144
  handle.setMarkdown(markdown);
117
145
  }
118
146
  }, [markdown]);
147
+ // Reconfigure mode + frontmatter display in place (keeps selection, scroll, and
148
+ // undo history) instead of recreating the view on markdown<->hybrid or
149
+ // show/hide-properties changes.
150
+ React.useEffect(() => {
151
+ const handle = cmRef.current;
152
+ if (!handle || !isCodeMirrorMode) {
153
+ return;
154
+ }
155
+ const hybridFrontmatterMode = showProperties
156
+ ? normalizedFrontmatterDisplay === 'collapsed'
157
+ ? 'collapsed'
158
+ : 'table'
159
+ : 'hidden';
160
+ handle.setMode(activeMode, hybridFrontmatterMode);
161
+ }, [activeMode, showProperties, normalizedFrontmatterDisplay, isCodeMirrorMode]);
119
162
  React.useEffect(() => {
120
163
  cmRef.current?.setReadOnly(readOnly || activeMode === 'preview');
121
164
  }, [activeMode, readOnly]);
@@ -172,21 +215,20 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
172
215
  // Native CodeMirror history is intentionally preserved for now.
173
216
  },
174
217
  getSnapshot() {
218
+ const cmSelection = cmRef.current?.getSelection();
219
+ const textSelection = cmSelection ? cmSelectionToTextSelection(cmSelection) : null;
175
220
  return {
176
221
  markdown: markdownRef.current,
177
222
  version: 1,
178
223
  mode: modeRef.current,
179
- selection: undefined,
224
+ selection: textSelection
225
+ ? { ranges: [{ anchor: textSelection.from, head: textSelection.to }], mainIndex: 0 }
226
+ : undefined,
180
227
  };
181
228
  },
182
229
  replaceMarkdown(nextMarkdown, meta) {
183
- updateMarkdown(nextMarkdown, meta?.source ?? 'programmatic');
184
- onChangeRef.current?.(nextMarkdown, {
185
- source: 'programmatic',
186
- timestamp: Date.now(),
187
- mode: modeRef.current,
188
- ...meta,
189
- });
230
+ // updateMarkdown emits exactly one onChange (React is the single source).
231
+ updateMarkdown(nextMarkdown, meta?.source ?? 'programmatic', meta);
190
232
  },
191
233
  }), [value]);
192
234
  function selectMode(nextMode, source = 'user') {
@@ -204,9 +246,11 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
204
246
  timestamp: Date.now(),
205
247
  });
206
248
  }
207
- function updateMarkdown(nextMarkdown, source) {
249
+ function updateMarkdown(nextMarkdown, source, meta) {
208
250
  markdownRef.current = nextMarkdown;
209
- cmRef.current?.setMarkdown(nextMarkdown, { emitChange: true });
251
+ // React is the single emit source for imperative paths: set the document
252
+ // silently so CodeMirror does not also fire onChange (avoids a double-fire).
253
+ cmRef.current?.setMarkdown(nextMarkdown, { emitChange: false });
210
254
  if (value === undefined) {
211
255
  setInternalMarkdown(nextMarkdown);
212
256
  }
@@ -214,6 +258,7 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
214
258
  source,
215
259
  mode: modeRef.current,
216
260
  timestamp: Date.now(),
261
+ ...meta,
217
262
  });
218
263
  }
219
264
  function insertHostMarkdown(insertedMarkdown) {
@@ -233,7 +278,7 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
233
278
  const icon = modeIcons?.[allowedMode];
234
279
  return (_jsxs("button", { type: "button", className: "me-mode-button", "data-active": allowedMode === activeMode ? 'true' : 'false', "data-icon-only": icon ? 'true' : 'false', "aria-label": label, title: label, "aria-pressed": allowedMode === activeMode, onClick: () => selectMode(allowedMode), children: [icon ? _jsx("span", { className: "me-mode-button-icon", "aria-hidden": "true", children: icon }) : null, _jsx("span", { className: icon ? 'me-sr-only' : undefined, children: label })] }, allowedMode));
235
280
  })
236
- : null, activeMode === 'hybrid' && hasFrontmatter ? (_jsxs("button", { type: "button", className: "me-mode-button me-properties-toggle", "data-active": showProperties ? 'true' : 'false', "data-icon-only": "true", "aria-label": showProperties ? 'Hide properties' : 'Show properties', title: showProperties ? 'Hide properties' : 'Show properties', "aria-pressed": showProperties, onClick: () => setShowProperties((current) => !current), children: [_jsx("span", { className: "me-mode-button-icon", "aria-hidden": "true", children: showProperties ? _jsx(IconSvg, { path: SLIDERS_ICON_PATH, dataIcon: "sliders" }) : _jsx(IconSvg, { path: LIST_ICON_PATH, dataIcon: "list" }) }), _jsx("span", { className: "me-sr-only", children: showProperties ? 'Hide properties' : 'Show properties' })] })) : null, hasHostServiceControls ? (_jsx(HostServiceToolbar, { services: hostServices, onInsertMarkdown: insertHostMarkdown, onDiagnostics: emitDiagnostics })) : null] })) : null, isCodeMirrorMode ? (_jsx("div", { ref: hostRef, className: "me-editor-surface" })) : activeMode === 'preview' ? (_jsx(PreviewSurface, { markdown: markdown, registry: renderers, onDiagnostics: (diagnostics) => onDiagnosticsRef.current?.(diagnostics) })) : (_jsx(React.Suspense, { fallback: _jsx("div", { className: "me-wysiwyg-loading", role: "status", children: "Loading rich text editor..." }), children: _jsx(LazyWysiwygLexicalEditor, { markdown: markdown, readOnly: readOnly, ariaLabel: ariaLabel, renderServices: wysiwygRenderServices, toolbarIcons: wysiwygToolbarIcons, onDiagnostics: (diagnostics) => onDiagnosticsRef.current?.(diagnostics), onChange: (nextMarkdown, meta) => {
281
+ : null, activeMode === 'hybrid' && hasFrontmatter ? (_jsxs("button", { type: "button", className: "me-mode-button me-properties-toggle", "data-active": showProperties ? 'true' : 'false', "data-icon-only": "true", "aria-label": showProperties ? 'Hide properties' : 'Show properties', title: showProperties ? 'Hide properties' : 'Show properties', "aria-pressed": showProperties, onClick: () => setShowProperties((current) => !current), children: [_jsx("span", { className: "me-mode-button-icon", "aria-hidden": "true", children: showProperties ? _jsx(IconSvg, { path: SLIDERS_ICON_PATH, dataIcon: "sliders" }) : _jsx(IconSvg, { path: LIST_ICON_PATH, dataIcon: "list" }) }), _jsx("span", { className: "me-sr-only", children: showProperties ? 'Hide properties' : 'Show properties' })] })) : null, hasHostServiceControls ? (_jsx(HostServiceToolbar, { services: hostServices, onInsertMarkdown: insertHostMarkdown, onDiagnostics: emitDiagnostics })) : null] })) : null, isCodeMirrorMode ? (_jsx("div", { ref: hostRef, className: "me-editor-surface" })) : activeMode === 'preview' ? (_jsx(PreviewSurface, { markdown: markdown, registry: renderers, onDiagnostics: emitDiagnostics })) : (_jsx(React.Suspense, { fallback: _jsx("div", { className: "me-wysiwyg-loading", role: "status", children: "Loading rich text editor..." }), children: _jsx(LazyWysiwygLexicalEditor, { markdown: markdown, readOnly: readOnly, ariaLabel: ariaLabel, renderServices: wysiwygRenderServices, toolbarIcons: wysiwygToolbarIcons, onDiagnostics: emitDiagnostics, onChange: (nextMarkdown, meta) => {
237
282
  markdownRef.current = nextMarkdown;
238
283
  if (value === undefined) {
239
284
  setInternalMarkdown(nextMarkdown);
@@ -244,129 +289,6 @@ export const MarkdownEditor = React.forwardRef(function MarkdownEditor({ value,
244
289
  });
245
290
  } }) }))] }));
246
291
  });
247
- function IconSvg({ path, dataIcon }) {
248
- return (_jsx("svg", { className: "me-inline-icon", "data-icon": dataIcon, viewBox: "0 0 576 512", focusable: "false", "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", d: path }) }));
249
- }
250
- const LIST_ICON_PATH = 'M40 48C26.7 48 16 58.7 16 72v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V72c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 208c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 368c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184z';
251
- const SLIDERS_ICON_PATH = 'M0 416c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 256c0 17.7 14.3 32 32 32h246.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32h-84.3c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm320 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 96c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8C254.6 26.7 219.1 0 177.3 0S99.9 26.7 86.7 64H32C14.3 64 0 78.3 0 96zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0z';
252
- function HostServiceToolbar({ services, onInsertMarkdown, onDiagnostics, }) {
253
- const [query, setQuery] = React.useState('');
254
- const [suggestions, setSuggestions] = React.useState([]);
255
- const [searching, setSearching] = React.useState(false);
256
- const [uploading, setUploading] = React.useState(false);
257
- const fileInputId = React.useId();
258
- React.useEffect(() => {
259
- if (!services?.searchLinks || query.trim().length === 0) {
260
- setSuggestions([]);
261
- setSearching(false);
262
- return;
263
- }
264
- const controller = new AbortController();
265
- setSearching(true);
266
- services.searchLinks(query.trim(), controller.signal)
267
- .then((nextSuggestions) => {
268
- if (!controller.signal.aborted) {
269
- setSuggestions(nextSuggestions);
270
- }
271
- })
272
- .catch((error) => {
273
- if (controller.signal.aborted) {
274
- return;
275
- }
276
- const message = error instanceof Error ? error.message : String(error);
277
- onDiagnostics([{
278
- code: 'host.searchLinks.failed',
279
- message,
280
- severity: 'error',
281
- source: 'host-service',
282
- }]);
283
- setSuggestions([]);
284
- })
285
- .finally(() => {
286
- if (!controller.signal.aborted) {
287
- setSearching(false);
288
- }
289
- });
290
- return () => controller.abort();
291
- }, [onDiagnostics, query, services]);
292
- async function uploadFile(file) {
293
- if (!services?.uploadAsset) {
294
- return;
295
- }
296
- const controller = new AbortController();
297
- setUploading(true);
298
- try {
299
- const asset = await services.uploadAsset(file, controller.signal);
300
- const alt = (asset.alt ?? file.name.replace(/\.[^.]+$/, '')) || 'Uploaded image';
301
- onInsertMarkdown(`\n\n![${escapeMarkdownLabel(alt)}](${asset.url})\n`);
302
- }
303
- catch (error) {
304
- const message = error instanceof Error ? error.message : String(error);
305
- onDiagnostics([{
306
- code: 'host.uploadAsset.failed',
307
- message,
308
- severity: 'error',
309
- source: 'host-service',
310
- }]);
311
- }
312
- finally {
313
- setUploading(false);
314
- }
315
- }
316
- return (_jsxs("div", { className: "me-host-tools", "aria-label": "Host services", children: [services?.searchLinks ? (_jsxs("div", { className: "me-link-search", children: [_jsx("label", { className: "me-visually-hidden", htmlFor: `${fileInputId}-link-search`, children: "Search pages" }), _jsx("input", { id: `${fileInputId}-link-search`, type: "search", value: query, placeholder: "Search pages", "aria-label": "Search pages", "aria-controls": `${fileInputId}-link-suggestions`, "aria-expanded": suggestions.length > 0, onChange: (event) => setQuery(event.target.value) }), query.trim().length > 0 ? (_jsxs("div", { id: `${fileInputId}-link-suggestions`, className: "me-link-suggestions", role: "listbox", "aria-label": "Page suggestions", children: [searching ? _jsx("div", { className: "me-link-suggestion-status", children: "Searching..." }) : null, !searching && suggestions.length === 0 ? (_jsx("div", { className: "me-link-suggestion-status", children: "No matches" })) : null, suggestions.map((suggestion) => (_jsxs("button", { type: "button", role: "option", className: "me-link-suggestion", onClick: () => {
317
- onInsertMarkdown(suggestion.insertText);
318
- setQuery('');
319
- setSuggestions([]);
320
- }, children: [_jsx("span", { children: suggestion.label }), suggestion.description ? _jsx("small", { children: suggestion.description }) : null] }, suggestion.id)))] })) : null] })) : null, services?.uploadAsset ? (_jsxs("div", { className: "me-upload-control", children: [_jsx("input", { id: `${fileInputId}-asset-upload`, type: "file", accept: "image/*", "aria-label": "Upload image", onChange: (event) => {
321
- const file = event.currentTarget.files?.[0];
322
- event.currentTarget.value = '';
323
- if (file) {
324
- void uploadFile(file);
325
- }
326
- } }), _jsx("label", { className: "me-upload-button", htmlFor: `${fileInputId}-asset-upload`, children: uploading ? 'Uploading...' : 'Upload image' })] })) : null] }));
327
- }
328
- function PreviewSurface({ markdown, registry, onDiagnostics, }) {
329
- const [result, setResult] = React.useState(null);
330
- const registryRef = React.useRef(registry);
331
- registryRef.current = registry;
332
- React.useEffect(() => {
333
- const controller = new AbortController();
334
- const activeRegistry = registryRef.current ?? createDefaultRendererRegistry();
335
- renderMarkdownToHtml(markdown, {
336
- registry: activeRegistry,
337
- signal: controller.signal,
338
- })
339
- .then((nextResult) => {
340
- if (controller.signal.aborted) {
341
- return;
342
- }
343
- setResult(nextResult);
344
- onDiagnostics(nextResult.diagnostics);
345
- })
346
- .catch((error) => {
347
- if (controller.signal.aborted) {
348
- return;
349
- }
350
- const message = error instanceof Error ? error.message : String(error);
351
- const diagnostics = [
352
- {
353
- code: 'preview.render.failed',
354
- message,
355
- severity: 'error',
356
- source: 'renderer',
357
- },
358
- ];
359
- setResult({
360
- html: `<pre class="me-preview-error">${escapeHtml(markdown)}</pre>`,
361
- blocks: [],
362
- diagnostics,
363
- });
364
- onDiagnostics(diagnostics);
365
- });
366
- return () => controller.abort();
367
- }, [markdown, onDiagnostics]);
368
- return (_jsx("div", { className: "me-preview", "aria-label": "Markdown preview", dangerouslySetInnerHTML: { __html: result?.html ? sanitizePreviewHtml(result.html) : '<p>Rendering preview...</p>' } }));
369
- }
370
292
  function normalizeModes(modes) {
371
293
  const normalized = modes.filter((modeName, index) => modes.indexOf(modeName) === index);
372
294
  return normalized.length > 0 ? normalized : DEFAULT_MODES;
@@ -394,14 +316,4 @@ function cmSelectionToTextSelection(selection) {
394
316
  to: Math.max(selection.anchor, selection.head),
395
317
  };
396
318
  }
397
- function escapeHtml(value) {
398
- return value
399
- .replace(/&/g, '&amp;')
400
- .replace(/</g, '&lt;')
401
- .replace(/>/g, '&gt;')
402
- .replace(/"/g, '&quot;');
403
- }
404
- function escapeMarkdownLabel(value) {
405
- return value.replace(/\\/g, '\\\\').replace(/]/g, '\\]');
406
- }
407
319
  //# sourceMappingURL=MarkdownEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.js","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownEditor.js","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type RenderMarkdownToHtmlResult, type RendererRegistry } from '@echozedlabs/renderers';
2
+ /** Read-only preview surface: renders Markdown to sanitized HTML. */
3
+ export declare function PreviewSurface({ markdown, registry, onDiagnostics, }: {
4
+ markdown: string;
5
+ registry?: RendererRegistry;
6
+ onDiagnostics(diagnostics: NonNullable<RenderMarkdownToHtmlResult['diagnostics']>): void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=PreviewSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewSurface.d.ts","sourceRoot":"","sources":["../src/PreviewSurface.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1F,2CA+DA"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { createDefaultRendererRegistry, renderMarkdownToHtml, } from '@echozedlabs/renderers';
4
+ import { sanitizePreviewHtml } from './sanitizeHtml.js';
5
+ /** Read-only preview surface: renders Markdown to sanitized HTML. */
6
+ export function PreviewSurface({ markdown, registry, onDiagnostics, }) {
7
+ const [result, setResult] = React.useState(null);
8
+ const registryRef = React.useRef(registry);
9
+ registryRef.current = registry;
10
+ // Keep onDiagnostics out of the render effect's deps (via a ref). Putting it in
11
+ // the deps makes reporting diagnostics — which updates host state — re-trigger
12
+ // the effect, so the preview re-renders in a loop; and any non-stable callback
13
+ // identity desync would also break the single-fire-on-mount. The effect should
14
+ // run purely when `markdown` changes.
15
+ const onDiagnosticsRef = React.useRef(onDiagnostics);
16
+ onDiagnosticsRef.current = onDiagnostics;
17
+ React.useEffect(() => {
18
+ // Use a local "cancelled" guard rather than aborting the render: the renderer
19
+ // lazy-loads (and caches) shiki/mermaid, and aborting on cleanup can break the
20
+ // shared loader. The guard still drops stale/after-unmount results.
21
+ let cancelled = false;
22
+ const activeRegistry = registryRef.current ?? createDefaultRendererRegistry();
23
+ renderMarkdownToHtml(markdown, { registry: activeRegistry })
24
+ .then((nextResult) => {
25
+ if (cancelled) {
26
+ return;
27
+ }
28
+ setResult(nextResult);
29
+ onDiagnosticsRef.current?.(nextResult.diagnostics);
30
+ })
31
+ .catch((error) => {
32
+ if (cancelled) {
33
+ return;
34
+ }
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ const diagnostics = [
37
+ {
38
+ code: 'preview.render.failed',
39
+ message,
40
+ severity: 'error',
41
+ source: 'renderer',
42
+ },
43
+ ];
44
+ setResult({
45
+ html: `<pre class="me-preview-error">${escapeHtml(markdown)}</pre>`,
46
+ blocks: [],
47
+ diagnostics,
48
+ });
49
+ onDiagnosticsRef.current?.(diagnostics);
50
+ });
51
+ return () => {
52
+ cancelled = true;
53
+ };
54
+ // `registry` is a real render input (a host may swap renderers without changing
55
+ // markdown); it must be a stable reference. Diagnostics stay on a ref, so this
56
+ // can't reintroduce the re-render loop that narrowing these deps once fixed.
57
+ }, [markdown, registry]);
58
+ return (_jsx("div", { className: "me-preview", "aria-label": "Markdown preview", dangerouslySetInnerHTML: { __html: result?.html ? sanitizePreviewHtml(result.html) : '<p>Rendering preview...</p>' } }));
59
+ }
60
+ function escapeHtml(value) {
61
+ return value
62
+ .replace(/&/g, '&amp;')
63
+ .replace(/</g, '&lt;')
64
+ .replace(/>/g, '&gt;')
65
+ .replace(/"/g, '&quot;');
66
+ }
67
+ //# sourceMappingURL=PreviewSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewSurface.js","sourceRoot":"","sources":["../src/PreviewSurface.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,GAGrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,aAAa,GAKd;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAoC,IAAI,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAA+B,QAAQ,CAAC,CAAC;IACzE,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC/B,gFAAgF;IAChF,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrD,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAEzC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,8EAA8E;QAC9E,+EAA+E;QAC/E,oEAAoE;QACpE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,IAAI,6BAA6B,EAAE,CAAC;QAE9E,oBAAoB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;aACzD,IAAI,CAAC,CAAC,UAAsC,EAAE,EAAE;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,gBAAgB,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG;gBAClB;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,OAAO;oBACP,QAAQ,EAAE,OAAgB;oBAC1B,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC;YACF,SAAS,CAAC;gBACR,IAAI,EAAE,iCAAiC,UAAU,CAAC,QAAQ,CAAC,QAAQ;gBACnE,MAAM,EAAE,EAAE;gBACV,WAAW;aACZ,CAAC,CAAC;YACH,gBAAgB,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QACF,gFAAgF;QAChF,+EAA+E;QAC/E,6EAA6E;IAC/E,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,cACE,SAAS,EAAC,YAAY,gBACX,kBAAkB,EAC7B,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,GACpH,CACH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Inline FontAwesome-style glyph used by the built-in toolbar controls. */
2
+ export declare function IconSvg({ path, dataIcon }: {
3
+ path: string;
4
+ dataIcon?: string;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ export declare const LIST_ICON_PATH = "M40 48C26.7 48 16 58.7 16 72v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V72c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 208c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 368c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184z";
7
+ export declare const SLIDERS_ICON_PATH = "M0 416c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 256c0 17.7 14.3 32 32 32h246.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32h-84.3c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm320 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 96c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8C254.6 26.7 219.1 0 177.3 0S99.9 26.7 86.7 64H32C14.3 64 0 78.3 0 96zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0z";
8
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.tsx"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,2CAM9E;AAED,eAAO,MAAM,cAAc,ykBAAykB,CAAC;AACrmB,eAAO,MAAM,iBAAiB,uuBAAuuB,CAAC"}
package/dist/icons.js ADDED
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /** Inline FontAwesome-style glyph used by the built-in toolbar controls. */
3
+ export function IconSvg({ path, dataIcon }) {
4
+ return (_jsx("svg", { className: "me-inline-icon", "data-icon": dataIcon, viewBox: "0 0 576 512", focusable: "false", "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", d: path }) }));
5
+ }
6
+ export const LIST_ICON_PATH = 'M40 48C26.7 48 16 58.7 16 72v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V72c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 208c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184zM40 368c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24H40zm144 16c-17.7 0-32 14.3-32 32s14.3 32 32 32h352c17.7 0 32-14.3 32-32s-14.3-32-32-32H184z';
7
+ export const SLIDERS_ICON_PATH = 'M0 416c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 256c0 17.7 14.3 32 32 32h246.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32h-84.3c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H32c-17.7 0-32 14.3-32 32zm320 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0zM0 96c0 17.7 14.3 32 32 32h54.7c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H267.8C254.6 26.7 219.1 0 177.3 0S99.9 26.7 86.7 64H32C14.3 64 0 78.3 0 96zm128 0a49.3 49.3 0 1 1 98.7 0 49.3 49.3 0 1 1-98.7 0z';
8
+ //# sourceMappingURL=icons.js.map