commspliant-html-editor 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +220 -13
  2. package/dist/chrome/ChromeTheme.d.ts +14 -0
  3. package/dist/chrome/ChromeTheme.d.ts.map +1 -0
  4. package/dist/commspliant-html-editor.css +1 -1
  5. package/dist/components/Editor.d.ts +1 -1
  6. package/dist/components/Editor.d.ts.map +1 -1
  7. package/dist/components/VisualSurface.d.ts.map +1 -1
  8. package/dist/core/commandTypes.d.ts +25 -3
  9. package/dist/core/commandTypes.d.ts.map +1 -1
  10. package/dist/core/customActions.d.ts.map +1 -1
  11. package/dist/core/documentStyles.d.ts +4 -0
  12. package/dist/core/documentStyles.d.ts.map +1 -0
  13. package/dist/core/horizontalRule.d.ts +4 -0
  14. package/dist/core/horizontalRule.d.ts.map +1 -0
  15. package/dist/core/selection.d.ts +3 -0
  16. package/dist/core/selection.d.ts.map +1 -1
  17. package/dist/hooks/useAutoSave.d.ts +9 -0
  18. package/dist/hooks/useAutoSave.d.ts.map +1 -0
  19. package/dist/i18n/en.d.ts.map +1 -1
  20. package/dist/i18n/es.d.ts.map +1 -1
  21. package/dist/i18n/types.d.ts +36 -2
  22. package/dist/i18n/types.d.ts.map +1 -1
  23. package/dist/icons/CustomizeToolbarIcon.d.ts +3 -0
  24. package/dist/icons/CustomizeToolbarIcon.d.ts.map +1 -0
  25. package/dist/icons/DarkModeIcon.d.ts +3 -0
  26. package/dist/icons/DarkModeIcon.d.ts.map +1 -0
  27. package/dist/icons/FontFamilyIcon.d.ts +3 -0
  28. package/dist/icons/FontFamilyIcon.d.ts.map +1 -0
  29. package/dist/icons/FontSizeIcon.d.ts +3 -0
  30. package/dist/icons/FontSizeIcon.d.ts.map +1 -0
  31. package/dist/icons/HorizontalRuleIcon.d.ts +3 -0
  32. package/dist/icons/HorizontalRuleIcon.d.ts.map +1 -0
  33. package/dist/icons/LightModeIcon.d.ts +3 -0
  34. package/dist/icons/LightModeIcon.d.ts.map +1 -0
  35. package/dist/icons/ParagraphStyleIcon.d.ts +3 -0
  36. package/dist/icons/ParagraphStyleIcon.d.ts.map +1 -0
  37. package/dist/icons/PreviewIcon.d.ts +3 -0
  38. package/dist/icons/PreviewIcon.d.ts.map +1 -0
  39. package/dist/icons/index.d.ts +8 -0
  40. package/dist/icons/index.d.ts.map +1 -1
  41. package/dist/index.cjs +4 -4
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +6854 -5691
  45. package/dist/modules/contextMenu/ContextMenu.d.ts +1 -1
  46. package/dist/modules/contextMenu/ContextMenu.d.ts.map +1 -1
  47. package/dist/modules/contextMenu/index.d.ts +1 -0
  48. package/dist/modules/contextMenu/index.d.ts.map +1 -1
  49. package/dist/modules/contextMenu/shouldOpenEditorContextMenu.d.ts +6 -0
  50. package/dist/modules/contextMenu/shouldOpenEditorContextMenu.d.ts.map +1 -0
  51. package/dist/modules/file/fileDialogs.d.ts.map +1 -1
  52. package/dist/modules/file/htmlFile.d.ts +5 -0
  53. package/dist/modules/file/htmlFile.d.ts.map +1 -0
  54. package/dist/modules/file/printHtml.d.ts.map +1 -1
  55. package/dist/modules/file/useHtmlFileDrop.d.ts +14 -0
  56. package/dist/modules/file/useHtmlFileDrop.d.ts.map +1 -0
  57. package/dist/modules/format/ColorField.d.ts.map +1 -1
  58. package/dist/modules/format/ColorSelect.d.ts.map +1 -1
  59. package/dist/modules/format/CustomParagraphStyleDialog.d.ts +1 -1
  60. package/dist/modules/format/CustomParagraphStyleDialog.d.ts.map +1 -1
  61. package/dist/modules/format/FontFamilySelect.d.ts.map +1 -1
  62. package/dist/modules/format/FontPropertiesDialog.d.ts +1 -1
  63. package/dist/modules/format/FontPropertiesDialog.d.ts.map +1 -1
  64. package/dist/modules/format/FontSizeCombobox.d.ts.map +1 -1
  65. package/dist/modules/format/PagePropertiesDialog.d.ts +1 -1
  66. package/dist/modules/format/PagePropertiesDialog.d.ts.map +1 -1
  67. package/dist/modules/format/ParagraphPropertiesDialog.d.ts +1 -1
  68. package/dist/modules/format/ParagraphPropertiesDialog.d.ts.map +1 -1
  69. package/dist/modules/format/ParagraphStyleSelect.d.ts.map +1 -1
  70. package/dist/modules/format/catalog.d.ts.map +1 -1
  71. package/dist/modules/insert/BookmarkDialog.d.ts +1 -1
  72. package/dist/modules/insert/BookmarkDialog.d.ts.map +1 -1
  73. package/dist/modules/insert/ImageDialog.d.ts +1 -1
  74. package/dist/modules/insert/ImageDialog.d.ts.map +1 -1
  75. package/dist/modules/insert/ImagePropertiesDialog.d.ts +1 -1
  76. package/dist/modules/insert/ImagePropertiesDialog.d.ts.map +1 -1
  77. package/dist/modules/insert/ImageSizeField.d.ts.map +1 -1
  78. package/dist/modules/insert/LinkDialog.d.ts +1 -1
  79. package/dist/modules/insert/LinkDialog.d.ts.map +1 -1
  80. package/dist/modules/insert/catalog.d.ts.map +1 -1
  81. package/dist/modules/insert/commands.d.ts +1 -1
  82. package/dist/modules/insert/commands.d.ts.map +1 -1
  83. package/dist/modules/table/CellPropertiesDialog.d.ts +1 -1
  84. package/dist/modules/table/CellPropertiesDialog.d.ts.map +1 -1
  85. package/dist/modules/table/RowPropertiesDialog.d.ts +1 -1
  86. package/dist/modules/table/RowPropertiesDialog.d.ts.map +1 -1
  87. package/dist/modules/table/TableDialog.d.ts +1 -1
  88. package/dist/modules/table/TableDialog.d.ts.map +1 -1
  89. package/dist/modules/table/TablePropertiesDialog.d.ts +1 -1
  90. package/dist/modules/table/TablePropertiesDialog.d.ts.map +1 -1
  91. package/dist/modules/view/DocumentPreviewDialog.d.ts +7 -0
  92. package/dist/modules/view/DocumentPreviewDialog.d.ts.map +1 -0
  93. package/dist/modules/view/catalog.d.ts.map +1 -1
  94. package/dist/modules/view/commands.d.ts +2 -2
  95. package/dist/modules/view/commands.d.ts.map +1 -1
  96. package/dist/modules/view/darkModePersistence.d.ts +5 -0
  97. package/dist/modules/view/darkModePersistence.d.ts.map +1 -0
  98. package/dist/modules/view/toolbarPositionPersistence.d.ts +6 -0
  99. package/dist/modules/view/toolbarPositionPersistence.d.ts.map +1 -0
  100. package/dist/toolbar/CustomizeToolbarDialog.d.ts +16 -0
  101. package/dist/toolbar/CustomizeToolbarDialog.d.ts.map +1 -0
  102. package/dist/toolbar/EditorToolbar.d.ts +3 -1
  103. package/dist/toolbar/EditorToolbar.d.ts.map +1 -1
  104. package/dist/toolbar/IconNav.d.ts.map +1 -1
  105. package/dist/toolbar/MenuBar.d.ts.map +1 -1
  106. package/dist/toolbar/Tooltip.d.ts.map +1 -1
  107. package/dist/toolbar/allowedChrome.d.ts +4 -0
  108. package/dist/toolbar/allowedChrome.d.ts.map +1 -0
  109. package/dist/toolbar/defaultLayout.d.ts.map +1 -1
  110. package/dist/toolbar/index.d.ts +3 -0
  111. package/dist/toolbar/index.d.ts.map +1 -1
  112. package/dist/toolbar/toolbarCustomization.d.ts +14 -0
  113. package/dist/toolbar/toolbarCustomization.d.ts.map +1 -0
  114. package/dist/types.d.ts +79 -2
  115. package/dist/types.d.ts.map +1 -1
  116. package/package.json +1 -1
  117. package/dist/toolbar/ScrollChevronIcons.d.ts +0 -4
  118. package/dist/toolbar/ScrollChevronIcons.d.ts.map +0 -1
  119. package/dist/toolbar/overflow.d.ts +0 -7
  120. package/dist/toolbar/overflow.d.ts.map +0 -1
  121. package/dist/toolbar/useIconNavOverflow.d.ts +0 -9
  122. package/dist/toolbar/useIconNavOverflow.d.ts.map +0 -1
