@docmentis/udoc-editor 0.0.0-stage → 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.
- package/LICENSE-APACHE +202 -0
- package/LICENSE-MIT +21 -0
- package/README.md +47 -2
- package/dist/arrange.d.ts +37 -0
- package/dist/arrange.d.ts.map +1 -0
- package/dist/arrange.js +431 -0
- package/dist/arrange.js.map +1 -0
- package/dist/clipboard.d.ts +12 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +101 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/commands.d.ts +12 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +225 -0
- package/dist/commands.js.map +1 -0
- package/dist/components/ComboBox.d.ts +38 -0
- package/dist/components/ComboBox.d.ts.map +1 -0
- package/dist/components/ComboBox.js +57 -0
- package/dist/components/ComboBox.js.map +1 -0
- package/dist/components/ModeSwitch.d.ts +15 -0
- package/dist/components/ModeSwitch.d.ts.map +1 -0
- package/dist/components/ModeSwitch.js +94 -0
- package/dist/components/ModeSwitch.js.map +1 -0
- package/dist/components/NewSlideModal.d.ts +41 -0
- package/dist/components/NewSlideModal.d.ts.map +1 -0
- package/dist/components/NewSlideModal.js +136 -0
- package/dist/components/NewSlideModal.js.map +1 -0
- package/dist/components/PageControls.d.ts +78 -0
- package/dist/components/PageControls.d.ts.map +1 -0
- package/dist/components/PageControls.js +201 -0
- package/dist/components/PageControls.js.map +1 -0
- package/dist/components/PageSettingsModal.d.ts +27 -0
- package/dist/components/PageSettingsModal.d.ts.map +1 -0
- package/dist/components/PageSettingsModal.js +273 -0
- package/dist/components/PageSettingsModal.js.map +1 -0
- package/dist/components/PaintOptionsModal.d.ts +19 -0
- package/dist/components/PaintOptionsModal.d.ts.map +1 -0
- package/dist/components/PaintOptionsModal.js +103 -0
- package/dist/components/PaintOptionsModal.js.map +1 -0
- package/dist/components/TextControls.d.ts +49 -0
- package/dist/components/TextControls.d.ts.map +1 -0
- package/dist/components/TextControls.js +452 -0
- package/dist/components/TextControls.js.map +1 -0
- package/dist/context-menu.d.ts +46 -0
- package/dist/context-menu.d.ts.map +1 -0
- package/dist/context-menu.js +144 -0
- package/dist/context-menu.js.map +1 -0
- package/dist/edit-client.d.ts +121 -0
- package/dist/edit-client.d.ts.map +1 -0
- package/dist/edit-client.js +154 -0
- package/dist/edit-client.js.map +1 -0
- package/dist/edit-command.d.ts +7 -0
- package/dist/edit-command.d.ts.map +1 -0
- package/dist/edit-command.js +18 -0
- package/dist/edit-command.js.map +1 -0
- package/dist/edit-mode.d.ts +19 -0
- package/dist/edit-mode.d.ts.map +1 -0
- package/dist/edit-mode.js +214 -0
- package/dist/edit-mode.js.map +1 -0
- package/dist/editor.d.ts +101 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +101 -0
- package/dist/editor.js.map +1 -0
- package/dist/fonts/faces.d.ts +28 -0
- package/dist/fonts/faces.d.ts.map +1 -0
- package/dist/fonts/faces.js +38 -0
- package/dist/fonts/faces.js.map +1 -0
- package/dist/fonts/preview.d.ts +98 -0
- package/dist/fonts/preview.d.ts.map +1 -0
- package/dist/fonts/preview.js +149 -0
- package/dist/fonts/preview.js.map +1 -0
- package/dist/formatting-marks.d.ts +23 -0
- package/dist/formatting-marks.d.ts.map +1 -0
- package/dist/formatting-marks.js +55 -0
- package/dist/formatting-marks.js.map +1 -0
- package/dist/grips.d.ts +14 -0
- package/dist/grips.d.ts.map +1 -0
- package/dist/grips.js +459 -0
- package/dist/grips.js.map +1 -0
- package/dist/i18n/ar.d.ts +4 -0
- package/dist/i18n/ar.d.ts.map +1 -0
- package/dist/i18n/ar.js +175 -0
- package/dist/i18n/ar.js.map +1 -0
- package/dist/i18n/de.d.ts +4 -0
- package/dist/i18n/de.d.ts.map +1 -0
- package/dist/i18n/de.js +175 -0
- package/dist/i18n/de.js.map +1 -0
- package/dist/i18n/en.d.ts +5 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +176 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/es.d.ts +4 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +175 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/fr.d.ts +4 -0
- package/dist/i18n/fr.d.ts.map +1 -0
- package/dist/i18n/fr.js +175 -0
- package/dist/i18n/fr.js.map +1 -0
- package/dist/i18n/index.d.ts +21 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +42 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/ja.d.ts +4 -0
- package/dist/i18n/ja.d.ts.map +1 -0
- package/dist/i18n/ja.js +175 -0
- package/dist/i18n/ja.js.map +1 -0
- package/dist/i18n/ko.d.ts +4 -0
- package/dist/i18n/ko.d.ts.map +1 -0
- package/dist/i18n/ko.js +175 -0
- package/dist/i18n/ko.js.map +1 -0
- package/dist/i18n/messages.d.ts +316 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +2 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/i18n/pt-BR.d.ts +4 -0
- package/dist/i18n/pt-BR.d.ts.map +1 -0
- package/dist/i18n/pt-BR.js +175 -0
- package/dist/i18n/pt-BR.js.map +1 -0
- package/dist/i18n/ru.d.ts +4 -0
- package/dist/i18n/ru.d.ts.map +1 -0
- package/dist/i18n/ru.js +175 -0
- package/dist/i18n/ru.js.map +1 -0
- package/dist/i18n/zh-CN.d.ts +4 -0
- package/dist/i18n/zh-CN.d.ts.map +1 -0
- package/dist/i18n/zh-CN.js +175 -0
- package/dist/i18n/zh-CN.js.map +1 -0
- package/dist/i18n/zh-TW.d.ts +4 -0
- package/dist/i18n/zh-TW.d.ts.map +1 -0
- package/dist/i18n/zh-TW.js +175 -0
- package/dist/i18n/zh-TW.js.map +1 -0
- package/dist/icons.d.ts +97 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +103 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/insert.d.ts +21 -0
- package/dist/insert.d.ts.map +1 -0
- package/dist/insert.js +129 -0
- package/dist/insert.js.map +1 -0
- package/dist/menu-action.d.ts +73 -0
- package/dist/menu-action.d.ts.map +1 -0
- package/dist/menu-action.js +89 -0
- package/dist/menu-action.js.map +1 -0
- package/dist/mode.d.ts +21 -0
- package/dist/mode.d.ts.map +1 -0
- package/dist/mode.js +17 -0
- package/dist/mode.js.map +1 -0
- package/dist/new-slide.d.ts +21 -0
- package/dist/new-slide.d.ts.map +1 -0
- package/dist/new-slide.js +63 -0
- package/dist/new-slide.js.map +1 -0
- package/dist/page-controls.d.ts +20 -0
- package/dist/page-controls.d.ts.map +1 -0
- package/dist/page-controls.js +99 -0
- package/dist/page-controls.js.map +1 -0
- package/dist/paint.d.ts +52 -0
- package/dist/paint.d.ts.map +1 -0
- package/dist/paint.js +262 -0
- package/dist/paint.js.map +1 -0
- package/dist/ruler.d.ts +10 -0
- package/dist/ruler.d.ts.map +1 -0
- package/dist/ruler.js +97 -0
- package/dist/ruler.js.map +1 -0
- package/dist/state.d.ts +85 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +28 -0
- package/dist/state.js.map +1 -0
- package/dist/styles.d.ts +2 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +758 -0
- package/dist/styles.js.map +1 -0
- package/dist/tabs.d.ts +11 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +153 -0
- package/dist/tabs.js.map +1 -0
- package/dist/text-format.d.ts +114 -0
- package/dist/text-format.d.ts.map +1 -0
- package/dist/text-format.js +315 -0
- package/dist/text-format.js.map +1 -0
- package/dist/tools.d.ts +35 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +41 -0
- package/dist/tools.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/dist/worker/handlers.d.ts +11 -0
- package/dist/worker/handlers.d.ts.map +1 -0
- package/dist/worker/handlers.js +127 -0
- package/dist/worker/handlers.js.map +1 -0
- package/dist/worker/protocol.d.ts +190 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +2 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/worker-source.d.ts +3 -0
- package/dist/worker/worker-source.d.ts.map +1 -0
- package/dist/worker/worker-source.js +11 -0
- package/dist/worker/worker.d.ts +2 -0
- package/dist/worker/worker.d.ts.map +1 -0
- package/dist/worker/worker.js +6 -0
- package/dist/worker/worker.js.map +1 -0
- package/package.json +69 -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
|