@openleaf-editor/ui 0.1.0-beta.1 → 0.1.0-beta.2

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 (53) hide show
  1. package/dist/content-css.d.ts +13 -0
  2. package/dist/content-css.d.ts.map +1 -0
  3. package/dist/content-css.js +57 -0
  4. package/dist/content-css.js.map +1 -0
  5. package/dist/dialog.d.ts +66 -19
  6. package/dist/dialog.d.ts.map +1 -1
  7. package/dist/dialog.js +198 -51
  8. package/dist/dialog.js.map +1 -1
  9. package/dist/floating.d.ts +25 -0
  10. package/dist/floating.d.ts.map +1 -0
  11. package/dist/floating.js +82 -0
  12. package/dist/floating.js.map +1 -0
  13. package/dist/help.d.ts +9 -0
  14. package/dist/help.d.ts.map +1 -0
  15. package/dist/help.js +73 -0
  16. package/dist/help.js.map +1 -0
  17. package/dist/i18n.d.ts +31 -0
  18. package/dist/i18n.d.ts.map +1 -0
  19. package/dist/i18n.js +89 -0
  20. package/dist/i18n.js.map +1 -0
  21. package/dist/icons.d.ts.map +1 -1
  22. package/dist/icons.js +4 -0
  23. package/dist/icons.js.map +1 -1
  24. package/dist/index.d.ts +8 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +8 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/items.d.ts +2 -0
  29. package/dist/items.d.ts.map +1 -1
  30. package/dist/items.js +43 -3
  31. package/dist/items.js.map +1 -1
  32. package/dist/menu.d.ts +56 -0
  33. package/dist/menu.d.ts.map +1 -0
  34. package/dist/menu.js +360 -0
  35. package/dist/menu.js.map +1 -0
  36. package/dist/openleaf.css +216 -0
  37. package/dist/overflow.d.ts +17 -0
  38. package/dist/overflow.d.ts.map +1 -0
  39. package/dist/overflow.js +138 -0
  40. package/dist/overflow.js.map +1 -0
  41. package/dist/pickers.d.ts +43 -0
  42. package/dist/pickers.d.ts.map +1 -0
  43. package/dist/pickers.js +52 -0
  44. package/dist/pickers.js.map +1 -0
  45. package/dist/styles.d.ts +1 -1
  46. package/dist/styles.d.ts.map +1 -1
  47. package/dist/styles.js +216 -0
  48. package/dist/styles.js.map +1 -1
  49. package/dist/toolbar.d.ts +20 -0
  50. package/dist/toolbar.d.ts.map +1 -1
  51. package/dist/toolbar.js +105 -17
  52. package/dist/toolbar.js.map +1 -1
  53. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAKlD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,GAAG,CAAA;AAEzC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,QAAQ,EA6C9C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAS,SAAS,EAAuC,CAAA;AAC1F,eAAO,MAAM,mBAAmB,EAAE,SAAS,SAAS,EAAsB,CAAA;AAC1E,eAAO,MAAM,mBAAmB,EAAE,SAAS,SAAS,EAUnD,CAAA;AA+BD,qBAAa,SAAS;;IACpB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;gBAOf,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;IAY5C,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI9B,OAAO,IAAI,IAAI;IAOf,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAYnF,KAAK,IAAI,IAAI;CAkEd;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,KAAK,GAAE,SAAS,QAAQ,EAAoB,GAC3C,SAAS,QAAQ,EAAE,CAarB;AAED,qBAAa,OAAO;;IAClB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;gBAWzB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,QAAQ,EACb,KAAK,GAAE,SAAS,QAAQ,EAAoB,EAC5C,MAAM,GAAE,MAAM,GAAG,IAAW;IAmB9B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM7B,OAAO,IAAI,IAAI;CAsFhB"}