package/README.md CHANGED
@@ -23,16 +23,20 @@ export function App() {
23
23
  const [fullscreen, setFullscreen] = useState(false)
24
24
 
25
25
  return (
26
- <Editor
27
- defaultValue="<p>Hello <strong>world</strong></p>"
28
- placeholder="Start writing…"
29
- fullscreen={fullscreen}
30
- onFullscreenChange={setFullscreen}
31
- />
26
+ <div style={{ height: '100%' }}>
27
+ <Editor
28
+ defaultValue="<p>Hello <strong>world</strong></p>"
29
+ placeholder="Start writing…"
30
+ fullscreen={fullscreen}
31
+ onFullscreenChange={setFullscreen}
32
+ />
33
+ </div>
32
34
  )
33
35
  }
34
36
  ```
35
37
 
38
+ Give the editor a parent with a definite height (`height: 100%` on a sized ancestor, or `flex: 1; min-height: 0` in a column flex). The in-page editor fills that height: the document well scrolls and the menu and toolbar stay visible. Full screen does not need a sized parent; it covers the viewport.
39
+
36
40
  ### Props
37
41
 
38
42
  | Prop | Type | Default | Description |
@@ -40,6 +44,7 @@ export function App() {
40
44
  | `value` | `string` | — | Controlled HTML document |
41
45
  | `defaultValue` | `string` | `''` | Initial HTML when uncontrolled |
42
46
  | `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) |
43
48
  | `mode` | `'visual' \| 'html'` | — | Controlled mode |
44
49
  | `defaultMode` | `'visual' \| 'html'` | `'visual'` | Initial mode when uncontrolled |
45
50
  | `onModeChange` | `(mode: EditorMode) => void` | — | Fires when the built-in Visual / HTML toggle is used |
