@docmentis/udoc-editor 0.0.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +48 -0
  4. package/dist/arrange.d.ts +37 -0
  5. package/dist/arrange.d.ts.map +1 -0
  6. package/dist/arrange.js +431 -0
  7. package/dist/arrange.js.map +1 -0
  8. package/dist/clipboard.d.ts +12 -0
  9. package/dist/clipboard.d.ts.map +1 -0
  10. package/dist/clipboard.js +101 -0
  11. package/dist/clipboard.js.map +1 -0
  12. package/dist/commands.d.ts +12 -0
  13. package/dist/commands.d.ts.map +1 -0
  14. package/dist/commands.js +225 -0
  15. package/dist/commands.js.map +1 -0
  16. package/dist/components/ComboBox.d.ts +38 -0
  17. package/dist/components/ComboBox.d.ts.map +1 -0
  18. package/dist/components/ComboBox.js +57 -0
  19. package/dist/components/ComboBox.js.map +1 -0
  20. package/dist/components/ModeSwitch.d.ts +15 -0
  21. package/dist/components/ModeSwitch.d.ts.map +1 -0
  22. package/dist/components/ModeSwitch.js +94 -0
  23. package/dist/components/ModeSwitch.js.map +1 -0
  24. package/dist/components/NewSlideModal.d.ts +41 -0
  25. package/dist/components/NewSlideModal.d.ts.map +1 -0
  26. package/dist/components/NewSlideModal.js +136 -0
  27. package/dist/components/NewSlideModal.js.map +1 -0
  28. package/dist/components/PageControls.d.ts +78 -0
  29. package/dist/components/PageControls.d.ts.map +1 -0
  30. package/dist/components/PageControls.js +201 -0
  31. package/dist/components/PageControls.js.map +1 -0
  32. package/dist/components/PageSettingsModal.d.ts +27 -0
  33. package/dist/components/PageSettingsModal.d.ts.map +1 -0
  34. package/dist/components/PageSettingsModal.js +273 -0
  35. package/dist/components/PageSettingsModal.js.map +1 -0
  36. package/dist/components/PaintOptionsModal.d.ts +19 -0
  37. package/dist/components/PaintOptionsModal.d.ts.map +1 -0
  38. package/dist/components/PaintOptionsModal.js +103 -0
  39. package/dist/components/PaintOptionsModal.js.map +1 -0
  40. package/dist/components/TextControls.d.ts +49 -0
  41. package/dist/components/TextControls.d.ts.map +1 -0
  42. package/dist/components/TextControls.js +452 -0
  43. package/dist/components/TextControls.js.map +1 -0
  44. package/dist/context-menu.d.ts +46 -0
  45. package/dist/context-menu.d.ts.map +1 -0
  46. package/dist/context-menu.js +144 -0
  47. package/dist/context-menu.js.map +1 -0
  48. package/dist/edit-client.d.ts +121 -0
  49. package/dist/edit-client.d.ts.map +1 -0
  50. package/dist/edit-client.js +154 -0
  51. package/dist/edit-client.js.map +1 -0
  52. package/dist/edit-command.d.ts +7 -0
  53. package/dist/edit-command.d.ts.map +1 -0
  54. package/dist/edit-command.js +18 -0
  55. package/dist/edit-command.js.map +1 -0
  56. package/dist/edit-mode.d.ts +19 -0
  57. package/dist/edit-mode.d.ts.map +1 -0
  58. package/dist/edit-mode.js +214 -0
  59. package/dist/edit-mode.js.map +1 -0
  60. package/dist/editor.d.ts +101 -0
  61. package/dist/editor.d.ts.map +1 -0
  62. package/dist/editor.js +101 -0
  63. package/dist/editor.js.map +1 -0
  64. package/dist/fonts/faces.d.ts +28 -0
  65. package/dist/fonts/faces.d.ts.map +1 -0
  66. package/dist/fonts/faces.js +38 -0
  67. package/dist/fonts/faces.js.map +1 -0
  68. package/dist/fonts/preview.d.ts +98 -0
  69. package/dist/fonts/preview.d.ts.map +1 -0
  70. package/dist/fonts/preview.js +149 -0
  71. package/dist/fonts/preview.js.map +1 -0
  72. package/dist/formatting-marks.d.ts +23 -0
  73. package/dist/formatting-marks.d.ts.map +1 -0
  74. package/dist/formatting-marks.js +55 -0
  75. package/dist/formatting-marks.js.map +1 -0
  76. package/dist/grips.d.ts +14 -0
  77. package/dist/grips.d.ts.map +1 -0
  78. package/dist/grips.js +459 -0
  79. package/dist/grips.js.map +1 -0
  80. package/dist/i18n/ar.d.ts +4 -0
  81. package/dist/i18n/ar.d.ts.map +1 -0
  82. package/dist/i18n/ar.js +175 -0
  83. package/dist/i18n/ar.js.map +1 -0
  84. package/dist/i18n/de.d.ts +4 -0
  85. package/dist/i18n/de.d.ts.map +1 -0
  86. package/dist/i18n/de.js +175 -0
  87. package/dist/i18n/de.js.map +1 -0
  88. package/dist/i18n/en.d.ts +5 -0
  89. package/dist/i18n/en.d.ts.map +1 -0
  90. package/dist/i18n/en.js +176 -0
  91. package/dist/i18n/en.js.map +1 -0
  92. package/dist/i18n/es.d.ts +4 -0
  93. package/dist/i18n/es.d.ts.map +1 -0
  94. package/dist/i18n/es.js +175 -0
  95. package/dist/i18n/es.js.map +1 -0
  96. package/dist/i18n/fr.d.ts +4 -0
  97. package/dist/i18n/fr.d.ts.map +1 -0
  98. package/dist/i18n/fr.js +175 -0
  99. package/dist/i18n/fr.js.map +1 -0
  100. package/dist/i18n/index.d.ts +21 -0
  101. package/dist/i18n/index.d.ts.map +1 -0
  102. package/dist/i18n/index.js +42 -0
  103. package/dist/i18n/index.js.map +1 -0
  104. package/dist/i18n/ja.d.ts +4 -0
  105. package/dist/i18n/ja.d.ts.map +1 -0
  106. package/dist/i18n/ja.js +175 -0
  107. package/dist/i18n/ja.js.map +1 -0
  108. package/dist/i18n/ko.d.ts +4 -0
  109. package/dist/i18n/ko.d.ts.map +1 -0
  110. package/dist/i18n/ko.js +175 -0
  111. package/dist/i18n/ko.js.map +1 -0
  112. package/dist/i18n/messages.d.ts +316 -0
  113. package/dist/i18n/messages.d.ts.map +1 -0
  114. package/dist/i18n/messages.js +2 -0
  115. package/dist/i18n/messages.js.map +1 -0
  116. package/dist/i18n/pt-BR.d.ts +4 -0
  117. package/dist/i18n/pt-BR.d.ts.map +1 -0
  118. package/dist/i18n/pt-BR.js +175 -0
  119. package/dist/i18n/pt-BR.js.map +1 -0
  120. package/dist/i18n/ru.d.ts +4 -0
  121. package/dist/i18n/ru.d.ts.map +1 -0
  122. package/dist/i18n/ru.js +175 -0
  123. package/dist/i18n/ru.js.map +1 -0
  124. package/dist/i18n/zh-CN.d.ts +4 -0
  125. package/dist/i18n/zh-CN.d.ts.map +1 -0
  126. package/dist/i18n/zh-CN.js +175 -0
  127. package/dist/i18n/zh-CN.js.map +1 -0
  128. package/dist/i18n/zh-TW.d.ts +4 -0
  129. package/dist/i18n/zh-TW.d.ts.map +1 -0
  130. package/dist/i18n/zh-TW.js +175 -0
  131. package/dist/i18n/zh-TW.js.map +1 -0
  132. package/dist/icons.d.ts +97 -0
  133. package/dist/icons.d.ts.map +1 -0
  134. package/dist/icons.js +103 -0
  135. package/dist/icons.js.map +1 -0
  136. package/dist/index.d.ts +9 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +14 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/insert.d.ts +21 -0
  141. package/dist/insert.d.ts.map +1 -0
  142. package/dist/insert.js +129 -0
  143. package/dist/insert.js.map +1 -0
  144. package/dist/menu-action.d.ts +73 -0
  145. package/dist/menu-action.d.ts.map +1 -0
  146. package/dist/menu-action.js +89 -0
  147. package/dist/menu-action.js.map +1 -0
  148. package/dist/mode.d.ts +21 -0
  149. package/dist/mode.d.ts.map +1 -0
  150. package/dist/mode.js +17 -0
  151. package/dist/mode.js.map +1 -0
  152. package/dist/new-slide.d.ts +21 -0
  153. package/dist/new-slide.d.ts.map +1 -0
  154. package/dist/new-slide.js +63 -0
  155. package/dist/new-slide.js.map +1 -0
  156. package/dist/page-controls.d.ts +20 -0
  157. package/dist/page-controls.d.ts.map +1 -0
  158. package/dist/page-controls.js +99 -0
  159. package/dist/page-controls.js.map +1 -0
  160. package/dist/paint.d.ts +52 -0
  161. package/dist/paint.d.ts.map +1 -0
  162. package/dist/paint.js +262 -0
  163. package/dist/paint.js.map +1 -0
  164. package/dist/ruler.d.ts +10 -0
  165. package/dist/ruler.d.ts.map +1 -0
  166. package/dist/ruler.js +97 -0
  167. package/dist/ruler.js.map +1 -0
  168. package/dist/state.d.ts +85 -0
  169. package/dist/state.d.ts.map +1 -0
  170. package/dist/state.js +28 -0
  171. package/dist/state.js.map +1 -0
  172. package/dist/styles.d.ts +2 -0
  173. package/dist/styles.d.ts.map +1 -0
  174. package/dist/styles.js +758 -0
  175. package/dist/styles.js.map +1 -0
  176. package/dist/tabs.d.ts +11 -0
  177. package/dist/tabs.d.ts.map +1 -0
  178. package/dist/tabs.js +153 -0
  179. package/dist/tabs.js.map +1 -0
  180. package/dist/text-format.d.ts +114 -0
  181. package/dist/text-format.d.ts.map +1 -0
  182. package/dist/text-format.js +315 -0
  183. package/dist/text-format.js.map +1 -0
  184. package/dist/tools.d.ts +35 -0
  185. package/dist/tools.d.ts.map +1 -0
  186. package/dist/tools.js +41 -0
  187. package/dist/tools.js.map +1 -0
  188. package/dist/version.d.ts +2 -0
  189. package/dist/version.d.ts.map +1 -0
  190. package/dist/version.js +7 -0
  191. package/dist/version.js.map +1 -0
  192. package/dist/worker/handlers.d.ts +11 -0
  193. package/dist/worker/handlers.d.ts.map +1 -0
  194. package/dist/worker/handlers.js +127 -0
  195. package/dist/worker/handlers.js.map +1 -0
  196. package/dist/worker/protocol.d.ts +190 -0
  197. package/dist/worker/protocol.d.ts.map +1 -0
  198. package/dist/worker/protocol.js +2 -0
  199. package/dist/worker/protocol.js.map +1 -0
  200. package/dist/worker/worker-source.d.ts +3 -0
  201. package/dist/worker/worker-source.d.ts.map +1 -0
  202. package/dist/worker/worker-source.js +11 -0
  203. package/dist/worker/worker.d.ts +2 -0
  204. package/dist/worker/worker.d.ts.map +1 -0
  205. package/dist/worker/worker.js +6 -0
  206. package/dist/worker/worker.js.map +1 -0
  207. package/package.json +68 -5