package/dist/menu.js ADDED
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Menubar and popup menus.
3
+ *
4
+ * Built with `role="menubar"` / `role="menu"` rather than a toolbar, because
5
+ * the two widgets have different keyboard contracts: a toolbar is one tab stop
6
+ * of peer buttons, a menubar is a row of menus that open on Down/Enter and
7
+ * close on Escape. Mixing them is what makes "the File menu is also a toolbar
8
+ * button" feel broken to a screen reader.
9
+ *
10
+ * Items are toolbar ids. The same command a button runs is the command a menu
11
+ * item runs, so a host that hides the toolbar still has a complete Edit menu.
12
+ */
13
+ import { t, withLocale } from './i18n.js';
14
+ import { getToolbarItem } from './registry.js';
15
+ import { ensureStyles } from './styles.js';
16
+ export const DEFAULT_MENUBAR = [
17
+ {
18
+ id: 'edit',
19
+ label: 'Edit',
20
+ items: [
21
+ { id: 'undo' },
22
+ { id: 'redo' },
23
+ '|',
24
+ { id: 'bold' },
25
+ { id: 'italic' },
26
+ { id: 'underline' },
27
+ { id: 'strikethrough' },
28
+ { id: 'code' },
29
+ ],
30
+ },
31
+ {
32
+ id: 'insert',
33
+ label: 'Insert',
34
+ items: [{ id: 'link' }, { id: 'image' }, { id: 'horizontalRule' }, { id: 'insertTable' }],
35
+ },
36
+ {
37
+ id: 'format',
38
+ label: 'Format',
39
+ items: [
40
+ { id: 'alignLeft' },
41
+ { id: 'alignCenter' },
42
+ { id: 'alignRight' },
43
+ { id: 'alignJustify' },
44
+ '|',
45
+ { id: 'bulletList' },
46
+ { id: 'orderedList' },
47
+ { id: 'blockquote' },
48
+ { id: 'codeBlock' },
49
+ ],
50
+ },
51
+ {
52
+ id: 'view',
53
+ label: 'View',
54
+ items: [{ id: 'source' }, { id: 'fullscreen' }, { id: 'visualAids' }],
55
+ },
56
+ {
57
+ id: 'help',
58
+ label: 'Help',
59
+ items: [{ id: 'help' }],
60
+ },
61
+ ];
62
+ export const LINK_CONTEXT_ITEMS = [{ id: 'link' }, { id: 'unlink' }];
63
+ export const IMAGE_CONTEXT_ITEMS = [{ id: 'image' }];
64
+ export const TABLE_CONTEXT_ITEMS = [
65
+ { id: 'addRowBefore' },
66
+ { id: 'addRowAfter' },
67
+ { id: 'deleteRow' },
68
+ '|',
69
+ { id: 'addColumnBefore' },
70
+ { id: 'addColumnAfter' },
71
+ { id: 'deleteColumn' },
72
+ '|',
73
+ { id: 'deleteTable' },
74
+ ];
75
+ function invoke(spec, view, host) {
76
+ if (host.hasAttribute('readonly'))
77
+ return;
78
+ try {
79
+ if (spec.run) {
80
+ spec.run({ view, host });
81
+ return;
82
+ }
83
+ if (spec.command) {
84
+ spec.command(view.state, view.dispatch, view);
85
+ view.focus();
86
+ }
87
+ }
88
+ catch (error) {
89
+ console.error(`@openleaf-editor/ui: menu item "${spec.id}" threw`, error);
90
+ }
91
+ }
92
+ function enabled(spec, state, host) {
93
+ if (host.hasAttribute('readonly'))
94
+ return false;
95
+ if (spec.isEnabled) {
96
+ try {
97
+ return spec.isEnabled(state);
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ if (spec.command)
104
+ return spec.command(state);
105
+ return true;
106
+ }
107
+ export class PopupMenu {
108
+ el;
109
+ #doc;
110
+ #host;
111
+ #view = null;
112
+ #items = [];
113
+ #onClose;
114
+ constructor(host, doc) {
115
+ this.#host = host;
116
+ this.#doc = doc;
117
+ ensureStyles(doc);
118
+ this.el = doc.createElement('div');
119
+ this.el.className = 'ol-menu';
120
+ this.el.setAttribute('role', 'menu');
121
+ this.el.hidden = true;
122
+ this.el.addEventListener('keydown', this.#onKeydown);
123
+ this.el.addEventListener('click', this.#onClick);
124
+ }
125
+ attach(view) {
126
+ this.#view = view;
127
+ }
128
+ destroy() {
129
+ this.close();
130
+ this.el.removeEventListener('keydown', this.#onKeydown);
131
+ this.el.removeEventListener('click', this.#onClick);
132
+ this.el.remove();
133
+ }
134
+ get open() {
135
+ return !this.el.hidden;
136
+ }
137
+ show(items, x, y, onClose) {
138
+ this.#items = items;
139
+ this.#onClose = onClose;
140
+ this.#render();
141
+ this.el.hidden = false;
142
+ const hostBox = this.#host.getBoundingClientRect();
143
+ this.el.style.left = `${Math.max(0, x - hostBox.left)}px`;
144
+ this.el.style.top = `${Math.max(0, y - hostBox.top)}px`;
145
+ const first = this.el.querySelector('[role="menuitem"]');
146
+ first?.focus();
147
+ }
148
+ close() {
149
+ if (this.el.hidden)
150
+ return;
151
+ this.el.hidden = true;
152
+ this.el.replaceChildren();
153
+ const close = this.#onClose;
154
+ this.#onClose = undefined;
155
+ close?.();
156
+ }
157
+ #render() {
158
+ this.el.replaceChildren();
159
+ const view = this.#view;
160
+ if (!view)
161
+ return;
162
+ for (const entry of this.#items) {
163
+ if (entry === '|') {
164
+ const sep = this.#doc.createElement('div');
165
+ sep.setAttribute('role', 'separator');
166
+ sep.className = 'ol-menu-sep';
167
+ this.el.appendChild(sep);
168
+ continue;
169
+ }
170
+ const spec = getToolbarItem(entry.id);
171
+ if (!spec)
172
+ continue;
173
+ const button = this.#doc.createElement('button');
174
+ button.type = 'button';
175
+ button.className = 'ol-menu-item';
176
+ button.setAttribute('role', 'menuitem');
177
+ button.dataset['olId'] = spec.id;
178
+ button.textContent = t(entry.label ?? spec.label);
179
+ const isEnabled = enabled(spec, view.state, this.#host);
180
+ button.setAttribute('aria-disabled', isEnabled ? 'false' : 'true');
181
+ this.el.appendChild(button);
182
+ }
183
+ }
184
+ #onClick = (event) => {
185
+ const target = event.target?.closest('[data-ol-id]');
186
+ if (!target || target.getAttribute('aria-disabled') === 'true')
187
+ return;
188
+ const spec = getToolbarItem(target.dataset['olId'] ?? '');
189
+ const view = this.#view;
190
+ if (!spec || !view)
191
+ return;
192
+ this.close();
193
+ invoke(spec, view, this.#host);
194
+ };
195
+ #onKeydown = (event) => {
196
+ const items = [...this.el.querySelectorAll('[role="menuitem"]')];
197
+ const index = items.indexOf(event.target);
198
+ if (event.key === 'Escape') {
199
+ event.preventDefault();
200
+ this.close();
201
+ this.#view?.focus();
202
+ return;
203
+ }
204
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
205
+ event.preventDefault();
206
+ if (items.length === 0)
207
+ return;
208
+ const delta = event.key === 'ArrowDown' ? 1 : -1;
209
+ const next = items[(index + delta + items.length) % items.length];
210
+ next?.focus();
211
+ }
212
+ if (event.key === 'Enter' || event.key === ' ') {
213
+ event.preventDefault();
214
+ event.target.click();
215
+ }
216
+ };
217
+ }
218
+ /**
219
+ * The menus an integrator asked for, in the order they asked for them.
220
+ *
221
+ * `menubar` with no value means "give me the menubar", so an empty list is every
222
+ * default menu. Named ids are honoured as written: `menubar="edit help"` used to
223
+ * render Insert, Format and View as well, because the attribute was read as a
224
+ * boolean and the list thrown away. An unknown id is skipped rather than fatal,
225
+ * so a layout written against a later version degrades instead of breaking.
226
+ */
227
+ export function selectMenus(attr, menus = DEFAULT_MENUBAR) {
228
+ const ids = (attr ?? '')
229
+ .split(/[\s,]+/)
230
+ .map((id) => id.trim())
231
+ .filter((id) => id !== '');
232
+ if (ids.length === 0)
233
+ return menus;
234
+ const byId = new Map(menus.map((menu) => [menu.id, menu]));
235
+ const picked = [];
236
+ for (const id of ids) {
237
+ const menu = byId.get(id);
238
+ if (menu && !picked.includes(menu))
239
+ picked.push(menu);
240
+ }
241
+ return picked;
242
+ }
243
+ export class MenuBar {
244
+ el;
245
+ #doc;
246
+ #host;
247
+ #view = null;
248
+ #menus;
249
+ #popup;
250
+ #openId = null;
251
+ #locale;
252
+ constructor(host, doc, menus = DEFAULT_MENUBAR, locale = null) {
253
+ this.#host = host;
254
+ this.#doc = doc;
255
+ this.#menus = menus;
256
+ this.#locale = locale;
257
+ ensureStyles(doc);
258
+ this.el = doc.createElement('div');
259
+ this.el.className = 'ol-menubar';
260
+ this.el.setAttribute('role', 'menubar');
261
+ withLocale(locale, () => {
262
+ this.el.setAttribute('aria-label', t('Editor menu'));
263
+ });
264
+ this.#popup = new PopupMenu(host, doc);
265
+ this.#render();
266
+ this.el.addEventListener('keydown', this.#onKeydown);
267
+ doc.addEventListener('pointerdown', this.#onPointerDown, true);
268
+ }
269
+ mount(view) {
270
+ this.#view = view;
271
+ this.#popup.attach(view);
272
+ if (!this.#popup.el.isConnected)
273
+ this.#host.appendChild(this.#popup.el);
274
+ }
275
+ destroy() {
276
+ this.#doc.removeEventListener('pointerdown', this.#onPointerDown, true);
277
+ this.el.removeEventListener('keydown', this.#onKeydown);
278
+ this.#popup.destroy();
279
+ }
280
+ #render() {
281
+ withLocale(this.#locale, () => this.#renderScoped());
282
+ }
283
+ #renderScoped() {
284
+ this.el.replaceChildren();
285
+ for (const menu of this.#menus) {
286
+ const button = this.#doc.createElement('button');
287
+ button.type = 'button';
288
+ button.className = 'ol-menu-trigger';
289
+ button.setAttribute('role', 'menuitem');
290
+ button.setAttribute('aria-haspopup', 'true');
291
+ button.setAttribute('aria-expanded', 'false');
292
+ button.dataset['olMenu'] = menu.id;
293
+ button.textContent = t(menu.label);
294
+ button.addEventListener('click', () => this.#toggle(menu, button));
295
+ this.el.appendChild(button);
296
+ }
297
+ }
298
+ #toggle(menu, trigger) {
299
+ if (this.#openId === menu.id && this.#popup.open) {
300
+ this.#close();
301
+ return;
302
+ }
303
+ this.#open(menu, trigger);
304
+ }
305
+ #open(menu, trigger) {
306
+ this.#close();
307
+ this.#openId = menu.id;
308
+ trigger.setAttribute('aria-expanded', 'true');
309
+ const rect = trigger.getBoundingClientRect();
310
+ this.#popup.show(menu.items, rect.left, rect.bottom + 2, () => {
311
+ trigger.setAttribute('aria-expanded', 'false');
312
+ this.#openId = null;
313
+ });
314
+ }
315
+ #close() {
316
+ this.#popup.close();
317
+ for (const button of this.el.querySelectorAll('[aria-expanded]')) {
318
+ button.setAttribute('aria-expanded', 'false');
319
+ }
320
+ this.#openId = null;
321
+ }
322
+ #onKeydown = (event) => {
323
+ const triggers = [...this.el.querySelectorAll('.ol-menu-trigger')];
324
+ const index = triggers.indexOf(event.target);
325
+ if (index < 0)
326
+ return;
327
+ if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {
328
+ event.preventDefault();
329
+ const delta = event.key === 'ArrowRight' ? 1 : -1;
330
+ const next = triggers[(index + delta + triggers.length) % triggers.length];
331
+ next?.focus();
332
+ if (this.#popup.open && next) {
333
+ const menu = this.#menus.find((m) => m.id === next.dataset['olMenu']);
334
+ if (menu)
335
+ this.#open(menu, next);
336
+ }
337
+ }
338
+ if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {
339
+ event.preventDefault();
340
+ const menu = this.#menus.find((m) => m.id === triggers[index]?.dataset['olMenu']);
341
+ const trigger = triggers[index];
342
+ if (menu && trigger)
343
+ this.#open(menu, trigger);
344
+ }
345
+ if (event.key === 'Escape') {
346
+ event.preventDefault();
347
+ this.#close();
348
+ this.#view?.focus();
349
+ }
350
+ };
351
+ #onPointerDown = (event) => {
352
+ if (!this.#popup.open)
353
+ return;
354
+ const target = event.target;
355
+ if (target && (this.el.contains(target) || this.#popup.el.contains(target)))
356
+ return;
357
+ this.#close();
358
+ };
359
+ }
360
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,cAAc,EAAwB,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAgB1C,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,MAAM,EAAE;YACd,EAAE,EAAE,EAAE,MAAM,EAAE;YACd,GAAG;YACH,EAAE,EAAE,EAAE,MAAM,EAAE;YACd,EAAE,EAAE,EAAE,QAAQ,EAAE;YAChB,EAAE,EAAE,EAAE,WAAW,EAAE;YACnB,EAAE,EAAE,EAAE,eAAe,EAAE;YACvB,EAAE,EAAE,EAAE,MAAM,EAAE;SACf;KACF;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;KAC1F;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,WAAW,EAAE;YACnB,EAAE,EAAE,EAAE,aAAa,EAAE;YACrB,EAAE,EAAE,EAAE,YAAY,EAAE;YACpB,EAAE,EAAE,EAAE,cAAc,EAAE;YACtB,GAAG;YACH,EAAE,EAAE,EAAE,YAAY,EAAE;YACpB,EAAE,EAAE,EAAE,aAAa,EAAE;YACrB,EAAE,EAAE,EAAE,YAAY,EAAE;YACpB,EAAE,EAAE,EAAE,WAAW,EAAE;SACpB;KACF;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;KACtE;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;KACxB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAyB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAyB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD,EAAE,EAAE,EAAE,cAAc,EAAE;IACtB,EAAE,EAAE,EAAE,aAAa,EAAE;IACrB,EAAE,EAAE,EAAE,WAAW,EAAE;IACnB,GAAG;IACH,EAAE,EAAE,EAAE,iBAAiB,EAAE;IACzB,EAAE,EAAE,EAAE,gBAAgB,EAAE;IACxB,EAAE,EAAE,EAAE,cAAc,EAAE;IACtB,GAAG;IACH,EAAE,EAAE,EAAE,aAAa,EAAE;CACtB,CAAA;AAED,SAAS,MAAM,CAAC,IAAqB,EAAE,IAAgB,EAAE,IAAiB;IACxE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAAE,OAAM;IACzC,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAqB,EAAE,KAAkB,EAAE,IAAiB;IAC3E,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,OAAO,SAAS;IACX,EAAE,CAAgB;IAC3B,IAAI,CAAU;IACd,KAAK,CAAa;IAClB,KAAK,GAAsB,IAAI,CAAA;IAC/B,MAAM,GAAyB,EAAE,CAAA;IACjC,QAAQ,CAA0B;IAElC,YAAY,IAAiB,EAAE,GAAa;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,YAAY,CAAC,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,CAAC,IAAgB;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAA;IAClB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,IAAI,CAAC,KAA2B,EAAE,CAAS,EAAE,CAAS,EAAE,OAAoB;QAC1E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAClD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA;QACzD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAc,mBAAmB,CAAC,CAAA;QACrE,KAAK,EAAE,KAAK,EAAE,CAAA;IAChB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM;YAAE,OAAM;QAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,KAAK,EAAE,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBAC1C,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;gBACrC,GAAG,CAAC,SAAS,GAAG,aAAa,CAAA;gBAC7B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBACxB,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACrC,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;YACtB,MAAM,CAAC,SAAS,GAAG,cAAc,CAAA;YACjC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;YAChC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACvD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAClE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,QAAQ,GAAG,CAAC,KAAiB,EAAQ,EAAE;QACrC,MAAM,MAAM,GAAI,KAAK,CAAC,MAA6B,EAAE,OAAO,CAAc,cAAc,CAAC,CAAA;QACzF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;YAAE,OAAM;QACtE,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,UAAU,GAAG,CAAC,KAAoB,EAAQ,EAAE;QAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,CAAA;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAA;QACxD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAA;YACnB,OAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACzD,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YACjE,IAAI,EAAE,KAAK,EAAE,CAAA;QACf,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,KAAK,CAAC,cAAc,EAAE,CACrB;YAAC,KAAK,CAAC,MAAsB,CAAC,KAAK,EAAE,CAAA;QACxC,CAAC;IACH,CAAC,CAAA;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,IAA+B,EAC/B,QAA6B,eAAe;IAE5C,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SACrB,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACtB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,OAAO,OAAO;IACT,EAAE,CAAgB;IAC3B,IAAI,CAAU;IACd,KAAK,CAAa;IAClB,KAAK,GAAsB,IAAI,CAAA;IAC/B,MAAM,CAAqB;IAC3B,MAAM,CAAW;IACjB,OAAO,GAAkB,IAAI,CAAA;IAE7B,OAAO,CAAe;IAEtB,YACE,IAAiB,EACjB,GAAa,EACb,QAA6B,eAAe,EAC5C,SAAwB,IAAI;QAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,YAAY,CAAC,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACvC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW;YAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QACvE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;IAED,OAAO;QACL,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,aAAa;QACX,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAA;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;YACtB,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAA;YACpC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACvC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;YAC7C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;YAClC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;YAClE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAc,EAAE,OAA0B;QAChD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAA;YACb,OAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,IAAc,EAAE,OAA0B;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAA;QACtB,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE;YAC5D,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;YAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,UAAU,GAAG,CAAC,KAAoB,EAAQ,EAAE;QAC1C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAoB,kBAAkB,CAAC,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAA2B,CAAC,CAAA;QACjE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAM;QACrB,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC5D,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC1E,IAAI,EAAE,KAAK,EAAE,CAAA;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACrE,IAAI,IAAI;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC5E,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;YACjF,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,IAAI,IAAI,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,MAAM,EAAE,CAAA;YACb,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IAED,cAAc,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAM;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;QAC1C,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAAE,OAAM;QACnF,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC,CAAA;CACF"}
package/dist/openleaf.css CHANGED
@@ -31,6 +31,7 @@
31
31
  --ol-focus-offset: var(--openleaf-focus-offset, 1px);
32
32
 
33
33
  display: block;
34
+ position: relative;
34
35
  color: var(--ol-text);
35
36
  }
36
37
 
@@ -306,6 +307,15 @@
306
307
  position: relative;
307
308
  }
308
309
 
310
+ /* Presentational valign is otherwise beaten by the rule above, which would
311
+ make the cell-properties dialog a no-op on screen. */
312
+ .ol-editor .ol-content .ProseMirror td[valign="middle"],
313
+ .ol-editor .ol-content .ProseMirror th[valign="middle"] { vertical-align: middle; }
314
+ .ol-editor .ol-content .ProseMirror td[valign="bottom"],
315
+ .ol-editor .ol-content .ProseMirror th[valign="bottom"] { vertical-align: bottom; }
316
+ .ol-editor .ol-content .ProseMirror td[valign="baseline"],
317
+ .ol-editor .ol-content .ProseMirror th[valign="baseline"] { vertical-align: baseline; }
318
+
309
319
  .ol-editor .ol-content .ProseMirror th {
310
320
  background: var(--ol-surface-hover);
311
321
  font-weight: 600;
@@ -340,6 +350,47 @@
340
350
  cursor: col-resize;
341
351
  }
342
352
 
353
+ .ol-editor .ol-content .ProseMirror img.ol-float-left {
354
+ float: left;
355
+ margin: 0 1em 0.5em 0;
356
+ }
357
+ .ol-editor .ol-content .ProseMirror img.ol-float-right {
358
+ float: right;
359
+ margin: 0 0 0.5em 1em;
360
+ }
361
+ .ol-editor .ol-content .ProseMirror img.ol-align-center {
362
+ display: block;
363
+ margin: 0 auto 0.5em;
364
+ }
365
+ .ol-editor .ol-content .ProseMirror figure {
366
+ margin: 0 0 1em;
367
+ }
368
+ .ol-editor .ol-content .ProseMirror figcaption {
369
+ font-size: .9em;
370
+ opacity: .8;
371
+ margin-top: .35em;
372
+ }
373
+ .ol-editor .ol-content .ProseMirror details {
374
+ border: 1px solid var(--ol-border);
375
+ border-radius: var(--ol-radius);
376
+ padding: .5em .75em;
377
+ margin: 0 0 1em;
378
+ }
379
+ .ol-editor .ol-content .ProseMirror summary {
380
+ cursor: pointer;
381
+ font-weight: 600;
382
+ }
383
+ .ol-editor .ol-content .ProseMirror hr.ol-pagebreak {
384
+ border: 0;
385
+ border-top: 2px dashed var(--ol-border);
386
+ margin: 1.5em 0;
387
+ }
388
+ .ol-editor .ol-content .ProseMirror iframe,
389
+ .ol-editor .ol-content .ProseMirror video,
390
+ .ol-editor .ol-content .ProseMirror audio {
391
+ max-width: 100%;
392
+ }
393
+
343
394
  /* Preserved-but-unrecognised markup, surfaced rather than hidden. */
344
395
  .ol-editor .ol-content .ProseMirror-selectednode {
345
396
  outline: 2px solid var(--ol-focus);
@@ -388,6 +439,171 @@
388
439
  border: 0;
389
440
  }
390
441
 
442
+ /* Menubar, menus, floating chrome, visual aids, fullscreen, inline. */
443
+ .ol-editor .ol-menubar {
444
+ display: flex;
445
+ flex-wrap: wrap;
446
+ gap: var(--ol-gap);
447
+ box-sizing: border-box;
448
+ margin: 0;
449
+ padding: 2px 4px;
450
+ border: 1px solid var(--ol-border);
451
+ border-bottom: 0;
452
+ border-radius: var(--ol-radius) var(--ol-radius) 0 0;
453
+ background: var(--ol-surface);
454
+ position: relative;
455
+ z-index: var(--ol-z);
456
+ }
457
+ .ol-editor .ol-menubar + .ol-toolbar {
458
+ border-radius: 0;
459
+ }
460
+ .ol-editor .ol-menu-trigger {
461
+ box-sizing: border-box;
462
+ margin: 0;
463
+ padding: 4px 8px;
464
+ border: 1px solid transparent;
465
+ border-radius: var(--ol-radius);
466
+ background: transparent;
467
+ color: var(--ol-text);
468
+ font: inherit;
469
+ font-family: var(--ol-font);
470
+ font-size: var(--ol-font-size);
471
+ cursor: pointer;
472
+ appearance: none;
473
+ }
474
+ .ol-editor .ol-menu-trigger:hover,
475
+ .ol-editor .ol-menu-trigger[aria-expanded="true"] {
476
+ background: var(--ol-surface-hover);
477
+ }
478
+ .ol-editor .ol-menu-trigger:focus-visible {
479
+ outline: var(--ol-focus-width) solid var(--ol-focus);
480
+ outline-offset: var(--ol-focus-offset);
481
+ }
482
+ .ol-editor .ol-menu {
483
+ position: absolute;
484
+ z-index: calc(var(--ol-z) + 20);
485
+ min-width: 12rem;
486
+ margin: 0;
487
+ padding: 4px;
488
+ border: 1px solid var(--ol-border);
489
+ border-radius: var(--ol-radius);
490
+ background: var(--ol-surface);
491
+ box-shadow: 0 8px 24px rgb(0 0 0 / 12%);
492
+ }
493
+ .ol-editor .ol-menu-item {
494
+ display: block;
495
+ box-sizing: border-box;
496
+ width: 100%;
497
+ margin: 0;
498
+ padding: 6px 10px;
499
+ border: 0;
500
+ border-radius: var(--ol-radius);
501
+ background: transparent;
502
+ color: var(--ol-text);
503
+ font: inherit;
504
+ font-family: var(--ol-font);
505
+ font-size: var(--ol-font-size);
506
+ text-align: start;
507
+ cursor: pointer;
508
+ appearance: none;
509
+ }
510
+ .ol-editor .ol-menu-item:hover,
511
+ .ol-editor .ol-menu-item:focus-visible {
512
+ background: var(--ol-surface-hover);
513
+ outline: none;
514
+ }
515
+ .ol-editor .ol-menu-item[aria-disabled="true"] {
516
+ opacity: 0.4;
517
+ cursor: default;
518
+ }
519
+ .ol-editor .ol-menu-sep {
520
+ height: 1px;
521
+ margin: 4px 0;
522
+ background: var(--ol-border);
523
+ }
524
+ .ol-editor .ol-toolbar.ol-floating {
525
+ position: absolute;
526
+ flex-wrap: nowrap;
527
+ border: 1px solid var(--ol-border);
528
+ border-radius: var(--ol-radius);
529
+ box-shadow: 0 8px 24px rgb(0 0 0 / 12%);
530
+ z-index: calc(var(--ol-z) + 10);
531
+ }
532
+ .ol-editor .ol-toolbar.ol-toolbar--overflow {
533
+ flex-wrap: nowrap;
534
+ overflow: hidden;
535
+ }
536
+ .ol-editor.ol-visual-aids .ol-empty-block {
537
+ outline: 1px dashed var(--ol-border);
538
+ outline-offset: 2px;
539
+ min-height: 1.2em;
540
+ }
541
+ .ol-editor.ol-visual-aids .ol-nbsp {
542
+ background: color-mix(in srgb, var(--ol-accent) 25%, transparent);
543
+ box-shadow: inset 0 -1px 0 var(--ol-accent);
544
+ }
545
+ .ol-editor.ol-visual-aids .ol-hidden-structure {
546
+ outline: 1px dotted var(--ol-accent);
547
+ outline-offset: 2px;
548
+ }
549
+ .ol-editor .ol-noneditable {
550
+ cursor: default;
551
+ background: repeating-linear-gradient(
552
+ -45deg,
553
+ transparent,
554
+ transparent 6px,
555
+ color-mix(in srgb, var(--ol-border) 35%, transparent) 6px,
556
+ color-mix(in srgb, var(--ol-border) 35%, transparent) 7px
557
+ );
558
+ }
559
+ .ol-editor.ol-fullscreen {
560
+ position: fixed;
561
+ inset: 0;
562
+ z-index: 2147483000;
563
+ margin: 0;
564
+ border-radius: 0;
565
+ background: var(--ol-surface);
566
+ display: flex;
567
+ flex-direction: column;
568
+ }
569
+ .ol-editor.ol-fullscreen .ol-content,
570
+ .ol-editor.ol-fullscreen .ol-source {
571
+ flex: 1 1 auto;
572
+ min-height: 0;
573
+ overflow: auto;
574
+ }
575
+ .ol-editor.ol-autoresize .ol-content .ProseMirror {
576
+ overflow: hidden;
577
+ }
578
+ .ol-editor.ol-inline:not(.ol-inline-active) .ol-toolbar,
579
+ .ol-editor.ol-inline:not(.ol-inline-active) .ol-menubar {
580
+ position: absolute;
581
+ width: 1px;
582
+ height: 1px;
583
+ overflow: hidden;
584
+ clip: rect(0 0 0 0);
585
+ clip-path: inset(50%);
586
+ }
587
+ .ol-editor.ol-inline .ol-content {
588
+ border-radius: var(--ol-radius);
589
+ }
590
+ .ol-help-table {
591
+ width: 100%;
592
+ border-collapse: collapse;
593
+ font: inherit;
594
+ }
595
+ .ol-help-table th,
596
+ .ol-help-table td {
597
+ padding: 4px 8px;
598
+ text-align: start;
599
+ vertical-align: top;
600
+ border-bottom: 1px solid var(--openleaf-color-border, #d1d9e0);
601
+ }
602
+ .ol-help-table th {
603
+ font-weight: 600;
604
+ white-space: nowrap;
605
+ }
606
+
391
607
  /* Coarse pointers get a larger target. WCAG 2.2 SC 2.5.8 asks for 24x24 CSS px
392
608
  minimum; 32 clears that on a mouse and 40 is comfortable on a thumb. */
393
609
  @media (pointer: coarse) {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Collapse overflowing toolbar groups into a "More" menu.
3
+ *
4
+ * Wrapping is the default for a reason: a control that moved behind a click is
5
+ * a control the author does not have. Overflow is therefore opt-in. When it is
6
+ * on, groups that do not fit the current width are hidden in the bar and
7
+ * offered in a menu at the end, so a narrow CMS sidebar still has every item
8
+ * without a two-row bar.
9
+ */
10
+ export declare class ToolbarOverflow {
11
+ #private;
12
+ constructor(toolbar: HTMLElement, host: HTMLElement, doc: Document);
13
+ reattach(): void;
14
+ destroy(): void;
15
+ layout(): void;
16
+ }
17
+ //# sourceMappingURL=overflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../src/overflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,qBAAa,eAAe;;gBAOd,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;IAmClE,QAAQ,IAAI,IAAI;IAKhB,OAAO,IAAI,IAAI;IAQf,MAAM,IAAI,IAAI;CA6Ef"}