@@ -47,7 +52,8 @@ export function App() {
47
52
  | `defaultFullscreen` | `boolean` | `false` | Initial overlay when uncontrolled |
48
53
  | `onFullscreenChange` | `(fullscreen: boolean) => void` | — | Fires when full screen is entered or exited |
49
54
  | `placeholder` | `string` | — | Empty-state hint |
50
- | `disabled` | `boolean` | | Disables both surfaces, menus, toolbar commands, and the Visual / HTML / Full screen toggles |
55
+ | `disabled` | `boolean` | `false` | Same lock as `readOnly`. Either prop being true locks the editor |
56
+ | `readOnly` | `boolean` | `false` | When true, neither surface can be edited and both are grayed out; menus and toolbar are grayed out and not clickable |
51
57
  | `className` | `string` | — | Extra class on the editor root |
52
58
  | `locale` | `'en' \| 'es'` | `'en'` | Library chrome language. Document content is not translated |
53
59
  | `toolbarBackground` | `string` | `#f0f0f0` | CSS color for the icon toolbar row. Omit to use the default light gray |
@@ -58,13 +64,23 @@ export function App() {
58
64
  | `border` | `'none' \| EditorBorder` | `1px` `#d0d0d0`, radius `6px` | Outer editor box. `'none'` removes width, radius, and shadow. Object fields (`width`, `color`, `radius`, `shadow`) are independent; omitted fields keep the defaults |
59
65
  | `menuVisible` | `boolean` | `true` | Show the dropdown menu bar. Set `false` to hide it |
60
66
  | `toolbarVisible` | `boolean` | `true` | Show the icon toolbar. Set `false` to hide it |
67
+ | `allowedChrome` | `AllowedChrome` | — | Host allowlist of menus and icon-toolbar buttons. Omit to show everything. See [Allowed chrome](#allowed-chrome) |
68
+ | `toolbarPosition` | `'top' \| 'left' \| 'right' \| 'bottom'` | `'top'` | Initial icon-toolbar dock when nothing is persisted. See [Toolbar position](#toolbar-position) |
69
+ | `toolbarPositionPersistence` | `ToolbarPositionPersistence` | — | Host load/save for the icon-toolbar dock. Omit to persist in `localStorage`. See [Toolbar position](#toolbar-position) |
61
70
  | `customActions` | `CustomAction[]` | — | Host-defined menu items and/or toolbar buttons. See [Custom actions](#custom-actions) |
62
71
  | `customFonts` | `CustomFont[]` | — | Extra document font faces after the built-in web-safe list. See [Custom fonts](#custom-fonts) |
72
+ | `loadCustomParagraphStyles` | `() => CustomParagraphStyle[] \| Promise<…>` | — | Load host-persisted custom paragraph styles. See [Custom paragraph styles](#custom-paragraph-styles) |
73
+ | `onSaveCustomParagraphStyle` | `(style: CustomParagraphStyle) => void` | — | Persist a created or edited custom paragraph style. Custom styles stay hidden unless this and `loadCustomParagraphStyles` are both set |
74
+ | `onDeleteCustomParagraphStyle` | `(id: string) => void` | — | Persist deletion of a custom paragraph style. The Delete button is shown only when this is set |
63
75
  | `transformHtml` | `(html: string) => string` | — | Optional map over document HTML before it is stored and passed to `onChange`. See [Transform HTML](#transform-html) |
64
76
  | `customImagePicker` | `CustomImagePicker` | — | Optional third Insert image source. See [Custom image picker](#custom-image-picker) |
65
77
  | `disableBuiltinImageInsert` | `boolean` | `false` | Skip the Insert image dialog and call `customImagePicker.onPick` from the toolbar or Insert menu |
78
+ | `disableHtmlFileDrop` | `boolean` | `false` | When true, dropping an HTML file on the editor does not replace the document. File → Open is unchanged |
79
+ | `toolbarCustomization` | `ToolbarCustomizationPersistence` | — | Host load/save for icon-toolbar layout. Omit to persist in `localStorage`. See [Customize toolbar](#customize-toolbar) |
80
+ | `darkMode` | `boolean` | `false` | Initial chrome theme when nothing is persisted (`true` = dark). See [Dark mode](#dark-mode) |
81
+ | `darkModePersistence` | `DarkModePersistence` | — | Host load/save for the chrome theme. Omit to persist in `localStorage`. See [Dark mode](#dark-mode) |
66
82
 
67
- `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 and Bookmark), a File icon group (Save and Load), a Print icon group, an Edit icon group (Undo and Redo), an Insert icon group (Link and Bookmark), and the Visual | HTML | Full screen toggle unless `menuVisible` or `toolbarVisible` is `false`. Hide both to drop the chrome slot entirely. 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. Print opens the browser print dialog for the document HTML only (not the editor chrome). 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.
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.
68
84
 
69
85
  `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.
70
86
 
@@ -72,7 +88,9 @@ The toolbar Font dropdown lists web-safe faces (Arial, Georgia, Times New Roman,
72
88
 
73
89
  ### Editor chrome
74
90
 
75
- Show or hide the menu bar and icon toolbar, and control the full-screen overlay from the host.
91
+ 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
+
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.
76
94
 
77
95
  ```tsx
78
96
  import { useState } from 'react'
@@ -98,6 +116,88 @@ import { Editor } from 'commspliant-html-editor'
98
116
  <Editor menuVisible={false} toolbarVisible={false} />
99
117
  ```
100
118
 
119
+ ### Allowed chrome
120
+
121
+ 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
+
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:
124
+
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`
126
+
127
+ If `toolbar` is set, custom action ids must be listed to appear on the icon bar.
128
+
129
+ 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
+
131
+ 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
+
133
+ ```tsx
134
+ import { Editor, type AllowedChrome } from 'commspliant-html-editor'
135
+
136
+ const allowedChrome: AllowedChrome = {
137
+ menus: ['file', 'edit'],
138
+ toolbar: ['save', 'open', 'print', 'undo', 'redo'],
139
+ }
140
+
141
+ <Editor allowedChrome={allowedChrome} />
142
+ ```
143
+
144
+ ```tsx
145
+ import { Editor } from 'commspliant-html-editor'
146
+
147
+ <Editor />
148
+ ```
149
+
150
+ ### Toolbar position
151
+
152
+ View → Toolbar → Position docks the **icon toolbar** (Top, Left, Right, or Bottom). The dropdown menu bar stays at the top.
153
+
154
+ `toolbarPosition` is the initial dock when nothing is persisted. Default `'top'`. Choosing a position in the menu updates the live layout and persistence.
155
+
156
+ Top and bottom wrap onto extra rows when the icons cannot fit on one line. Left and right stay a **single column**: extra icons grow the editor instead of wrapping into a second column.
157
+
158
+ Omit `toolbarPositionPersistence` to persist that choice in the browser (`localStorage`). Pass `load` and `save` to store it on the host. Both may be async. `load` may return `null` to fall back to `toolbarPosition`.
159
+
160
+ ```tsx
161
+ import { Editor, type ToolbarPositionPersistence } from 'commspliant-html-editor'
162
+
163
+ let stored = null
164
+
165
+ const toolbarPositionPersistence: ToolbarPositionPersistence = {
166
+ load: async () => stored,
167
+ save: async (position) => {
168
+ stored = position
169
+ },
170
+ }
171
+
172
+ <Editor toolbarPosition="top" toolbarPositionPersistence={toolbarPositionPersistence} />
173
+ ```
174
+
175
+ ```tsx
176
+ import { Editor } from 'commspliant-html-editor'
177
+
178
+ <Editor toolbarPosition="left" />
179
+ ```
180
+
181
+ ### Read only
182
+
183
+ Lock both editing surfaces and all menus and toolbar buttons from the host. Default is `false`. Same lock as `disabled`.
184
+
185
+ ```tsx
186
+ import { Editor } from 'commspliant-html-editor'
187
+
188
+ <Editor readOnly defaultValue="<p>Hello</p>" />
189
+ ```
190
+
191
+ ### HTML file drop
192
+
193
+ Dropping an HTML file onto the document (visual or HTML mode) replaces the current document, the same as File → Open. Default is allowed. Set `disableHtmlFileDrop` to ignore drops; Open is unchanged.
194
+
195
+ ```tsx
196
+ import { Editor } from 'commspliant-html-editor'
197
+
198
+ <Editor disableHtmlFileDrop />
199
+ ```
200
+
101
201
  ### Menu appearance
102
202
 
103
203
  Restyle the dropdown menu bar only — not the icon toolbar. Load any custom webfont on the host page before passing its family name.
@@ -168,9 +268,40 @@ Pass `customFonts` to append host faces after the built-in list. Duplicate `fami
168
268
  />
169
269
  ```
170
270
 
271
+ ### Custom paragraph styles
272
+
273
+ Pass `loadCustomParagraphStyles` and `onSaveCustomParagraphStyle` to persist host-defined styles under Format → Paragraph styles and the toolbar style dropdown. Built-in Paragraph and H1–H6 stay available either way. Custom styles and **Add new** stay hidden unless both callbacks are set. `load` runs on mount and again after save or delete (it may be async; the UI shows a spinner). The Delete button is shown only when `onDeleteCustomParagraphStyle` is set. Hosts usually persist what the dialog saves rather than hand-authoring styles.
274
+
275
+ ```tsx
276
+ import { Editor, type CustomParagraphStyle } from 'commspliant-html-editor'
277
+
278
+ let stored: CustomParagraphStyle[] = []
279
+
280
+ <Editor
281
+ loadCustomParagraphStyles={async () => stored.map((style) => ({ ...style }))}
282
+ onSaveCustomParagraphStyle={async (style) => {
283
+ const index = stored.findIndex((item) => item.id === style.id)
284
+ if (index >= 0) stored[index] = style
285
+ else stored = [...stored, style]
286
+ }}
287
+ onDeleteCustomParagraphStyle={async (id) => {
288
+ stored = stored.filter((style) => style.id !== id)
289
+ }}
290
+ />
291
+ ```
292
+
293
+ | Field | Type | Description |
294
+ | --- | --- | --- |
295
+ | `id` | `string` | Stable id. The dialog assigns one on create |
296
+ | `name` | `string` | Visible name. Always trimmed and non-empty on save |
297
+ | `font` | `CustomParagraphStyleFont` | Size, unit, marks, family, and colors captured by the dialog |
298
+ | `paragraph` | `CustomParagraphStyleParagraph` | Optional paragraph box: align, list, margin, padding, line-height, border, radius, shadow, background, opacity |
299
+
300
+ Omit all three props to keep only the built-in styles.
301
+
171
302
  ### Transform HTML
172
303
 
173
- Pass `transformHtml` to sanitize or enhance the document on every write: visual typing and paste, HTML-source edits, Load, inserts, and `setHtml`. The result is what the editor stores and what `onChange` receives. Inbound `value` / `defaultValue` are not transformed — sanitize those before passing if needed.
304
+ Pass `transformHtml` to sanitize or enhance the document on every write: visual typing and paste, HTML-source edits, Load, dropped HTML files, inserts, and `setHtml`. The result is what the editor stores and what `onChange` receives. Inbound `value` / `defaultValue` are not transformed — sanitize those before passing if needed.
174
305
 
175
306
  ```tsx
176
307
  <Editor
@@ -181,6 +312,23 @@ Pass `transformHtml` to sanitize or enhance the document on every write: visual
181
312
 
182
313
  Keep the callback idempotent. If it rewrites markup on every keystroke (pretty-print, wrap tags), the visual surface resyncs `innerHTML` and the caret may jump. Prefer stripping disallowed tags over format-on-type.
183
314
 
315
+ ### Auto save
316
+
317
+ Pass `onAutoSave` to persist the document HTML from the host. The editor polls every second and calls the callback only when that HTML changed since the last auto-save. Omit the prop to disable (the default). The callback is not awaited, so a slow or failing save does not block editing.
318
+
319
+ The HTML is the same string `onChange` receives (after `transformHtml`, with font stylesheet links when a custom face is used). The initial document is not treated as a change.
320
+
321
+ ```tsx
322
+ import { Editor } from 'commspliant-html-editor'
323
+
324
+ <Editor
325
+ defaultValue="<p>Hello</p>"
326
+ onAutoSave={(html) => {
327
+ void fetch('/save', { method: 'POST', body: html })
328
+ }}
329
+ />
330
+ ```
331
+
184
332
  ### Custom actions
185
333
 
186
334
  Pass a `customActions` array to add host buttons, menu items, or both. Labels and tooltips are your copy — the library does not translate them.
@@ -205,13 +353,13 @@ Each object:
205
353
 
206
354
  | Field | Type | Description |
207
355
  | --- | --- | --- |
208
- | `id` | `string` | Stable id. Must not collide with built-ins (`save`, `open`, `undo`, `redo`, `visual`, `html`, `fullscreen`) |
356
+ | `id` | `string` | Stable id. Must not collide with catalog item ids (see [Allowed chrome](#allowed-chrome)) |
209
357
  | `label` | `string` | Menu item text; also the toolbar tooltip and accessible name when those are omitted |
210
358
  | `tooltip` | `string` | Toolbar tooltip. Defaults to `label` |
211
359
  | `icon` | React component | Optional 16×16 icon. Omit to use the built-in custom-action icon |
212
360
  | `showIn` | `'menu'` \| `'toolbar'` \| `'both'` | Which chrome surfaces show the action |
213
361
  | `menu` | `{ id?: string; label?: string }` | Menu placement. Built-in ids: `file`, `edit`, `insert`, `view`, `format`. Other ids create a new top-level menu. Default id: `custom` |
214
- | `toolbarGroup` | `string` | Icon group. Built-in ids: `file`, `edit`, `insert`, `view`. Other ids create a group at the end. Default: `custom` |
362
+ | `toolbarGroup` | `string` | Icon group. Built-in ids: `file`, `edit`, `insert`, `view`. Other ids create a group before Full screen. Default: `custom` |
215
363
  | `onAction` | `(api: CustomActionApi) => void` | Called when the item is activated |
216
364
 
217
365
  **Placement**
@@ -278,6 +426,64 @@ Omit `customImagePicker` to keep File and URL only. Set `disableBuiltinImageInse
278
426
 
279
427
  `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.
280
428
 
429
+ ### Customize toolbar
430
+
431
+ 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.
432
+
433
+ Omit `toolbarCustomization` to persist that layout in the browser (`localStorage`). Pass `load` and `save` to store it on the host. Both may be async; the dialog shows a loader while they run.
434
+
435
+ ```tsx
436
+ import { Editor, type ToolbarCustomizationPersistence } from 'commspliant-html-editor'
437
+
438
+ let stored = null
439
+
440
+ const toolbarCustomization: ToolbarCustomizationPersistence = {
441
+ load: async () => stored,
442
+ save: async (settings) => {
443
+ stored = settings
444
+ },
445
+ }
446
+
447
+ <Editor toolbarCustomization={toolbarCustomization} />
448
+ ```
449
+
450
+ ```tsx
451
+ import { Editor } from 'commspliant-html-editor'
452
+
453
+ <Editor />
454
+ ```
455
+
456
+ New toolbar buttons and groups belong in the feature catalog and default icon layout. The customize dialog reads that merged layout, so they appear automatically. Saved settings merge with the current default: unknown ids are ignored, and new ids show (visible, in default-relative order).
457
+
458
+ ### Dark mode
459
+
460
+ View → Light mode / Dark mode restyles editor chrome (menus, icon toolbar, buttons, dialogs, and popups). The Visual and HTML document surfaces stay as they are.
461
+
462
+ `darkMode` is the initial theme when nothing is persisted. Default `false` (light). Choosing Light or Dark in the View menu updates the live chrome and persistence.
463
+
464
+ Omit `darkModePersistence` to persist that choice in the browser (`localStorage`). Pass `load` and `save` to store it on the host. Both may be async. `load` may return `null` to fall back to `darkMode`.
465
+
466
+ ```tsx
467
+ import { Editor, type DarkModePersistence } from 'commspliant-html-editor'
468
+
469
+ let stored = null
470
+
471
+ const darkModePersistence: DarkModePersistence = {
472
+ load: async () => stored,
473
+ save: async (darkMode) => {
474
+ stored = darkMode
475
+ },
476
+ }
477
+
478
+ <Editor darkMode={false} darkModePersistence={darkModePersistence} />
479
+ ```
480
+
481
+ ```tsx
482
+ import { Editor } from 'commspliant-html-editor'
483
+
484
+ <Editor />
485
+ ```
486
+
281
487
  ### Style isolation
282
488
 
283
489
  The shipped CSS resets inherited styles on the editor root and restyles chrome and the visual document so typical host-page rules (`p`, `button`, `textarea`, inherited typography) do not restyle the editor. Pass `className` on the root to override that look on purpose. Isolation is not a hard boundary: high-specificity host selectors or `!important` can still win.
@@ -292,9 +498,10 @@ make build-lib # library to dist/ (es, cjs, types, CSS)
292
498
  make preview # serve dist/ locally
293
499
  make test # vitest
294
500
  make storybook # Storybook on port 6006
501
+ make publish # library to dist/, then npm publish
295
502
  ```
296
503
 
297
- `make build` and `make build-lib` both write to `dist/` and overwrite each other. Use `make build` for the hosted demo; use `make build-lib` when packaging the library.
504
+ `make build` and `make build-lib` both write to `dist/` and overwrite each other. Use `make build` for the hosted demo; use `make build-lib` when packaging the library. `make publish` always runs `make build-lib` first so the playground build is not uploaded. You must be logged in (`npm login`) with 2FA enabled.
298
505
 
299
506
  - `src/` is the library. Public exports live in `src/index.ts`.
300
507
  - `playground/` is a consumer app: it imports `commspliant-html-editor` the same way other projects will. No editor logic belongs there.
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function ChromeThemeProvider({ dark, children, }: {
3
+ dark: boolean;
4
+ children: ReactNode;
5
+ }): import("react").JSX.Element;
6
+ export declare function useChromeTheme(): boolean;
7
+ export declare function chromeThemeProps(dark: boolean): {
8
+ readonly className: string;
9
+ readonly 'data-wysiwyg-theme': "dark" | "light";
10
+ };
11
+ export declare function ChromePortal({ children }: {
12
+ children: ReactNode;
13
+ }): import('react').ReactPortal;
14
+ //# sourceMappingURL=ChromeTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChromeTheme.d.ts","sourceRoot":"","sources":["../../src/chrome/ChromeTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAMjE,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;CACpB,+BAEA;AAED,wBAAgB,cAAc,YAE7B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO;;;EAK7C;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BASjE"}
@@ -1 +1 @@
1
- ._menu_uy4s1_1{position:fixed;z-index:1150;display:flex;flex-direction:column;min-width:12rem;margin:0;padding:.25rem 0;border:1px solid #d0d0d0;border-radius:4px;background:#fff;box-shadow:0 4px 12px #00000014;color:#444;font:.875rem/1.4 system-ui,sans-serif}._item_uy4s1_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_uy4s1_17:hover,._item_uy4s1_17:focus-visible{background:#f0f0f0;color:#111}._item_uy4s1_17:focus-visible{outline:2px solid #8ab4ff;outline-offset:-2px}._item_uy4s1_17:disabled{cursor:not-allowed;opacity:.5}._item_uy4s1_17:disabled:hover,._item_uy4s1_17:disabled:focus-visible{background:transparent;color:inherit}._separator_uy4s1_57{height:1px;margin:.25rem .5rem;background:#d0d0d0;border:0}._picker_vmqkv_1{display:flex;flex-direction:column;gap:.45rem;box-sizing:border-box;width:14.5rem;padding:.4rem .5rem .5rem;color:#222;font:.75rem/1.2 system-ui,sans-serif}._none_vmqkv_12,._customToggle_vmqkv_13,._eyedrop_vmqkv_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_vmqkv_12:hover,._none_vmqkv_12:focus-visible,._customToggle_vmqkv_13:hover,._customToggle_vmqkv_13:focus-visible,._eyedrop_vmqkv_14:hover,._eyedrop_vmqkv_14:focus-visible{background:#e8f0fe;outline:none}._none_vmqkv_12[aria-checked=true],._none_vmqkv_12[aria-selected=true]{font-weight:600}._none_vmqkv_12:disabled,._customToggle_vmqkv_13:disabled,._eyedrop_vmqkv_14:disabled,._swatch_vmqkv_48:disabled,._field_vmqkv_49 input:disabled{cursor:not-allowed;opacity:.5}._grid_vmqkv_54,._recents_vmqkv_55{display:grid;grid-template-columns:repeat(8,1.25rem);gap:.22rem;justify-content:space-between}._swatch_vmqkv_48{box-sizing:border-box;width:1.25rem;height:1.25rem;padding:0;border:1px solid #c8c8c8;border-radius:2px;cursor:pointer}._swatch_vmqkv_48:hover,._swatch_vmqkv_48:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._swatch_vmqkv_48[aria-checked=true],._swatch_vmqkv_48[aria-selected=true]{outline:2px solid #111;outline-offset:1px}._sectionLabel_vmqkv_84{margin:.15rem 0 0;font-weight:600}._custom_vmqkv_13{display:flex;flex-direction:column;gap:.45rem}._sv_vmqkv_95{position:relative;width:100%;height:7.5rem;border:1px solid #c8c8c8;border-radius:3px;cursor:crosshair;touch-action:none}._svThumb_vmqkv_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_vmqkv_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_vmqkv_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_vmqkv_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_vmqkv_155,._hexRow_vmqkv_156{display:flex;align-items:center;gap:.3rem}._field_vmqkv_49{display:flex;flex:1 1 0;flex-direction:column;gap:.1rem;min-width:0}._field_vmqkv_49 label{font-weight:600}._field_vmqkv_49 input{box-sizing:border-box;width:100%;margin:0;padding:.15rem .25rem;border:1px solid #c8c8c8;border-radius:3px;font:inherit}._hexRow_vmqkv_156 ._field_vmqkv_49{flex:1 1 auto}._eyedrop_vmqkv_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_mid65_1{position:relative;display:inline-flex;flex-shrink:0;align-items:stretch}._button_mid65_8{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;min-width:1.75rem;padding:.4rem .5rem .3rem}._icon_mid65_18{display:block;width:1rem;height:1rem}._bar_mid65_24{display:block;width:1rem;height:.2rem;border:1px solid #c8c8c8;border-radius:1px;background:transparent}._barEmpty_mid65_33{background:repeating-linear-gradient(-45deg,#ddd,#ddd 1px,transparent 1px,transparent 3px)}._popover_mid65_43{position:fixed;z-index:1300;border:1px solid #d0d0d0;border-radius:4px;background:#fff;box-shadow:0 4px 12px #0000001f}._field_pl3rn_1{display:flex;align-items:center;justify-content:space-between;gap:.75rem}._label_pl3rn_8{font-weight:600}._button_pl3rn_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 #c8c8c8;border-radius:3px;background:#fff;cursor:pointer}._button_pl3rn_12:disabled{cursor:not-allowed;opacity:.5}._button_pl3rn_12:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._swatch_pl3rn_37{display:block;width:100%;height:100%;border-radius:2px}._swatchEmpty_pl3rn_44{background:repeating-linear-gradient(-45deg,#ddd,#ddd 1px,transparent 1px,transparent 3px)}._toolbar_xlok8_1{display:flex;flex-direction:column;align-items:stretch;width:100%;min-width:0}._toolbar_xlok8_1._toolbar_xlok8_1{container-type:inline-size}._toolbar_xlok8_1 ._menuBar_xlok8_14{display:flex;align-items:stretch;width:100%;background:var(--wysiwyg-menu-background, #fff);border-bottom:1px solid #e5e5e5}._toolbar_xlok8_1 ._menuBarDesktop_xlok8_22{display:flex;align-items:stretch;min-width:0}._toolbar_xlok8_1 ._brandMark_xlok8_28{display:inline-flex;flex-shrink:0;align-items:center;padding:.25rem .65rem .25rem .5rem}._toolbar_xlok8_1 ._brandMarkIcon_xlok8_35{display:block;height:2.5rem;width:auto;aspect-ratio:616.23 / 542.09;overflow:visible}._toolbar_xlok8_1 ._brandMarkIcon_xlok8_35 *{stroke:none}._toolbar_xlok8_1 ._menuBarCompact_xlok8_47{display:none;align-items:stretch}._toolbar_xlok8_1[data-compact] ._menuBarDesktop_xlok8_22{display:none}._toolbar_xlok8_1[data-compact] ._menuBarCompact_xlok8_47{display:flex}@container (max-width: 40rem){._toolbar_xlok8_1 ._menuBarDesktop_xlok8_22{display:none}._toolbar_xlok8_1 ._menuBarCompact_xlok8_47{display:flex}}._toolbar_xlok8_1 ._menuWrap_xlok8_70{position:relative;display:flex;align-items:stretch}._toolbar_xlok8_1 ._menuButton_xlok8_76,._toolbar_xlok8_1 ._iconButton_xlok8_77,._toolbar_xlok8_1 ._menuItem_xlok8_78{-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:#444;cursor:pointer;box-shadow:none}._toolbar_xlok8_1 ._menuButton_xlok8_76,._toolbar_xlok8_1 ._menuItem_xlok8_78{color:var(--wysiwyg-menu-color, #444);font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_xlok8_1 ._menuButton_xlok8_76{display:inline-flex;align-items:center;padding:.5rem .9rem;text-align:center}._toolbar_xlok8_1 ._menuButton_xlok8_76: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_xlok8_1 ._hamburgerButton_xlok8_121:after{content:none;display:none;margin:0;border:0}._toolbar_xlok8_1 ._iconNav_xlok8_128{position:relative;display:flex;align-items:stretch;width:100%;min-width:0;background:var(--wysiwyg-toolbar-background, #f0f0f0)}._toolbar_xlok8_1 ._iconTrack_xlok8_137{display:flex;flex:1 1 auto;align-items:stretch;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:none}._toolbar_xlok8_1 ._iconTrack_xlok8_137::-webkit-scrollbar{display:none}._toolbar_xlok8_1 ._iconTrackInner_xlok8_152,._toolbar_xlok8_1 ._iconGroup_xlok8_158{display:flex;flex:0 0 auto;align-items:stretch}._toolbar_xlok8_1 ._iconGroup_xlok8_158:not(:last-child):after{content:"";width:1px;align-self:stretch;margin:.35rem .15rem;background:#d0d0d0}._toolbar_xlok8_1 ._iconButton_xlok8_77{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;padding:.5rem .65rem}._tooltipTrigger_xlok8_180{display:inline-flex;flex-shrink:0;align-items:stretch}._toolbar_xlok8_1 ._scrollButton_xlok8_186{position:absolute;z-index:1;top:0;bottom:0;background:var(--wysiwyg-toolbar-background, #f0f0f0)}._toolbar_xlok8_1 ._scrollButton_xlok8_186 ._iconButton_xlok8_77{height:100%}._toolbar_xlok8_1 ._scrollButton_xlok8_186:hover,._toolbar_xlok8_1 ._scrollButton_xlok8_186:focus-within{background:var(--wysiwyg-toolbar-background, #f0f0f0)}._toolbar_xlok8_1 ._scrollButtonLeft_xlok8_203{left:0;box-shadow:6px 0 8px -4px #00000029}._toolbar_xlok8_1 ._scrollButtonRight_xlok8_208{right:0;box-shadow:-6px 0 8px -4px #00000029}._toolbar_xlok8_1 ._iconButton_xlok8_77[aria-pressed=true]{color:#111;background:#ececec;box-shadow:inset 0 -2px #111}._toolbar_xlok8_1 ._menu_xlok8_14{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 #d0d0d0;border-radius:4px;background:var(--wysiwyg-menu-background, #fff);box-shadow:0 4px 12px #00000014}._toolbar_xlok8_1 ._submenuWrap_xlok8_235{position:relative}._toolbar_xlok8_1 ._submenu_xlok8_235{top:0;left:100%;z-index:3}._toolbar_xlok8_1 ._submenuTrigger_xlok8_245{justify-content:space-between}._toolbar_xlok8_1 ._submenuTrigger_xlok8_245: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_xlok8_1 ._menuOverlay_xlok8_260{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;display:flex;flex-direction:column;background:var(--wysiwyg-menu-background, #fff);color:var(--wysiwyg-menu-color, #444);font-size:var(--wysiwyg-menu-font-size, .875rem);font-family:var(--wysiwyg-menu-font-family, inherit)}._toolbar_xlok8_1 ._menuOverlayHeader_xlok8_272{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:.5rem;padding:.15rem .15rem .15rem .9rem;border-bottom:1px solid #e5e5e5}._toolbar_xlok8_1 ._menuOverlayTitle_xlok8_282{font-size:inherit;font-weight:600;color:inherit}._toolbar_xlok8_1 ._menuOverlayBody_xlok8_288{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:auto}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._menuWrap_xlok8_70{flex-direction:column;align-items:stretch;width:100%}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._menuButton_xlok8_76{width:100%;justify-content:space-between}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._menu_xlok8_14{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_xlok8_1 ._menuOverlay_xlok8_260 ._submenuWrap_xlok8_235{position:static}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._submenu_xlok8_235{position:static;top:auto;left:auto;z-index:auto}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._submenuTrigger_xlok8_245:after{transform:rotate(90deg)}._toolbar_xlok8_1 ._menuOverlay_xlok8_260 ._menuItem_xlok8_78{white-space:normal}._toolbar_xlok8_1 ._menuSeparator_xlok8_339{height:1px;margin:.25rem .5rem;background:#d0d0d0;border:0}._toolbar_xlok8_1 ._menuItem_xlok8_78{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .75rem;text-align:start;white-space:nowrap}._toolbar_xlok8_1 ._menuItem_xlok8_78:hover,._toolbar_xlok8_1 ._menuItem_xlok8_78:focus-visible{background:#f0f0f0;color:#111}._toolbar_xlok8_1 ._menuItem_xlok8_78[aria-checked=true]{color:#111;font-weight:600}._toolbar_xlok8_1 ._menuButton_xlok8_76:hover,._toolbar_xlok8_1 ._iconButton_xlok8_77:hover,._toolbar_xlok8_1 ._menuButton_xlok8_76:focus-visible,._toolbar_xlok8_1 ._iconButton_xlok8_77:focus-visible{color:#111;background:#f0f0f0}._toolbar_xlok8_1 ._menuButton_xlok8_76:focus-visible,._toolbar_xlok8_1 ._iconButton_xlok8_77:focus-visible,._toolbar_xlok8_1 ._menuItem_xlok8_78:focus-visible{outline:2px solid #8ab4ff;outline-offset:-2px}._toolbar_xlok8_1 ._menuButton_xlok8_76:disabled,._toolbar_xlok8_1 ._iconButton_xlok8_77:disabled,._toolbar_xlok8_1 ._menuItem_xlok8_78:disabled{cursor:not-allowed;opacity:.5}._toolbar_xlok8_1 ._menuItem_xlok8_78:disabled:hover,._toolbar_xlok8_1 ._menuItem_xlok8_78:disabled:focus-visible{background:transparent;color:inherit}._toolbar_xlok8_1 ._icon_xlok8_77,._toolbar_xlok8_1 ._icon_xlok8_77 *{overflow:visible;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}._toolbar_xlok8_1 ._icon_xlok8_77{display:block;width:1rem;height:1rem;flex-shrink:0}._tooltip_xlok8_180{position:fixed;z-index:1100;padding:.2rem .45rem;border-radius:3px;background:#222;color:#fff;font:.75rem/1.2 system-ui,sans-serif;white-space:nowrap;pointer-events:none}._tooltipElevated_xlok8_424{z-index:1300;max-width:18rem;white-space:normal}._wrap_o2uzw_1._wrap_o2uzw_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_o2uzw_1._wrapToolbar_o2uzw_7{align-self:stretch;padding:7px .35rem 0}._wrap_o2uzw_1 ._field_o2uzw_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_o2uzw_1 ._trigger_o2uzw_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 #c8c8c8;border-radius:3px;background:#fff;color:#222;font:.75rem/1.2 system-ui,sans-serif;text-align:start;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}._wrap_o2uzw_1 ._trigger_o2uzw_20:focus{outline:2px solid #8ab4ff;outline-offset:-1px}._wrap_o2uzw_1 ._trigger_o2uzw_20:disabled{cursor:not-allowed;opacity:.5}._wrap_o2uzw_1 ._chevron_o2uzw_50{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:#444}._wrap_o2uzw_1 ._chevron_o2uzw_50:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_o2uzw_73{position:fixed;z-index:1300;min-width:12rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid #d0d0d0;border-radius:3px;background:#fff;box-shadow:0 4px 12px #0000001f;list-style:none}._listInline_o2uzw_88{position:static;z-index:auto;min-width:100%;max-height:14rem;box-shadow:none}._option_o2uzw_96{display:block;width:100%;margin:0;padding:.3rem .75rem;border:0;background:transparent;color:#222;font-size:.875rem;line-height:1.3;text-align:start;cursor:pointer}._option_o2uzw_96:hover,._option_o2uzw_96:focus-visible{background:#e8f0fe;outline:none}._option_o2uzw_96[aria-checked=true]{font-weight:600}._option_o2uzw_96:disabled{cursor:not-allowed;opacity:.5}._separator_o2uzw_125{height:1px;margin:.25rem .5rem;padding:0;background:#d0d0d0;border:0;list-style:none}._wrap_1qhfu_1._wrap_1qhfu_1{display:inline-flex;flex-direction:row;flex-shrink:0;align-items:center;gap:.25rem}._wrap_1qhfu_1._wrapToolbar_1qhfu_9{align-self:stretch;padding:7px .35rem 0}._wrap_1qhfu_1 ._field_1qhfu_14{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_1qhfu_1 ._input_1qhfu_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 #c8c8c8;border-radius:3px;background:#fff;color:#222;font:.75rem/1.2 system-ui,sans-serif}._wrap_1qhfu_1 ._input_1qhfu_22:focus{outline:2px solid #8ab4ff;outline-offset:-1px}._wrap_1qhfu_1 ._toggle_1qhfu_41,._wrap_1qhfu_1 ._chevron_1qhfu_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:#444}._wrap_1qhfu_1 ._toggle_1qhfu_41{cursor:pointer}._wrap_1qhfu_1 ._chevron_1qhfu_42{pointer-events:none}._wrap_1qhfu_1 ._toggle_1qhfu_41:after,._wrap_1qhfu_1 ._chevron_1qhfu_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_1qhfu_1 ._unit_1qhfu_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 #c8c8c8;border-radius:3px;background:#fff;color:#222;font:.75rem/1.2 system-ui,sans-serif}._wrap_1qhfu_1 ._unit_1qhfu_80::-ms-expand{display:none}._wrap_1qhfu_1 ._unit_1qhfu_80:focus{outline:2px solid #8ab4ff;outline-offset:-1px}._wrap_1qhfu_1 ._input_1qhfu_22:disabled,._wrap_1qhfu_1 ._toggle_1qhfu_41:disabled,._wrap_1qhfu_1 ._unit_1qhfu_80:disabled{cursor:not-allowed;opacity:.5}._list_1qhfu_110{position:fixed;z-index:1300;min-width:4.5rem;max-height:12rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid #d0d0d0;border-radius:3px;background:#fff;box-shadow:0 4px 12px #0000001f;list-style:none}._list_1qhfu_110 ._option_1qhfu_125{display:block;width:100%;margin:0;padding:.2rem .5rem;border:0;background:transparent;color:#222;font:.75rem/1.3 system-ui,sans-serif;text-align:start;cursor:pointer}._list_1qhfu_110 ._option_1qhfu_125:hover,._list_1qhfu_110 ._option_1qhfu_125:focus-visible{background:#e8f0fe;outline:none}._backdrop_po4dq_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:#00000052}._backdrop_po4dq_1 ._dialog_po4dq_12{display:flex;flex-direction:column;width:min(32rem,100%);max-height:calc(100% - 2rem);margin:0;padding:0;overflow:hidden;border:1px solid #c8c8c8;border-radius:6px;background:#fff;box-shadow:0 8px 24px #0000002e;color:#222;font:.875rem/1.4 system-ui,sans-serif}._backdrop_po4dq_1 ._dialogWide_po4dq_28{width:min(38rem,100%)}._backdrop_po4dq_1 ._header_po4dq_32{margin:0;padding:.75rem 1rem .5rem;font-size:1rem;font-weight:600}._backdrop_po4dq_1 ._tabs_po4dq_39{display:flex;flex-wrap:wrap;gap:.15rem;padding:0 1rem;border-bottom:1px solid #e5e5e5}._backdrop_po4dq_1 ._tab_po4dq_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_po4dq_1 ._tab_po4dq_39[aria-selected=true]{border-color:#e5e5e5;background:#fff;font-weight:600}._backdrop_po4dq_1 ._tab_po4dq_39:disabled{cursor:not-allowed;opacity:.5}._backdrop_po4dq_1 ._body_po4dq_71{display:flex;flex-direction:column;gap:.85rem;padding:1rem;overflow:auto}._backdrop_po4dq_1 ._field_po4dq_79{display:flex;flex-direction:column;gap:.35rem}._backdrop_po4dq_1 ._label_po4dq_85{font-weight:600}._backdrop_po4dq_1 ._sizeRow_po4dq_89{display:flex;gap:.4rem;align-items:center}._backdrop_po4dq_1 ._fileRow_po4dq_95{display:flex;align-items:center;gap:.5rem}._backdrop_po4dq_1 ._fileName_po4dq_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#555}._backdrop_po4dq_1 ._marks_po4dq_108{display:flex;flex-direction:column;gap:.35rem;margin:0;padding:0;border:0}._backdrop_po4dq_1 ._mark_po4dq_108{display:flex;align-items:center;gap:.4rem}._backdrop_po4dq_1 ._actions_po4dq_123{display:flex;justify-content:flex-end;gap:.5rem;padding:.75rem 1rem 1rem}._backdrop_po4dq_1 ._actionsSpread_po4dq_130{justify-content:space-between}._backdrop_po4dq_1 ._actionsEnd_po4dq_134{display:flex;gap:.5rem}._backdrop_po4dq_1 ._headerRow_po4dq_139{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem .5rem .5rem 1rem}._backdrop_po4dq_1 ._headerRow_po4dq_139 ._header_po4dq_32{flex:1;padding:0}._backdrop_po4dq_1 ._close_po4dq_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_po4dq_1 ._close_po4dq_151:hover,._backdrop_po4dq_1 ._close_po4dq_151:focus-visible{background:#f0f0f0}._backdrop_po4dq_1 ._nameSection_po4dq_168{padding:.5rem 1rem .75rem}._backdrop_po4dq_1 ._nameInput_po4dq_172{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid #c8c8c8;border-radius:4px;background:#fff;color:inherit;font:inherit}._backdrop_po4dq_1 ._nameInput_po4dq_172:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._backdrop_po4dq_1 ._labelRow_po4dq_189{display:flex;align-items:center;gap:.35rem}._backdrop_po4dq_1 ._help_po4dq_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 #c8c8c8;border-radius:50%;background:#f7f7f7;color:inherit;font:.7rem/1 system-ui,sans-serif;font-weight:700;cursor:help}._backdrop_po4dq_1 ._textInput_po4dq_213{box-sizing:border-box;width:100%;margin:0;padding:.35rem .5rem;border:1px solid #c8c8c8;border-radius:4px;background:#fff;color:inherit;font:inherit}._backdrop_po4dq_1 ._fullSelect_po4dq_225{width:100%}._backdrop_po4dq_1 ._error_po4dq_229{color:#b33;font-size:.8rem}._backdrop_po4dq_1 ._emptyHint_po4dq_234{margin:0;color:#666}._backdrop_po4dq_1 ._action_po4dq_123[aria-pressed=true],._backdrop_po4dq_1 ._action_po4dq_123[aria-checked=true]{border-color:#4a7fd4;background:#e8eef8}._backdrop_po4dq_1 ._textarea_po4dq_245{box-sizing:border-box;width:100%;min-height:6.5rem;margin:0;padding:.4rem .5rem;border:1px solid #c8c8c8;border-radius:4px;background:#fff;color:inherit;font:.8rem/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}._backdrop_po4dq_1 ._actionDanger_po4dq_259{border-color:#c44;background:#fff;color:#b33}._backdrop_po4dq_1 ._confirmBody_po4dq_265{padding:1rem}._backdrop_po4dq_1 ._emptyPanel_po4dq_269{min-height:4rem}._backdrop_po4dq_1 ._nestedPanel_po4dq_273{margin:.85rem 1rem .15rem;overflow:hidden;border:1px solid #c8c8c8;border-radius:4px}._backdrop_po4dq_1 ._nestedPanel_po4dq_273 ._tabs_po4dq_39{padding-top:.4rem}._spinnerWrap_po4dq_284{display:flex;align-items:center;justify-content:center;padding:.5rem .75rem}._spinner_po4dq_284{width:1.1rem;height:1.1rem;border:2px solid #d0d0d0;border-top-color:#4a7fd4;border-radius:50%;animation:_spin_po4dq_284 .7s linear infinite}@keyframes _spin_po4dq_284{to{transform:rotate(360deg)}}._backdrop_po4dq_1 ._action_po4dq_123{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:5.5rem;margin:0;padding:.35rem .75rem;border:1px solid #c8c8c8;border-radius:4px;background:#f7f7f7;color:inherit;font:inherit;cursor:pointer}._backdrop_po4dq_1 ._actionPrimary_po4dq_319{border-color:#4a7fd4;background:#4a7fd4;color:#fff}._backdrop_po4dq_1 ._action_po4dq_123:disabled{cursor:not-allowed;opacity:.5}._backdrop_po4dq_1 ._action_po4dq_123:focus-visible,._backdrop_po4dq_1 ._tab_po4dq_39:focus-visible,._backdrop_po4dq_1 ._close_po4dq_151:focus-visible,._backdrop_po4dq_1 ._iconButton_po4dq_333:focus-visible,._backdrop_po4dq_1 ._select_po4dq_334:focus-visible,._backdrop_po4dq_1 ._lengthInput_po4dq_335:focus-visible,._backdrop_po4dq_1 ._lengthUnit_po4dq_336:focus-visible,._backdrop_po4dq_1 ._textInput_po4dq_213:focus-visible,._backdrop_po4dq_1 ._textarea_po4dq_245:focus-visible,._backdrop_po4dq_1 ._help_po4dq_195:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._backdrop_po4dq_1 ._group_po4dq_344{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:.75rem;border:1px solid #e5e5e5;border-radius:4px}._backdrop_po4dq_1 ._nestedGroup_po4dq_354{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:.6rem .7rem;border:1px solid #ececec;border-radius:4px}._backdrop_po4dq_1 ._subLabel_po4dq_364{font-weight:600}._backdrop_po4dq_1 ._iconRow_po4dq_368{display:flex;gap:.25rem}._backdrop_po4dq_1 ._iconButton_po4dq_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 #c8c8c8;border-radius:4px;background:#f7f7f7;color:inherit;cursor:pointer}._backdrop_po4dq_1 ._iconButton_po4dq_333[aria-checked=true],._backdrop_po4dq_1 ._iconButton_po4dq_333[aria-pressed=true]{border-color:#4a7fd4;background:#e8eef8}._backdrop_po4dq_1 ._iconButton_po4dq_333:disabled{cursor:not-allowed;opacity:.5}._backdrop_po4dq_1 ._lengthField_po4dq_400{display:flex;flex-direction:column;gap:.25rem}._backdrop_po4dq_1 ._sideLabel_po4dq_406{font-weight:600}._backdrop_po4dq_1 ._lengthRow_po4dq_410{display:flex;gap:.35rem;align-items:center}._backdrop_po4dq_1 ._lengthInput_po4dq_335,._backdrop_po4dq_1 ._select_po4dq_334,._backdrop_po4dq_1 ._lengthUnit_po4dq_336{box-sizing:border-box;margin:0;padding:.3rem .4rem;border:1px solid #c8c8c8;border-radius:4px;background:#fff;color:inherit;font:inherit}._backdrop_po4dq_1 ._lengthInput_po4dq_335{width:4.75rem}._backdrop_po4dq_1 ._select_po4dq_334,._backdrop_po4dq_1 ._lengthUnit_po4dq_336{min-width:4.5rem}._backdrop_po4dq_1 ._sideGrid_po4dq_438,._backdrop_po4dq_1 ._shadowGrid_po4dq_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_5kups_1{display:grid;grid-template-columns:repeat(10,1.15rem);gap:2px;width:max-content}._cell_5kups_8{width:1.15rem;height:1.15rem;padding:0;border:1px solid #c8c8c8;background:#fff;cursor:pointer}._cell_5kups_8[data-active=true]{background:#cfe3ff;border-color:#4a90d9}._cell_5kups_8:focus-visible{outline:2px solid #4a90d9;outline-offset:1px}._sizeLabel_5kups_27{margin:.35rem 0 0;color:#444;font-variant-numeric:tabular-nums}._sizeFields_5kups_33{align-items:flex-end}._numberInput_5kups_37{box-sizing:border-box;width:4.5rem;margin:0;padding:.35rem .4rem;border:1px solid #c8c8c8;border-radius:4px;background:#fff;color:inherit;font:inherit}._numberInput_5kups_37:focus-visible{outline:2px solid #8ab4ff;outline-offset:1px}._wrap_1wd6e_1._wrap_1wd6e_1{display:inline-flex;flex-shrink:0;align-items:stretch}._wrap_1wd6e_1._wrapToolbar_1wd6e_7{align-self:stretch;padding:7px .35rem 0}._wrap_1wd6e_1 ._field_1wd6e_12{position:relative;display:flex;flex:0 0 auto;align-items:stretch;height:1.6rem}._wrap_1wd6e_1 ._trigger_1wd6e_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 #c8c8c8;border-radius:3px;background:#fff;color:#222;font:.75rem/1.2 system-ui,sans-serif;text-align:start;cursor:pointer}._wrap_1wd6e_1 ._trigger_1wd6e_20:focus{outline:2px solid #8ab4ff;outline-offset:-1px}._wrap_1wd6e_1 ._trigger_1wd6e_20:disabled{cursor:not-allowed;opacity:.5}._wrap_1wd6e_1 ._chevron_1wd6e_46{position:absolute;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;width:1.15rem;pointer-events:none;color:#444}._wrap_1wd6e_1 ._chevron_1wd6e_46:after{content:"";display:block;width:0;height:0;border-style:solid;border-width:.28rem .22rem 0;border-color:currentColor transparent transparent}._list_1wd6e_69{position:fixed;z-index:1300;min-width:10rem;max-height:18rem;margin:0;padding:.15rem 0;overflow:auto;border:1px solid #d0d0d0;border-radius:3px;background:#fff;box-shadow:0 4px 12px #0000001f;list-style:none}._option_1wd6e_84{display:block;width:100%;margin:0;padding:.25rem .75rem;border:0;background:transparent;color:#222;font-family:system-ui,sans-serif;line-height:1.25;text-align:start;cursor:pointer}._option_1wd6e_84:hover,._option_1wd6e_84:focus-visible{background:#e8f0fe;outline:none}._option_1wd6e_84[aria-checked=true]{font-weight:600}._option_1wd6e_84:disabled{cursor:not-allowed;opacity:.5}._separator_1wd6e_113{height:1px;margin:.25rem .5rem;padding:0;background:#d0d0d0;border:0;list-style:none}._root_14tok_1{all:revert;position:relative;box-sizing:border-box;display:flex;flex-direction:column;width:100%;min-width:0;height:100%;min-height:16rem;border:var(--wysiwyg-border-width, 1px) solid var(--wysiwyg-border-color, #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_14tok_1._fullscreen_14tok_34{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_14tok_1 ._exitFullscreen_14tok_46{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:#fff;color:#444;font:inherit;cursor:pointer;box-shadow:0 1px 3px #0003}._root_14tok_1 ._exitFullscreen_14tok_46:hover{background:#f4f4f4}._root_14tok_1 ._exitFullscreen_14tok_46:focus{outline:none;box-shadow:inset 0 0 0 2px #8ab4ff}._root_14tok_1 ._exitFullscreenIcon_14tok_77{display:block;width:1rem;height:1rem;flex-shrink:0}._root_14tok_1 *:not(:is(svg,svg *)),._root_14tok_1 *:before,._root_14tok_1 *:after{all:revert;box-sizing:border-box}._root_14tok_1 ._chrome_14tok_92{display:flex;flex-direction:column;flex-shrink:0;align-items:stretch;z-index:1;width:100%;min-width:0;border-bottom:1px solid #e5e5e5}._root_14tok_1 ._workspace_14tok_103{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:auto;padding:1rem;background:#f0f0f0}._root_14tok_1 ._surface_14tok_113{width:100%;min-height:100%;background:#fff;box-shadow:0 1px 3px #0000001f}._root_14tok_1 ._visual_14tok_120{flex:1 0 auto;min-height:100%;padding:.75rem;outline:none}._root_14tok_1 ._visual_14tok_120:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_14tok_1 ._visual_14tok_120:empty:before{content:attr(data-placeholder);color:#888}._root_14tok_1 ._html_14tok_136{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_14tok_1 ._html_14tok_136:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_14tok_1 ._html_14tok_136:disabled{opacity:.6}._visual_14tok_120 p{margin:0 0 .75em}._visual_14tok_120 p:last-child{margin-bottom:0}._visual_14tok_120 h1,._visual_14tok_120 h2,._visual_14tok_120 h3,._visual_14tok_120 h4,._visual_14tok_120 h5,._visual_14tok_120 h6{margin:1em 0 .5em;font-weight:600;line-height:1.25;color:inherit}._visual_14tok_120 h1:first-child,._visual_14tok_120 h2:first-child,._visual_14tok_120 h3:first-child,._visual_14tok_120 h4:first-child,._visual_14tok_120 h5:first-child,._visual_14tok_120 h6:first-child{margin-top:0}._visual_14tok_120 h1{font-size:1.75rem}._visual_14tok_120 h2{font-size:1.5rem}._visual_14tok_120 h3{font-size:1.25rem}._visual_14tok_120 h4{font-size:1.125rem}._visual_14tok_120 h5{font-size:1rem}._visual_14tok_120 h6{font-size:.875rem}._visual_14tok_120 ul,._visual_14tok_120 ol{margin:0 0 .75em;padding-left:1.5em}._visual_14tok_120 li{margin:.25em 0}._visual_14tok_120 a{color:#06c;text-decoration:underline}._visual_14tok_120 strong,._visual_14tok_120 b{font-weight:700}._visual_14tok_120 em,._visual_14tok_120 i{font-style:italic}._visual_14tok_120 u{text-decoration:underline}._visual_14tok_120 s{text-decoration:line-through}._visual_14tok_120 blockquote{margin:0 0 .75em;padding:0 0 0 .75em;border:0;border-left:3px solid #d0d0d0;color:#444}._visual_14tok_120 code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875em;background:#f4f4f4;padding:.1em .3em;border-radius:3px}._visual_14tok_120 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_14tok_120 pre code{background:transparent;padding:0;font-size:inherit}._visual_14tok_120 hr{margin:1em 0;border:0;border-top:1px solid #d0d0d0}._visual_14tok_120 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_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_1j9y7_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_1j9y7_1._fullscreen_1j9y7_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_1j9y7_1 ._exitFullscreen_1j9y7_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_1j9y7_1 ._exitFullscreen_1j9y7_48:hover{background:var(--wysiwyg-chrome-hover, #f4f4f4)}._root_1j9y7_1 ._exitFullscreen_1j9y7_48:focus{outline:none;box-shadow:inset 0 0 0 2px var(--wysiwyg-chrome-focus, #8ab4ff)}._root_1j9y7_1 ._exitFullscreenIcon_1j9y7_79{display:block;width:1rem;height:1rem;flex-shrink:0}._root_1j9y7_1 *:not(:is(svg,svg *)),._root_1j9y7_1 *:before,._root_1j9y7_1 *:after{all:revert;box-sizing:border-box}._root_1j9y7_1 ._menuChrome_1j9y7_94{display:flex;flex-direction:column;flex-shrink:0;align-items:stretch;z-index:2;width:100%;min-width:0}._root_1j9y7_1 ._body_1j9y7_105._body_1j9y7_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_1j9y7_1 ._body_1j9y7_105._body_1j9y7_105[data-icon-dock=top]{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}._root_1j9y7_1 ._body_1j9y7_105._body_1j9y7_105[data-icon-dock=bottom]{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr)}._root_1j9y7_1 ._body_1j9y7_105._body_1j9y7_105[data-icon-dock=left]{grid-template-columns:12rem minmax(0,1fr);grid-template-rows:minmax(min-content,1fr)}._root_1j9y7_1 ._body_1j9y7_105._body_1j9y7_105[data-icon-dock=right]{grid-template-columns:minmax(0,1fr) 12rem;grid-template-rows:minmax(min-content,1fr)}._root_1j9y7_1 ._iconChrome_1j9y7_135._iconChrome_1j9y7_135{display:flex;flex-direction:column;align-items:stretch;z-index:1;min-width:0}._root_1j9y7_1[data-toolbar-position=top] ._iconChrome_1j9y7_135{width:100%;border-bottom:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1j9y7_1[data-toolbar-position=bottom] ._iconChrome_1j9y7_135{width:100%;border-top:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1j9y7_1[data-toolbar-position=left] ._iconChrome_1j9y7_135._iconChrome_1j9y7_135,._root_1j9y7_1[data-toolbar-position=right] ._iconChrome_1j9y7_135._iconChrome_1j9y7_135{align-self:stretch;box-sizing:border-box;width:100%;min-width:12rem;overflow-x:hidden;overflow-y:auto}._root_1j9y7_1[data-toolbar-position=left] ._iconChrome_1j9y7_135{border-right:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1j9y7_1[data-toolbar-position=right] ._iconChrome_1j9y7_135{border-left:1px solid var(--wysiwyg-chrome-border, #e5e5e5)}._root_1j9y7_1[data-toolbar-position=left] ._iconChrome_1j9y7_135>*,._root_1j9y7_1[data-toolbar-position=right] ._iconChrome_1j9y7_135>*{width:100%;min-width:0;height:auto;min-height:100%}._root_1j9y7_1 ._workspace_1j9y7_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_1j9y7_1 ._htmlFileDropOverlay_1j9y7_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_1j9y7_1 ._surface_1j9y7_205{width:100%;min-height:100%;background:#fff;box-shadow:0 1px 3px #0000001f}._root_1j9y7_1 ._visual_1j9y7_212{flex:1 0 auto;min-height:100%;padding:.75rem;outline:none;user-select:text;-webkit-user-select:text}._root_1j9y7_1 ._visual_1j9y7_212:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_1j9y7_1 ._visual_1j9y7_212:empty:before{content:attr(data-placeholder);color:#888}._root_1j9y7_1 ._visual_1j9y7_212[aria-disabled=true]{opacity:.6;background:#f7f7f7}._root_1j9y7_1 ._html_1j9y7_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_1j9y7_1 ._html_1j9y7_191:focus{box-shadow:inset 0 0 0 2px #8ab4ff}._root_1j9y7_1 ._html_1j9y7_191:disabled{opacity:.6}._visual_1j9y7_212 p{margin:0 0 .75em}._visual_1j9y7_212 p:last-child{margin-bottom:0}._visual_1j9y7_212 h1,._visual_1j9y7_212 h2,._visual_1j9y7_212 h3,._visual_1j9y7_212 h4,._visual_1j9y7_212 h5,._visual_1j9y7_212 h6{margin:1em 0 .5em;font-weight:600;line-height:1.25;color:inherit}._visual_1j9y7_212 h1:first-child,._visual_1j9y7_212 h2:first-child,._visual_1j9y7_212 h3:first-child,._visual_1j9y7_212 h4:first-child,._visual_1j9y7_212 h5:first-child,._visual_1j9y7_212 h6:first-child{margin-top:0}._visual_1j9y7_212 h1{font-size:1.75rem}._visual_1j9y7_212 h2{font-size:1.5rem}._visual_1j9y7_212 h3{font-size:1.25rem}._visual_1j9y7_212 h4{font-size:1.125rem}._visual_1j9y7_212 h5{font-size:1rem}._visual_1j9y7_212 h6{font-size:.875rem}._visual_1j9y7_212 ul,._visual_1j9y7_212 ol{margin:0 0 .75em;padding-left:1.5em}._visual_1j9y7_212 li{margin:.25em 0}._visual_1j9y7_212 a{color:#06c;text-decoration:underline}._visual_1j9y7_212 strong,._visual_1j9y7_212 b{font-weight:700}._visual_1j9y7_212 em,._visual_1j9y7_212 i{font-style:italic}._visual_1j9y7_212 u{text-decoration:underline}._visual_1j9y7_212 s{text-decoration:line-through}._visual_1j9y7_212 blockquote{margin:0 0 .75em;padding:0 0 0 .75em;border:0;border-left:3px solid #d0d0d0;color:#444}._visual_1j9y7_212 code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875em;background:#f4f4f4;padding:.1em .3em;border-radius:3px}._visual_1j9y7_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_1j9y7_212 pre code{background:transparent;padding:0;font-size:inherit}._visual_1j9y7_212 hr{margin:1em 0;border:0;border-top:1px solid #d0d0d0}._visual_1j9y7_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, mode: modeProp, defaultMode, onModeChange, fullscreen: fullscreenProp, defaultFullscreen, onFullscreenChange, placeholder, disabled, className, locale, toolbarBackground, menuColor, menuBackground, menuFontSize, menuFontFamily, border, menuVisible, toolbarVisible, customActions, customFonts, transformHtml, loadCustomParagraphStyles, onSaveCustomParagraphStyle, onDeleteCustomParagraphStyle, customImagePicker, disableBuiltinImageInsert, }: EditorProps): import("react").JSX.Element;
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;
3
3
  //# sourceMappingURL=Editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/components/Editor.tsx"],"names":[],"mappings":"AA4JA,OAAO,KAAK,EAOV,WAAW,EACZ,MAAM,UAAU,CAAA;AAKjB,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,YAAiB,EACjB,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,WAAsB,EACtB,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,iBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,MAAa,EACb,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,cAAc,EACd,MAAM,EACN,WAAkB,EAClB,cAAqB,EACrB,aAAa,EACb,WAAW,EACX,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,yBAAyB,GAC1B,EAAE,WAAW,+BAm4Db"}
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 +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,+GAgDzB,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,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;CACjE,CAAA;AAED,eAAO,MAAM,aAAa,+GAyDzB,CAAA"}