package/dist/styles.js ADDED
@@ -0,0 +1,758 @@
1
+ // The CSS of edit mode's own chrome, laid after udoc-ui's sheet — so it reads
2
+ // udoc-ui's color roles and shares its root class.
3
+ //
4
+ // `css` is an identity tag (returns the template's raw text) so editor
5
+ // extensions light up CSS syntax highlighting + Prettier inside the backticks;
6
+ // it has no runtime effect.
7
+ const css = (strings, ...values) => String.raw({ raw: strings }, ...values);
8
+ export const editorStyles = css `
9
+ /* Mode switcher wrapper — leads the editing cluster, governs the commands to its
10
+ right. The trigger + menu are the standard .udoc-btn--field dropdown. */
11
+ .udoc-ui-root .udoc-mode-switch {
12
+ display: flex;
13
+ align-items: center;
14
+ }
15
+
16
+ /* Per-page action rail (udoc:page-actions): a vertical column — move
17
+ up/down, rotate, more, delete — beside the page's right edge, top-aligned
18
+ with the page. "More" opens the page popup to the rail's left. Constant
19
+ CSS size — the edit shell pairs it with screen-fixed (px) page spacing so
20
+ the side margin fits it at every zoom. */
21
+ .udoc-ui-root .udoc-ui__page-actions {
22
+ /* Hidden until its page is hovered (or its popup is open) — the canvas owns
23
+ the hover detection (page-band hit test) and toggles the --peek class.
24
+ Non-interactive while hidden so it never eats clicks aimed at the page. */
25
+ pointer-events: none;
26
+ opacity: 0;
27
+ transition: opacity 0.12s;
28
+ position: relative;
29
+ display: flex;
30
+ flex-direction: column;
31
+ align-items: center;
32
+ gap: 1px;
33
+ padding: 3px 1px;
34
+ font:
35
+ 600 11px/1 system-ui,
36
+ sans-serif;
37
+ color: var(--udoc-color-on-surface);
38
+ background: var(--udoc-color-surface-container-high);
39
+ border: 1px solid var(--udoc-color-outline-variant);
40
+ border-radius: 12px;
41
+ user-select: none;
42
+ }
43
+ .udoc-ui-root .udoc-ui__page-actions--peek {
44
+ pointer-events: auto;
45
+ opacity: 1;
46
+ }
47
+ .udoc-ui-root .udoc-ui__page-actions-btn {
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ width: 22px;
52
+ height: 20px;
53
+ padding: 0;
54
+ border: none;
55
+ border-radius: 8px;
56
+ background: transparent;
57
+ color: var(--udoc-color-on-surface);
58
+ cursor: pointer;
59
+ }
60
+ .udoc-ui-root .udoc-ui__page-actions-btn svg,
61
+ .udoc-ui-root .udoc-ui__page-insert-btn svg {
62
+ width: 14px;
63
+ height: 14px;
64
+ }
65
+ .udoc-ui-root .udoc-ui__page-actions-btn:hover:not(:disabled) {
66
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
67
+ }
68
+ .udoc-ui-root .udoc-ui__page-actions-btn:disabled {
69
+ opacity: var(--udoc-state-disabled-opacity);
70
+ cursor: default;
71
+ }
72
+
73
+ /* Insert-between-pages affordance (udoc:page-insert): an invisible strip
74
+ filling each inter-page gap; hovering it reveals a divider line with a
75
+ centered "+" button. The strip at gap i inserts before page i. */
76
+ .udoc-ui-root .udoc-ui__page-insert {
77
+ pointer-events: auto;
78
+ position: relative;
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ }
83
+ .udoc-ui-root .udoc-ui__page-insert-line {
84
+ position: absolute;
85
+ left: 0;
86
+ right: 0;
87
+ top: 50%;
88
+ height: 2px;
89
+ margin-top: -1px;
90
+ border-radius: 1px;
91
+ background: var(--udoc-color-primary);
92
+ opacity: 0;
93
+ transition: opacity 0.12s;
94
+ }
95
+ .udoc-ui-root .udoc-ui__page-insert-btn {
96
+ position: relative;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ width: 26px;
101
+ height: 26px;
102
+ padding: 0;
103
+ border: 1px solid var(--udoc-color-outline-variant);
104
+ border-radius: 13px;
105
+ background: var(--udoc-color-surface-container-high);
106
+ color: var(--udoc-color-on-surface);
107
+ cursor: pointer;
108
+ opacity: 0;
109
+ transition: opacity 0.12s;
110
+ }
111
+ .udoc-ui-root .udoc-ui__page-insert:hover .udoc-ui__page-insert-line,
112
+ .udoc-ui-root .udoc-ui__page-insert:hover .udoc-ui__page-insert-btn,
113
+ .udoc-ui-root .udoc-ui__page-insert-btn:focus-visible {
114
+ opacity: 1;
115
+ }
116
+ .udoc-ui-root .udoc-ui__page-insert-btn:hover {
117
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
118
+ }
119
+
120
+ /* === Per-page settings dialog === */
121
+ .udoc-ui-root .udoc-page-modal {
122
+ position: absolute;
123
+ inset: 0;
124
+ z-index: 100;
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ }
129
+
130
+ .udoc-ui-root .udoc-page-modal__backdrop {
131
+ position: absolute;
132
+ inset: 0;
133
+ background: var(--udoc-color-scrim);
134
+ }
135
+
136
+ .udoc-ui-root .udoc-page-modal__dialog {
137
+ position: relative;
138
+ z-index: 1;
139
+ width: min(360px, calc(100% - 32px));
140
+ max-height: calc(100% - 32px);
141
+ overflow: auto;
142
+ background: var(--udoc-color-surface-container-highest);
143
+ border: 1px solid var(--udoc-color-outline-variant);
144
+ border-radius: 8px;
145
+ box-shadow: var(--udoc-elevation-4);
146
+ }
147
+
148
+ .udoc-ui-root .udoc-page-modal__header {
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: space-between;
152
+ padding: 14px 16px;
153
+ border-bottom: 1px solid var(--udoc-color-outline-variant);
154
+ }
155
+
156
+ .udoc-ui-root .udoc-page-modal__heading {
157
+ margin: 0;
158
+ font-size: 15px;
159
+ font-weight: 600;
160
+ color: var(--udoc-color-on-surface);
161
+ }
162
+
163
+ .udoc-ui-root .udoc-page-modal__close {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ width: 28px;
168
+ height: 28px;
169
+ padding: 0;
170
+ border: none;
171
+ border-radius: 6px;
172
+ background: transparent;
173
+ color: var(--udoc-color-on-surface-variant);
174
+ cursor: pointer;
175
+ }
176
+
177
+ .udoc-ui-root .udoc-page-modal__close:hover {
178
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
179
+ }
180
+
181
+ .udoc-ui-root .udoc-page-modal__close svg {
182
+ width: var(--udoc-btn-glyph);
183
+ height: var(--udoc-btn-glyph);
184
+ }
185
+
186
+ .udoc-ui-root .udoc-page-modal__body {
187
+ padding: 14px 16px 4px;
188
+ }
189
+
190
+ .udoc-ui-root .udoc-page-modal__section-label {
191
+ font-size: 11px;
192
+ font-weight: 600;
193
+ letter-spacing: 0.04em;
194
+ text-transform: uppercase;
195
+ color: var(--udoc-color-on-surface-variant);
196
+ margin-bottom: 8px;
197
+ }
198
+
199
+ .udoc-ui-root .udoc-page-modal__section-label:not(:first-child) {
200
+ margin-top: 18px;
201
+ }
202
+
203
+ .udoc-ui-root .udoc-page-modal__select {
204
+ width: 100%;
205
+ height: 32px;
206
+ padding: 0 8px;
207
+ border: 1px solid var(--udoc-color-outline);
208
+ border-radius: 6px;
209
+ background: transparent;
210
+ color: var(--udoc-color-on-surface);
211
+ font-size: 13px;
212
+ cursor: pointer;
213
+ }
214
+
215
+ .udoc-ui-root .udoc-page-modal__dims {
216
+ display: flex;
217
+ align-items: flex-end;
218
+ gap: 8px;
219
+ margin-top: 10px;
220
+ }
221
+
222
+ .udoc-ui-root .udoc-page-modal__field {
223
+ flex: 1 1 0;
224
+ display: flex;
225
+ flex-direction: column;
226
+ gap: 4px;
227
+ min-width: 0;
228
+ }
229
+
230
+ .udoc-ui-root .udoc-page-modal__field-label {
231
+ font-size: 12px;
232
+ color: var(--udoc-color-on-surface-variant);
233
+ }
234
+
235
+ .udoc-ui-root .udoc-page-modal__input {
236
+ width: 100%;
237
+ height: 32px;
238
+ padding: 0 8px;
239
+ border: 1px solid var(--udoc-color-outline);
240
+ border-radius: 6px;
241
+ background: transparent;
242
+ color: var(--udoc-color-on-surface);
243
+ font-size: 13px;
244
+ font-variant-numeric: tabular-nums;
245
+ box-sizing: border-box;
246
+ }
247
+
248
+ .udoc-ui-root .udoc-page-modal__input:focus,
249
+ .udoc-ui-root .udoc-page-modal__select:focus {
250
+ outline: none;
251
+ border-color: var(--udoc-color-primary);
252
+ }
253
+
254
+ .udoc-ui-root .udoc-page-modal__unit {
255
+ flex: 0 0 64px;
256
+ width: 64px;
257
+ }
258
+
259
+ .udoc-ui-root .udoc-page-modal__orient {
260
+ display: flex;
261
+ gap: 8px;
262
+ margin-top: 10px;
263
+ }
264
+
265
+ .udoc-ui-root .udoc-page-modal__orient-btn {
266
+ flex: 1 1 0;
267
+ height: 32px;
268
+ border: 1px solid var(--udoc-color-outline-variant);
269
+ border-radius: 6px;
270
+ background: transparent;
271
+ color: var(--udoc-color-on-surface-variant);
272
+ font-size: 13px;
273
+ cursor: pointer;
274
+ }
275
+
276
+ .udoc-ui-root .udoc-page-modal__orient-btn:hover {
277
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
278
+ }
279
+
280
+ .udoc-ui-root .udoc-page-modal__orient-btn--selected {
281
+ border-color: var(--udoc-color-primary);
282
+ color: var(--udoc-color-primary);
283
+ background-color: var(--udoc-state-selected);
284
+ }
285
+
286
+ .udoc-ui-root .udoc-page-modal__rotate {
287
+ display: flex;
288
+ gap: 8px;
289
+ }
290
+
291
+ .udoc-ui-root .udoc-page-modal__rotate-btn {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: 40px;
296
+ height: 32px;
297
+ border: 1px solid var(--udoc-color-outline-variant);
298
+ border-radius: 6px;
299
+ background: transparent;
300
+ color: var(--udoc-color-on-surface-variant);
301
+ cursor: pointer;
302
+ }
303
+
304
+ .udoc-ui-root .udoc-page-modal__rotate-btn:hover {
305
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
306
+ color: var(--udoc-color-on-surface);
307
+ }
308
+
309
+ .udoc-ui-root .udoc-page-modal__rotate-btn svg {
310
+ width: var(--udoc-btn-glyph);
311
+ height: var(--udoc-btn-glyph);
312
+ }
313
+
314
+ .udoc-ui-root .udoc-page-modal__footer {
315
+ display: flex;
316
+ justify-content: flex-end;
317
+ padding: 14px 16px;
318
+ border-top: 1px solid var(--udoc-color-outline-variant);
319
+ }
320
+
321
+ .udoc-ui-root .udoc-page-modal__apply {
322
+ height: 34px;
323
+ padding: 0 18px;
324
+ border: none;
325
+ border-radius: 6px;
326
+ background: var(--udoc-color-primary);
327
+ color: var(--udoc-color-on-primary);
328
+ font-size: 13px;
329
+ font-weight: 500;
330
+ cursor: pointer;
331
+ }
332
+
333
+ .udoc-ui-root .udoc-page-modal__apply:hover {
334
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
335
+ }
336
+
337
+ .udoc-ui-root .udoc-page-modal__apply:focus-visible {
338
+ outline: 2px solid var(--udoc-color-primary);
339
+ outline-offset: 2px;
340
+ }
341
+
342
+ /* --- New-Slide layout picker (NewSlideModal) --- */
343
+
344
+ .udoc-ui-root .udoc-slide-picker {
345
+ position: absolute;
346
+ inset: 0;
347
+ z-index: 100;
348
+ display: flex;
349
+ align-items: center;
350
+ justify-content: center;
351
+ }
352
+
353
+ .udoc-ui-root .udoc-slide-picker__backdrop {
354
+ position: absolute;
355
+ inset: 0;
356
+ background: var(--udoc-color-scrim);
357
+ }
358
+
359
+ .udoc-ui-root .udoc-slide-picker__dialog {
360
+ position: relative;
361
+ z-index: 1;
362
+ display: flex;
363
+ flex-direction: column;
364
+ width: min(760px, calc(100% - 32px));
365
+ max-height: calc(100% - 48px);
366
+ background: var(--udoc-color-surface-container-highest);
367
+ border: 1px solid var(--udoc-color-outline-variant);
368
+ border-radius: 8px;
369
+ box-shadow: var(--udoc-elevation-4);
370
+ }
371
+
372
+ .udoc-ui-root .udoc-slide-picker__header {
373
+ display: flex;
374
+ align-items: center;
375
+ justify-content: space-between;
376
+ padding: 14px 16px;
377
+ border-bottom: 1px solid var(--udoc-color-outline-variant);
378
+ }
379
+
380
+ .udoc-ui-root .udoc-slide-picker__heading {
381
+ margin: 0;
382
+ font-size: 15px;
383
+ font-weight: 600;
384
+ color: var(--udoc-color-on-surface);
385
+ }
386
+
387
+ .udoc-ui-root .udoc-slide-picker__close {
388
+ display: inline-flex;
389
+ align-items: center;
390
+ justify-content: center;
391
+ width: 28px;
392
+ height: 28px;
393
+ padding: 0;
394
+ border: none;
395
+ border-radius: 6px;
396
+ background: transparent;
397
+ color: var(--udoc-color-on-surface-variant);
398
+ cursor: pointer;
399
+ }
400
+
401
+ .udoc-ui-root .udoc-slide-picker__close:hover {
402
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
403
+ }
404
+
405
+ .udoc-ui-root .udoc-slide-picker__close svg {
406
+ width: var(--udoc-btn-glyph);
407
+ height: var(--udoc-btn-glyph);
408
+ }
409
+
410
+ .udoc-ui-root .udoc-slide-picker__grid {
411
+ display: grid;
412
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
413
+ gap: 14px;
414
+ padding: 16px;
415
+ overflow: auto;
416
+ }
417
+
418
+ .udoc-ui-root .udoc-slide-picker__cell {
419
+ display: block;
420
+ padding: 4px;
421
+ border: 1px solid var(--udoc-color-outline-variant);
422
+ border-radius: 6px;
423
+ background: var(--udoc-color-surface-container-high);
424
+ cursor: pointer;
425
+ }
426
+
427
+ .udoc-ui-root .udoc-slide-picker__cell:hover {
428
+ border-color: var(--udoc-color-primary);
429
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
430
+ }
431
+
432
+ .udoc-ui-root .udoc-slide-picker__cell:focus-visible {
433
+ outline: 2px solid var(--udoc-color-primary);
434
+ outline-offset: 1px;
435
+ }
436
+
437
+ .udoc-ui-root .udoc-slide-picker__canvas {
438
+ display: block;
439
+ width: 100%;
440
+ height: auto;
441
+ aspect-ratio: 16 / 9;
442
+ border-radius: 3px;
443
+ background: var(--udoc-color-surface);
444
+ box-shadow: 0 0 0 1px var(--udoc-color-outline-variant) inset;
445
+ }
446
+
447
+ /* Combobox — a typeable field: an outlined wrapper holding a text <input> and a
448
+ caret that opens the shared .udoc-menu listbox. The editable analogue of a
449
+ dropdown button; the outline is the same field signal as .udoc-btn--field (a
450
+ control that holds a value), and the wrapper carries it so both the input and
451
+ the caret sit inside one border. Used by the Text tab's font / size pickers so
452
+ a value outside the list can be typed. */
453
+ .udoc-ui-root .udoc-combobox {
454
+ position: relative;
455
+ display: inline-flex;
456
+ align-items: center;
457
+ height: var(--udoc-btn-h);
458
+ border: 1px solid var(--udoc-color-outline);
459
+ border-radius: var(--udoc-btn-radius);
460
+ background: transparent;
461
+ box-sizing: border-box;
462
+ }
463
+ /* The border is the field's own signal (like .udoc-btn--field's hover) — it
464
+ darkens on hover and while the input holds focus. */
465
+ .udoc-ui-root .udoc-combobox:hover,
466
+ .udoc-ui-root .udoc-combobox:focus-within {
467
+ border-color: var(--udoc-color-on-surface-variant);
468
+ }
469
+ .udoc-ui-root .udoc-combobox__input {
470
+ flex: 1 1 auto;
471
+ /* min-width:0 lets the flex input shrink to the field width instead of
472
+ forcing it wider (so a long font name scrolls within, not overflows). */
473
+ min-width: 0;
474
+ height: 100%;
475
+ padding: 0 var(--udoc-btn-pad-x);
476
+ border: none;
477
+ border-radius: var(--udoc-btn-radius) 0 0 var(--udoc-btn-radius);
478
+ background: transparent;
479
+ color: var(--udoc-color-on-surface);
480
+ font-size: var(--udoc-btn-font);
481
+ text-align: left;
482
+ }
483
+ .udoc-ui-root .udoc-combobox__input:focus {
484
+ outline: none;
485
+ }
486
+ /* The caret shares the button caret's 3│chevron│3 metrics and muted tint. */
487
+ .udoc-ui-root .udoc-combobox__caret {
488
+ display: inline-flex;
489
+ align-items: center;
490
+ justify-content: center;
491
+ flex: none;
492
+ height: 100%;
493
+ padding: 0 var(--udoc-caret-pad-x);
494
+ border: none;
495
+ border-radius: 0 var(--udoc-btn-radius) var(--udoc-btn-radius) 0;
496
+ background: transparent;
497
+ color: var(--udoc-color-on-surface-variant);
498
+ cursor: pointer;
499
+ }
500
+ .udoc-ui-root .udoc-combobox__caret > svg {
501
+ width: var(--udoc-caret);
502
+ height: var(--udoc-caret);
503
+ }
504
+ .udoc-ui-root .udoc-combobox__caret:hover {
505
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
506
+ }
507
+ /* Disabled field: the whole control dims, as a disabled button does, and the
508
+ caret stops taking clicks so the list can't open. */
509
+ .udoc-ui-root .udoc-combobox:has(.udoc-combobox__input:disabled) {
510
+ opacity: var(--udoc-state-disabled-opacity);
511
+ }
512
+ .udoc-ui-root .udoc-combobox:has(.udoc-combobox__input:disabled) .udoc-combobox__caret {
513
+ pointer-events: none;
514
+ }
515
+
516
+ /* Text tab's font picker — a fixed-width field so picking a different typeface
517
+ doesn't shift the Bold / Italic buttons beside it. The value shows the family
518
+ name in the UI font (no own-typeface preview — see mirrorFontField). */
519
+ .udoc-ui-root .udoc-font-select {
520
+ width: 116px;
521
+ }
522
+
523
+ /* Font picker rows: the name fills the row, cut short with an ellipsis. */
524
+ .udoc-ui-root .udoc-font-item .udoc-menu__item-label {
525
+ flex: 1 1 auto;
526
+ min-width: 0;
527
+ overflow: hidden;
528
+ white-space: nowrap;
529
+ text-overflow: ellipsis;
530
+ }
531
+ /* A specimen the browser can't draw itself — an embedded or bundled face,
532
+ rasterized by the engine. The PNG carries the glyph coverage in its alpha and
533
+ nothing in its color, so it goes on as a MASK over currentColor rather than as
534
+ an image: the row then picks up the theme's text color, the hover color and
535
+ the dark palette from the cascade, and one raster serves all of them.
536
+
537
+ The box is set inline, in CSS px, to whatever the engine measured the line at
538
+ (it is already rendered at the device pixel ratio behind that box), so the
539
+ mask draws 1:1 and never has to be scaled to fit. */
540
+ .udoc-ui-root .udoc-font-specimen {
541
+ display: inline-block;
542
+ vertical-align: middle;
543
+ background: currentColor;
544
+ -webkit-mask-image: var(--udoc-font-specimen);
545
+ mask-image: var(--udoc-font-specimen);
546
+ -webkit-mask-repeat: no-repeat;
547
+ mask-repeat: no-repeat;
548
+ -webkit-mask-size: 100% 100%;
549
+ mask-size: 100% 100%;
550
+ }
551
+ /* Font picker — virtualized for the large catalog (~2000 families): a bounded
552
+ scroll viewport holding a full-height sizer that only the visible rows float
553
+ over (absolutely positioned, their top set in JS). The row height is fixed and
554
+ must match FONT_ROW_H in Ribbon.ts. The width is explicit because the
555
+ absolutely-positioned rows can't give the panel an intrinsic width — wide
556
+ enough that most family names sit on one line before the ellipsis.
557
+
558
+ The scrolling is one level in, on udoc-font-scroll, rather than on the panel
559
+ itself. A native scrollbar is painted square into its element's padding box,
560
+ which the panel's own 8px corner radius does not clip — so a panel that
561
+ scrolled would show the scrollbar cutting straight across both right-hand
562
+ curves. Scrolling a child instead lets the panel clip it: overflow hidden plus
563
+ the radius rounds off everything inside, scrollbar included. The alternative,
564
+ styling the scrollbar to keep clear of the corners, would also switch
565
+ Chrome and Safari off their overlay scrollbars for this list. */
566
+ .udoc-ui-root .udoc-menu.udoc-font-menu {
567
+ width: 280px;
568
+ overflow: hidden;
569
+ /* The panel's usual top/bottom padding would inset the viewport inside it,
570
+ holding the scrollbar short of both edges. The viewport takes the padding
571
+ instead, so it fills the panel and the bar runs corner to corner. */
572
+ padding: 0;
573
+ }
574
+ .udoc-ui-root .udoc-font-scroll {
575
+ max-height: 320px;
576
+ padding: var(--udoc-menu-pad-y) 0;
577
+ overflow-y: auto;
578
+ overflow-x: hidden;
579
+ }
580
+ /* The divider between the font list's two sections — the families already
581
+ loaded, then the rest of the catalog. It rides on the first row
582
+ of the second section rather than sitting in a row of its own, so the virtual
583
+ list's fixed row height still describes every row.
584
+
585
+ Three classes, because the flat .udoc-menu__item resets border to none and,
586
+ at equal specificity, would win on order. */
587
+ .udoc-ui-root .udoc-font-menu .udoc-font-item--section {
588
+ border-top: 1px solid var(--udoc-color-outline-variant);
589
+ }
590
+ .udoc-ui-root .udoc-font-sizer {
591
+ position: relative;
592
+ width: 100%;
593
+ }
594
+ .udoc-ui-root .udoc-font-menu .udoc-font-item {
595
+ position: absolute;
596
+ left: 0;
597
+ right: 0;
598
+ height: 30px;
599
+ box-sizing: border-box;
600
+ padding-top: 0;
601
+ padding-bottom: 0;
602
+ }
603
+ .udoc-ui-root .udoc-menu__empty {
604
+ padding: 8px 14px;
605
+ color: var(--udoc-color-on-surface-variant);
606
+ }
607
+
608
+ /* Text tab's size field — a narrow fixed-width combobox (a point size is short),
609
+ so picking a different size doesn't shift the Bold / Italic buttons beside it. */
610
+ .udoc-ui-root .udoc-size-select {
611
+ width: 66px;
612
+ }
613
+ /* The sample IS the answer here — the markers as the list renders them — so it
614
+ is set in the text face at the row's own size, tracked out enough that
615
+ "1. 2. 3." reads as a sequence rather than one token. */
616
+ .udoc-ui-root .udoc-list-sample {
617
+ letter-spacing: 0.08em;
618
+ color: var(--udoc-color-on-surface);
619
+ }
620
+
621
+ /* === Advanced Fill / Line options dialog === */
622
+ .udoc-ui-root .udoc-paint-modal {
623
+ position: absolute;
624
+ inset: 0;
625
+ z-index: 100;
626
+ display: flex;
627
+ align-items: center;
628
+ justify-content: center;
629
+ }
630
+ .udoc-ui-root .udoc-paint-modal__backdrop {
631
+ position: absolute;
632
+ inset: 0;
633
+ background: var(--udoc-color-scrim);
634
+ }
635
+ .udoc-ui-root .udoc-paint-modal__dialog {
636
+ position: relative;
637
+ z-index: 1;
638
+ width: min(420px, calc(100% - 32px));
639
+ max-height: calc(100% - 32px);
640
+ overflow: auto;
641
+ background: var(--udoc-color-surface-container-highest);
642
+ border: 1px solid var(--udoc-color-outline-variant);
643
+ border-radius: 8px;
644
+ box-shadow: var(--udoc-elevation-4);
645
+ }
646
+ .udoc-ui-root .udoc-paint-modal__header {
647
+ display: flex;
648
+ align-items: center;
649
+ justify-content: space-between;
650
+ padding: 14px 16px;
651
+ border-bottom: 1px solid var(--udoc-color-outline-variant);
652
+ }
653
+ .udoc-ui-root .udoc-paint-modal__heading {
654
+ margin: 0;
655
+ font-size: 15px;
656
+ font-weight: 600;
657
+ color: var(--udoc-color-on-surface);
658
+ }
659
+ .udoc-ui-root .udoc-paint-modal__close {
660
+ display: inline-flex;
661
+ align-items: center;
662
+ justify-content: center;
663
+ width: 28px;
664
+ height: 28px;
665
+ padding: 0;
666
+ border: none;
667
+ border-radius: 6px;
668
+ background: transparent;
669
+ color: var(--udoc-color-on-surface-variant);
670
+ cursor: pointer;
671
+ }
672
+ .udoc-ui-root .udoc-paint-modal__close:hover {
673
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
674
+ }
675
+ .udoc-ui-root .udoc-paint-modal__close svg {
676
+ width: var(--udoc-btn-glyph);
677
+ height: var(--udoc-btn-glyph);
678
+ }
679
+ .udoc-ui-root .udoc-paint-modal__body {
680
+ padding: 16px;
681
+ }
682
+ .udoc-ui-root .udoc-paint-modal__placeholder {
683
+ margin: 0;
684
+ padding: 24px 16px;
685
+ text-align: center;
686
+ color: var(--udoc-color-on-surface-variant);
687
+ font-size: 13px;
688
+ line-height: 1.5;
689
+ border: 1px dashed var(--udoc-color-outline-variant);
690
+ border-radius: 6px;
691
+ }
692
+ .udoc-ui-root .udoc-paint-modal__footer {
693
+ display: flex;
694
+ justify-content: flex-end;
695
+ padding: 14px 16px;
696
+ border-top: 1px solid var(--udoc-color-outline-variant);
697
+ }
698
+ .udoc-ui-root .udoc-paint-modal__done {
699
+ height: 34px;
700
+ padding: 0 18px;
701
+ border: none;
702
+ border-radius: 6px;
703
+ background: var(--udoc-color-primary);
704
+ color: var(--udoc-color-on-primary);
705
+ font-size: 13px;
706
+ font-weight: 500;
707
+ cursor: pointer;
708
+ }
709
+ .udoc-ui-root .udoc-paint-modal__done:hover {
710
+ background-image: linear-gradient(var(--udoc-state-hover) 0 0);
711
+ }
712
+ .udoc-ui-root .udoc-paint-modal__done:focus-visible {
713
+ outline: 2px solid var(--udoc-color-primary);
714
+ outline-offset: 2px;
715
+ }
716
+
717
+ /* Rotation grip (a round handle floating above the top edge), shown only when a
718
+ single object is selected. Projected each frame, carries no pointer events —
719
+ edit mode's grips (grips.ts) hit-test it geometrically and start a rotate
720
+ drag. Its stem is an SVG line in the outline layer (behind the handle
721
+ squares). */
722
+ .udoc-ui-root .udoc-ui__rotate-handle {
723
+ position: absolute;
724
+ top: 0;
725
+ left: 0;
726
+ width: 10px;
727
+ height: 10px;
728
+ box-sizing: border-box;
729
+ background: #fff;
730
+ border: 1.5px solid var(--udoc-canvas-selection);
731
+ border-radius: 50%;
732
+ will-change: transform;
733
+ }
734
+ .udoc-ui-root .udoc-ui__rotate-stem {
735
+ stroke: var(--udoc-canvas-selection);
736
+ stroke-width: 1.5px;
737
+ }
738
+ /* Geometry grip (the yellow diamond Office draws for a preset's adjust
739
+ handles): reshapes the shape — a rounded rectangle's corner radius, an
740
+ arrow's head — rather than resizing its box, so it is deliberately a
741
+ different color and shape from the white resize squares. Drawn as a square
742
+ rotated 45deg by the layer's transform (which also centers it), so it needs
743
+ no border-radius of its own. Sits inside the box, where a miss would read as
744
+ a move, so it is hit-tested before the box itself. Carries no pointer
745
+ events, like the rest of the chrome. */
746
+ .udoc-ui-root .udoc-ui__adjust-handle {
747
+ position: absolute;
748
+ top: 0;
749
+ left: 0;
750
+ width: 9px;
751
+ height: 9px;
752
+ box-sizing: border-box;
753
+ background: #ffd34d;
754
+ border: 1.5px solid #b8860b;
755
+ will-change: transform;
756
+ }
757
+ `;
758
+ //# sourceMappingURL=styles.js.map