commspliant-html-editor 0.0.2 → 0.0.4

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.
Files changed (113) hide show
  1. package/README.md +208 -5
  2. package/dist/commspliant-html-editor.css +1 -1
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.d.ts.map +1 -1
  5. package/dist/components/MultiPageVisualSurface.d.ts +22 -0
  6. package/dist/components/MultiPageVisualSurface.d.ts.map +1 -0
  7. package/dist/components/VisualSurface.d.ts +1 -0
  8. package/dist/components/VisualSurface.d.ts.map +1 -1
  9. package/dist/core/audio.d.ts +16 -0
  10. package/dist/core/audio.d.ts.map +1 -0
  11. package/dist/core/blockFormat.d.ts.map +1 -1
  12. package/dist/core/blocks.d.ts.map +1 -1
  13. package/dist/core/cellProperties.d.ts +2 -0
  14. package/dist/core/cellProperties.d.ts.map +1 -1
  15. package/dist/core/commandTypes.d.ts +51 -4
  16. package/dist/core/commandTypes.d.ts.map +1 -1
  17. package/dist/core/customActions.d.ts.map +1 -1
  18. package/dist/core/customCss.d.ts +15 -0
  19. package/dist/core/customCss.d.ts.map +1 -0
  20. package/dist/core/formatBrush.d.ts +10 -0
  21. package/dist/core/formatBrush.d.ts.map +1 -0
  22. package/dist/core/marks.d.ts +1 -1
  23. package/dist/core/marks.d.ts.map +1 -1
  24. package/dist/core/multiPage.d.ts +10 -0
  25. package/dist/core/multiPage.d.ts.map +1 -0
  26. package/dist/core/page.d.ts +7 -1
  27. package/dist/core/page.d.ts.map +1 -1
  28. package/dist/core/pageAtRule.d.ts +21 -0
  29. package/dist/core/pageAtRule.d.ts.map +1 -0
  30. package/dist/core/pageBackgroundImage.d.ts +16 -0
  31. package/dist/core/pageBackgroundImage.d.ts.map +1 -0
  32. package/dist/core/pageProperties.d.ts +1 -0
  33. package/dist/core/pageProperties.d.ts.map +1 -1
  34. package/dist/core/readAloud.d.ts +11 -0
  35. package/dist/core/readAloud.d.ts.map +1 -0
  36. package/dist/core/table.d.ts +6 -0
  37. package/dist/core/table.d.ts.map +1 -1
  38. package/dist/core/tableGrid.d.ts +40 -0
  39. package/dist/core/tableGrid.d.ts.map +1 -0
  40. package/dist/core/youtube.d.ts +20 -0
  41. package/dist/core/youtube.d.ts.map +1 -0
  42. package/dist/i18n/en.d.ts.map +1 -1
  43. package/dist/i18n/es.d.ts.map +1 -1
  44. package/dist/i18n/types.d.ts +61 -0
  45. package/dist/i18n/types.d.ts.map +1 -1
  46. package/dist/icons/AudioIcon.d.ts +3 -0
  47. package/dist/icons/AudioIcon.d.ts.map +1 -0
  48. package/dist/icons/CustomCssIcon.d.ts +3 -0
  49. package/dist/icons/CustomCssIcon.d.ts.map +1 -0
  50. package/dist/icons/FormatBrushIcon.d.ts +3 -0
  51. package/dist/icons/FormatBrushIcon.d.ts.map +1 -0
  52. package/dist/icons/MergeCellsIcon.d.ts +3 -0
  53. package/dist/icons/MergeCellsIcon.d.ts.map +1 -0
  54. package/dist/icons/ReadAloudIcon.d.ts +3 -0
  55. package/dist/icons/ReadAloudIcon.d.ts.map +1 -0
  56. package/dist/icons/UnmergeCellsIcon.d.ts +3 -0
  57. package/dist/icons/UnmergeCellsIcon.d.ts.map +1 -0
  58. package/dist/icons/YoutubeIcon.d.ts +3 -0
  59. package/dist/icons/YoutubeIcon.d.ts.map +1 -0
  60. package/dist/icons/index.d.ts +7 -0
  61. package/dist/icons/index.d.ts.map +1 -1
  62. package/dist/index.cjs +8 -4
  63. package/dist/index.d.ts +3 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +9757 -6907
  66. package/dist/modules/contextMenu/ContextMenu.d.ts +3 -1
  67. package/dist/modules/contextMenu/ContextMenu.d.ts.map +1 -1
  68. package/dist/modules/file/commands.d.ts.map +1 -1
  69. package/dist/modules/file/printHtml.d.ts +1 -0
  70. package/dist/modules/file/printHtml.d.ts.map +1 -1
  71. package/dist/modules/format/CustomCssDialog.d.ts +9 -0
  72. package/dist/modules/format/CustomCssDialog.d.ts.map +1 -0
  73. package/dist/modules/format/PageAtRuleFields.d.ts +9 -0
  74. package/dist/modules/format/PageAtRuleFields.d.ts.map +1 -0
  75. package/dist/modules/format/PageBackgroundImageFields.d.ts +11 -0
  76. package/dist/modules/format/PageBackgroundImageFields.d.ts.map +1 -0
  77. package/dist/modules/format/PagePropertiesDialog.d.ts +5 -1
  78. package/dist/modules/format/PagePropertiesDialog.d.ts.map +1 -1
  79. package/dist/modules/format/ParagraphPropertiesFields.d.ts +7 -1
  80. package/dist/modules/format/ParagraphPropertiesFields.d.ts.map +1 -1
  81. package/dist/modules/format/catalog.d.ts.map +1 -1
  82. package/dist/modules/format/commands.d.ts +2 -2
  83. package/dist/modules/format/commands.d.ts.map +1 -1
  84. package/dist/modules/format/pageDialog.d.ts.map +1 -1
  85. package/dist/modules/history/catalog.d.ts.map +1 -1
  86. package/dist/modules/history/history.d.ts +2 -0
  87. package/dist/modules/history/history.d.ts.map +1 -1
  88. package/dist/modules/history/index.d.ts +1 -1
  89. package/dist/modules/history/index.d.ts.map +1 -1
  90. package/dist/modules/insert/AudioDialog.d.ts +12 -0
  91. package/dist/modules/insert/AudioDialog.d.ts.map +1 -0
  92. package/dist/modules/insert/ImageAdvancedFields.d.ts +15 -0
  93. package/dist/modules/insert/ImageAdvancedFields.d.ts.map +1 -0
  94. package/dist/modules/insert/ImageDialog.d.ts.map +1 -1
  95. package/dist/modules/insert/ImagePropertiesFields.d.ts.map +1 -1
  96. package/dist/modules/insert/ImageSourcePicker.d.ts +14 -0
  97. package/dist/modules/insert/ImageSourcePicker.d.ts.map +1 -0
  98. package/dist/modules/insert/YoutubeDialog.d.ts +12 -0
  99. package/dist/modules/insert/YoutubeDialog.d.ts.map +1 -0
  100. package/dist/modules/insert/catalog.d.ts.map +1 -1
  101. package/dist/modules/insert/commands.d.ts +2 -2
  102. package/dist/modules/insert/commands.d.ts.map +1 -1
  103. package/dist/modules/table/CellPropertiesFields.d.ts.map +1 -1
  104. package/dist/modules/table/catalog.d.ts.map +1 -1
  105. package/dist/modules/table/commands.d.ts +2 -2
  106. package/dist/modules/table/commands.d.ts.map +1 -1
  107. package/dist/modules/view/catalog.d.ts.map +1 -1
  108. package/dist/modules/view/commands.d.ts +2 -2
  109. package/dist/modules/view/commands.d.ts.map +1 -1
  110. package/dist/toolbar/defaultLayout.d.ts.map +1 -1
  111. package/dist/types.d.ts +83 -2
  112. package/dist/types.d.ts.map +1 -1
  113. package/package.json +7 -3
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  **Try it out here:** [https://htmleditor.commspliant.com/](https://htmleditor.commspliant.com/)
4
4
 
5
+ [![WYSIWYG editor screenshot](screenshot.png)](https://htmleditor.commspliant.com/)
6
+
5
7
  Reusable React + TypeScript editor with two base modes: **Visual** (`contenteditable`) and **HTML** (plain-text source). Downstream apps import the package; they do not copy source.
6
8
 
7
9
  ## Install
@@ -44,7 +46,9 @@ Give the editor a parent with a definite height (`height: 100%` on a sized ances
44
46
  | `value` | `string` | — | Controlled HTML document |
45
47
  | `defaultValue` | `string` | `''` | Initial HTML when uncontrolled |
46
48
  | `onChange` | `(html: string) => void` | — | Fires when either surface edits the document |
47
- | `onAutoSave` | `(html: string) => void` | — | Polls every 1s; calls only when the document HTML changed. See [Auto save](#auto-save) |
49
+ | `onAutoSave` | `(html: string \| string[]) => void` | — | Polls every 1s; calls only when the document HTML changed. See [Auto save](#auto-save) |
50
+ | `onSave` | `(html: string \| string[]) => void` | — | File → Save host callback. See [Save and open](#save-and-open) |
51
+ | `onOpen` | `() => string \| string[] \| null` | — | File → Open host callback. See [Save and open](#save-and-open) |
48
52
  | `mode` | `'visual' \| 'html'` | — | Controlled mode |
49
53
  | `defaultMode` | `'visual' \| 'html'` | `'visual'` | Initial mode when uncontrolled |
50
54
  | `onModeChange` | `(mode: EditorMode) => void` | — | Fires when the built-in Visual / HTML toggle is used |
@@ -75,22 +79,66 @@ Give the editor a parent with a definite height (`height: 100%` on a sized ances
75
79
  | `transformHtml` | `(html: string) => string` | — | Optional map over document HTML before it is stored and passed to `onChange`. See [Transform HTML](#transform-html) |
76
80
  | `customImagePicker` | `CustomImagePicker` | — | Optional third Insert image source. See [Custom image picker](#custom-image-picker) |
77
81
  | `disableBuiltinImageInsert` | `boolean` | `false` | Skip the Insert image dialog and call `customImagePicker.onPick` from the toolbar or Insert menu |
82
+ | `customAudioPicker` | `CustomAudioPicker` | — | Optional third Insert audio source. See [Custom audio picker](#custom-audio-picker) |
83
+ | `disableBuiltinAudioInsert` | `boolean` | `false` | Skip the Insert audio dialog and call `customAudioPicker.onPick` from the Insert menu |
84
+ | `customVideoPicker` | `CustomVideoPicker` | — | Optional third Insert YouTube video source. See [Custom video picker](#custom-video-picker) |
85
+ | `disableBuiltinVideoInsert` | `boolean` | `false` | Skip the Insert YouTube video dialog and call `customVideoPicker.onPick` from the Insert menu |
78
86
  | `disableHtmlFileDrop` | `boolean` | `false` | When true, dropping an HTML file on the editor does not replace the document. File → Open is unchanged |
87
+ | `enableMultiPages` | `boolean` | `false` | When true, edit multiple independent HTML pages in visual mode. See [Multi-page editing](#multi-page-editing) |
88
+ | `pages` | `string[]` | — | Controlled page HTML strings when `enableMultiPages` is true |
89
+ | `defaultPages` | `string[]` | — | Initial pages when uncontrolled and `enableMultiPages` is true |
90
+ | `onPagesChange` | `(pages: string[], activePageIndex: number) => void` | — | Fires when any page changes while multi-page mode is enabled |
79
91
  | `toolbarCustomization` | `ToolbarCustomizationPersistence` | — | Host load/save for icon-toolbar layout. Omit to persist in `localStorage`. See [Customize toolbar](#customize-toolbar) |
80
92
  | `darkMode` | `boolean` | `false` | Initial chrome theme when nothing is persisted (`true` = dark). See [Dark mode](#dark-mode) |
81
93
  | `darkModePersistence` | `DarkModePersistence` | — | Host load/save for the chrome theme. Omit to persist in `localStorage`. See [Dark mode](#dark-mode) |
82
94
 
83
- `mode`, `value`, and `fullscreen` are optional. Omit them for internal state; pass them to control from the parent. Chrome includes a File menu (Save, Load, and Print), an Edit menu (Undo and Redo), an Insert menu (Link, Bookmark, Image, Table, Horizontal line, and table row/column items), a View menu (Visual, HTML, Toolbar customize and position, Light/Dark mode, Preview, and Full screen), and a Format menu (paragraph styles, font, clear formatting, paragraph, page, image properties, and table/cell/row properties), unless `menuVisible` is `false`. The icon toolbar has File (Save and Load), Print, Edit (Undo and Redo), Insert (Link, Bookmark, Image, Table, and Horizontal line), Font, Align, Paragraph, and View (Visual | HTML | Preview) groups, with Full screen pinned last, unless `toolbarVisible` is `false`. Hide both to drop the chrome slot entirely. View → Toolbar → Position docks the icon toolbar (the menu bar stays at the top). Top and bottom wrap onto multiple rows when they cannot fit on one line; Full screen stays last, pinned to the right of the first row. Left and right stay a single column and grow the editor instead of wrapping into extra columns. Full screen covers the host page with a fixed overlay; an X control (and Escape) returns to the in-page layout. Visual and HTML mode stay independent of the overlay. Save writes the current document to an HTML file; Load replaces it from an HTML file. Dropping an `.html` / `.htm` file onto the document surface does the same as Load, unless `disableHtmlFileDrop` is set. Print opens the browser print dialog for the document HTML only (not the editor chrome). Preview (View menu and View icon group) opens a large dialog with a scrollable rendering of the current document HTML. Undo and Redo walk document HTML history; they are grayed out when there is nothing to undo or redo. The File, Edit, and Insert menu items use the same icons as the toolbar buttons. Link wraps the selection (or inserts the URL as the visible text at the caret) in an `<a href>` tag; an optional title becomes the native hover tooltip, and opening in a new tab sets `target="_blank"`. Bookmark inserts a named destination (`id`) at the caret or around the selection. Horizontal line inserts an `<hr>` at the caret.
95
+ `mode`, `value`, and `fullscreen` are optional. Omit them for internal state; pass them to control from the parent. Chrome includes a File menu (Save, Load, and Print), an Edit menu (Undo, Redo, and Page properties), an Insert menu (Link, Bookmark, Image, Audio, YouTube video, Table, and Horizontal line), a Table menu (Insert table, row and column items, Merge cells, Unmerge cells, and table/cell/row properties), a View menu (Visual, HTML, Toolbar customize and position, Light/Dark mode, Preview, Read aloud, and Full screen), and a Format menu (paragraph styles, font, clear formatting, paragraph, and image properties), unless `menuVisible` is `false`. The icon toolbar has File (Save and Load), Print, Edit (Undo and Redo), Insert (Link, Bookmark, Image, Table, and Horizontal line), Table (Merge cells and Unmerge cells), Font, Align, Paragraph, and View (Visual | HTML | Preview | Read aloud) groups, with Full screen pinned last, unless `toolbarVisible` is `false`. Hide both to drop the chrome slot entirely. View → Toolbar → Position docks the icon toolbar (the menu bar stays at the top). Top and bottom wrap onto multiple rows when they cannot fit on one line; Full screen stays last, pinned to the right of the first row. Left and right stay a single column and grow the editor instead of wrapping into extra columns. Full screen covers the host page with a fixed overlay; an X control (and Escape) returns to the in-page layout. Visual and HTML mode stay independent of the overlay. By default, Save writes the current document to an HTML file and Load replaces it from an HTML file; pass `onSave` and/or `onOpen` to delegate to host callbacks instead (see [Save and open](#save-and-open)). Dropping an `.html` / `.htm` file onto the document surface does the same as Load, unless `disableHtmlFileDrop` is set. Print opens the browser print dialog for the document HTML only (not the editor chrome). Preview (View menu and View icon group) opens a large dialog with a scrollable rendering of the current document HTML. Read aloud (View menu and View icon group) uses the browser’s built-in speech synthesis to read the current selection, or the full document when nothing is selected; click again to stop. Undo and Redo walk document HTML history; they are grayed out when there is nothing to undo or redo. The File, Edit, and Insert menu items use the same icons as the toolbar buttons where both exist. Link wraps the selection (or inserts the URL as the visible text at the caret) in an `<a href>` tag; an optional title becomes the native hover tooltip, and opening in a new tab sets `target="_blank"`. Bookmark inserts a named destination (`id`) at the caret or around the selection. Audio and YouTube video are available from the Insert menu only (no toolbar buttons). Horizontal line inserts an `<hr>` at the caret.
84
96
 
85
97
  `menuColor`, `menuBackground`, `menuFontSize`, and `menuFontFamily` restyle the dropdown menu bar and panels only — not the icon toolbar. `border` is the outer editor box and is ignored in fullscreen. Custom menu fonts must already be available on the page.
86
98
 
87
99
  The toolbar Font dropdown lists web-safe faces (Arial, Georgia, Times New Roman, and the rest of the usual stacks). Choose **Default** to clear an authored `font-family` so the text inherits. Applied faces are written as inline `style="font-family: …"` on the selection (or the page shell from Page properties).
88
100
 
101
+ ### Custom CSS
102
+
103
+ Format → Font → **Custom CSS** (and the Custom CSS icon in the Font toolbar group) opens a dialog with a multi-line textarea. With text selected or the caret inside styled text, existing inline CSS is pre-filled — one declaration per line, split at each `;`. On **OK**, declarations are merged onto the current inline styles (matching property names are overridden; others are kept). Use an empty value (e.g. `color:`) to remove a property. The result is stored as compressed one-line inline CSS on a `<span>`. With only a caret (no selection), the CSS applies to the next characters you type. An empty textarea is a no-op. Visual mode only.
104
+
105
+ ```tsx
106
+ import { Editor } from 'commspliant-html-editor'
107
+
108
+ <Editor />
109
+ // Format → Font → Custom CSS, or the Custom CSS toolbar button
110
+ ```
111
+
112
+ ### Page properties
113
+
114
+ Edit → Page → **Page properties** opens a dialog with **Font**, **Paragraph**, and **Print** tabs. Paragraph sub-tabs include **Spacing**, **Border**, **Background** (fill color and page opacity), and **Background Image**. The **Print** tab edits `@page` size, orientation, and margins.
115
+
116
+ The first time page properties are applied, content is wrapped in a single `<div data-page>` shell with `width: 100%` and `height: 100%`. Background **color** is written on that shell. Background **image** uses the same file, URL, or custom picker as Insert → Image, plus independent width and height (default width `100%`, height unset), and opacity, fit, and position controls (the same options as Image properties → Advanced). Rotation is not supported for page backgrounds. Width and height write `background-size`; keyword fit values (`cover`, `contain`) replace those dimensions.
117
+
118
+ When a background image is set, a single managed first child `<div id="commspliant-background" data-page-bg contenteditable="false">` holds the image layer so image opacity does not fade page text. If that id already exists in the editor, it is reused and extras are removed. The layer sits behind content (`z-index: -1`) so the document stays editable:
119
+
120
+ ```html
121
+ <div data-page style="width:100%;height:100%;position:relative;isolation:isolate;background-color:#fff">
122
+ <div id="commspliant-background" data-page-bg contenteditable="false"
123
+ style="position:absolute;inset:0;z-index:-1;pointer-events:none;user-select:none;background-image:url(&quot;https://example.com/bg.png&quot;);background-size:cover;background-position:center;background-repeat:no-repeat;opacity:0.9"></div>
124
+ <p>Hello</p>
125
+ </div>
126
+ ```
127
+
128
+ The visual editor holder mirrors the shell fill and background image for display only; serialized `value` HTML is unchanged by that paint step.
129
+
130
+ ```tsx
131
+ import { Editor } from 'commspliant-html-editor'
132
+
133
+ <Editor />
134
+ // Edit → Page → Page properties → Paragraph → Background Image
135
+ ```
136
+
89
137
  ### Editor chrome
90
138
 
91
139
  Show or hide the menu bar and icon toolbar, and control the full-screen overlay from the host. View → Toolbar → Position docks the icon toolbar; the menu bar stays at the top. Top and bottom wrap onto multiple rows when they cannot fit on one line; Full screen stays last, pinned to the right of the first row. Left and right stay a single column.
92
140
 
93
- On the visual surface, a mouse right-click opens the editor context menu (cut, copy, font and paragraph properties, and table items when the caret is in a table). A touch or pen long-press does not; phones keep the native selection handles and OS Copy / Paste callout so text can be selected.
141
+ On the visual surface, a mouse right-click opens the editor context menu (cut, copy, font and paragraph properties, and table items — including merge and unmerge — when the caret is in a table). A touch or pen long-press does not; phones keep the native selection handles and OS Copy / Paste callout so text can be selected.
94
142
 
95
143
  ```tsx
96
144
  import { useState } from 'react'
@@ -120,14 +168,18 @@ import { Editor } from 'commspliant-html-editor'
120
168
 
121
169
  Pass `allowedChrome` to show only the menus and icon-toolbar buttons the host allows. Omit the prop (or either field) to leave that surface unfiltered.
122
170
 
123
- The two lists are independent: hiding the File menu does not hide Save on the toolbar, and hiding the Print button does not hide File → Print. `menus` is top-level menu ids only: `file`, `edit`, `insert`, `view`, and `format` (plus any custom menu id from `customActions`). `toolbar` is icon-toolbar item ids:
171
+ The two lists are independent: hiding the File menu does not hide Save on the toolbar, and hiding the Print button does not hide File → Print. `menus` is top-level menu ids only: `file`, `edit`, `insert`, `table`, `view`, and `format` (plus any custom menu id from `customActions`). `toolbar` is icon-toolbar item ids:
172
+
173
+ `save`, `open`, `print`, `undo`, `redo`, `link`, `bookmark`, `image`, `table`, `horizontalRule`, `mergeCells`, `unmergeCells`, `fontFamily`, `paragraphStyle`, `fontSize`, `fontColor`, `highlightColor`, `customCss`, `formatBrush`, `bold`, `italic`, `underline`, `strikethrough`, `clearFormatting`, `alignLeft`, `alignCenter`, `alignRight`, `alignJustify`, `indent`, `outdent`, `bulletList`, `numberedList`, `visual`, `html`, `preview`, `readAloud`, `fullscreen`
124
174
 
125
- `save`, `open`, `print`, `undo`, `redo`, `link`, `bookmark`, `image`, `table`, `horizontalRule`, `fontFamily`, `paragraphStyle`, `fontSize`, `fontColor`, `highlightColor`, `bold`, `italic`, `underline`, `strikethrough`, `clearFormatting`, `alignLeft`, `alignCenter`, `alignRight`, `alignJustify`, `indent`, `outdent`, `bulletList`, `numberedList`, `visual`, `html`, `preview`, `fullscreen`
175
+ The **Format brush** icon (`formatBrush`) is toolbar-only. Select source text, click the brush to copy inline character formatting (bold, italic, underline, strikethrough, font, size, color, highlight, custom CSS), then select target text to apply. Click the brush again or click it without a selection to cancel.
126
176
 
127
177
  If `toolbar` is set, custom action ids must be listed to appear on the icon bar.
128
178
 
129
179
  Empty arrays hide that surface (`menus: []` shows no dropdowns; `toolbar: []` shows no icons). The right-click context menu is not filtered. Commands stay registered; this only hides chrome.
130
180
 
181
+ Page properties (including the Print / `@page` tab) live under **Edit → Page**. Hosts that allow only `format` in `allowedChrome` will not show Page properties unless `edit` is included too.
182
+
131
183
  View → Toolbar → Customize toolbar and its persistence still work as they do today, on the allowed toolbar subset. The dialog lists only allowed icon-toolbar items.
132
184
 
133
185
  ```tsx
@@ -329,6 +381,75 @@ import { Editor } from 'commspliant-html-editor'
329
381
  />
330
382
  ```
331
383
 
384
+ ### Save and open
385
+
386
+ By default, File → Save and the Save toolbar button write the document to a local HTML file (browser save picker or download). File → Open and the Open toolbar button load from a local HTML file. Omit both callbacks to keep that behavior.
387
+
388
+ Pass `onSave` to persist through the host instead of the built-in file picker. It receives the current document HTML (same as `onChange`, after `transformHtml`) and is awaited.
389
+
390
+ Pass `onOpen` to load through the host instead of the built-in file picker. Return document HTML to replace the editor, or `null` to cancel. The callback is awaited. HTML file drag-drop is unchanged — it still reads a local file and does not call `onOpen`.
391
+
392
+ The two props are independent: set only `onSave` to keep Open on the local picker, or only `onOpen` to keep Save on the local picker.
393
+
394
+ ```tsx
395
+ import { Editor } from 'commspliant-html-editor'
396
+
397
+ <Editor
398
+ defaultValue="<p>Hello</p>"
399
+ onSave={async (html) => {
400
+ await fetch('/api/documents/current', { method: 'PUT', body: html })
401
+ }}
402
+ onOpen={async () => {
403
+ const response = await fetch('/api/documents/current')
404
+ if (!response.ok) return null
405
+ return response.text()
406
+ }}
407
+ />
408
+ ```
409
+
410
+ ### Multi-page editing
411
+
412
+ Set `enableMultiPages` to edit several independent HTML pages in visual mode. Pages appear stacked with toolbar-colored gaps between them. Use Insert → Page to add a page after the focused one. Edit → Page → Page properties includes a Print tab for `@page` size, orientation, and margins; Reset removes the print rule from the active page.
413
+
414
+ When multi-page mode is off (default), behavior is unchanged.
415
+
416
+ **HTML source mode** shows all pages in one textarea, separated by:
417
+
418
+ ```html
419
+ <!-- wysiwyg-page-separator -->
420
+ ```
421
+
422
+ **Persistence:**
423
+
424
+ - Built-in File → Save / Open operate on the **focused page only** (single `.html` file).
425
+ - Host `onSave`, `onOpen`, and `onAutoSave` receive **all pages** as a `string[]` when `enableMultiPages` is true.
426
+ - Use `onPagesChange` for controlled multi-page state. Export helpers: `splitPagesFromHtml`, `joinPagesToHtml`, and `PAGE_SEPARATOR` from the package.
427
+
428
+ ```tsx
429
+ import { useState } from 'react'
430
+ import { Editor } from 'commspliant-html-editor'
431
+
432
+ export function MultiPageEditor() {
433
+ const [pages, setPages] = useState(['<p>Page one</p>', '<p>Page two</p>'])
434
+
435
+ return (
436
+ <Editor
437
+ enableMultiPages
438
+ pages={pages}
439
+ onPagesChange={(nextPages) => setPages(nextPages)}
440
+ onSave={async (payload) => {
441
+ if (Array.isArray(payload)) {
442
+ await fetch('/api/documents/pages', {
443
+ method: 'PUT',
444
+ body: JSON.stringify(payload),
445
+ })
446
+ }
447
+ }}
448
+ />
449
+ )
450
+ }
451
+ ```
452
+
332
453
  ### Custom actions
333
454
 
334
455
  Pass a `customActions` array to add host buttons, menu items, or both. Labels and tooltips are your copy — the library does not translate them.
@@ -426,6 +547,88 @@ Omit `customImagePicker` to keep File and URL only. Set `disableBuiltinImageInse
426
547
 
427
548
  `insertImage` uses the same insert path as File and URL: an `<img>` with inline `max-width: 100%; height: auto`, then any host `css`. `src` must be `http(s)`, a relative path, or a raster `data:` URL.
428
549
 
550
+ `onPick` from Page properties (Edit → Page → Page properties → Background Image) leaves the editor dialog open so the picked URL can fill the draft. If your picker is a modal overlay, give it a `z-index` above editor dialogs (`1200`).
551
+
552
+ ### Custom audio picker
553
+
554
+ Pass `customAudioPicker` to add a third Insert audio source. Labels are your copy — the library does not translate them. When the host finishes picking, call the `insertAudio` function received by `onPick`.
555
+
556
+ ```tsx
557
+ import { Editor, type CustomAudioPicker } from 'commspliant-html-editor'
558
+
559
+ const library: CustomAudioPicker = {
560
+ text: 'Library',
561
+ description: 'Choose from your audio library.',
562
+ buttonCaption: 'Open library',
563
+ onPick: (insertAudio) => {
564
+ openHostLibrary().then((picked) => {
565
+ insertAudio({
566
+ src: picked.url,
567
+ title: picked.title,
568
+ css: 'width: 100%',
569
+ })
570
+ })
571
+ },
572
+ }
573
+
574
+ <Editor customAudioPicker={library} />
575
+ ```
576
+
577
+ | Field | Type | Description |
578
+ | --- | --- | --- |
579
+ | `text` | `string` | Third source / navigation button label |
580
+ | `description` | `string` | Shown on the custom source panel |
581
+ | `buttonCaption` | `string` | Caption of the button that starts the host picker |
582
+ | `onPick` | `(insertAudio) => void` | Called when that button is clicked. Call `insertAudio` with a URL or audio `data:` URL, plus optional `title` and inline `css` |
583
+
584
+ Omit `customAudioPicker` to keep File and URL only. Set `disableBuiltinAudioInsert` to skip the dialog: Insert → Audio calls `onPick` immediately.
585
+
586
+ ```tsx
587
+ <Editor customAudioPicker={library} disableBuiltinAudioInsert />
588
+ ```
589
+
590
+ `insertAudio` uses the same insert path as File and URL: an `<audio controls>` with inline `max-width: 100%`, then any host `css`. `src` must be `http(s)`, a relative path, or an audio `data:` URL.
591
+
592
+ ### Custom video picker
593
+
594
+ Pass `customVideoPicker` to add a third Insert YouTube video source. Labels are your copy — the library does not translate them. When the host finishes picking, call the `insertVideo` function received by `onPick`.
595
+
596
+ ```tsx
597
+ import { Editor, type CustomVideoPicker } from 'commspliant-html-editor'
598
+
599
+ const library: CustomVideoPicker = {
600
+ text: 'Library',
601
+ description: 'Choose from your video library.',
602
+ buttonCaption: 'Open library',
603
+ onPick: (insertVideo) => {
604
+ openHostLibrary().then((picked) => {
605
+ insertVideo({
606
+ src: picked.url,
607
+ title: picked.title,
608
+ css: 'max-width: 100%',
609
+ })
610
+ })
611
+ },
612
+ }
613
+
614
+ <Editor customVideoPicker={library} />
615
+ ```
616
+
617
+ | Field | Type | Description |
618
+ | --- | --- | --- |
619
+ | `text` | `string` | Third source / navigation button label |
620
+ | `description` | `string` | Shown on the custom source panel |
621
+ | `buttonCaption` | `string` | Caption of the button that starts the host picker |
622
+ | `onPick` | `(insertVideo) => void` | Called when that button is clicked. Call `insertVideo` when the host picker finishes |
623
+
624
+ Omit `customVideoPicker` to keep URL only. Set `disableBuiltinVideoInsert` to skip the dialog: Insert → YouTube video calls `onPick` immediately.
625
+
626
+ ```tsx
627
+ <Editor customVideoPicker={library} disableBuiltinVideoInsert />
628
+ ```
629
+
630
+ The built-in dialog accepts YouTube watch, embed, shorts, and `youtu.be` URLs and inserts an `<iframe>` embed with inline sizing. From the host picker, a YouTube URL inserts the same iframe; other `http(s)` video URLs insert a `<video controls>` element. Both use inline styles in the serialized HTML.
631
+
429
632
  ### Customize toolbar
430
633
 
431
634
  View → Toolbar → Customize toolbar shows every icon-toolbar group (or only the items in `allowedChrome.toolbar` when that list is set). Uncheck an item to hide it on the icon toolbar (menus stay the same). Drag groups — not individual buttons — to reorder them. Full screen stays pinned last. Reset restores the library default.
@@ -1 +1 @@
1
- ._chrome_boy0f_1{--wysiwyg-chrome-text: #444;--wysiwyg-chrome-text-strong: #111;--wysiwyg-chrome-text-muted: #555;--wysiwyg-chrome-toolbar: #f0f0f0;--wysiwyg-chrome-menu: #fff;--wysiwyg-chrome-border: #e5e5e5;--wysiwyg-chrome-divider: #d0d0d0;--wysiwyg-chrome-hover: #f0f0f0;--wysiwyg-chrome-pressed: #ececec;--wysiwyg-chrome-dialog: #fff;--wysiwyg-chrome-dialog-text: #222;--wysiwyg-chrome-dialog-border: #c8c8c8;--wysiwyg-chrome-dialog-muted: #f7f7f7;--wysiwyg-chrome-dialog-group: #fafafa;--wysiwyg-chrome-input: #fff;--wysiwyg-chrome-focus: #8ab4ff;--wysiwyg-chrome-backdrop: rgb(0 0 0 / 32%);--wysiwyg-chrome-shadow: rgb(0 0 0 / 18%);--wysiwyg-chrome-menu-shadow: rgb(0 0 0 / 8%);--wysiwyg-chrome-tooltip-bg: #222;--wysiwyg-chrome-tooltip-fg: #fff;--wysiwyg-chrome-selected: #e8f0fe;--wysiwyg-chrome-danger: #b33;--wysiwyg-chrome-primary: #4a7fd4;--wysiwyg-chrome-primary-fg: #fff;--wysiwyg-chrome-primary-soft: #e8eef8;--wysiwyg-chrome-empty: #ddd;--wysiwyg-chrome-icon: #333}._chrome_boy0f_1[data-wysiwyg-theme=dark]{--wysiwyg-chrome-text: #e4e4e4;--wysiwyg-chrome-text-strong: #fff;--wysiwyg-chrome-text-muted: #bbb;--wysiwyg-chrome-toolbar: #2b2b2b;--wysiwyg-chrome-menu: #1e1e1e;--wysiwyg-chrome-border: #3a3a3a;--wysiwyg-chrome-divider: #4a4a4a;--wysiwyg-chrome-hover: #3a3a3a;--wysiwyg-chrome-pressed: #444;--wysiwyg-chrome-dialog: #252525;--wysiwyg-chrome-dialog-text: #e8e8e8;--wysiwyg-chrome-dialog-border: #4a4a4a;--wysiwyg-chrome-dialog-muted: #1a1a1a;--wysiwyg-chrome-dialog-group: #1a1a1a;--wysiwyg-chrome-input: #1e1e1e;--wysiwyg-chrome-focus: #8ab4ff;--wysiwyg-chrome-backdrop: rgb(0 0 0 / 55%);--wysiwyg-chrome-shadow: rgb(0 0 0 / 45%);--wysiwyg-chrome-menu-shadow: rgb(0 0 0 / 40%);--wysiwyg-chrome-tooltip-bg: #eee;--wysiwyg-chrome-tooltip-fg: #111;--wysiwyg-chrome-selected: #2a3a50;--wysiwyg-chrome-danger: #f66;--wysiwyg-chrome-primary: #6a9ae0;--wysiwyg-chrome-primary-fg: #111;--wysiwyg-chrome-primary-soft: #2a3a50;--wysiwyg-chrome-empty: #555;--wysiwyg-chrome-icon: #eee}._menu_labh4_1{position:fixed;z-index:1150;display:flex;flex-direction:column;min-width:12rem;margin:0;padding:.25rem 0;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-chrome-menu, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 8%));color:var(--wysiwyg-chrome-text, #444);font:.875rem/1.4 system-ui,sans-serif}._item_labh4_17{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;align-items:center;width:100%;margin:0;padding:.4rem .75rem;border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:start;white-space:nowrap;cursor:pointer;box-shadow:none}._item_labh4_17:hover,._item_labh4_17:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0);color:var(--wysiwyg-chrome-text-strong, #111)}._item_labh4_17:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._item_labh4_17:disabled{cursor:not-allowed;opacity:.5}._item_labh4_17:disabled:hover,._item_labh4_17:disabled:focus-visible{background:transparent;color:inherit}._separator_labh4_57{height:1px;margin:.25rem .5rem;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0}._picker_ag1yo_1{display:flex;flex-direction:column;gap:.45rem;box-sizing:border-box;width:14.5rem;padding:.4rem .5rem .5rem;color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._none_ag1yo_12,._customToggle_ag1yo_13,._eyedrop_ag1yo_14{display:flex;align-items:center;gap:.4rem;width:100%;margin:0;padding:.25rem .35rem;border:0;border-radius:3px;background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer}._none_ag1yo_12:hover,._none_ag1yo_12:focus-visible,._customToggle_ag1yo_13:hover,._customToggle_ag1yo_13:focus-visible,._eyedrop_ag1yo_14:hover,._eyedrop_ag1yo_14:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._none_ag1yo_12[aria-checked=true],._none_ag1yo_12[aria-selected=true]{font-weight:600}._none_ag1yo_12:disabled,._customToggle_ag1yo_13:disabled,._eyedrop_ag1yo_14:disabled,._swatch_ag1yo_48:disabled,._field_ag1yo_49 input:disabled{cursor:not-allowed;opacity:.5}._grid_ag1yo_54,._recents_ag1yo_55{display:grid;grid-template-columns:repeat(8,1.25rem);gap:.22rem;justify-content:space-between}._swatch_ag1yo_48{box-sizing:border-box;width:1.25rem;height:1.25rem;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:2px;cursor:pointer}._swatch_ag1yo_48:hover,._swatch_ag1yo_48:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._swatch_ag1yo_48[aria-checked=true],._swatch_ag1yo_48[aria-selected=true]{outline:2px solid #111;outline-offset:1px}._sectionLabel_ag1yo_84{margin:.15rem 0 0;font-weight:600}._custom_ag1yo_13{display:flex;flex-direction:column;gap:.45rem}._sv_ag1yo_95{position:relative;width:100%;height:7.5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;cursor:crosshair;touch-action:none}._svThumb_ag1yo_105{position:absolute;width:.7rem;height:.7rem;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px #111;transform:translate(-50%,-50%);pointer-events:none}._hue_ag1yo_116{width:100%;height:.85rem;margin:0;padding:0;border-radius:3px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red);cursor:pointer}._hue_ag1yo_116::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:.7rem;height:.85rem;border:2px solid #fff;border-radius:2px;background:transparent;box-shadow:0 0 0 1px #111}._hue_ag1yo_116::-moz-range-thumb{width:.7rem;height:.85rem;border:2px solid #fff;border-radius:2px;background:transparent;box-shadow:0 0 0 1px #111}._rgbRow_ag1yo_155,._hexRow_ag1yo_156{display:flex;align-items:center;gap:.3rem}._field_ag1yo_49{display:flex;flex:1 1 0;flex-direction:column;gap:.1rem;min-width:0}._field_ag1yo_49 label{font-weight:600}._field_ag1yo_49 input{box-sizing:border-box;width:100%;margin:0;padding:.15rem .25rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:inherit;font:inherit}._hexRow_ag1yo_156 ._field_ag1yo_49{flex:1 1 auto}._eyedrop_ag1yo_14{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23222' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15.5 4.5l4 4-9 9H6.5v-4.5z'/%3E%3Cpath d='M13.5 6.5l4 4'/%3E%3C/svg%3E") 2 18,crosshair}._wrap_xzhkl_1{position:relative;display:inline-flex;flex-shrink:0;align-items:stretch}._button_xzhkl_8{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;min-width:1.75rem;padding:.4rem .5rem .3rem}._icon_xzhkl_18{display:block;width:1rem;height:1rem}._bar_xzhkl_24{display:block;width:1rem;height:.2rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:1px;background:transparent}._barEmpty_xzhkl_33{background:repeating-linear-gradient(-45deg,var(--wysiwyg-chrome-empty, #ddd),var(--wysiwyg-chrome-empty, #ddd) 1px,transparent 1px,transparent 3px)}._popover_xzhkl_43{position:fixed;z-index:1300;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%))}._field_1knrr_1{display:flex;align-items:center;justify-content:space-between;gap:.75rem}._label_1knrr_8{font-weight:600}._button_1knrr_12{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:2.4rem;height:1.5rem;margin:0;padding:.15rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);cursor:pointer}._button_1knrr_12:disabled{cursor:not-allowed;opacity:.5}._button_1knrr_12:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._swatch_1knrr_37{display:block;width:100%;height:100%;border-radius:2px}._swatchEmpty_1knrr_44{background:repeating-linear-gradient(-45deg,var(--wysiwyg-chrome-empty, #ddd),var(--wysiwyg-chrome-empty, #ddd) 1px,transparent 1px,transparent 3px)}._toolbar_2uk4l_1{display:flex;flex-direction:column;align-items:stretch;width:100%;min-width:0}._toolbar_2uk4l_1._toolbar_2uk4l_1{display:flex;flex-direction:column;container-type:inline-size}._toolbar_2uk4l_1._toolbar_2uk4l_1[data-toolbar-position=left],._toolbar_2uk4l_1._toolbar_2uk4l_1[data-toolbar-position=right]{container-type:normal;width:100%;min-width:0;height:auto;min-height:100%}._toolbar_2uk4l_1._toolbar_2uk4l_1[data-menu-overlay-portal]{container-type:normal;width:0;height:0;min-width:0;overflow:visible}._toolbar_2uk4l_1 ._menuBar_2uk4l_35{display:flex;align-items:stretch;width:100%;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._toolbar_2uk4l_1 ._menuBarDesktop_2uk4l_43{display:flex;align-items:stretch;min-width:0}._toolbar_2uk4l_1 ._brandMark_2uk4l_49{display:inline-flex;flex-shrink:0;align-items:center;padding:.25rem .65rem .25rem .5rem}._toolbar_2uk4l_1 ._brandMarkIcon_2uk4l_56{display:block;height:2.5rem;width:auto;aspect-ratio:616.23 / 542.09;overflow:visible}._toolbar_2uk4l_1 ._brandMarkIcon_2uk4l_56 *{stroke:none}._toolbar_2uk4l_1 ._menuBarCompact_2uk4l_68{display:none;align-items:stretch}._toolbar_2uk4l_1[data-compact] ._menuBarDesktop_2uk4l_43{display:none}._toolbar_2uk4l_1[data-compact] ._menuBarCompact_2uk4l_68{display:flex}@container (max-width: 40rem){._toolbar_2uk4l_1 ._menuBarDesktop_2uk4l_43{display:none}._toolbar_2uk4l_1 ._menuBarCompact_2uk4l_68{display:flex}}._toolbar_2uk4l_1 ._menuWrap_2uk4l_91{position:relative;display:flex;align-items:stretch}._toolbar_2uk4l_1 ._menuButton_2uk4l_97,._toolbar_2uk4l_1 ._iconButton_2uk4l_98,._toolbar_2uk4l_1 ._menuItem_2uk4l_99{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;border:0;border-radius:0;background:transparent;font:inherit;font-weight:400;line-height:inherit;letter-spacing:inherit;text-transform:none;text-decoration:none;color:var(--wysiwyg-chrome-text, #444);cursor:pointer;box-shadow:none}._toolbar_2uk4l_1 ._menuButton_2uk4l_97,._toolbar_2uk4l_1 ._menuItem_2uk4l_99{color:var(--wysiwyg-menu-color, var(--wysiwyg-chrome-text, #444));font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_2uk4l_1 ._menuButton_2uk4l_97{display:inline-flex;align-items:center;padding:.5rem .9rem;text-align:center}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:after{content:"";display:inline-block;width:0;height:0;margin-left:.4rem;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent;transform:translateY(.08em)}._toolbar_2uk4l_1 ._hamburgerButton_2uk4l_142:after{content:none;display:none;margin:0;border:0}._toolbar_2uk4l_1 ._iconNav_2uk4l_149{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;width:100%;max-width:100%;min-width:0;background:var(--wysiwyg-toolbar-background, var(--wysiwyg-chrome-toolbar, #f0f0f0))}._toolbar_2uk4l_1 ._iconNavMain_2uk4l_160{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:stretch;min-width:0;max-width:100%}._toolbar_2uk4l_1 ._iconNavEnd_2uk4l_169{display:flex;flex:0 0 auto;flex-wrap:nowrap;align-items:stretch;align-self:flex-start}._toolbar_2uk4l_1 ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before{content:"";width:1px;align-self:stretch;margin:.35rem .15rem;background:var(--wysiwyg-chrome-divider, #d0d0d0)}._toolbar_2uk4l_1 ._iconGroup_2uk4l_185{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:stretch;max-width:100%}._toolbar_2uk4l_1 ._iconNavEnd_2uk4l_169 ._iconGroup_2uk4l_185{flex-wrap:nowrap}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNav_2uk4l_149,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNav_2uk4l_149{flex:1 0 auto;flex-direction:column;flex-wrap:nowrap;align-items:stretch;width:100%;min-width:0;max-width:none;height:auto;min-height:100%}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavMain_2uk4l_160,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavMain_2uk4l_160{flex:1 0 auto;flex-direction:column;flex-wrap:nowrap;width:100%;min-width:0;max-width:none}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavEnd_2uk4l_169,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavEnd_2uk4l_169{flex-direction:column;margin-top:auto;align-self:stretch}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconGroup_2uk4l_185,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconGroup_2uk4l_185{flex-direction:column;flex-wrap:nowrap;width:100%;min-width:0;max-width:none}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconGroup_2uk4l_185:not(:last-child):after,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconGroup_2uk4l_185:not(:last-child):after{width:auto;height:1px;margin:.15rem .35rem}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before{width:auto;height:1px;align-self:stretch;margin:.15rem .35rem}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconButton_2uk4l_98[aria-pressed=true],._toolbar_2uk4l_1[data-toolbar-position=right] ._iconButton_2uk4l_98[aria-pressed=true]{box-shadow:inset -2px 0 0 var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._iconGroup_2uk4l_185:not(:last-child):after{content:"";width:1px;align-self:stretch;margin:.35rem .15rem;background:var(--wysiwyg-chrome-divider, #d0d0d0)}._toolbar_2uk4l_1 ._iconButton_2uk4l_98{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:.5rem .65rem}._toolbar_2uk4l_1 ._iconNav_2uk4l_149 ._iconButton_2uk4l_98{padding:calc(.5rem + 2px) .65rem calc(.5rem - 2px)}._tooltipTrigger_2uk4l_276{display:inline-flex;flex-shrink:0;align-items:stretch}._toolbar_2uk4l_1 ._iconButton_2uk4l_98[aria-pressed=true]{color:var(--wysiwyg-chrome-text-strong, #111);background:var(--wysiwyg-chrome-pressed, #ececec);box-shadow:inset 0 -2px 0 var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._menu_2uk4l_35{position:absolute;top:100%;left:0;z-index:2;display:flex;flex-direction:column;min-width:10rem;margin:0;padding:.25rem 0;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 8%))}._toolbar_2uk4l_1 ._submenuWrap_2uk4l_304{position:relative}._toolbar_2uk4l_1 ._submenu_2uk4l_304{top:0;left:100%;z-index:3}._toolbar_2uk4l_1 ._submenuTrigger_2uk4l_314{justify-content:space-between}._toolbar_2uk4l_1 ._submenuTrigger_2uk4l_314:after{content:"";display:inline-block;width:0;height:0;margin-left:.75rem;border-style:solid;border-width:.22rem 0 .22rem .28rem;border-color:transparent transparent transparent currentColor}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;display:flex;flex-direction:column;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));color:var(--wysiwyg-menu-color, var(--wysiwyg-chrome-text, #444));font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_2uk4l_1 ._menuOverlayHeader_2uk4l_341{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:.5rem;padding:.15rem .15rem .15rem .9rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._toolbar_2uk4l_1 ._menuOverlayTitle_2uk4l_351{font-size:inherit;font-weight:600;color:inherit}._toolbar_2uk4l_1 ._menuOverlayBody_2uk4l_357{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:auto}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuWrap_2uk4l_91{flex-direction:column;align-items:stretch;width:100%}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuButton_2uk4l_97{width:100%;justify-content:space-between}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menu_2uk4l_35{position:static;top:auto;left:auto;z-index:auto;min-width:0;width:100%;border:0;border-radius:0;box-shadow:none;padding:0 0 .25rem}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenuWrap_2uk4l_304{position:static}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenu_2uk4l_304{position:static;top:auto;left:auto;z-index:auto}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenuTrigger_2uk4l_314:after{transform:rotate(90deg)}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuItem_2uk4l_99{white-space:normal}._toolbar_2uk4l_1 ._menuSeparator_2uk4l_408{height:1px;margin:.25rem .5rem;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0}._toolbar_2uk4l_1 ._menuItem_2uk4l_99{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .75rem;text-align:start;white-space:nowrap}._toolbar_2uk4l_1 ._menuItem_2uk4l_99:hover,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0);color:var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._menuItem_2uk4l_99[aria-checked=true]{color:var(--wysiwyg-chrome-text-strong, #111);font-weight:600}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:hover,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:hover,._toolbar_2uk4l_1 ._menuButton_2uk4l_97:focus-visible,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:focus-visible{color:var(--wysiwyg-chrome-text-strong, #111);background:var(--wysiwyg-chrome-hover, #f0f0f0)}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:focus-visible,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:focus-visible,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:disabled,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:disabled,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled{cursor:not-allowed;opacity:.5}._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled:hover,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled:focus-visible{background:transparent;color:inherit}._toolbar_2uk4l_1 ._icon_2uk4l_98,._toolbar_2uk4l_1 ._icon_2uk4l_98 *{overflow:visible;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}._toolbar_2uk4l_1 ._icon_2uk4l_98{display:block;width:1rem;height:1rem;flex-shrink:0}._tooltip_2uk4l_276{position:fixed;z-index:1100;padding:.2rem .45rem;border-radius:3px;background:var(--wysiwyg-chrome-tooltip-bg, #222);color:var(--wysiwyg-chrome-tooltip-fg, #fff);font:.75rem/1.2 system-ui,sans-serif;white-space:nowrap;pointer-events:none}._tooltipElevated_2uk4l_493{z-index:1300;max-width:18rem;white-space:normal}._wrap_1097y_1._wrap_1097y_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_1097y_1._wrapToolbar_1097y_7{align-self:stretch;padding:5px .35rem 0}._wrap_1097y_1 ._field_1097y_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_1097y_1 ._trigger_1097y_20{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;min-width:9.5rem;max-width:12rem;height:100%;margin:0;padding:0 1.35rem 0 .45rem;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif;text-align:start;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}._wrap_1097y_1 ._trigger_1097y_20:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_1097y_1 ._trigger_1097y_20:disabled{cursor:not-allowed;opacity:.5}._wrap_1097y_1 ._chevron_1097y_50{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:var(--wysiwyg-chrome-text, #444)}._wrap_1097y_1 ._chevron_1097y_50:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_1097y_73{position:fixed;z-index:1300;min-width:12rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._listInline_1097y_88{position:static;z-index:auto;min-width:100%;max-height:14rem;box-shadow:none}._option_1097y_96{display:block;width:100%;margin:0;padding:.3rem .75rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font-size:.875rem;line-height:1.3;text-align:start;cursor:pointer}._option_1097y_96:hover,._option_1097y_96:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._option_1097y_96[aria-checked=true]{font-weight:600}._option_1097y_96:disabled{cursor:not-allowed;opacity:.5}._separator_1097y_125{height:1px;margin:.25rem .5rem;padding:0;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0;list-style:none}._wrap_192bz_1._wrap_192bz_1{display:inline-flex;flex-direction:row;flex-shrink:0;align-items:center;gap:.25rem}._wrap_192bz_1._wrapToolbar_192bz_9{align-self:stretch;padding:5px .35rem 0}._wrap_192bz_1 ._field_192bz_14{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_192bz_1 ._input_192bz_22{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;width:3.4rem;height:100%;margin:0;padding:0 1.35rem 0 .35rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._wrap_192bz_1 ._input_192bz_22:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_192bz_1 ._toggle_192bz_41,._wrap_192bz_1 ._chevron_192bz_42{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1.15rem;margin:0;padding:0;border:0;border-radius:0 3px 3px 0;background:transparent;color:var(--wysiwyg-chrome-text, #444)}._wrap_192bz_1 ._toggle_192bz_41{cursor:pointer}._wrap_192bz_1 ._chevron_192bz_42{pointer-events:none}._wrap_192bz_1 ._toggle_192bz_41:after,._wrap_192bz_1 ._chevron_192bz_42:after{content:"";display:block;width:0;height:0;margin:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._wrap_192bz_1 ._unit_192bz_80{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;width:3.4rem;height:100%;margin:0;padding:0 1.35rem 0 .35rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._wrap_192bz_1 ._unit_192bz_80::-ms-expand{display:none}._wrap_192bz_1 ._unit_192bz_80:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_192bz_1 ._input_192bz_22:disabled,._wrap_192bz_1 ._toggle_192bz_41:disabled,._wrap_192bz_1 ._unit_192bz_80:disabled{cursor:not-allowed;opacity:.5}._list_192bz_110{position:fixed;z-index:1300;min-width:4.5rem;max-height:12rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._list_192bz_110 ._option_192bz_125{display:block;width:100%;margin:0;padding:.2rem .5rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.3 system-ui,sans-serif;text-align:start;cursor:pointer}._list_192bz_110 ._option_192bz_125:hover,._list_192bz_110 ._option_192bz_125:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._backdrop_mi7ap_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._backdrop_mi7ap_1 ._dialog_mi7ap_12{display:flex;flex-direction:column;width:min(32rem,100%);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._backdrop_mi7ap_1 ._dialogWide_mi7ap_28{width:min(38rem,100%)}._backdrop_mi7ap_1 ._header_mi7ap_32{margin:0;padding:.75rem 1rem .5rem;font-size:1rem;font-weight:600}._backdrop_mi7ap_1 ._tabs_mi7ap_39{display:flex;flex-wrap:wrap;gap:.15rem;padding:0 1rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._backdrop_mi7ap_1 ._tab_mi7ap_39{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0 0 -1px;padding:.4rem .75rem;border:1px solid transparent;border-bottom:0;border-radius:4px 4px 0 0;background:transparent;color:inherit;font:inherit;cursor:pointer}._backdrop_mi7ap_1 ._tab_mi7ap_39[aria-selected=true]{border-color:var(--wysiwyg-chrome-border, #e5e5e5);background:var(--wysiwyg-chrome-dialog, #fff);font-weight:600}._backdrop_mi7ap_1 ._tab_mi7ap_39:disabled{cursor:not-allowed;opacity:.5}._backdrop_mi7ap_1 ._body_mi7ap_71{display:flex;flex-direction:column;gap:.85rem;padding:1rem;overflow:auto}._backdrop_mi7ap_1 ._field_mi7ap_79{display:flex;flex-direction:column;gap:.35rem}._backdrop_mi7ap_1 ._label_mi7ap_85{font-weight:600}._backdrop_mi7ap_1 ._sizeRow_mi7ap_89{display:flex;gap:.4rem;align-items:center}._backdrop_mi7ap_1 ._fileRow_mi7ap_95{display:flex;align-items:center;gap:.5rem}._backdrop_mi7ap_1 ._fileName_mi7ap_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--wysiwyg-chrome-text-muted, #555)}._backdrop_mi7ap_1 ._marks_mi7ap_108{display:flex;flex-direction:column;gap:.35rem;margin:0;padding:0;border:0}._backdrop_mi7ap_1 ._mark_mi7ap_108{display:flex;align-items:center;gap:.4rem}._backdrop_mi7ap_1 ._actions_mi7ap_123{display:flex;justify-content:flex-end;gap:.5rem;padding:.75rem 1rem 1rem}._backdrop_mi7ap_1 ._actionsSpread_mi7ap_130{justify-content:space-between}._backdrop_mi7ap_1 ._actionsEnd_mi7ap_134{display:flex;gap:.5rem}._backdrop_mi7ap_1 ._headerRow_mi7ap_139{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem .5rem .5rem 1rem}._backdrop_mi7ap_1 ._headerRow_mi7ap_139 ._header_mi7ap_32{flex:1;padding:0}._backdrop_mi7ap_1 ._close_mi7ap_151{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;margin:0;padding:.25rem;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}._backdrop_mi7ap_1 ._close_mi7ap_151:hover,._backdrop_mi7ap_1 ._close_mi7ap_151:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0)}._backdrop_mi7ap_1 ._nameSection_mi7ap_168{padding:.5rem 1rem .75rem}._backdrop_mi7ap_1 ._nameInput_mi7ap_172{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_mi7ap_1 ._nameInput_mi7ap_172:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_mi7ap_1 ._labelRow_mi7ap_189{display:flex;align-items:center;gap:.35rem}._backdrop_mi7ap_1 ._help_mi7ap_195{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;margin:0;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:50%;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:.7rem/1 system-ui,sans-serif;font-weight:700;cursor:help}._backdrop_mi7ap_1 ._textInput_mi7ap_213{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_mi7ap_1 ._fullSelect_mi7ap_225{width:100%}._backdrop_mi7ap_1 ._error_mi7ap_229{color:var(--wysiwyg-chrome-danger, #b33);font-size:.8rem}._backdrop_mi7ap_1 ._emptyHint_mi7ap_234{margin:0;color:var(--wysiwyg-chrome-text-muted, #666)}._backdrop_mi7ap_1 ._action_mi7ap_123[aria-pressed=true],._backdrop_mi7ap_1 ._action_mi7ap_123[aria-checked=true]{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary-soft, #e8eef8)}._backdrop_mi7ap_1 ._textarea_mi7ap_245{box-sizing:border-box;width:100%;min-height:6.5rem;margin:0;padding:.4rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:.8rem/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}._backdrop_mi7ap_1 ._actionDanger_mi7ap_259{border-color:var(--wysiwyg-chrome-danger, #c44);background:var(--wysiwyg-chrome-dialog, #fff);color:var(--wysiwyg-chrome-danger, #b33)}._backdrop_mi7ap_1 ._confirmBody_mi7ap_265{padding:1rem}._backdrop_mi7ap_1 ._emptyPanel_mi7ap_269{min-height:4rem}._backdrop_mi7ap_1 ._nestedPanel_mi7ap_273{margin:.85rem 1rem .15rem;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px}._backdrop_mi7ap_1 ._nestedPanel_mi7ap_273 ._tabs_mi7ap_39{padding-top:.4rem}._spinnerWrap_mi7ap_284{display:flex;align-items:center;justify-content:center;padding:.5rem .75rem}._spinner_mi7ap_284{width:1.1rem;height:1.1rem;border:2px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-top-color:var(--wysiwyg-chrome-primary, #4a7fd4);border-radius:50%;animation:_spin_mi7ap_284 .7s linear infinite}@keyframes _spin_mi7ap_284{to{transform:rotate(360deg)}}._backdrop_mi7ap_1 ._action_mi7ap_123{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._backdrop_mi7ap_1 ._actionPrimary_mi7ap_319{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary, #4a7fd4);color:var(--wysiwyg-chrome-primary-fg, #fff)}._backdrop_mi7ap_1 ._action_mi7ap_123:disabled{cursor:not-allowed;opacity:.5}._backdrop_mi7ap_1 ._action_mi7ap_123:focus-visible,._backdrop_mi7ap_1 ._tab_mi7ap_39:focus-visible,._backdrop_mi7ap_1 ._close_mi7ap_151:focus-visible,._backdrop_mi7ap_1 ._iconButton_mi7ap_333:focus-visible,._backdrop_mi7ap_1 ._select_mi7ap_334:focus-visible,._backdrop_mi7ap_1 ._lengthInput_mi7ap_335:focus-visible,._backdrop_mi7ap_1 ._lengthUnit_mi7ap_336:focus-visible,._backdrop_mi7ap_1 ._textInput_mi7ap_213:focus-visible,._backdrop_mi7ap_1 ._textarea_mi7ap_245:focus-visible,._backdrop_mi7ap_1 ._help_mi7ap_195:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_mi7ap_1 ._group_mi7ap_344{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:.75rem;border:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-radius:4px}._backdrop_mi7ap_1 ._nestedGroup_mi7ap_354{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:.6rem .7rem;border:1px solid var(--wysiwyg-chrome-border, #ececec);border-radius:4px}._backdrop_mi7ap_1 ._subLabel_mi7ap_364{font-weight:600}._backdrop_mi7ap_1 ._iconRow_mi7ap_368{display:flex;gap:.25rem}._backdrop_mi7ap_1 ._iconButton_mi7ap_333{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;cursor:pointer}._backdrop_mi7ap_1 ._iconButton_mi7ap_333[aria-checked=true],._backdrop_mi7ap_1 ._iconButton_mi7ap_333[aria-pressed=true]{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary-soft, #e8eef8)}._backdrop_mi7ap_1 ._iconButton_mi7ap_333:disabled{cursor:not-allowed;opacity:.5}._backdrop_mi7ap_1 ._lengthField_mi7ap_400{display:flex;flex-direction:column;gap:.25rem}._backdrop_mi7ap_1 ._sideLabel_mi7ap_406{font-weight:600}._backdrop_mi7ap_1 ._lengthRow_mi7ap_410{display:flex;gap:.35rem;align-items:center}._backdrop_mi7ap_1 ._lengthInput_mi7ap_335,._backdrop_mi7ap_1 ._select_mi7ap_334,._backdrop_mi7ap_1 ._lengthUnit_mi7ap_336{box-sizing:border-box;margin:0;padding:.3rem .4rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_mi7ap_1 ._lengthInput_mi7ap_335{width:4.75rem}._backdrop_mi7ap_1 ._select_mi7ap_334,._backdrop_mi7ap_1 ._lengthUnit_mi7ap_336{min-width:4.5rem}._backdrop_mi7ap_1 ._sideGrid_mi7ap_438,._backdrop_mi7ap_1 ._shadowGrid_mi7ap_439{display:grid;grid-template-columns:1fr 1fr;gap:.55rem .75rem}._frame_bwkh8_1{position:fixed;z-index:1140;box-sizing:border-box;pointer-events:none;border:1px solid #4a90d9}._handle_bwkh8_9{position:absolute;box-sizing:border-box;padding:0;pointer-events:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;box-shadow:none}._handle_bwkh8_9:focus{outline:none}._handle_bwkh8_9:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._handleEast_bwkh8_29{top:0;right:-4px;width:8px;height:calc(100% - 10px);cursor:e-resize}._handleSouth_bwkh8_37{left:0;bottom:-4px;width:calc(100% - 10px);height:8px;cursor:s-resize}._handleSouthEast_bwkh8_45{right:-5px;bottom:-5px;z-index:1;width:10px;height:10px;cursor:se-resize;border:1px solid #4a90d9;background:#fff}._grid_1bpma_1{display:grid;grid-template-columns:repeat(10,1.15rem);gap:2px;width:max-content}._cell_1bpma_8{width:1.15rem;height:1.15rem;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);background:var(--wysiwyg-chrome-input, #fff);cursor:pointer}._cell_1bpma_8[data-active=true]{background:var(--wysiwyg-chrome-selected, #cfe3ff);border-color:var(--wysiwyg-chrome-primary, #4a90d9)}._cell_1bpma_8:focus-visible{outline:2px solid var(--wysiwyg-chrome-primary, #4a90d9);outline-offset:1px}._sizeLabel_1bpma_27{margin:.35rem 0 0;color:var(--wysiwyg-chrome-text, #444);font-variant-numeric:tabular-nums}._sizeFields_1bpma_33{align-items:flex-end}._numberInput_1bpma_37{box-sizing:border-box;width:4.5rem;margin:0;padding:.35rem .4rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-input, #fff);color:inherit;font:inherit}._numberInput_1bpma_37:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_9d3gw_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._dialog_9d3gw_12{display:flex;flex-direction:column;width:min(90vw,72rem);height:min(90vh,56rem);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._headerRow_9d3gw_29{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem .5rem .5rem 1rem}._header_9d3gw_29{flex:1;margin:0;padding:0;font-size:1rem;font-weight:600}._close_9d3gw_44{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;margin:0;padding:.25rem;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}._close_9d3gw_44:hover,._close_9d3gw_44:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0)}._close_9d3gw_44:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._body_9d3gw_66{flex:1;min-height:0;overflow:hidden;border-top:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5);background:var(--wysiwyg-chrome-dialog-muted, #f3f3f3)}._frame_9d3gw_75{display:block;width:100%;height:100%;border:0;background:#fff}._actions_9d3gw_83{display:flex;justify-content:flex-end;gap:.5rem;padding:.75rem 1rem 1rem}._action_9d3gw_83{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._action_9d3gw_83:hover,._action_9d3gw_83:focus-visible{background:var(--wysiwyg-chrome-dialog, #fff)}._action_9d3gw_83:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_1dasl_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._dialog_1dasl_12{display:flex;flex-direction:column;width:min(52rem,100%);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._header_1dasl_28{margin:0;padding:.75rem 1rem .5rem;font-size:1rem;font-weight:600}._body_1dasl_35{display:flex;flex-direction:column;gap:.75rem;padding:.75rem 1rem;overflow:auto}._group_1dasl_43{border:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-radius:6px;background:var(--wysiwyg-chrome-dialog-group, #fafafa)}._groupDragging_1dasl_49{opacity:.55}._groupDropTarget_1dasl_53{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._groupHeader_1dasl_58{display:flex;align-items:center;gap:.4rem;padding:.45rem .6rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #ececec)}._groupTitle_1dasl_66{flex:1;font-weight:600}._dragHandle_1dasl_71,._moveButton_1dasl_72{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;margin:0;padding:0;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--wysiwyg-chrome-text-muted, #555);cursor:grab}._moveButton_1dasl_72{cursor:pointer}._dragHandle_1dasl_71:hover,._moveButton_1dasl_72:hover,._dragHandle_1dasl_71:focus-visible,._moveButton_1dasl_72:focus-visible{border-color:var(--wysiwyg-chrome-divider, #d0d0d0);background:var(--wysiwyg-chrome-dialog, #fff);color:var(--wysiwyg-chrome-text-strong, #111)}._dragHandle_1dasl_71:focus-visible,._moveButton_1dasl_72:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._dragHandle_1dasl_71:disabled,._moveButton_1dasl_72:disabled{cursor:not-allowed;opacity:.4}._items_1dasl_113{display:flex;flex-wrap:wrap;gap:.75rem 1rem;padding:.75rem .85rem .85rem}._item_1dasl_113{display:flex;flex-direction:column;align-items:center;gap:.3rem;min-width:4.5rem;max-width:6.5rem}._itemIcon_1dasl_129{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--wysiwyg-chrome-icon, #333)}._itemTitle_1dasl_138{text-align:center;font-size:.75rem;line-height:1.25;overflow-wrap:anywhere}._itemCheckbox_1dasl_145{margin:0}._actions_1dasl_149{display:flex;justify-content:space-between;gap:.5rem;padding:.75rem 1rem 1rem}._action_1dasl_149{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._action_1dasl_149:hover,._action_1dasl_149:focus-visible{background:var(--wysiwyg-chrome-dialog, #fff)}._action_1dasl_149:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._action_1dasl_149:disabled{cursor:not-allowed;opacity:.5}._spinnerWrap_1dasl_184{display:flex;align-items:center;justify-content:center;min-height:6rem}._spinner_1dasl_184{width:1.1rem;height:1.1rem;border:2px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-top-color:var(--wysiwyg-chrome-primary, #4a7fd4);border-radius:50%;animation:_spin_1dasl_184 .7s linear infinite}@keyframes _spin_1dasl_184{to{transform:rotate(360deg)}}._wrap_2cawp_1._wrap_2cawp_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_2cawp_1._wrapToolbar_2cawp_7{align-self:stretch;padding:5px .35rem 0}._wrap_2cawp_1 ._field_2cawp_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_2cawp_1 ._trigger_2cawp_20{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;min-width:8.5rem;height:100%;margin:0;padding:0 1.35rem 0 .45rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif;text-align:start;cursor:pointer}._wrap_2cawp_1 ._trigger_2cawp_20:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_2cawp_1 ._trigger_2cawp_20:disabled{cursor:not-allowed;opacity:.5}._wrap_2cawp_1 ._chevron_2cawp_46{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:var(--wysiwyg-chrome-text, #444)}._wrap_2cawp_1 ._chevron_2cawp_46:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_2cawp_69{position:fixed;z-index:1300;min-width:10rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._option_2cawp_84{display:block;width:100%;margin:0;padding:.25rem .75rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font-family:system-ui,sans-serif;line-height:1.25;text-align:start;cursor:pointer}._option_2cawp_84:hover,._option_2cawp_84:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._option_2cawp_84[aria-checked=true]{font-weight:600}._option_2cawp_84:disabled{cursor:not-allowed;opacity:.5}._separator_2cawp_113{height:1px;margin:.25rem .5rem;padding:0;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0;list-style:none}._root_1621j_1{all:revert;position:relative;box-sizing:border-box;display:flex;flex-direction:column;flex:1 1 auto;width:100%;min-width:0;height:100%;max-height:100%;min-height:16rem;border:var(--wysiwyg-border-width, 1px) solid var(--wysiwyg-border-color, var(--wysiwyg-chrome-divider, #d0d0d0));border-radius:var(--wysiwyg-border-radius, 6px);box-shadow:var(--wysiwyg-border-shadow, none);overflow:hidden;background:#fff;color:#111;font-family:system-ui,sans-serif;font-size:1rem;font-weight:400;font-style:normal;font-variant:normal;line-height:1.5;letter-spacing:normal;text-align:start;text-indent:0;text-transform:none;text-decoration:none;text-shadow:none;white-space:normal;word-spacing:normal;direction:ltr}._root_1621j_1._fullscreen_1621j_36{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;width:100%;height:100%;min-height:0;border:none;border-radius:0;box-shadow:none}._root_1621j_1 ._exitFullscreen_1621j_48{position:absolute;z-index:2;top:.4rem;right:.4rem;display:inline-flex;align-items:center;justify-content:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:2rem;height:2rem;margin:0;padding:0;border:0;border-radius:4px;background:var(--wysiwyg-chrome-menu, #fff);color:var(--wysiwyg-chrome-text, #444);font:inherit;cursor:pointer;box-shadow:0 1px 3px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 20%))}._root_1621j_1 ._exitFullscreen_1621j_48:hover{background:var(--wysiwyg-chrome-hover, #f4f4f4)}._root_1621j_1 ._exitFullscreen_1621j_48:focus{outline:none;box-shadow:inset 0 0 0 2px var(--wysiwyg-chrome-focus, #8ab4ff)}._root_1621j_1 ._exitFullscreenIcon_1621j_79{display:block;width:1rem;height:1rem;flex-shrink:0}._root_1621j_1 *:not(:is(svg,svg *)),._root_1621j_1 *:before,._root_1621j_1 *:after{all:revert;box-sizing:border-box}._root_1621j_1 ._menuChrome_1621j_94{display:flex;flex-direction:column;flex-shrink:0;align-items:stretch;z-index:1;width:100%;min-width:0}._root_1621j_1 ._body_1621j_104._body_1621j_104{position:relative;display:grid;flex:1 1 auto;min-width:0;min-height:0;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr)}._root_1621j_1 ._body_1621j_104._body_1621j_104[data-icon-dock=top]{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}._root_1621j_1 ._body_1621j_104._body_1621j_104[data-icon-dock=bottom]{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr)}._root_1621j_1 ._body_1621j_104._body_1621j_104[data-icon-dock=left]{grid-template-columns:12rem minmax(0,1fr);grid-template-rows:minmax(min-content,1fr)}._root_1621j_1 ._body_1621j_104._body_1621j_104[data-icon-dock=right]{grid-template-columns:minmax(0,1fr) 12rem;grid-template-rows:minmax(min-content,1fr)}._root_1621j_1 ._iconChrome_1621j_134._iconChrome_1621j_134{display:flex;flex-direction:column;align-items:stretch;z-index:1;min-width:0}._root_1621j_1[data-toolbar-position=top] ._iconChrome_1621j_134{width:100%;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1621j_1[data-toolbar-position=bottom] ._iconChrome_1621j_134{width:100%;border-top:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1621j_1[data-toolbar-position=left] ._iconChrome_1621j_134._iconChrome_1621j_134,._root_1621j_1[data-toolbar-position=right] ._iconChrome_1621j_134._iconChrome_1621j_134{align-self:stretch;box-sizing:border-box;width:100%;min-width:12rem;overflow-x:hidden;overflow-y:auto}._root_1621j_1[data-toolbar-position=left] ._iconChrome_1621j_134{border-right:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1621j_1[data-toolbar-position=right] ._iconChrome_1621j_134{border-left:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1621j_1[data-toolbar-position=left] ._iconChrome_1621j_134>*,._root_1621j_1[data-toolbar-position=right] ._iconChrome_1621j_134>*{width:100%;min-width:0;height:auto;min-height:100%}._root_1621j_1 ._workspace_1621j_178{position:relative;display:flex;flex:1 1 auto;flex-direction:column;min-width:0;min-height:0;overflow:auto;padding:1rem;background:#f0f0f0}._root_1621j_1 ._htmlFileDropOverlay_1621j_190{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;pointer-events:none;background:#ffffffd9;color:#111;font-size:1rem;font-weight:600}._root_1621j_1 ._surface_1621j_204{width:100%;min-height:100%;background:#fff;box-shadow:0 1px 3px #0000001f}._root_1621j_1 ._visual_1621j_211{flex:1 0 auto;min-height:100%;padding:.75rem;outline:none;user-select:text;-webkit-user-select:text}._root_1621j_1 ._visual_1621j_211:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_1621j_1 ._visual_1621j_211:empty:before{content:attr(data-placeholder);color:#888}._root_1621j_1 ._visual_1621j_211[aria-disabled=true]{opacity:.6;background:#f7f7f7}._root_1621j_1 ._html_1621j_190{display:block;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;flex:1 1 auto;width:100%;margin:0;min-height:100%;padding:.75rem;border:0;border-radius:0;resize:none;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;font-weight:400;font-style:normal;line-height:1.5;letter-spacing:normal;color:#111;outline:none;background:#fff}._root_1621j_1 ._html_1621j_190:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_1621j_1 ._html_1621j_190:disabled{opacity:.6}._visual_1621j_211 p{margin:0 0 .75em}._visual_1621j_211 p:last-child{margin-bottom:0}._visual_1621j_211 h1,._visual_1621j_211 h2,._visual_1621j_211 h3,._visual_1621j_211 h4,._visual_1621j_211 h5,._visual_1621j_211 h6{margin:1em 0 .5em;font-weight:600;line-height:1.25;color:inherit}._visual_1621j_211 h1:first-child,._visual_1621j_211 h2:first-child,._visual_1621j_211 h3:first-child,._visual_1621j_211 h4:first-child,._visual_1621j_211 h5:first-child,._visual_1621j_211 h6:first-child{margin-top:0}._visual_1621j_211 h1{font-size:1.75rem}._visual_1621j_211 h2{font-size:1.5rem}._visual_1621j_211 h3{font-size:1.25rem}._visual_1621j_211 h4{font-size:1.125rem}._visual_1621j_211 h5{font-size:1rem}._visual_1621j_211 h6{font-size:.875rem}._visual_1621j_211 ul,._visual_1621j_211 ol{margin:0 0 .75em;padding-left:1.5em}._visual_1621j_211 li{margin:.25em 0}._visual_1621j_211 a{color:#06c;text-decoration:underline}._visual_1621j_211 strong,._visual_1621j_211 b{font-weight:700}._visual_1621j_211 em,._visual_1621j_211 i{font-style:italic}._visual_1621j_211 u{text-decoration:underline}._visual_1621j_211 s{text-decoration:line-through}._visual_1621j_211 blockquote{margin:0 0 .75em;padding:0 0 0 .75em;border:0;border-left:3px solid #d0d0d0;color:#444}._visual_1621j_211 code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875em;background:#f4f4f4;padding:.1em .3em;border-radius:3px}._visual_1621j_211 pre{margin:0 0 .75em;padding:.75em;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.5;background:#f4f4f4;border-radius:4px}._visual_1621j_211 pre code{background:transparent;padding:0;font-size:inherit}._visual_1621j_211 hr{margin:1em 0;border:0;border-top:1px solid #d0d0d0}._visual_1621j_211 img{max-width:100%;vertical-align:middle}
1
+ ._chrome_boy0f_1{--wysiwyg-chrome-text: #444;--wysiwyg-chrome-text-strong: #111;--wysiwyg-chrome-text-muted: #555;--wysiwyg-chrome-toolbar: #f0f0f0;--wysiwyg-chrome-menu: #fff;--wysiwyg-chrome-border: #e5e5e5;--wysiwyg-chrome-divider: #d0d0d0;--wysiwyg-chrome-hover: #f0f0f0;--wysiwyg-chrome-pressed: #ececec;--wysiwyg-chrome-dialog: #fff;--wysiwyg-chrome-dialog-text: #222;--wysiwyg-chrome-dialog-border: #c8c8c8;--wysiwyg-chrome-dialog-muted: #f7f7f7;--wysiwyg-chrome-dialog-group: #fafafa;--wysiwyg-chrome-input: #fff;--wysiwyg-chrome-focus: #8ab4ff;--wysiwyg-chrome-backdrop: rgb(0 0 0 / 32%);--wysiwyg-chrome-shadow: rgb(0 0 0 / 18%);--wysiwyg-chrome-menu-shadow: rgb(0 0 0 / 8%);--wysiwyg-chrome-tooltip-bg: #222;--wysiwyg-chrome-tooltip-fg: #fff;--wysiwyg-chrome-selected: #e8f0fe;--wysiwyg-chrome-danger: #b33;--wysiwyg-chrome-primary: #4a7fd4;--wysiwyg-chrome-primary-fg: #fff;--wysiwyg-chrome-primary-soft: #e8eef8;--wysiwyg-chrome-empty: #ddd;--wysiwyg-chrome-icon: #333}._chrome_boy0f_1[data-wysiwyg-theme=dark]{--wysiwyg-chrome-text: #e4e4e4;--wysiwyg-chrome-text-strong: #fff;--wysiwyg-chrome-text-muted: #bbb;--wysiwyg-chrome-toolbar: #2b2b2b;--wysiwyg-chrome-menu: #1e1e1e;--wysiwyg-chrome-border: #3a3a3a;--wysiwyg-chrome-divider: #4a4a4a;--wysiwyg-chrome-hover: #3a3a3a;--wysiwyg-chrome-pressed: #444;--wysiwyg-chrome-dialog: #252525;--wysiwyg-chrome-dialog-text: #e8e8e8;--wysiwyg-chrome-dialog-border: #4a4a4a;--wysiwyg-chrome-dialog-muted: #1a1a1a;--wysiwyg-chrome-dialog-group: #1a1a1a;--wysiwyg-chrome-input: #1e1e1e;--wysiwyg-chrome-focus: #8ab4ff;--wysiwyg-chrome-backdrop: rgb(0 0 0 / 55%);--wysiwyg-chrome-shadow: rgb(0 0 0 / 45%);--wysiwyg-chrome-menu-shadow: rgb(0 0 0 / 40%);--wysiwyg-chrome-tooltip-bg: #eee;--wysiwyg-chrome-tooltip-fg: #111;--wysiwyg-chrome-selected: #2a3a50;--wysiwyg-chrome-danger: #f66;--wysiwyg-chrome-primary: #6a9ae0;--wysiwyg-chrome-primary-fg: #111;--wysiwyg-chrome-primary-soft: #2a3a50;--wysiwyg-chrome-empty: #555;--wysiwyg-chrome-icon: #eee}._menu_labh4_1{position:fixed;z-index:1150;display:flex;flex-direction:column;min-width:12rem;margin:0;padding:.25rem 0;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-chrome-menu, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 8%));color:var(--wysiwyg-chrome-text, #444);font:.875rem/1.4 system-ui,sans-serif}._item_labh4_17{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;align-items:center;width:100%;margin:0;padding:.4rem .75rem;border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:start;white-space:nowrap;cursor:pointer;box-shadow:none}._item_labh4_17:hover,._item_labh4_17:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0);color:var(--wysiwyg-chrome-text-strong, #111)}._item_labh4_17:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._item_labh4_17:disabled{cursor:not-allowed;opacity:.5}._item_labh4_17:disabled:hover,._item_labh4_17:disabled:focus-visible{background:transparent;color:inherit}._separator_labh4_57{height:1px;margin:.25rem .5rem;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0}._picker_ag1yo_1{display:flex;flex-direction:column;gap:.45rem;box-sizing:border-box;width:14.5rem;padding:.4rem .5rem .5rem;color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._none_ag1yo_12,._customToggle_ag1yo_13,._eyedrop_ag1yo_14{display:flex;align-items:center;gap:.4rem;width:100%;margin:0;padding:.25rem .35rem;border:0;border-radius:3px;background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer}._none_ag1yo_12:hover,._none_ag1yo_12:focus-visible,._customToggle_ag1yo_13:hover,._customToggle_ag1yo_13:focus-visible,._eyedrop_ag1yo_14:hover,._eyedrop_ag1yo_14:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._none_ag1yo_12[aria-checked=true],._none_ag1yo_12[aria-selected=true]{font-weight:600}._none_ag1yo_12:disabled,._customToggle_ag1yo_13:disabled,._eyedrop_ag1yo_14:disabled,._swatch_ag1yo_48:disabled,._field_ag1yo_49 input:disabled{cursor:not-allowed;opacity:.5}._grid_ag1yo_54,._recents_ag1yo_55{display:grid;grid-template-columns:repeat(8,1.25rem);gap:.22rem;justify-content:space-between}._swatch_ag1yo_48{box-sizing:border-box;width:1.25rem;height:1.25rem;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:2px;cursor:pointer}._swatch_ag1yo_48:hover,._swatch_ag1yo_48:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._swatch_ag1yo_48[aria-checked=true],._swatch_ag1yo_48[aria-selected=true]{outline:2px solid #111;outline-offset:1px}._sectionLabel_ag1yo_84{margin:.15rem 0 0;font-weight:600}._custom_ag1yo_13{display:flex;flex-direction:column;gap:.45rem}._sv_ag1yo_95{position:relative;width:100%;height:7.5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;cursor:crosshair;touch-action:none}._svThumb_ag1yo_105{position:absolute;width:.7rem;height:.7rem;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px #111;transform:translate(-50%,-50%);pointer-events:none}._hue_ag1yo_116{width:100%;height:.85rem;margin:0;padding:0;border-radius:3px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red);cursor:pointer}._hue_ag1yo_116::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:.7rem;height:.85rem;border:2px solid #fff;border-radius:2px;background:transparent;box-shadow:0 0 0 1px #111}._hue_ag1yo_116::-moz-range-thumb{width:.7rem;height:.85rem;border:2px solid #fff;border-radius:2px;background:transparent;box-shadow:0 0 0 1px #111}._rgbRow_ag1yo_155,._hexRow_ag1yo_156{display:flex;align-items:center;gap:.3rem}._field_ag1yo_49{display:flex;flex:1 1 0;flex-direction:column;gap:.1rem;min-width:0}._field_ag1yo_49 label{font-weight:600}._field_ag1yo_49 input{box-sizing:border-box;width:100%;margin:0;padding:.15rem .25rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:inherit;font:inherit}._hexRow_ag1yo_156 ._field_ag1yo_49{flex:1 1 auto}._eyedrop_ag1yo_14{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23222' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15.5 4.5l4 4-9 9H6.5v-4.5z'/%3E%3Cpath d='M13.5 6.5l4 4'/%3E%3C/svg%3E") 2 18,crosshair}._wrap_xzhkl_1{position:relative;display:inline-flex;flex-shrink:0;align-items:stretch}._button_xzhkl_8{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;min-width:1.75rem;padding:.4rem .5rem .3rem}._icon_xzhkl_18{display:block;width:1rem;height:1rem}._bar_xzhkl_24{display:block;width:1rem;height:.2rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:1px;background:transparent}._barEmpty_xzhkl_33{background:repeating-linear-gradient(-45deg,var(--wysiwyg-chrome-empty, #ddd),var(--wysiwyg-chrome-empty, #ddd) 1px,transparent 1px,transparent 3px)}._popover_xzhkl_43{position:fixed;z-index:1300;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%))}._field_1knrr_1{display:flex;align-items:center;justify-content:space-between;gap:.75rem}._label_1knrr_8{font-weight:600}._button_1knrr_12{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:2.4rem;height:1.5rem;margin:0;padding:.15rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);cursor:pointer}._button_1knrr_12:disabled{cursor:not-allowed;opacity:.5}._button_1knrr_12:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._swatch_1knrr_37{display:block;width:100%;height:100%;border-radius:2px}._swatchEmpty_1knrr_44{background:repeating-linear-gradient(-45deg,var(--wysiwyg-chrome-empty, #ddd),var(--wysiwyg-chrome-empty, #ddd) 1px,transparent 1px,transparent 3px)}._toolbar_2uk4l_1{display:flex;flex-direction:column;align-items:stretch;width:100%;min-width:0}._toolbar_2uk4l_1._toolbar_2uk4l_1{display:flex;flex-direction:column;container-type:inline-size}._toolbar_2uk4l_1._toolbar_2uk4l_1[data-toolbar-position=left],._toolbar_2uk4l_1._toolbar_2uk4l_1[data-toolbar-position=right]{container-type:normal;width:100%;min-width:0;height:auto;min-height:100%}._toolbar_2uk4l_1._toolbar_2uk4l_1[data-menu-overlay-portal]{container-type:normal;width:0;height:0;min-width:0;overflow:visible}._toolbar_2uk4l_1 ._menuBar_2uk4l_35{display:flex;align-items:stretch;width:100%;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._toolbar_2uk4l_1 ._menuBarDesktop_2uk4l_43{display:flex;align-items:stretch;min-width:0}._toolbar_2uk4l_1 ._brandMark_2uk4l_49{display:inline-flex;flex-shrink:0;align-items:center;padding:.25rem .65rem .25rem .5rem}._toolbar_2uk4l_1 ._brandMarkIcon_2uk4l_56{display:block;height:2.5rem;width:auto;aspect-ratio:616.23 / 542.09;overflow:visible}._toolbar_2uk4l_1 ._brandMarkIcon_2uk4l_56 *{stroke:none}._toolbar_2uk4l_1 ._menuBarCompact_2uk4l_68{display:none;align-items:stretch}._toolbar_2uk4l_1[data-compact] ._menuBarDesktop_2uk4l_43{display:none}._toolbar_2uk4l_1[data-compact] ._menuBarCompact_2uk4l_68{display:flex}@container (max-width: 40rem){._toolbar_2uk4l_1 ._menuBarDesktop_2uk4l_43{display:none}._toolbar_2uk4l_1 ._menuBarCompact_2uk4l_68{display:flex}}._toolbar_2uk4l_1 ._menuWrap_2uk4l_91{position:relative;display:flex;align-items:stretch}._toolbar_2uk4l_1 ._menuButton_2uk4l_97,._toolbar_2uk4l_1 ._iconButton_2uk4l_98,._toolbar_2uk4l_1 ._menuItem_2uk4l_99{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;border:0;border-radius:0;background:transparent;font:inherit;font-weight:400;line-height:inherit;letter-spacing:inherit;text-transform:none;text-decoration:none;color:var(--wysiwyg-chrome-text, #444);cursor:pointer;box-shadow:none}._toolbar_2uk4l_1 ._menuButton_2uk4l_97,._toolbar_2uk4l_1 ._menuItem_2uk4l_99{color:var(--wysiwyg-menu-color, var(--wysiwyg-chrome-text, #444));font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_2uk4l_1 ._menuButton_2uk4l_97{display:inline-flex;align-items:center;padding:.5rem .9rem;text-align:center}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:after{content:"";display:inline-block;width:0;height:0;margin-left:.4rem;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent;transform:translateY(.08em)}._toolbar_2uk4l_1 ._hamburgerButton_2uk4l_142:after{content:none;display:none;margin:0;border:0}._toolbar_2uk4l_1 ._iconNav_2uk4l_149{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;width:100%;max-width:100%;min-width:0;background:var(--wysiwyg-toolbar-background, var(--wysiwyg-chrome-toolbar, #f0f0f0))}._toolbar_2uk4l_1 ._iconNavMain_2uk4l_160{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:stretch;min-width:0;max-width:100%}._toolbar_2uk4l_1 ._iconNavEnd_2uk4l_169{display:flex;flex:0 0 auto;flex-wrap:nowrap;align-items:stretch;align-self:flex-start}._toolbar_2uk4l_1 ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before{content:"";width:1px;align-self:stretch;margin:.35rem .15rem;background:var(--wysiwyg-chrome-divider, #d0d0d0)}._toolbar_2uk4l_1 ._iconGroup_2uk4l_185{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:stretch;max-width:100%}._toolbar_2uk4l_1 ._iconNavEnd_2uk4l_169 ._iconGroup_2uk4l_185{flex-wrap:nowrap}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNav_2uk4l_149,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNav_2uk4l_149{flex:1 0 auto;flex-direction:column;flex-wrap:nowrap;align-items:stretch;width:100%;min-width:0;max-width:none;height:auto;min-height:100%}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavMain_2uk4l_160,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavMain_2uk4l_160{flex:1 0 auto;flex-direction:column;flex-wrap:nowrap;width:100%;min-width:0;max-width:none}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavEnd_2uk4l_169,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavEnd_2uk4l_169{flex-direction:column;margin-top:auto;align-self:stretch}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconGroup_2uk4l_185,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconGroup_2uk4l_185{flex-direction:column;flex-wrap:nowrap;width:100%;min-width:0;max-width:none}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconGroup_2uk4l_185:not(:last-child):after,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconGroup_2uk4l_185:not(:last-child):after{width:auto;height:1px;margin:.15rem .35rem}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before,._toolbar_2uk4l_1[data-toolbar-position=right] ._iconNavMain_2uk4l_160+._iconNavEnd_2uk4l_169:before{width:auto;height:1px;align-self:stretch;margin:.15rem .35rem}._toolbar_2uk4l_1[data-toolbar-position=left] ._iconButton_2uk4l_98[aria-pressed=true],._toolbar_2uk4l_1[data-toolbar-position=right] ._iconButton_2uk4l_98[aria-pressed=true]{box-shadow:inset -2px 0 0 var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._iconGroup_2uk4l_185:not(:last-child):after{content:"";width:1px;align-self:stretch;margin:.35rem .15rem;background:var(--wysiwyg-chrome-divider, #d0d0d0)}._toolbar_2uk4l_1 ._iconButton_2uk4l_98{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:.5rem .65rem}._toolbar_2uk4l_1 ._iconNav_2uk4l_149 ._iconButton_2uk4l_98{padding:calc(.5rem + 2px) .65rem calc(.5rem - 2px)}._tooltipTrigger_2uk4l_276{display:inline-flex;flex-shrink:0;align-items:stretch}._toolbar_2uk4l_1 ._iconButton_2uk4l_98[aria-pressed=true]{color:var(--wysiwyg-chrome-text-strong, #111);background:var(--wysiwyg-chrome-pressed, #ececec);box-shadow:inset 0 -2px 0 var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._menu_2uk4l_35{position:absolute;top:100%;left:0;z-index:2;display:flex;flex-direction:column;min-width:10rem;margin:0;padding:.25rem 0;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 8%))}._toolbar_2uk4l_1 ._submenuWrap_2uk4l_304{position:relative}._toolbar_2uk4l_1 ._submenu_2uk4l_304{top:0;left:100%;z-index:3}._toolbar_2uk4l_1 ._submenuTrigger_2uk4l_314{justify-content:space-between}._toolbar_2uk4l_1 ._submenuTrigger_2uk4l_314:after{content:"";display:inline-block;width:0;height:0;margin-left:.75rem;border-style:solid;border-width:.22rem 0 .22rem .28rem;border-color:transparent transparent transparent currentColor}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;display:flex;flex-direction:column;background:var(--wysiwyg-menu-background, var(--wysiwyg-chrome-menu, #fff));color:var(--wysiwyg-menu-color, var(--wysiwyg-chrome-text, #444));font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_2uk4l_1 ._menuOverlayHeader_2uk4l_341{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:.5rem;padding:.15rem .15rem .15rem .9rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._toolbar_2uk4l_1 ._menuOverlayTitle_2uk4l_351{font-size:inherit;font-weight:600;color:inherit}._toolbar_2uk4l_1 ._menuOverlayBody_2uk4l_357{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:auto}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuWrap_2uk4l_91{flex-direction:column;align-items:stretch;width:100%}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuButton_2uk4l_97{width:100%;justify-content:space-between}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menu_2uk4l_35{position:static;top:auto;left:auto;z-index:auto;min-width:0;width:100%;border:0;border-radius:0;box-shadow:none;padding:0 0 .25rem}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenuWrap_2uk4l_304{position:static}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenu_2uk4l_304{position:static;top:auto;left:auto;z-index:auto}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._submenuTrigger_2uk4l_314:after{transform:rotate(90deg)}._toolbar_2uk4l_1 ._menuOverlay_2uk4l_329 ._menuItem_2uk4l_99{white-space:normal}._toolbar_2uk4l_1 ._menuSeparator_2uk4l_408{height:1px;margin:.25rem .5rem;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0}._toolbar_2uk4l_1 ._menuItem_2uk4l_99{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .75rem;text-align:start;white-space:nowrap}._toolbar_2uk4l_1 ._menuItem_2uk4l_99:hover,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0);color:var(--wysiwyg-chrome-text-strong, #111)}._toolbar_2uk4l_1 ._menuItem_2uk4l_99[aria-checked=true]{color:var(--wysiwyg-chrome-text-strong, #111);font-weight:600}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:hover,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:hover,._toolbar_2uk4l_1 ._menuButton_2uk4l_97:focus-visible,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:focus-visible{color:var(--wysiwyg-chrome-text-strong, #111);background:var(--wysiwyg-chrome-hover, #f0f0f0)}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:focus-visible,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:focus-visible,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._toolbar_2uk4l_1 ._menuButton_2uk4l_97:disabled,._toolbar_2uk4l_1 ._iconButton_2uk4l_98:disabled,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled{cursor:not-allowed;opacity:.5}._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled:hover,._toolbar_2uk4l_1 ._menuItem_2uk4l_99:disabled:focus-visible{background:transparent;color:inherit}._toolbar_2uk4l_1 ._icon_2uk4l_98,._toolbar_2uk4l_1 ._icon_2uk4l_98 *{overflow:visible;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}._toolbar_2uk4l_1 ._icon_2uk4l_98{display:block;width:1rem;height:1rem;flex-shrink:0}._tooltip_2uk4l_276{position:fixed;z-index:1100;padding:.2rem .45rem;border-radius:3px;background:var(--wysiwyg-chrome-tooltip-bg, #222);color:var(--wysiwyg-chrome-tooltip-fg, #fff);font:.75rem/1.2 system-ui,sans-serif;white-space:nowrap;pointer-events:none}._tooltipElevated_2uk4l_493{z-index:1300;max-width:18rem;white-space:normal}._wrap_1097y_1._wrap_1097y_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_1097y_1._wrapToolbar_1097y_7{align-self:stretch;padding:5px .35rem 0}._wrap_1097y_1 ._field_1097y_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_1097y_1 ._trigger_1097y_20{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;min-width:9.5rem;max-width:12rem;height:100%;margin:0;padding:0 1.35rem 0 .45rem;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif;text-align:start;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}._wrap_1097y_1 ._trigger_1097y_20:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_1097y_1 ._trigger_1097y_20:disabled{cursor:not-allowed;opacity:.5}._wrap_1097y_1 ._chevron_1097y_50{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:var(--wysiwyg-chrome-text, #444)}._wrap_1097y_1 ._chevron_1097y_50:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_1097y_73{position:fixed;z-index:1300;min-width:12rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._listInline_1097y_88{position:static;z-index:auto;min-width:100%;max-height:14rem;box-shadow:none}._option_1097y_96{display:block;width:100%;margin:0;padding:.3rem .75rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font-size:.875rem;line-height:1.3;text-align:start;cursor:pointer}._option_1097y_96:hover,._option_1097y_96:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._option_1097y_96[aria-checked=true]{font-weight:600}._option_1097y_96:disabled{cursor:not-allowed;opacity:.5}._separator_1097y_125{height:1px;margin:.25rem .5rem;padding:0;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0;list-style:none}._wrap_192bz_1._wrap_192bz_1{display:inline-flex;flex-direction:row;flex-shrink:0;align-items:center;gap:.25rem}._wrap_192bz_1._wrapToolbar_192bz_9{align-self:stretch;padding:5px .35rem 0}._wrap_192bz_1 ._field_192bz_14{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_192bz_1 ._input_192bz_22{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;width:3.4rem;height:100%;margin:0;padding:0 1.35rem 0 .35rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._wrap_192bz_1 ._input_192bz_22:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_192bz_1 ._toggle_192bz_41,._wrap_192bz_1 ._chevron_192bz_42{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1.15rem;margin:0;padding:0;border:0;border-radius:0 3px 3px 0;background:transparent;color:var(--wysiwyg-chrome-text, #444)}._wrap_192bz_1 ._toggle_192bz_41{cursor:pointer}._wrap_192bz_1 ._chevron_192bz_42{pointer-events:none}._wrap_192bz_1 ._toggle_192bz_41:after,._wrap_192bz_1 ._chevron_192bz_42:after{content:"";display:block;width:0;height:0;margin:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._wrap_192bz_1 ._unit_192bz_80{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;width:3.4rem;height:100%;margin:0;padding:0 1.35rem 0 .35rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif}._wrap_192bz_1 ._unit_192bz_80::-ms-expand{display:none}._wrap_192bz_1 ._unit_192bz_80:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_192bz_1 ._input_192bz_22:disabled,._wrap_192bz_1 ._toggle_192bz_41:disabled,._wrap_192bz_1 ._unit_192bz_80:disabled{cursor:not-allowed;opacity:.5}._list_192bz_110{position:fixed;z-index:1300;min-width:4.5rem;max-height:12rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._list_192bz_110 ._option_192bz_125{display:block;width:100%;margin:0;padding:.2rem .5rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.3 system-ui,sans-serif;text-align:start;cursor:pointer}._list_192bz_110 ._option_192bz_125:hover,._list_192bz_110 ._option_192bz_125:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._backdrop_1bzww_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._backdrop_1bzww_1 ._dialog_1bzww_12{display:flex;flex-direction:column;width:min(32rem,100%);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._backdrop_1bzww_1 ._dialogWide_1bzww_28{width:min(38rem,100%)}._backdrop_1bzww_1 ._header_1bzww_32{margin:0;padding:.75rem 1rem .5rem;font-size:1rem;font-weight:600}._backdrop_1bzww_1 ._tabs_1bzww_39{display:flex;flex-wrap:wrap;gap:.15rem;padding:0 1rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._backdrop_1bzww_1 ._tab_1bzww_39{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0 0 -1px;padding:.4rem .75rem;border:1px solid transparent;border-bottom:0;border-radius:4px 4px 0 0;background:transparent;color:inherit;font:inherit;cursor:pointer}._backdrop_1bzww_1 ._tab_1bzww_39[aria-selected=true]{border-color:var(--wysiwyg-chrome-border, #e5e5e5);background:var(--wysiwyg-chrome-dialog, #fff);font-weight:600}._backdrop_1bzww_1 ._tab_1bzww_39:disabled{cursor:not-allowed;opacity:.5}._backdrop_1bzww_1 ._body_1bzww_71{display:flex;flex-direction:column;gap:.85rem;padding:1rem;overflow:auto}._backdrop_1bzww_1 ._field_1bzww_79{display:flex;flex-direction:column;gap:.35rem}._backdrop_1bzww_1 ._label_1bzww_85{font-weight:600}._backdrop_1bzww_1 ._sizeRow_1bzww_89{display:flex;gap:.4rem;align-items:center}._backdrop_1bzww_1 ._fileRow_1bzww_95{display:flex;align-items:center;gap:.5rem}._backdrop_1bzww_1 ._fileName_1bzww_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--wysiwyg-chrome-text-muted, #555)}._backdrop_1bzww_1 ._previewImage_1bzww_108{display:block;max-width:100%;max-height:8rem;margin-top:.35rem;object-fit:contain;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:4px}._backdrop_1bzww_1 ._marks_1bzww_118{display:flex;flex-direction:column;gap:.35rem;margin:0;padding:0;border:0}._backdrop_1bzww_1 ._mark_1bzww_118{display:flex;align-items:center;gap:.4rem}._backdrop_1bzww_1 ._actions_1bzww_133{display:flex;justify-content:flex-end;gap:.5rem;padding:.75rem 1rem 1rem}._backdrop_1bzww_1 ._actionsSpread_1bzww_140{justify-content:space-between}._backdrop_1bzww_1 ._actionsEnd_1bzww_144{display:flex;gap:.5rem}._backdrop_1bzww_1 ._headerRow_1bzww_149{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem .5rem .5rem 1rem}._backdrop_1bzww_1 ._headerRow_1bzww_149 ._header_1bzww_32{flex:1;padding:0}._backdrop_1bzww_1 ._close_1bzww_161{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;margin:0;padding:.25rem;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}._backdrop_1bzww_1 ._close_1bzww_161:hover,._backdrop_1bzww_1 ._close_1bzww_161:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0)}._backdrop_1bzww_1 ._nameSection_1bzww_178{padding:.5rem 1rem .75rem}._backdrop_1bzww_1 ._nameInput_1bzww_182{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_1bzww_1 ._nameInput_1bzww_182:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_1bzww_1 ._labelRow_1bzww_199{display:flex;align-items:center;gap:.35rem}._backdrop_1bzww_1 ._help_1bzww_205{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;margin:0;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:50%;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:.7rem/1 system-ui,sans-serif;font-weight:700;cursor:help}._backdrop_1bzww_1 ._textInput_1bzww_223{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_1bzww_1 ._fullSelect_1bzww_235{width:100%}._backdrop_1bzww_1 ._error_1bzww_239{color:var(--wysiwyg-chrome-danger, #b33);font-size:.8rem}._backdrop_1bzww_1 ._emptyHint_1bzww_244{margin:0;color:var(--wysiwyg-chrome-text-muted, #666)}._backdrop_1bzww_1 ._action_1bzww_133[aria-pressed=true],._backdrop_1bzww_1 ._action_1bzww_133[aria-checked=true]{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary-soft, #e8eef8)}._backdrop_1bzww_1 ._textarea_1bzww_255{box-sizing:border-box;width:100%;min-height:6.5rem;margin:0;padding:.4rem .5rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:.8rem/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}._backdrop_1bzww_1 ._actionDanger_1bzww_269{border-color:var(--wysiwyg-chrome-danger, #c44);background:var(--wysiwyg-chrome-dialog, #fff);color:var(--wysiwyg-chrome-danger, #b33)}._backdrop_1bzww_1 ._confirmBody_1bzww_275{padding:1rem}._backdrop_1bzww_1 ._emptyPanel_1bzww_279{min-height:4rem}._backdrop_1bzww_1 ._nestedPanel_1bzww_283{margin:.85rem 1rem .15rem;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px}._backdrop_1bzww_1 ._nestedPanel_1bzww_283 ._tabs_1bzww_39{padding-top:.4rem}._spinnerWrap_1bzww_294{display:flex;align-items:center;justify-content:center;padding:.5rem .75rem}._spinner_1bzww_294{width:1.1rem;height:1.1rem;border:2px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-top-color:var(--wysiwyg-chrome-primary, #4a7fd4);border-radius:50%;animation:_spin_1bzww_294 .7s linear infinite}@keyframes _spin_1bzww_294{to{transform:rotate(360deg)}}._backdrop_1bzww_1 ._action_1bzww_133{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._backdrop_1bzww_1 ._actionPrimary_1bzww_329{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary, #4a7fd4);color:var(--wysiwyg-chrome-primary-fg, #fff)}._backdrop_1bzww_1 ._action_1bzww_133:disabled{cursor:not-allowed;opacity:.5}._backdrop_1bzww_1 ._action_1bzww_133:focus-visible,._backdrop_1bzww_1 ._tab_1bzww_39:focus-visible,._backdrop_1bzww_1 ._close_1bzww_161:focus-visible,._backdrop_1bzww_1 ._iconButton_1bzww_343:focus-visible,._backdrop_1bzww_1 ._select_1bzww_344:focus-visible,._backdrop_1bzww_1 ._lengthInput_1bzww_345:focus-visible,._backdrop_1bzww_1 ._lengthUnit_1bzww_346:focus-visible,._backdrop_1bzww_1 ._textInput_1bzww_223:focus-visible,._backdrop_1bzww_1 ._textarea_1bzww_255:focus-visible,._backdrop_1bzww_1 ._help_1bzww_205:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_1bzww_1 ._group_1bzww_354{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:.75rem;border:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-radius:4px}._backdrop_1bzww_1 ._nestedGroup_1bzww_364{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:.6rem .7rem;border:1px solid var(--wysiwyg-chrome-border, #ececec);border-radius:4px}._backdrop_1bzww_1 ._subLabel_1bzww_374{font-weight:600}._backdrop_1bzww_1 ._iconRow_1bzww_378{display:flex;gap:.25rem}._backdrop_1bzww_1 ._iconButton_1bzww_343{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;cursor:pointer}._backdrop_1bzww_1 ._iconButton_1bzww_343[aria-checked=true],._backdrop_1bzww_1 ._iconButton_1bzww_343[aria-pressed=true]{border-color:var(--wysiwyg-chrome-primary, #4a7fd4);background:var(--wysiwyg-chrome-primary-soft, #e8eef8)}._backdrop_1bzww_1 ._iconButton_1bzww_343:disabled{cursor:not-allowed;opacity:.5}._backdrop_1bzww_1 ._lengthField_1bzww_410{display:flex;flex-direction:column;gap:.25rem}._backdrop_1bzww_1 ._sideLabel_1bzww_416{font-weight:600}._backdrop_1bzww_1 ._lengthRow_1bzww_420{display:flex;gap:.35rem;align-items:center}._backdrop_1bzww_1 ._lengthInput_1bzww_345,._backdrop_1bzww_1 ._select_1bzww_344,._backdrop_1bzww_1 ._lengthUnit_1bzww_346{box-sizing:border-box;margin:0;padding:.3rem .4rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog, #fff);color:inherit;font:inherit}._backdrop_1bzww_1 ._lengthInput_1bzww_345{width:4.75rem}._backdrop_1bzww_1 ._select_1bzww_344,._backdrop_1bzww_1 ._lengthUnit_1bzww_346{min-width:4.5rem}._backdrop_1bzww_1 ._sideGrid_1bzww_448,._backdrop_1bzww_1 ._shadowGrid_1bzww_449{display:grid;grid-template-columns:1fr 1fr;gap:.55rem .75rem}._frame_bwkh8_1{position:fixed;z-index:1140;box-sizing:border-box;pointer-events:none;border:1px solid #4a90d9}._handle_bwkh8_9{position:absolute;box-sizing:border-box;padding:0;pointer-events:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;box-shadow:none}._handle_bwkh8_9:focus{outline:none}._handle_bwkh8_9:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._handleEast_bwkh8_29{top:0;right:-4px;width:8px;height:calc(100% - 10px);cursor:e-resize}._handleSouth_bwkh8_37{left:0;bottom:-4px;width:calc(100% - 10px);height:8px;cursor:s-resize}._handleSouthEast_bwkh8_45{right:-5px;bottom:-5px;z-index:1;width:10px;height:10px;cursor:se-resize;border:1px solid #4a90d9;background:#fff}._grid_1bpma_1{display:grid;grid-template-columns:repeat(10,1.15rem);gap:2px;width:max-content}._cell_1bpma_8{width:1.15rem;height:1.15rem;padding:0;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);background:var(--wysiwyg-chrome-input, #fff);cursor:pointer}._cell_1bpma_8[data-active=true]{background:var(--wysiwyg-chrome-selected, #cfe3ff);border-color:var(--wysiwyg-chrome-primary, #4a90d9)}._cell_1bpma_8:focus-visible{outline:2px solid var(--wysiwyg-chrome-primary, #4a90d9);outline-offset:1px}._sizeLabel_1bpma_27{margin:.35rem 0 0;color:var(--wysiwyg-chrome-text, #444);font-variant-numeric:tabular-nums}._sizeFields_1bpma_33{align-items:flex-end}._numberInput_1bpma_37{box-sizing:border-box;width:4.5rem;margin:0;padding:.35rem .4rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-input, #fff);color:inherit;font:inherit}._numberInput_1bpma_37:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_9d3gw_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._dialog_9d3gw_12{display:flex;flex-direction:column;width:min(90vw,72rem);height:min(90vh,56rem);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._headerRow_9d3gw_29{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem .5rem .5rem 1rem}._header_9d3gw_29{flex:1;margin:0;padding:0;font-size:1rem;font-weight:600}._close_9d3gw_44{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;margin:0;padding:.25rem;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}._close_9d3gw_44:hover,._close_9d3gw_44:focus-visible{background:var(--wysiwyg-chrome-hover, #f0f0f0)}._close_9d3gw_44:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._body_9d3gw_66{flex:1;min-height:0;overflow:hidden;border-top:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5);background:var(--wysiwyg-chrome-dialog-muted, #f3f3f3)}._frame_9d3gw_75{display:block;width:100%;height:100%;border:0;background:#fff}._actions_9d3gw_83{display:flex;justify-content:flex-end;gap:.5rem;padding:.75rem 1rem 1rem}._action_9d3gw_83{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._action_9d3gw_83:hover,._action_9d3gw_83:focus-visible{background:var(--wysiwyg-chrome-dialog, #fff)}._action_9d3gw_83:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._backdrop_1dasl_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--wysiwyg-chrome-backdrop, rgb(0 0 0 / 32%))}._dialog_1dasl_12{display:flex;flex-direction:column;width:min(52rem,100%);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:6px;background:var(--wysiwyg-chrome-dialog, #fff);box-shadow:0 8px 24px var(--wysiwyg-chrome-shadow, rgb(0 0 0 / 18%));color:var(--wysiwyg-chrome-dialog-text, #222);font:.875rem/1.4 system-ui,sans-serif}._header_1dasl_28{margin:0;padding:.75rem 1rem .5rem;font-size:1rem;font-weight:600}._body_1dasl_35{display:flex;flex-direction:column;gap:.75rem;padding:.75rem 1rem;overflow:auto}._group_1dasl_43{border:1px solid var(--wysiwyg-chrome-border, #e5e5e5);border-radius:6px;background:var(--wysiwyg-chrome-dialog-group, #fafafa)}._groupDragging_1dasl_49{opacity:.55}._groupDropTarget_1dasl_53{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._groupHeader_1dasl_58{display:flex;align-items:center;gap:.4rem;padding:.45rem .6rem;border-bottom:1px solid var(--wysiwyg-chrome-border, #ececec)}._groupTitle_1dasl_66{flex:1;font-weight:600}._dragHandle_1dasl_71,._moveButton_1dasl_72{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;margin:0;padding:0;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--wysiwyg-chrome-text-muted, #555);cursor:grab}._moveButton_1dasl_72{cursor:pointer}._dragHandle_1dasl_71:hover,._moveButton_1dasl_72:hover,._dragHandle_1dasl_71:focus-visible,._moveButton_1dasl_72:focus-visible{border-color:var(--wysiwyg-chrome-divider, #d0d0d0);background:var(--wysiwyg-chrome-dialog, #fff);color:var(--wysiwyg-chrome-text-strong, #111)}._dragHandle_1dasl_71:focus-visible,._moveButton_1dasl_72:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-2px}._dragHandle_1dasl_71:disabled,._moveButton_1dasl_72:disabled{cursor:not-allowed;opacity:.4}._items_1dasl_113{display:flex;flex-wrap:wrap;gap:.75rem 1rem;padding:.75rem .85rem .85rem}._item_1dasl_113{display:flex;flex-direction:column;align-items:center;gap:.3rem;min-width:4.5rem;max-width:6.5rem}._itemIcon_1dasl_129{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--wysiwyg-chrome-icon, #333)}._itemTitle_1dasl_138{text-align:center;font-size:.75rem;line-height:1.25;overflow-wrap:anywhere}._itemCheckbox_1dasl_145{margin:0}._actions_1dasl_149{display:flex;justify-content:space-between;gap:.5rem;padding:.75rem 1rem 1rem}._action_1dasl_149{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:4px;background:var(--wysiwyg-chrome-dialog-muted, #f7f7f7);color:inherit;font:inherit;cursor:pointer}._action_1dasl_149:hover,._action_1dasl_149:focus-visible{background:var(--wysiwyg-chrome-dialog, #fff)}._action_1dasl_149:focus-visible{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:1px}._action_1dasl_149:disabled{cursor:not-allowed;opacity:.5}._spinnerWrap_1dasl_184{display:flex;align-items:center;justify-content:center;min-height:6rem}._spinner_1dasl_184{width:1.1rem;height:1.1rem;border:2px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-top-color:var(--wysiwyg-chrome-primary, #4a7fd4);border-radius:50%;animation:_spin_1dasl_184 .7s linear infinite}@keyframes _spin_1dasl_184{to{transform:rotate(360deg)}}._wrap_2cawp_1._wrap_2cawp_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_2cawp_1._wrapToolbar_2cawp_7{align-self:stretch;padding:5px .35rem 0}._wrap_2cawp_1 ._field_2cawp_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_2cawp_1 ._trigger_2cawp_20{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;min-width:8.5rem;height:100%;margin:0;padding:0 1.35rem 0 .45rem;border:1px solid var(--wysiwyg-chrome-dialog-border, #c8c8c8);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);color:var(--wysiwyg-chrome-dialog-text, #222);font:.75rem/1.2 system-ui,sans-serif;text-align:start;cursor:pointer}._wrap_2cawp_1 ._trigger_2cawp_20:focus{outline:2px solid var(--wysiwyg-chrome-focus, #8ab4ff);outline-offset:-1px}._wrap_2cawp_1 ._trigger_2cawp_20:disabled{cursor:not-allowed;opacity:.5}._wrap_2cawp_1 ._chevron_2cawp_46{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:var(--wysiwyg-chrome-text, #444)}._wrap_2cawp_1 ._chevron_2cawp_46:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_2cawp_69{position:fixed;z-index:1300;min-width:10rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid var(--wysiwyg-chrome-divider, #d0d0d0);border-radius:3px;background:var(--wysiwyg-chrome-input, #fff);box-shadow:0 4px 12px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 12%));list-style:none}._option_2cawp_84{display:block;width:100%;margin:0;padding:.25rem .75rem;border:0;background:transparent;color:var(--wysiwyg-chrome-dialog-text, #222);font-family:system-ui,sans-serif;line-height:1.25;text-align:start;cursor:pointer}._option_2cawp_84:hover,._option_2cawp_84:focus-visible{background:var(--wysiwyg-chrome-selected, #e8f0fe);outline:none}._option_2cawp_84[aria-checked=true]{font-weight:600}._option_2cawp_84:disabled{cursor:not-allowed;opacity:.5}._separator_2cawp_113{height:1px;margin:.25rem .5rem;padding:0;background:var(--wysiwyg-chrome-divider, #d0d0d0);border:0;list-style:none}._root_22r24_1{all:revert;position:relative;box-sizing:border-box;display:flex;flex-direction:column;flex:1 1 auto;width:100%;min-width:0;height:100%;max-height:100%;min-height:16rem;border:var(--wysiwyg-border-width, 1px) solid var(--wysiwyg-border-color, var(--wysiwyg-chrome-divider, #d0d0d0));border-radius:var(--wysiwyg-border-radius, 6px);box-shadow:var(--wysiwyg-border-shadow, none);overflow:hidden;background:#fff;color:#111;font-family:system-ui,sans-serif;font-size:1rem;font-weight:400;font-style:normal;font-variant:normal;line-height:1.5;letter-spacing:normal;text-align:start;text-indent:0;text-transform:none;text-decoration:none;text-shadow:none;white-space:normal;word-spacing:normal;direction:ltr}._root_22r24_1._fullscreen_22r24_36{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;width:100%;height:100%;min-height:0;border:none;border-radius:0;box-shadow:none}._root_22r24_1 ._exitFullscreen_22r24_48{position:absolute;z-index:2;top:.4rem;right:.4rem;display:inline-flex;align-items:center;justify-content:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:2rem;height:2rem;margin:0;padding:0;border:0;border-radius:4px;background:var(--wysiwyg-chrome-menu, #fff);color:var(--wysiwyg-chrome-text, #444);font:inherit;cursor:pointer;box-shadow:0 1px 3px var(--wysiwyg-chrome-menu-shadow, rgb(0 0 0 / 20%))}._root_22r24_1 ._exitFullscreen_22r24_48:hover{background:var(--wysiwyg-chrome-hover, #f4f4f4)}._root_22r24_1 ._exitFullscreen_22r24_48:focus{outline:none;box-shadow:inset 0 0 0 2px var(--wysiwyg-chrome-focus, #8ab4ff)}._root_22r24_1 ._exitFullscreenIcon_22r24_79{display:block;width:1rem;height:1rem;flex-shrink:0}._root_22r24_1 *:not(:is(svg,svg *)),._root_22r24_1 *:before,._root_22r24_1 *:after{all:revert;box-sizing:border-box}._root_22r24_1 ._menuChrome_22r24_94{display:flex;flex-direction:column;flex-shrink:0;align-items:stretch;z-index:2;width:100%;min-width:0}._root_22r24_1 ._body_22r24_105._body_22r24_105{position:relative;display:grid;flex:1 1 auto;min-width:0;min-height:0;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr)}._root_22r24_1 ._body_22r24_105._body_22r24_105[data-icon-dock=top]{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}._root_22r24_1 ._body_22r24_105._body_22r24_105[data-icon-dock=bottom]{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr)}._root_22r24_1 ._body_22r24_105._body_22r24_105[data-icon-dock=left]{grid-template-columns:12rem minmax(0,1fr);grid-template-rows:minmax(min-content,1fr)}._root_22r24_1 ._body_22r24_105._body_22r24_105[data-icon-dock=right]{grid-template-columns:minmax(0,1fr) 12rem;grid-template-rows:minmax(min-content,1fr)}._root_22r24_1 ._iconChrome_22r24_135._iconChrome_22r24_135{display:flex;flex-direction:column;align-items:stretch;z-index:1;min-width:0}._root_22r24_1[data-toolbar-position=top] ._iconChrome_22r24_135{width:100%;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_22r24_1[data-toolbar-position=bottom] ._iconChrome_22r24_135{width:100%;border-top:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_22r24_1[data-toolbar-position=left] ._iconChrome_22r24_135._iconChrome_22r24_135,._root_22r24_1[data-toolbar-position=right] ._iconChrome_22r24_135._iconChrome_22r24_135{align-self:stretch;box-sizing:border-box;width:100%;min-width:12rem;overflow-x:hidden;overflow-y:auto}._root_22r24_1[data-toolbar-position=left] ._iconChrome_22r24_135{border-right:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_22r24_1[data-toolbar-position=right] ._iconChrome_22r24_135{border-left:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_22r24_1[data-toolbar-position=left] ._iconChrome_22r24_135>*,._root_22r24_1[data-toolbar-position=right] ._iconChrome_22r24_135>*{width:100%;min-width:0;height:auto;min-height:100%}._root_22r24_1 ._workspace_22r24_179{position:relative;display:flex;flex:1 1 auto;flex-direction:column;min-width:0;min-height:0;overflow:auto;padding:1rem;background:#f0f0f0}._root_22r24_1 ._htmlFileDropOverlay_22r24_191{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;pointer-events:none;background:#ffffffd9;color:#111;font-size:1rem;font-weight:600}._root_22r24_1 ._surface_22r24_205{width:100%;min-height:100%;background:#fff;box-shadow:0 1px 3px #0000001f}._root_22r24_1 ._visual_22r24_212{flex:1 0 auto;min-height:100%;padding:.75rem;outline:none;user-select:text;-webkit-user-select:text}._root_22r24_1 ._visual_22r24_212:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_22r24_1 ._visual_22r24_212:empty:before{content:attr(data-placeholder);color:#888}._root_22r24_1 ._visual_22r24_212[aria-disabled=true]{opacity:.6;background:#f7f7f7}._root_22r24_1 ._multiPageContainer_22r24_235{display:flex;flex-direction:column;width:100%;min-height:100%}._root_22r24_1 ._pageBlock_22r24_242{display:flex;flex-direction:column;width:100%}._root_22r24_1 ._pageGap_22r24_248{flex-shrink:0;height:1.5rem;background:var(--wysiwyg-toolbar-background, var(--wysiwyg-chrome-toolbar, #f4f4f4))}._root_22r24_1 ._pageSurface_22r24_254{flex-shrink:0;min-height:12rem}._root_22r24_1 ._html_22r24_191{display:block;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;flex:1 1 auto;width:100%;margin:0;min-height:100%;padding:.75rem;border:0;border-radius:0;resize:none;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;font-weight:400;font-style:normal;line-height:1.5;letter-spacing:normal;color:#111;outline:none;background:#fff}._root_22r24_1 ._html_22r24_191:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_22r24_1 ._html_22r24_191:disabled{opacity:.6}._visual_22r24_212 p{margin:0 0 .75em}._visual_22r24_212 p:last-child{margin-bottom:0}._visual_22r24_212 h1,._visual_22r24_212 h2,._visual_22r24_212 h3,._visual_22r24_212 h4,._visual_22r24_212 h5,._visual_22r24_212 h6{margin:1em 0 .5em;font-weight:600;line-height:1.25;color:inherit}._visual_22r24_212 h1:first-child,._visual_22r24_212 h2:first-child,._visual_22r24_212 h3:first-child,._visual_22r24_212 h4:first-child,._visual_22r24_212 h5:first-child,._visual_22r24_212 h6:first-child{margin-top:0}._visual_22r24_212 h1{font-size:1.75rem}._visual_22r24_212 h2{font-size:1.5rem}._visual_22r24_212 h3{font-size:1.25rem}._visual_22r24_212 h4{font-size:1.125rem}._visual_22r24_212 h5{font-size:1rem}._visual_22r24_212 h6{font-size:.875rem}._visual_22r24_212 ul,._visual_22r24_212 ol{margin:0 0 .75em;padding-left:1.5em}._visual_22r24_212 li{margin:.25em 0}._visual_22r24_212 a{color:#06c;text-decoration:underline}._visual_22r24_212 strong,._visual_22r24_212 b{font-weight:700}._visual_22r24_212 em,._visual_22r24_212 i{font-style:italic}._visual_22r24_212 u{text-decoration:underline}._visual_22r24_212 s{text-decoration:line-through}._visual_22r24_212 blockquote{margin:0 0 .75em;padding:0 0 0 .75em;border:0;border-left:3px solid #d0d0d0;color:#444}._visual_22r24_212 code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875em;background:#f4f4f4;padding:.1em .3em;border-radius:3px}._visual_22r24_212 pre{margin:0 0 .75em;padding:.75em;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.5;background:#f4f4f4;border-radius:4px}._visual_22r24_212 pre code{background:transparent;padding:0;font-size:inherit}._visual_22r24_212 hr{margin:1em 0;border:0;border-top:1px solid #d0d0d0}._visual_22r24_212 img{max-width:100%;vertical-align:middle}
@@ -1,3 +1,3 @@
1
1
  import { EditorProps } from '../types';
2
- export declare function Editor({ value, defaultValue, onChange, onAutoSave, mode: modeProp, defaultMode, onModeChange, fullscreen: fullscreenProp, defaultFullscreen, onFullscreenChange, placeholder, disabled, readOnly, className, locale, toolbarBackground, menuColor, menuBackground, menuFontSize, menuFontFamily, border, menuVisible, toolbarVisible, allowedChrome, customActions, customFonts, transformHtml, loadCustomParagraphStyles, onSaveCustomParagraphStyle, onDeleteCustomParagraphStyle, customImagePicker, disableBuiltinImageInsert, disableHtmlFileDrop, toolbarCustomization, darkMode, darkModePersistence, toolbarPosition, toolbarPositionPersistence, }: EditorProps): import("react").JSX.Element;
2
+ export declare function Editor({ value, defaultValue, onChange, onAutoSave, onSave, onOpen, mode: modeProp, defaultMode, onModeChange, fullscreen: fullscreenProp, defaultFullscreen, onFullscreenChange, placeholder, disabled, readOnly, className, locale, toolbarBackground, menuColor, menuBackground, menuFontSize, menuFontFamily, border, menuVisible, toolbarVisible, allowedChrome, customActions, customFonts, transformHtml, loadCustomParagraphStyles, onSaveCustomParagraphStyle, onDeleteCustomParagraphStyle, customImagePicker, disableBuiltinImageInsert, customAudioPicker, disableBuiltinAudioInsert, customVideoPicker, disableBuiltinVideoInsert, disableHtmlFileDrop, toolbarCustomization, darkMode, darkModePersistence, toolbarPosition, toolbarPositionPersistence, enableMultiPages, pages: pagesProp, defaultPages, onPagesChange, }: EditorProps): import("react").JSX.Element;
3
3
  //# sourceMappingURL=Editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/components/Editor.tsx"],"names":[],"mappings":"AAmLA,OAAO,KAAK,EAOV,WAAW,EAGZ,MAAM,UAAU,CAAA;AAKjB,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,YAAiB,EACjB,QAAQ,EACR,UAAU,EACV,IAAI,EAAE,QAAQ,EACd,WAAsB,EACtB,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,iBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,MAAa,EACb,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,cAAc,EACd,MAAM,EACN,WAAkB,EAClB,cAAqB,EACrB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,yBAAyB,EACzB,mBAA2B,EAC3B,oBAAoB,EACpB,QAAgB,EAChB,mBAAmB,EACnB,eAAuB,EACvB,0BAA0B,GAC3B,EAAE,WAAW,+BAipEb"}
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/components/Editor.tsx"],"names":[],"mappings":"AAoNA,OAAO,KAAK,EASV,WAAW,EAGZ,MAAM,UAAU,CAAA;AASjB,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,YAAiB,EACjB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,IAAI,EAAE,QAAQ,EACd,WAAsB,EACtB,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,iBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,MAAa,EACb,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,cAAc,EACd,MAAM,EACN,WAAkB,EAClB,cAAqB,EACrB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,mBAA2B,EAC3B,oBAAoB,EACpB,QAAgB,EAChB,mBAAmB,EACnB,eAAuB,EACvB,0BAA0B,EAC1B,gBAAwB,EACxB,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,GACd,EAAE,WAAW,+BA2tFb"}
@@ -0,0 +1,22 @@
1
+ import { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from 'react';
2
+ export type MultiPageVisualSurfaceHandle = {
3
+ getContainer: () => HTMLDivElement | null;
4
+ getActivePageRoot: () => HTMLElement | null;
5
+ getActivePageIndex: () => number;
6
+ flushPageHtml: (index: number) => string | null;
7
+ };
8
+ type MultiPageVisualSurfaceProps = {
9
+ pages: readonly string[];
10
+ activePageIndex: number;
11
+ onActivePageIndexChange: (index: number) => void;
12
+ onPageChange: (index: number, html: string) => void;
13
+ placeholder?: string;
14
+ disabled?: boolean;
15
+ onBeforeInput?: (event: InputEvent) => void;
16
+ onPointerDown?: (event: ReactPointerEvent<HTMLDivElement>) => void;
17
+ onMouseUp?: (event: ReactMouseEvent<HTMLDivElement>) => void;
18
+ onContextMenu?: (event: ReactMouseEvent<HTMLDivElement>) => void;
19
+ };
20
+ export declare const MultiPageVisualSurface: import('react').ForwardRefExoticComponent<MultiPageVisualSurfaceProps & import('react').RefAttributes<MultiPageVisualSurfaceHandle>>;
21
+ export {};
22
+ //# sourceMappingURL=MultiPageVisualSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiPageVisualSurface.d.ts","sourceRoot":"","sources":["../../src/components/MultiPageVisualSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,YAAY,IAAI,iBAAiB,EACvC,MAAM,OAAO,CAAA;AAOd,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;IACzC,iBAAiB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAC3C,kBAAkB,EAAE,MAAM,MAAM,CAAA;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAClE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;CACjE,CAAA;AAED,eAAO,MAAM,sBAAsB,sIAqGjC,CAAA"}
@@ -6,6 +6,7 @@ type VisualSurfaceProps = {
6
6
  disabled?: boolean;
7
7
  onBeforeInput?: (event: InputEvent) => void;
8
8
  onPointerDown?: (event: ReactPointerEvent<HTMLDivElement>) => void;
9
+ onMouseUp?: (event: ReactMouseEvent<HTMLDivElement>) => void;
9
10
  onContextMenu?: (event: ReactMouseEvent<HTMLDivElement>) => void;
10
11
  };
11
12
  export declare const VisualSurface: import('react').ForwardRefExoticComponent<VisualSurfaceProps & import('react').RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"VisualSurface.d.ts","sourceRoot":"","sources":["../../src/components/VisualSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,YAAY,IAAI,iBAAiB,EACvC,MAAM,OAAO,CAAA;AAKd,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAClE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;CACjE,CAAA;AAED,eAAO,MAAM,aAAa,+GAyDzB,CAAA"}
1
+ {"version":3,"file":"VisualSurface.d.ts","sourceRoot":"","sources":["../../src/components/VisualSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,YAAY,IAAI,iBAAiB,EACvC,MAAM,OAAO,CAAA;AAKd,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAClE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC5D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;CACjE,CAAA;AAED,eAAO,MAAM,aAAa,+GA0DzB,CAAA"}
@@ -0,0 +1,16 @@
1
+ export type AudioAttrs = {
2
+ src: string;
3
+ title: string;
4
+ css?: string;
5
+ };
6
+ export type AudioSrcError = 'empty' | 'invalid';
7
+ export type AudioFileError = 'type' | 'tooLarge';
8
+ export declare const AUDIO_MAX_FILE_BYTES: number;
9
+ export declare const AUDIO_ACCEPT = "audio/mpeg,audio/mp3,audio/wav,audio/x-wav,audio/ogg,audio/aac,audio/webm,audio/mp4,audio/x-m4a,.mp3,.wav,.ogg,.aac,.webm,.m4a";
10
+ export declare function defaultAudioAttrs(overrides?: Partial<AudioAttrs>): AudioAttrs;
11
+ export declare function validateAudioSrc(src: string): AudioSrcError | null;
12
+ export declare function validateAudioFile(file: File): AudioFileError | null;
13
+ export declare function readAudioFileAsDataUrl(file: File): Promise<string>;
14
+ export declare function applyAudioAttrs(audio: HTMLAudioElement, attrs: AudioAttrs): void;
15
+ export declare function insertAudioInDocument(root: HTMLElement, attrs: AudioAttrs): boolean;
16
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/core/audio.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAA;AAEhD,eAAO,MAAM,oBAAoB,QAAkB,CAAA;AAEnD,eAAO,MAAM,YAAY,mIACyG,CAAA;AAqBlI,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAMjF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAYlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,IAAI,CAInE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAQhF;AAeD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAmBnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"blockFormat.d.ts","sourceRoot":"","sources":["../../src/core/blockFormat.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,oBAAoB,oDAAqD,CAAA;AAEtF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAoBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAEzE;AAyHD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAapE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAyB3F"}
1
+ {"version":3,"file":"blockFormat.d.ts","sourceRoot":"","sources":["../../src/core/blockFormat.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,oBAAoB,oDAAqD,CAAA;AAEtF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAoBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAEzE;AA6ID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAapE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAyB3F"}