@openeditor/ui 0.0.5 → 0.0.7

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/README.md CHANGED
@@ -7,9 +7,10 @@ Optional styled UI components for OpenEditor.
7
7
  - `OpenEditor` for a composed editor surface
8
8
  - `OpenEditorSlashMenu` for the default slash menu UI
9
9
  - `OpenEditorSelectionBubble` for inline formatting UI
10
+ - `OpenEditorButton`, `OpenEditorToggle`, `OpenEditorToggleGroup`, and `OpenEditorInput` as Base UI-backed app primitives
10
11
  - `OpenEditorContent` and `useOpenEditorController` re-exported from `@openeditor/react`
11
12
 
12
- The UI package owns the default CSS and overlay rendering. Menus portal to `document.body` by default so app-shell transforms and filters do not distort viewport-based positioning.
13
+ The UI package owns the default CSS and interactive primitives. User-facing controls are built on Base UI so focus management, keyboard behavior, dismiss behavior, and overlay positioning share one foundation.
13
14
 
14
15
  ## Quick Start
15
16
 
package/dist/index.css CHANGED
@@ -11,6 +11,50 @@
11
11
  .oe-viewer {
12
12
  color: var(--oe-text, #171717);
13
13
  }
14
+ .oe-editor-surface,
15
+ .oe-prosemirror,
16
+ .oe-viewer,
17
+ .oe-slash-menu,
18
+ .oe-dialog {
19
+ scrollbar-color: color-mix(in srgb, var(--oe-muted, #737373) 72%, transparent) transparent;
20
+ scrollbar-width: thin;
21
+ }
22
+ .oe-editor-surface::-webkit-scrollbar,
23
+ .oe-editor-surface *::-webkit-scrollbar,
24
+ .oe-prosemirror::-webkit-scrollbar,
25
+ .oe-viewer::-webkit-scrollbar,
26
+ .oe-slash-menu::-webkit-scrollbar,
27
+ .oe-dialog::-webkit-scrollbar {
28
+ height: 10px;
29
+ width: 10px;
30
+ }
31
+ .oe-editor-surface::-webkit-scrollbar-track,
32
+ .oe-editor-surface *::-webkit-scrollbar-track,
33
+ .oe-prosemirror::-webkit-scrollbar-track,
34
+ .oe-viewer::-webkit-scrollbar-track,
35
+ .oe-slash-menu::-webkit-scrollbar-track,
36
+ .oe-dialog::-webkit-scrollbar-track {
37
+ background: transparent;
38
+ }
39
+ .oe-editor-surface::-webkit-scrollbar-thumb,
40
+ .oe-editor-surface *::-webkit-scrollbar-thumb,
41
+ .oe-prosemirror::-webkit-scrollbar-thumb,
42
+ .oe-viewer::-webkit-scrollbar-thumb,
43
+ .oe-slash-menu::-webkit-scrollbar-thumb,
44
+ .oe-dialog::-webkit-scrollbar-thumb {
45
+ background-clip: content-box;
46
+ background-color: color-mix(in srgb, var(--oe-muted, #737373) 58%, transparent);
47
+ border: 3px solid transparent;
48
+ border-radius: 999px;
49
+ }
50
+ .oe-editor-surface::-webkit-scrollbar-thumb:hover,
51
+ .oe-editor-surface *::-webkit-scrollbar-thumb:hover,
52
+ .oe-prosemirror::-webkit-scrollbar-thumb:hover,
53
+ .oe-viewer::-webkit-scrollbar-thumb:hover,
54
+ .oe-slash-menu::-webkit-scrollbar-thumb:hover,
55
+ .oe-dialog::-webkit-scrollbar-thumb:hover {
56
+ background-color: color-mix(in srgb, var(--oe-muted, #737373) 78%, transparent);
57
+ }
14
58
  .ProseMirror.oe-prosemirror,
15
59
  .oe-prosemirror,
16
60
  .oe-viewer {
@@ -67,6 +111,20 @@
67
111
  "Liberation Mono",
68
112
  monospace;
69
113
  }
114
+ .oe-prosemirror a,
115
+ .oe-viewer a {
116
+ color: var(--oe-link, var(--oe-accent-strong, #171717));
117
+ cursor: pointer;
118
+ text-decoration-color: color-mix(in srgb, var(--oe-link, var(--oe-accent-strong, #171717)) 65%, transparent);
119
+ text-decoration-line: underline;
120
+ text-decoration-thickness: 1.5px;
121
+ text-underline-offset: 0.18em;
122
+ }
123
+ .oe-prosemirror a:hover,
124
+ .oe-viewer a:hover {
125
+ color: var(--oe-link-hover, var(--oe-link, var(--oe-accent-strong, #171717)));
126
+ text-decoration-color: currentColor;
127
+ }
70
128
  .oe-prosemirror p,
71
129
  .oe-prosemirror ul,
72
130
  .oe-prosemirror ol,
@@ -186,62 +244,61 @@
186
244
  list-style: none;
187
245
  padding-left: 0;
188
246
  }
247
+ .oe-prosemirror ul[data-type=taskList] > .react-renderer.node-taskItem {
248
+ display: contents;
249
+ }
189
250
  .oe-prosemirror ul[data-type=taskList] li,
190
251
  .oe-viewer li[data-checked] {
191
- align-items: flex-start;
192
- display: flex;
252
+ align-items: start;
253
+ display: grid;
193
254
  gap: 8px;
255
+ grid-template-columns: 20px minmax(0, 1fr);
194
256
  }
195
- .oe-prosemirror ul[data-type=taskList] li > label,
196
- .oe-viewer li[data-checked] > label {
257
+ .oe-prosemirror ul[data-type=taskList] li > .oe-task-item-checkbox,
258
+ .oe-viewer li[data-checked] > .oe-task-item-checkbox {
197
259
  align-items: center;
198
260
  display: inline-flex;
199
261
  flex: 0 0 auto;
200
262
  line-height: 1.6;
201
- margin-top: 2px;
263
+ margin-top: 3px;
202
264
  }
203
- .oe-prosemirror ul[data-type=taskList] li > label > input[type=checkbox],
204
- .oe-viewer li[data-checked] > label > input[type=checkbox] {
265
+ .oe-task-checkbox {
205
266
  appearance: none;
206
- background: var(--oe-surface, #ffffff);
207
- border: 1.5px solid var(--oe-border-strong, #d4d4d4);
267
+ background: var(--oe-surface-muted, #f5f5f5);
268
+ border: 0;
208
269
  border-radius: 4px;
270
+ box-shadow: none;
209
271
  cursor: pointer;
210
272
  display: inline-grid;
211
273
  height: 20px;
212
274
  margin: 0;
275
+ outline: none !important;
213
276
  place-items: center;
214
277
  width: 20px;
215
278
  }
216
- .oe-prosemirror ul[data-type=taskList] li > label > input[type=checkbox]::after,
217
- .oe-viewer li[data-checked] > label > input[type=checkbox]::after {
279
+ .oe-task-checkbox[data-readonly] {
280
+ cursor: default;
281
+ }
282
+ .oe-task-checkbox-indicator {
218
283
  border-bottom: 2px solid var(--oe-button-text, #ffffff);
219
284
  border-right: 2px solid var(--oe-button-text, #ffffff);
220
- content: "";
221
285
  height: 9px;
222
286
  opacity: 0;
223
287
  transform: translateY(-1px) rotate(45deg);
224
288
  width: 5px;
225
289
  }
226
- .oe-prosemirror ul[data-type=taskList] li > label > input[type=checkbox]:checked,
227
- .oe-viewer li[data-checked=true] > label > input[type=checkbox] {
290
+ .oe-task-checkbox[data-checked] {
228
291
  background: var(--oe-accent-strong, #171717);
229
- border-color: var(--oe-accent-strong, #171717);
230
292
  }
231
- .oe-prosemirror ul[data-type=taskList] li > label > input[type=checkbox]:checked::after,
232
- .oe-viewer li[data-checked=true] > label > input[type=checkbox]::after {
293
+ .oe-task-checkbox[data-checked] .oe-task-checkbox-indicator {
233
294
  opacity: 1;
234
295
  }
235
- .oe-prosemirror ul[data-type=taskList] li > label > input[type=checkbox]:focus-visible {
236
- outline: 2px solid var(--oe-accent, #f5f5f5);
237
- outline-offset: 2px;
238
- }
239
- .oe-prosemirror ul[data-type=taskList] li > div,
296
+ .oe-prosemirror ul[data-type=taskList] li > [data-node-view-content],
240
297
  .oe-viewer li[data-checked] > div {
241
298
  flex: 1 1 auto;
242
299
  min-width: 0;
243
300
  }
244
- .oe-prosemirror ul[data-type=taskList] li > div > p,
301
+ .oe-prosemirror ul[data-type=taskList] li [data-node-view-content] p,
245
302
  .oe-viewer li[data-checked] > div > p {
246
303
  margin: 0;
247
304
  min-height: 1.6em;
@@ -271,72 +328,356 @@
271
328
  background: var(--oe-surface-muted, #f5f5f5);
272
329
  font-weight: 700;
273
330
  }
331
+ .oe-button,
332
+ .oe-input {
333
+ border: 1px solid var(--oe-border-strong, #d4d4d4);
334
+ border-radius: 6px;
335
+ color: var(--oe-text, #171717);
336
+ font: inherit;
337
+ min-height: 36px;
338
+ }
339
+ .oe-button {
340
+ align-items: center;
341
+ background: var(--oe-button-bg, #171717);
342
+ color: var(--oe-button-text, #ffffff);
343
+ cursor: pointer;
344
+ display: inline-flex;
345
+ justify-content: center;
346
+ padding: 0 12px;
347
+ }
348
+ .oe-button:hover,
349
+ .oe-button:focus-visible,
350
+ .oe-button[data-pressed] {
351
+ background: var(--oe-accent, #f5f5f5);
352
+ color: var(--oe-accent-text, #171717);
353
+ }
354
+ .oe-button-secondary {
355
+ background: transparent;
356
+ color: var(--oe-text, #171717);
357
+ }
358
+ .oe-input {
359
+ background: var(--oe-surface, #ffffff);
360
+ color: var(--oe-text, #171717);
361
+ padding: 0 10px;
362
+ width: 100%;
363
+ }
364
+ .oe-toggle-group {
365
+ align-items: center;
366
+ display: inline-flex;
367
+ gap: 6px;
368
+ }
274
369
  .oe-slash-menu {
275
370
  background: var(--oe-surface, #ffffff);
276
- border: 1px solid var(--oe-border-strong, #d4d4d4);
277
- border-radius: 8px;
278
- box-shadow: 0 18px 48px var(--oe-shadow, rgb(0 0 0 / 12%));
279
- display: grid;
280
- gap: 4px;
281
- max-height: 320px;
282
- overflow: auto;
371
+ border-radius: 23px;
372
+ box-shadow: 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)), 0 12px 36px var(--oe-shadow, rgb(0 0 0 / 10%));
373
+ overflow: hidden;
283
374
  padding: 6px;
284
- position: fixed;
285
- width: min(280px, calc(100vw - 24px));
375
+ width: min(260px, calc(100vw - 24px));
286
376
  z-index: 1000;
287
377
  }
288
- .oe-slash-menu button {
378
+ .oe-slash-menu,
379
+ .oe-slash-menu *,
380
+ .oe-slash-menu *::before,
381
+ .oe-slash-menu *::after {
382
+ outline: none !important;
383
+ }
384
+ .oe-slash-menu-scroll {
385
+ display: grid;
386
+ gap: 2px;
387
+ max-height: 308px;
388
+ overflow-x: hidden;
389
+ overflow-y: auto;
390
+ padding-right: 2px;
391
+ }
392
+ .oe-slash-menu-scroll::-webkit-scrollbar {
393
+ width: 8px;
394
+ }
395
+ .oe-slash-menu-scroll::-webkit-scrollbar-thumb {
396
+ border-width: 2px;
397
+ }
398
+ .oe-slash-menu-item {
289
399
  align-items: center;
290
400
  background: transparent;
291
401
  border: 0;
402
+ border-radius: 17px;
292
403
  color: var(--oe-text, #171717);
293
404
  cursor: pointer;
294
405
  display: flex;
295
- justify-content: space-between;
296
- min-height: 40px;
297
- padding: 0 10px;
406
+ gap: 9px;
407
+ justify-content: flex-start;
408
+ min-height: 34px;
409
+ outline: none;
410
+ padding: 0 11px 0 9px;
298
411
  text-align: left;
412
+ -webkit-tap-highlight-color: transparent;
299
413
  }
300
- .oe-slash-menu button:hover,
301
- .oe-slash-menu button:focus-visible {
414
+ .oe-slash-menu-item:focus,
415
+ .oe-slash-menu-item:hover,
416
+ .oe-slash-menu-item:focus-visible,
417
+ .oe-slash-menu-item[data-highlighted] {
302
418
  background: var(--oe-surface-muted, #f5f5f5);
419
+ box-shadow: none !important;
420
+ outline: none !important;
303
421
  }
304
422
  .oe-slash-menu span {
305
- font-weight: 650;
423
+ font-size: 13px;
424
+ font-weight: 640;
306
425
  }
307
- .oe-slash-menu small {
426
+ .oe-slash-menu-icon {
308
427
  color: var(--oe-muted, #737373);
309
- font-size: 11px;
310
- text-transform: uppercase;
428
+ flex: 0 0 auto;
429
+ }
430
+ .oe-slash-menu-item:focus .oe-slash-menu-icon,
431
+ .oe-slash-menu-item:hover .oe-slash-menu-icon,
432
+ .oe-slash-menu-item:focus-visible .oe-slash-menu-icon,
433
+ .oe-slash-menu-item[data-highlighted] .oe-slash-menu-icon {
434
+ color: var(--oe-text, #171717);
311
435
  }
312
436
  .oe-bubble-menu {
313
437
  align-items: center;
314
438
  background: var(--oe-surface, #ffffff);
315
- border: 1px solid var(--oe-border-strong, #d4d4d4);
316
- border-radius: 8px;
317
- box-shadow: 0 12px 30px var(--oe-shadow, rgb(0 0 0 / 12%));
439
+ border-radius: 999px;
440
+ box-shadow: 0 10px 28px var(--oe-shadow, rgb(0 0 0 / 14%));
318
441
  display: flex;
319
- gap: 4px;
320
- padding: 5px;
321
- position: fixed;
322
- transform: translate(-50%, -100%);
442
+ gap: 2px;
443
+ padding: 3px;
323
444
  z-index: 1000;
324
445
  }
325
- .oe-bubble-menu button {
446
+ .oe-selection-toolbar {
447
+ align-items: center;
448
+ display: flex;
449
+ gap: 2px;
450
+ }
451
+ .oe-toolbar-button {
326
452
  background: transparent;
327
453
  border: 0;
454
+ border-radius: 999px;
328
455
  color: var(--oe-text, #171717);
329
456
  cursor: pointer;
330
- font-size: 13px;
457
+ font-size: 12px;
331
458
  font-weight: 700;
332
- min-height: 30px;
333
- min-width: 30px;
334
- padding: 0 8px;
459
+ min-height: 28px;
460
+ min-width: 28px;
461
+ padding: 0 9px;
462
+ }
463
+ .oe-toolbar-icon {
464
+ display: block;
465
+ flex: 0 0 auto;
466
+ }
467
+ .oe-toolbar-chevron {
468
+ color: var(--oe-muted, #737373);
469
+ display: block;
470
+ flex: 0 0 auto;
471
+ margin-left: -2px;
335
472
  }
336
- .oe-bubble-menu button:hover,
337
- .oe-bubble-menu button:focus-visible,
338
- .oe-bubble-menu button.is-active {
473
+ .oe-block-transform-trigger {
474
+ align-items: center;
475
+ display: inline-flex;
476
+ gap: 5px;
477
+ justify-content: center;
478
+ padding: 0 9px;
479
+ }
480
+ .oe-block-transform-trigger-label {
481
+ font-size: 12px;
482
+ font-weight: 700;
483
+ line-height: 1;
484
+ white-space: nowrap;
485
+ }
486
+ .oe-toolbar-button:hover,
487
+ .oe-toolbar-button:focus-visible,
488
+ .oe-toolbar-button[data-active] {
339
489
  background: var(--oe-surface-muted, #f5f5f5);
340
490
  color: var(--oe-accent-strong, #171717);
491
+ outline: none;
492
+ }
493
+ .oe-toolbar-button:hover .oe-toolbar-chevron,
494
+ .oe-toolbar-button:focus-visible .oe-toolbar-chevron,
495
+ .oe-toolbar-button[data-active] .oe-toolbar-chevron {
496
+ color: var(--oe-accent-strong, #171717);
497
+ }
498
+ .oe-block-transform-menu {
499
+ background: var(--oe-surface, #ffffff);
500
+ border-radius: 23px;
501
+ box-shadow: 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)), 0 12px 36px var(--oe-shadow, rgb(0 0 0 / 10%));
502
+ display: grid;
503
+ gap: 2px;
504
+ min-width: 174px;
505
+ padding: 6px;
506
+ z-index: 1002;
507
+ }
508
+ .oe-block-transform-menu,
509
+ .oe-block-transform-menu *,
510
+ .oe-block-transform-menu *::before,
511
+ .oe-block-transform-menu *::after {
512
+ outline: none !important;
513
+ }
514
+ .oe-block-transform-item {
515
+ align-items: center;
516
+ background: transparent;
517
+ border: 0;
518
+ border-radius: 17px;
519
+ color: var(--oe-text, #171717);
520
+ cursor: pointer;
521
+ display: flex;
522
+ gap: 9px;
523
+ min-height: 34px;
524
+ padding: 0 11px 0 9px;
525
+ text-align: left;
526
+ -webkit-tap-highlight-color: transparent;
527
+ }
528
+ .oe-block-transform-item span {
529
+ font-size: 13px;
530
+ font-weight: 640;
531
+ }
532
+ .oe-block-transform-icon {
533
+ color: var(--oe-muted, #737373);
534
+ flex: 0 0 auto;
535
+ }
536
+ .oe-block-transform-item:hover,
537
+ .oe-block-transform-item:focus,
538
+ .oe-block-transform-item:focus-visible,
539
+ .oe-block-transform-item[data-highlighted],
540
+ .oe-block-transform-item[data-active] {
541
+ background: var(--oe-surface-muted, #f5f5f5);
542
+ box-shadow: none !important;
543
+ outline: none !important;
544
+ }
545
+ .oe-block-transform-item:hover .oe-block-transform-icon,
546
+ .oe-block-transform-item:focus .oe-block-transform-icon,
547
+ .oe-block-transform-item:focus-visible .oe-block-transform-icon,
548
+ .oe-block-transform-item[data-highlighted] .oe-block-transform-icon,
549
+ .oe-block-transform-item[data-active] .oe-block-transform-icon {
550
+ color: var(--oe-text, #171717);
551
+ }
552
+ .oe-dialog-backdrop {
553
+ background: rgb(0 0 0 / 24%);
554
+ inset: 0;
555
+ position: fixed;
556
+ z-index: 1000;
557
+ }
558
+ .oe-dialog {
559
+ background: var(--oe-surface, #ffffff);
560
+ border: 0;
561
+ border-radius: 23px;
562
+ box-shadow: 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)), 0 18px 48px var(--oe-shadow, rgb(0 0 0 / 14%));
563
+ left: 50%;
564
+ max-width: min(420px, calc(100vw - 32px));
565
+ padding: 8px;
566
+ position: fixed;
567
+ top: 50%;
568
+ transform: translate(-50%, -50%);
569
+ width: 100%;
570
+ z-index: 1001;
571
+ }
572
+ .oe-dialog-close {
573
+ align-items: center;
574
+ background: transparent;
575
+ border: 0;
576
+ border-radius: 999px;
577
+ color: var(--oe-muted, #737373);
578
+ cursor: pointer;
579
+ display: flex;
580
+ height: 34px;
581
+ justify-content: center;
582
+ padding: 0;
583
+ position: absolute;
584
+ right: 8px;
585
+ top: 8px;
586
+ transition-duration: 140ms;
587
+ transition-property: color, transform;
588
+ transition-timing-function: cubic-bezier(0.2, 0, 0, 1);
589
+ width: 34px;
590
+ }
591
+ .oe-dialog-close:hover,
592
+ .oe-dialog-close:focus-visible {
593
+ color: var(--oe-text, #171717);
594
+ outline: none;
595
+ }
596
+ .oe-dialog-close:active {
597
+ transform: scale(0.96);
598
+ }
599
+ .oe-link-dialog-form {
600
+ display: grid;
601
+ gap: 8px;
602
+ }
603
+ .oe-dialog-title {
604
+ color: var(--oe-text, #171717);
605
+ font-size: 13px;
606
+ font-weight: 640;
607
+ margin: 0;
608
+ padding: 6px 8px 2px;
609
+ }
610
+ .oe-dialog .oe-input {
611
+ background: var(--oe-surface-muted, #f5f5f5);
612
+ border: 0;
613
+ border-radius: 17px;
614
+ box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 8%));
615
+ caret-color: var(--oe-text, #171717);
616
+ color: var(--oe-text, #171717);
617
+ font-size: 13px;
618
+ min-height: 38px;
619
+ outline: none;
620
+ padding: 0 12px;
621
+ }
622
+ .oe-dialog .oe-input::placeholder {
623
+ color: var(--oe-muted, #737373);
624
+ }
625
+ .oe-dialog .oe-input:hover,
626
+ .oe-dialog .oe-input:focus,
627
+ .oe-dialog .oe-input:focus-visible {
628
+ box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 12%)), 0 0 0 3px var(--oe-surface-muted, #f5f5f5);
629
+ outline: none;
630
+ }
631
+ .oe-dialog-actions {
632
+ align-items: center;
633
+ display: flex;
634
+ gap: 4px;
635
+ justify-content: flex-end;
636
+ padding-top: 2px;
637
+ }
638
+ .oe-dialog-button {
639
+ border: 0;
640
+ border-radius: 17px;
641
+ box-shadow: none;
642
+ font-size: 13px;
643
+ font-weight: 640;
644
+ min-height: 34px;
645
+ padding: 0 12px;
646
+ transition-duration: 140ms;
647
+ transition-property:
648
+ background-color,
649
+ color,
650
+ transform;
651
+ transition-timing-function: cubic-bezier(0.2, 0, 0, 1);
652
+ }
653
+ .oe-dialog-button:hover,
654
+ .oe-dialog-button:focus-visible {
655
+ background: var(--oe-surface-muted, #f5f5f5);
656
+ color: var(--oe-text, #171717);
657
+ outline: none;
658
+ }
659
+ .oe-dialog-button:active {
660
+ transform: scale(0.96);
661
+ }
662
+ .oe-dialog-button-primary {
663
+ background: var(--oe-text, #171717);
664
+ color: var(--oe-surface, #ffffff);
665
+ }
666
+ .oe-dialog-button-remove {
667
+ background: var(--oe-surface-muted, #f5f5f5);
668
+ box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%));
669
+ color: var(--oe-text, #171717);
670
+ }
671
+ .oe-dialog-button-remove:hover,
672
+ .oe-dialog-button-remove:focus-visible {
673
+ background: var(--oe-surface-muted, #f5f5f5);
674
+ box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 10%));
675
+ color: var(--oe-text, #171717);
676
+ }
677
+ .oe-dialog-button-primary:hover,
678
+ .oe-dialog-button-primary:focus-visible {
679
+ background: var(--oe-text, #171717);
680
+ color: var(--oe-surface, #ffffff);
681
+ opacity: 0.88;
341
682
  }
342
683
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":[".oe-editor-surface {\n display: grid;\n gap: 12px;\n position: relative;\n}\n\n.oe-canvas {\n min-height: calc(100vh - 96px);\n}\n\n.oe-prosemirror,\n.oe-viewer {\n color: var(--oe-text, #171717);\n}\n\n.ProseMirror.oe-prosemirror,\n.oe-prosemirror,\n.oe-viewer {\n overflow-wrap: anywhere;\n word-wrap: anywhere;\n}\n\n.oe-prosemirror {\n min-height: calc(100vh - 96px);\n outline: none;\n white-space: break-spaces;\n}\n\n.oe-prosemirror > *:first-child,\n.oe-viewer > *:first-child {\n margin-top: 0;\n}\n\n.oe-prosemirror > *:last-child,\n.oe-viewer > *:last-child {\n margin-bottom: 0;\n}\n\n.oe-prosemirror p.is-editor-empty:first-child::before {\n color: var(--oe-placeholder, #a3a3a3);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n\n.oe-prosemirror img,\n.oe-viewer img {\n border-radius: 8px;\n display: block;\n margin: 16px 0;\n max-width: 100%;\n}\n\n.oe-prosemirror blockquote,\n.oe-viewer blockquote {\n border-left: 3px solid var(--oe-accent, #f5f5f5);\n margin: 18px 0;\n padding-left: 16px;\n}\n\n.oe-prosemirror pre,\n.oe-viewer pre {\n background: var(--oe-code-bg, #f5f5f5);\n border-radius: 8px;\n color: var(--oe-code-text, #171717);\n overflow: auto;\n padding: 14px;\n white-space: pre-wrap;\n}\n\n.oe-prosemirror code,\n.oe-viewer code {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace;\n}\n\n.oe-prosemirror p,\n.oe-prosemirror ul,\n.oe-prosemirror ol,\n.oe-viewer p,\n.oe-viewer ul,\n.oe-viewer ol {\n color: var(--oe-text-soft, #262626);\n font-size: 16px;\n line-height: 1.6;\n}\n\n.oe-prosemirror h1,\n.oe-prosemirror h2,\n.oe-prosemirror h3,\n.oe-prosemirror h4,\n.oe-prosemirror h5,\n.oe-prosemirror h6,\n.oe-viewer h1,\n.oe-viewer h2,\n.oe-viewer h3,\n.oe-viewer h4,\n.oe-viewer h5,\n.oe-viewer h6 {\n color: var(--oe-heading, var(--oe-text, #171717));\n font-weight: 700;\n line-height: 1.2;\n margin: 24px 0 10px;\n}\n\n.oe-prosemirror h1,\n.oe-viewer h1 {\n font-size: 2em;\n}\n\n.oe-prosemirror h2,\n.oe-viewer h2 {\n font-size: 1.5em;\n}\n\n.oe-prosemirror h3,\n.oe-viewer h3 {\n font-size: 1.25em;\n}\n\n.oe-prosemirror h4,\n.oe-viewer h4 {\n font-size: 1.125em;\n}\n\n.oe-prosemirror h5,\n.oe-prosemirror h6,\n.oe-viewer h5,\n.oe-viewer h6 {\n font-size: 1em;\n}\n\n.oe-prosemirror ul:not([data-type=\"taskList\"]),\n.oe-viewer ul:not([data-type=\"taskList\"]) {\n list-style: disc;\n padding-left: 1.5em;\n}\n\n.oe-prosemirror ol,\n.oe-viewer ol {\n list-style: decimal;\n padding-left: 1.5em;\n}\n\n.oe-prosemirror li,\n.oe-viewer li {\n margin: 4px 0;\n}\n\n.oe-prosemirror hr,\n.oe-divider,\n.oe-viewer hr {\n border: 0;\n cursor: pointer;\n height: 1px;\n margin: 18px 0;\n padding: 10px 0;\n position: relative;\n}\n\n.oe-prosemirror hr::after,\n.oe-divider::after,\n.oe-viewer hr::after {\n background: var(--oe-border, #e5e5e5);\n content: \"\";\n display: block;\n height: 1px;\n left: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n top: 10px;\n}\n\n.oe-prosemirror hr.ProseMirror-selectednode,\n.oe-divider.ProseMirror-selectednode {\n outline: none;\n}\n\n.oe-prosemirror hr.ProseMirror-selectednode::after,\n.oe-divider.ProseMirror-selectednode::after {\n background: var(--oe-border-strong, #d4d4d4);\n box-shadow: 0 0 0 6px var(--oe-accent, #f5f5f5);\n}\n\n.oe-columns {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.oe-column,\n.oe-prosemirror [data-openeditor-column],\n.oe-viewer [data-openeditor-column] {\n border-radius: 8px;\n padding: 4px 6px;\n}\n\n.oe-prosemirror [data-openeditor-column] > :first-child,\n.oe-viewer [data-openeditor-column] > :first-child {\n margin-top: 0;\n}\n\n.oe-prosemirror [data-openeditor-column] > :last-child,\n.oe-viewer [data-openeditor-column] > :last-child {\n margin-bottom: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"],\n.oe-viewer ul[data-type=\"taskList\"] {\n list-style: none;\n padding-left: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li,\n.oe-viewer li[data-checked] {\n align-items: flex-start;\n display: flex;\n gap: 8px;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label,\n.oe-viewer li[data-checked] > label {\n align-items: center;\n display: inline-flex;\n flex: 0 0 auto;\n line-height: 1.6;\n margin-top: 2px;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label > input[type=\"checkbox\"],\n.oe-viewer li[data-checked] > label > input[type=\"checkbox\"] {\n appearance: none;\n background: var(--oe-surface, #ffffff);\n border: 1.5px solid var(--oe-border-strong, #d4d4d4);\n border-radius: 4px;\n cursor: pointer;\n display: inline-grid;\n height: 20px;\n margin: 0;\n place-items: center;\n width: 20px;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label > input[type=\"checkbox\"]::after,\n.oe-viewer li[data-checked] > label > input[type=\"checkbox\"]::after {\n border-bottom: 2px solid var(--oe-button-text, #ffffff);\n border-right: 2px solid var(--oe-button-text, #ffffff);\n content: \"\";\n height: 9px;\n opacity: 0;\n transform: translateY(-1px) rotate(45deg);\n width: 5px;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label > input[type=\"checkbox\"]:checked,\n.oe-viewer li[data-checked=\"true\"] > label > input[type=\"checkbox\"] {\n background: var(--oe-accent-strong, #171717);\n border-color: var(--oe-accent-strong, #171717);\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label > input[type=\"checkbox\"]:checked::after,\n.oe-viewer li[data-checked=\"true\"] > label > input[type=\"checkbox\"]::after {\n opacity: 1;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > label > input[type=\"checkbox\"]:focus-visible {\n outline: 2px solid var(--oe-accent, #f5f5f5);\n outline-offset: 2px;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > div,\n.oe-viewer li[data-checked] > div {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > div > p,\n.oe-viewer li[data-checked] > div > p {\n margin: 0;\n min-height: 1.6em;\n}\n\n.oe-prosemirror table,\n.oe-viewer table {\n border-collapse: collapse;\n margin: 18px 0;\n table-layout: fixed;\n width: 100%;\n}\n\n.oe-prosemirror th,\n.oe-prosemirror td,\n.oe-viewer th,\n.oe-viewer td {\n border: 1px solid var(--oe-border-strong, #d4d4d4);\n min-width: 96px;\n padding: 10px;\n vertical-align: top;\n}\n\n.oe-prosemirror td,\n.oe-viewer td {\n background: var(--oe-surface, #ffffff);\n}\n\n.oe-prosemirror th,\n.oe-viewer th {\n background: var(--oe-surface-muted, #f5f5f5);\n font-weight: 700;\n}\n\n.oe-slash-menu {\n background: var(--oe-surface, #ffffff);\n border: 1px solid var(--oe-border-strong, #d4d4d4);\n border-radius: 8px;\n box-shadow: 0 18px 48px var(--oe-shadow, rgb(0 0 0 / 12%));\n display: grid;\n gap: 4px;\n max-height: 320px;\n overflow: auto;\n padding: 6px;\n position: fixed;\n width: min(280px, calc(100vw - 24px));\n z-index: 1000;\n}\n\n.oe-slash-menu button {\n align-items: center;\n background: transparent;\n border: 0;\n color: var(--oe-text, #171717);\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n min-height: 40px;\n padding: 0 10px;\n text-align: left;\n}\n\n.oe-slash-menu button:hover,\n.oe-slash-menu button:focus-visible {\n background: var(--oe-surface-muted, #f5f5f5);\n}\n\n.oe-slash-menu span {\n font-weight: 650;\n}\n\n.oe-slash-menu small {\n color: var(--oe-muted, #737373);\n font-size: 11px;\n text-transform: uppercase;\n}\n\n.oe-bubble-menu {\n align-items: center;\n background: var(--oe-surface, #ffffff);\n border: 1px solid var(--oe-border-strong, #d4d4d4);\n border-radius: 8px;\n box-shadow: 0 12px 30px var(--oe-shadow, rgb(0 0 0 / 12%));\n display: flex;\n gap: 4px;\n padding: 5px;\n position: fixed;\n transform: translate(-50%, -100%);\n z-index: 1000;\n}\n\n.oe-bubble-menu button {\n background: transparent;\n border: 0;\n color: var(--oe-text, #171717);\n cursor: pointer;\n font-size: 13px;\n font-weight: 700;\n min-height: 30px;\n min-width: 30px;\n padding: 0 8px;\n}\n\n.oe-bubble-menu button:hover,\n.oe-bubble-menu button:focus-visible,\n.oe-bubble-menu button.is-active {\n background: var(--oe-surface-muted, #f5f5f5);\n color: var(--oe-accent-strong, #171717);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":[".oe-editor-surface {\n display: grid;\n gap: 12px;\n position: relative;\n}\n\n.oe-canvas {\n min-height: calc(100vh - 96px);\n}\n\n.oe-prosemirror,\n.oe-viewer {\n color: var(--oe-text, #171717);\n}\n\n.oe-editor-surface,\n.oe-prosemirror,\n.oe-viewer,\n.oe-slash-menu,\n.oe-dialog {\n scrollbar-color: color-mix(in srgb, var(--oe-muted, #737373) 72%, transparent) transparent;\n scrollbar-width: thin;\n}\n\n.oe-editor-surface::-webkit-scrollbar,\n.oe-editor-surface *::-webkit-scrollbar,\n.oe-prosemirror::-webkit-scrollbar,\n.oe-viewer::-webkit-scrollbar,\n.oe-slash-menu::-webkit-scrollbar,\n.oe-dialog::-webkit-scrollbar {\n height: 10px;\n width: 10px;\n}\n\n.oe-editor-surface::-webkit-scrollbar-track,\n.oe-editor-surface *::-webkit-scrollbar-track,\n.oe-prosemirror::-webkit-scrollbar-track,\n.oe-viewer::-webkit-scrollbar-track,\n.oe-slash-menu::-webkit-scrollbar-track,\n.oe-dialog::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.oe-editor-surface::-webkit-scrollbar-thumb,\n.oe-editor-surface *::-webkit-scrollbar-thumb,\n.oe-prosemirror::-webkit-scrollbar-thumb,\n.oe-viewer::-webkit-scrollbar-thumb,\n.oe-slash-menu::-webkit-scrollbar-thumb,\n.oe-dialog::-webkit-scrollbar-thumb {\n background-clip: content-box;\n background-color: color-mix(in srgb, var(--oe-muted, #737373) 58%, transparent);\n border: 3px solid transparent;\n border-radius: 999px;\n}\n\n.oe-editor-surface::-webkit-scrollbar-thumb:hover,\n.oe-editor-surface *::-webkit-scrollbar-thumb:hover,\n.oe-prosemirror::-webkit-scrollbar-thumb:hover,\n.oe-viewer::-webkit-scrollbar-thumb:hover,\n.oe-slash-menu::-webkit-scrollbar-thumb:hover,\n.oe-dialog::-webkit-scrollbar-thumb:hover {\n background-color: color-mix(in srgb, var(--oe-muted, #737373) 78%, transparent);\n}\n\n.ProseMirror.oe-prosemirror,\n.oe-prosemirror,\n.oe-viewer {\n overflow-wrap: anywhere;\n word-wrap: anywhere;\n}\n\n.oe-prosemirror {\n min-height: calc(100vh - 96px);\n outline: none;\n white-space: break-spaces;\n}\n\n.oe-prosemirror > *:first-child,\n.oe-viewer > *:first-child {\n margin-top: 0;\n}\n\n.oe-prosemirror > *:last-child,\n.oe-viewer > *:last-child {\n margin-bottom: 0;\n}\n\n.oe-prosemirror p.is-editor-empty:first-child::before {\n color: var(--oe-placeholder, #a3a3a3);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n\n.oe-prosemirror img,\n.oe-viewer img {\n border-radius: 8px;\n display: block;\n margin: 16px 0;\n max-width: 100%;\n}\n\n.oe-prosemirror blockquote,\n.oe-viewer blockquote {\n border-left: 3px solid var(--oe-accent, #f5f5f5);\n margin: 18px 0;\n padding-left: 16px;\n}\n\n.oe-prosemirror pre,\n.oe-viewer pre {\n background: var(--oe-code-bg, #f5f5f5);\n border-radius: 8px;\n color: var(--oe-code-text, #171717);\n overflow: auto;\n padding: 14px;\n white-space: pre-wrap;\n}\n\n.oe-prosemirror code,\n.oe-viewer code {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace;\n}\n\n.oe-prosemirror a,\n.oe-viewer a {\n color: var(--oe-link, var(--oe-accent-strong, #171717));\n cursor: pointer;\n text-decoration-color: color-mix(in srgb, var(--oe-link, var(--oe-accent-strong, #171717)) 65%, transparent);\n text-decoration-line: underline;\n text-decoration-thickness: 1.5px;\n text-underline-offset: 0.18em;\n}\n\n.oe-prosemirror a:hover,\n.oe-viewer a:hover {\n color: var(--oe-link-hover, var(--oe-link, var(--oe-accent-strong, #171717)));\n text-decoration-color: currentColor;\n}\n\n.oe-prosemirror p,\n.oe-prosemirror ul,\n.oe-prosemirror ol,\n.oe-viewer p,\n.oe-viewer ul,\n.oe-viewer ol {\n color: var(--oe-text-soft, #262626);\n font-size: 16px;\n line-height: 1.6;\n}\n\n.oe-prosemirror h1,\n.oe-prosemirror h2,\n.oe-prosemirror h3,\n.oe-prosemirror h4,\n.oe-prosemirror h5,\n.oe-prosemirror h6,\n.oe-viewer h1,\n.oe-viewer h2,\n.oe-viewer h3,\n.oe-viewer h4,\n.oe-viewer h5,\n.oe-viewer h6 {\n color: var(--oe-heading, var(--oe-text, #171717));\n font-weight: 700;\n line-height: 1.2;\n margin: 24px 0 10px;\n}\n\n.oe-prosemirror h1,\n.oe-viewer h1 {\n font-size: 2em;\n}\n\n.oe-prosemirror h2,\n.oe-viewer h2 {\n font-size: 1.5em;\n}\n\n.oe-prosemirror h3,\n.oe-viewer h3 {\n font-size: 1.25em;\n}\n\n.oe-prosemirror h4,\n.oe-viewer h4 {\n font-size: 1.125em;\n}\n\n.oe-prosemirror h5,\n.oe-prosemirror h6,\n.oe-viewer h5,\n.oe-viewer h6 {\n font-size: 1em;\n}\n\n.oe-prosemirror ul:not([data-type=\"taskList\"]),\n.oe-viewer ul:not([data-type=\"taskList\"]) {\n list-style: disc;\n padding-left: 1.5em;\n}\n\n.oe-prosemirror ol,\n.oe-viewer ol {\n list-style: decimal;\n padding-left: 1.5em;\n}\n\n.oe-prosemirror li,\n.oe-viewer li {\n margin: 4px 0;\n}\n\n.oe-prosemirror hr,\n.oe-divider,\n.oe-viewer hr {\n border: 0;\n cursor: pointer;\n height: 1px;\n margin: 18px 0;\n padding: 10px 0;\n position: relative;\n}\n\n.oe-prosemirror hr::after,\n.oe-divider::after,\n.oe-viewer hr::after {\n background: var(--oe-border, #e5e5e5);\n content: \"\";\n display: block;\n height: 1px;\n left: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n top: 10px;\n}\n\n.oe-prosemirror hr.ProseMirror-selectednode,\n.oe-divider.ProseMirror-selectednode {\n outline: none;\n}\n\n.oe-prosemirror hr.ProseMirror-selectednode::after,\n.oe-divider.ProseMirror-selectednode::after {\n background: var(--oe-border-strong, #d4d4d4);\n box-shadow: 0 0 0 6px var(--oe-accent, #f5f5f5);\n}\n\n.oe-columns {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.oe-column,\n.oe-prosemirror [data-openeditor-column],\n.oe-viewer [data-openeditor-column] {\n border-radius: 8px;\n padding: 4px 6px;\n}\n\n.oe-prosemirror [data-openeditor-column] > :first-child,\n.oe-viewer [data-openeditor-column] > :first-child {\n margin-top: 0;\n}\n\n.oe-prosemirror [data-openeditor-column] > :last-child,\n.oe-viewer [data-openeditor-column] > :last-child {\n margin-bottom: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"],\n.oe-viewer ul[data-type=\"taskList\"] {\n list-style: none;\n padding-left: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] > .react-renderer.node-taskItem {\n display: contents;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li,\n.oe-viewer li[data-checked] {\n align-items: start;\n display: grid;\n gap: 8px;\n grid-template-columns: 20px minmax(0, 1fr);\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > .oe-task-item-checkbox,\n.oe-viewer li[data-checked] > .oe-task-item-checkbox {\n align-items: center;\n display: inline-flex;\n flex: 0 0 auto;\n line-height: 1.6;\n margin-top: 3px;\n}\n\n.oe-task-checkbox {\n appearance: none;\n background: var(--oe-surface-muted, #f5f5f5);\n border: 0;\n border-radius: 4px;\n box-shadow: none;\n cursor: pointer;\n display: inline-grid;\n height: 20px;\n margin: 0;\n outline: none !important;\n place-items: center;\n width: 20px;\n}\n\n.oe-task-checkbox[data-readonly] {\n cursor: default;\n}\n\n.oe-task-checkbox-indicator {\n border-bottom: 2px solid var(--oe-button-text, #ffffff);\n border-right: 2px solid var(--oe-button-text, #ffffff);\n height: 9px;\n opacity: 0;\n transform: translateY(-1px) rotate(45deg);\n width: 5px;\n}\n\n.oe-task-checkbox[data-checked] {\n background: var(--oe-accent-strong, #171717);\n}\n\n.oe-task-checkbox[data-checked] .oe-task-checkbox-indicator {\n opacity: 1;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li > [data-node-view-content],\n.oe-viewer li[data-checked] > div {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.oe-prosemirror ul[data-type=\"taskList\"] li [data-node-view-content] p,\n.oe-viewer li[data-checked] > div > p {\n margin: 0;\n min-height: 1.6em;\n}\n\n.oe-prosemirror table,\n.oe-viewer table {\n border-collapse: collapse;\n margin: 18px 0;\n table-layout: fixed;\n width: 100%;\n}\n\n.oe-prosemirror th,\n.oe-prosemirror td,\n.oe-viewer th,\n.oe-viewer td {\n border: 1px solid var(--oe-border-strong, #d4d4d4);\n min-width: 96px;\n padding: 10px;\n vertical-align: top;\n}\n\n.oe-prosemirror td,\n.oe-viewer td {\n background: var(--oe-surface, #ffffff);\n}\n\n.oe-prosemirror th,\n.oe-viewer th {\n background: var(--oe-surface-muted, #f5f5f5);\n font-weight: 700;\n}\n\n.oe-button,\n.oe-input {\n border: 1px solid var(--oe-border-strong, #d4d4d4);\n border-radius: 6px;\n color: var(--oe-text, #171717);\n font: inherit;\n min-height: 36px;\n}\n\n.oe-button {\n align-items: center;\n background: var(--oe-button-bg, #171717);\n color: var(--oe-button-text, #ffffff);\n cursor: pointer;\n display: inline-flex;\n justify-content: center;\n padding: 0 12px;\n}\n\n.oe-button:hover,\n.oe-button:focus-visible,\n.oe-button[data-pressed] {\n background: var(--oe-accent, #f5f5f5);\n color: var(--oe-accent-text, #171717);\n}\n\n.oe-button-secondary {\n background: transparent;\n color: var(--oe-text, #171717);\n}\n\n.oe-input {\n background: var(--oe-surface, #ffffff);\n color: var(--oe-text, #171717);\n padding: 0 10px;\n width: 100%;\n}\n\n.oe-toggle-group {\n align-items: center;\n display: inline-flex;\n gap: 6px;\n}\n\n.oe-slash-menu {\n background: var(--oe-surface, #ffffff);\n border-radius: 23px;\n box-shadow:\n 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)),\n 0 12px 36px var(--oe-shadow, rgb(0 0 0 / 10%));\n overflow: hidden;\n padding: 6px;\n width: min(260px, calc(100vw - 24px));\n z-index: 1000;\n}\n\n.oe-slash-menu,\n.oe-slash-menu *,\n.oe-slash-menu *::before,\n.oe-slash-menu *::after {\n outline: none !important;\n}\n\n.oe-slash-menu-scroll {\n display: grid;\n gap: 2px;\n max-height: 308px;\n overflow-x: hidden;\n overflow-y: auto;\n padding-right: 2px;\n}\n\n.oe-slash-menu-scroll::-webkit-scrollbar {\n width: 8px;\n}\n\n.oe-slash-menu-scroll::-webkit-scrollbar-thumb {\n border-width: 2px;\n}\n\n.oe-slash-menu-item {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 17px;\n color: var(--oe-text, #171717);\n cursor: pointer;\n display: flex;\n gap: 9px;\n justify-content: flex-start;\n min-height: 34px;\n outline: none;\n padding: 0 11px 0 9px;\n text-align: left;\n -webkit-tap-highlight-color: transparent;\n}\n\n.oe-slash-menu-item:focus,\n.oe-slash-menu-item:hover,\n.oe-slash-menu-item:focus-visible,\n.oe-slash-menu-item[data-highlighted] {\n background: var(--oe-surface-muted, #f5f5f5);\n box-shadow: none !important;\n outline: none !important;\n}\n\n.oe-slash-menu span {\n font-size: 13px;\n font-weight: 640;\n}\n\n.oe-slash-menu-icon {\n color: var(--oe-muted, #737373);\n flex: 0 0 auto;\n}\n\n.oe-slash-menu-item:focus .oe-slash-menu-icon,\n.oe-slash-menu-item:hover .oe-slash-menu-icon,\n.oe-slash-menu-item:focus-visible .oe-slash-menu-icon,\n.oe-slash-menu-item[data-highlighted] .oe-slash-menu-icon {\n color: var(--oe-text, #171717);\n}\n\n.oe-bubble-menu {\n align-items: center;\n background: var(--oe-surface, #ffffff);\n border-radius: 999px;\n box-shadow: 0 10px 28px var(--oe-shadow, rgb(0 0 0 / 14%));\n display: flex;\n gap: 2px;\n padding: 3px;\n z-index: 1000;\n}\n\n.oe-selection-toolbar {\n align-items: center;\n display: flex;\n gap: 2px;\n}\n\n.oe-toolbar-button {\n background: transparent;\n border: 0;\n border-radius: 999px;\n color: var(--oe-text, #171717);\n cursor: pointer;\n font-size: 12px;\n font-weight: 700;\n min-height: 28px;\n min-width: 28px;\n padding: 0 9px;\n}\n\n.oe-toolbar-icon {\n display: block;\n flex: 0 0 auto;\n}\n\n.oe-toolbar-chevron {\n color: var(--oe-muted, #737373);\n display: block;\n flex: 0 0 auto;\n margin-left: -2px;\n}\n\n.oe-block-transform-trigger {\n align-items: center;\n display: inline-flex;\n gap: 5px;\n justify-content: center;\n padding: 0 9px;\n}\n\n.oe-block-transform-trigger-label {\n font-size: 12px;\n font-weight: 700;\n line-height: 1;\n white-space: nowrap;\n}\n\n.oe-toolbar-button:hover,\n.oe-toolbar-button:focus-visible,\n.oe-toolbar-button[data-active] {\n background: var(--oe-surface-muted, #f5f5f5);\n color: var(--oe-accent-strong, #171717);\n outline: none;\n}\n\n.oe-toolbar-button:hover .oe-toolbar-chevron,\n.oe-toolbar-button:focus-visible .oe-toolbar-chevron,\n.oe-toolbar-button[data-active] .oe-toolbar-chevron {\n color: var(--oe-accent-strong, #171717);\n}\n\n.oe-block-transform-menu {\n background: var(--oe-surface, #ffffff);\n border-radius: 23px;\n box-shadow:\n 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)),\n 0 12px 36px var(--oe-shadow, rgb(0 0 0 / 10%));\n display: grid;\n gap: 2px;\n min-width: 174px;\n padding: 6px;\n z-index: 1002;\n}\n\n.oe-block-transform-menu,\n.oe-block-transform-menu *,\n.oe-block-transform-menu *::before,\n.oe-block-transform-menu *::after {\n outline: none !important;\n}\n\n.oe-block-transform-item {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 17px;\n color: var(--oe-text, #171717);\n cursor: pointer;\n display: flex;\n gap: 9px;\n min-height: 34px;\n padding: 0 11px 0 9px;\n text-align: left;\n -webkit-tap-highlight-color: transparent;\n}\n\n.oe-block-transform-item span {\n font-size: 13px;\n font-weight: 640;\n}\n\n.oe-block-transform-icon {\n color: var(--oe-muted, #737373);\n flex: 0 0 auto;\n}\n\n.oe-block-transform-item:hover,\n.oe-block-transform-item:focus,\n.oe-block-transform-item:focus-visible,\n.oe-block-transform-item[data-highlighted],\n.oe-block-transform-item[data-active] {\n background: var(--oe-surface-muted, #f5f5f5);\n box-shadow: none !important;\n outline: none !important;\n}\n\n.oe-block-transform-item:hover .oe-block-transform-icon,\n.oe-block-transform-item:focus .oe-block-transform-icon,\n.oe-block-transform-item:focus-visible .oe-block-transform-icon,\n.oe-block-transform-item[data-highlighted] .oe-block-transform-icon,\n.oe-block-transform-item[data-active] .oe-block-transform-icon {\n color: var(--oe-text, #171717);\n}\n\n.oe-dialog-backdrop {\n background: rgb(0 0 0 / 24%);\n inset: 0;\n position: fixed;\n z-index: 1000;\n}\n\n.oe-dialog {\n background: var(--oe-surface, #ffffff);\n border: 0;\n border-radius: 23px;\n box-shadow:\n 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%)),\n 0 18px 48px var(--oe-shadow, rgb(0 0 0 / 14%));\n left: 50%;\n max-width: min(420px, calc(100vw - 32px));\n padding: 8px;\n position: fixed;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n z-index: 1001;\n}\n\n.oe-dialog-close {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 999px;\n color: var(--oe-muted, #737373);\n cursor: pointer;\n display: flex;\n height: 34px;\n justify-content: center;\n padding: 0;\n position: absolute;\n right: 8px;\n top: 8px;\n transition-duration: 140ms;\n transition-property: color, transform;\n transition-timing-function: cubic-bezier(0.2, 0, 0, 1);\n width: 34px;\n}\n\n.oe-dialog-close:hover,\n.oe-dialog-close:focus-visible {\n color: var(--oe-text, #171717);\n outline: none;\n}\n\n.oe-dialog-close:active {\n transform: scale(0.96);\n}\n\n.oe-link-dialog-form {\n display: grid;\n gap: 8px;\n}\n\n.oe-dialog-title {\n color: var(--oe-text, #171717);\n font-size: 13px;\n font-weight: 640;\n margin: 0;\n padding: 6px 8px 2px;\n}\n\n.oe-dialog .oe-input {\n background: var(--oe-surface-muted, #f5f5f5);\n border: 0;\n border-radius: 17px;\n box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 8%));\n caret-color: var(--oe-text, #171717);\n color: var(--oe-text, #171717);\n font-size: 13px;\n min-height: 38px;\n outline: none;\n padding: 0 12px;\n}\n\n.oe-dialog .oe-input::placeholder {\n color: var(--oe-muted, #737373);\n}\n\n.oe-dialog .oe-input:hover,\n.oe-dialog .oe-input:focus,\n.oe-dialog .oe-input:focus-visible {\n box-shadow:\n inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 12%)),\n 0 0 0 3px var(--oe-surface-muted, #f5f5f5);\n outline: none;\n}\n\n.oe-dialog-actions {\n align-items: center;\n display: flex;\n gap: 4px;\n justify-content: flex-end;\n padding-top: 2px;\n}\n\n.oe-dialog-button {\n border: 0;\n border-radius: 17px;\n box-shadow: none;\n font-size: 13px;\n font-weight: 640;\n min-height: 34px;\n padding: 0 12px;\n transition-duration: 140ms;\n transition-property: background-color, color, transform;\n transition-timing-function: cubic-bezier(0.2, 0, 0, 1);\n}\n\n.oe-dialog-button:hover,\n.oe-dialog-button:focus-visible {\n background: var(--oe-surface-muted, #f5f5f5);\n color: var(--oe-text, #171717);\n outline: none;\n}\n\n.oe-dialog-button:active {\n transform: scale(0.96);\n}\n\n.oe-dialog-button-primary {\n background: var(--oe-text, #171717);\n color: var(--oe-surface, #ffffff);\n}\n\n.oe-dialog-button-remove {\n background: var(--oe-surface-muted, #f5f5f5);\n box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 6%));\n color: var(--oe-text, #171717);\n}\n\n.oe-dialog-button-remove:hover,\n.oe-dialog-button-remove:focus-visible {\n background: var(--oe-surface-muted, #f5f5f5);\n box-shadow: inset 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 10%));\n color: var(--oe-text, #171717);\n}\n\n.oe-dialog-button-primary:hover,\n.oe-dialog-button-primary:focus-visible {\n background: var(--oe-text, #171717);\n color: var(--oe-surface, #ffffff);\n opacity: 0.88;\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  import * as react from 'react';
2
+ import { Button } from '@base-ui/react/button';
3
+ import { Input } from '@base-ui/react/input';
4
+ import { Toggle } from '@base-ui/react/toggle';
5
+ import { ToggleGroup } from '@base-ui/react/toggle-group';
2
6
  import { OpenEditorReactProps, OpenEditorController, OpenEditorSlashMenuItem } from '@openeditor/react';
3
7
  export { OpenEditorContent, OpenEditorController, OpenEditorReactProps, OpenEditorSlashMenuItem, useOpenEditorController } from '@openeditor/react';
4
8
 
@@ -18,8 +22,16 @@ type OpenEditorProps = OpenEditorReactProps & {
18
22
  contentClassName?: string;
19
23
  overlayContainer?: HTMLElement | null;
20
24
  };
21
- declare const OpenEditorSelectionBubble: ({ controller, className, container, }: OpenEditorSelectionBubbleProps) => react.ReactPortal | null;
22
- declare const OpenEditorSlashMenu: ({ controller, className, items, container, }: OpenEditorSlashMenuProps) => react.ReactPortal | null;
25
+ type OpenEditorButtonProps = Button.Props;
26
+ type OpenEditorToggleProps<Value extends string = string> = Toggle.Props<Value>;
27
+ type OpenEditorToggleGroupProps<Value extends string = string> = ToggleGroup.Props<Value>;
28
+ type OpenEditorInputProps = Input.Props;
29
+ declare const OpenEditorButton: ({ className, ...props }: OpenEditorButtonProps) => react.JSX.Element;
30
+ declare const OpenEditorToggle: <Value extends string = string>({ className, ...props }: OpenEditorToggleProps<Value>) => react.JSX.Element;
31
+ declare const OpenEditorToggleGroup: <Value extends string = string>({ className, ...props }: OpenEditorToggleGroupProps<Value>) => react.JSX.Element;
32
+ declare const OpenEditorInput: ({ className, ...props }: OpenEditorInputProps) => react.JSX.Element;
33
+ declare const OpenEditorSelectionBubble: ({ controller, className, container, }: OpenEditorSelectionBubbleProps) => react.JSX.Element | null;
34
+ declare const OpenEditorSlashMenu: ({ controller, className, items, container, }: OpenEditorSlashMenuProps) => react.JSX.Element | null;
23
35
  declare const OpenEditor: ({ className, contentClassName, overlayContainer, ...props }: OpenEditorProps) => react.JSX.Element;
24
36
 
25
- export { OpenEditor, type OpenEditorProps, OpenEditorSelectionBubble, type OpenEditorSelectionBubbleProps, OpenEditorSlashMenu, type OpenEditorSlashMenuProps };
37
+ export { OpenEditor, OpenEditorButton, type OpenEditorButtonProps, OpenEditorInput, type OpenEditorInputProps, type OpenEditorProps, OpenEditorSelectionBubble, type OpenEditorSelectionBubbleProps, OpenEditorSlashMenu, type OpenEditorSlashMenuProps, OpenEditorToggle, OpenEditorToggleGroup, type OpenEditorToggleGroupProps, type OpenEditorToggleProps };
package/dist/index.js CHANGED
@@ -1,39 +1,353 @@
1
+ import { Button } from '@base-ui/react/button';
2
+ import { Dialog } from '@base-ui/react/dialog';
3
+ import { Input } from '@base-ui/react/input';
4
+ import { Menu } from '@base-ui/react/menu';
5
+ import { Popover } from '@base-ui/react/popover';
6
+ import { Toggle } from '@base-ui/react/toggle';
7
+ import { ToggleGroup } from '@base-ui/react/toggle-group';
8
+ import { Toolbar } from '@base-ui/react/toolbar';
9
+ import { Bold, Italic, Underline, Strikethrough, Code, Link, ChevronDown, Pilcrow, Heading2, List, ListOrdered, ListTodo, Quote, X, ArrowDown, ArrowUp, Table, Columns2, Image, Minus, Type } from 'lucide-react';
1
10
  import { getDefaultSlashMenuItems, useOpenEditorController, OpenEditorContent } from '@openeditor/react';
2
11
  export { OpenEditorContent, useOpenEditorController } from '@openeditor/react';
3
- import { createPortal } from 'react-dom';
4
- import { jsxs, jsx } from 'react/jsx-runtime';
12
+ import { useState, useRef, useMemo, useEffect } from 'react';
13
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
14
 
6
15
  // src/index.tsx
7
- var getOverlayContainer = (container) => container ?? (typeof document === "undefined" ? null : document.body);
8
- var OpenEditorSelectionBubble = ({
16
+ var blockTransformActions = [
17
+ {
18
+ key: "paragraph",
19
+ label: "Paragraph",
20
+ Icon: Pilcrow,
21
+ isActive: ({ editor }) => editor?.isActive("paragraph") ?? false,
22
+ run: (controller) => controller.setParagraph()
23
+ },
24
+ {
25
+ key: "heading",
26
+ label: "Heading",
27
+ Icon: Heading2,
28
+ isActive: ({ editor }) => editor?.isActive("heading") ?? false,
29
+ run: (controller) => controller.toggleHeading(2)
30
+ },
31
+ {
32
+ key: "bulletList",
33
+ label: "Bullet List",
34
+ Icon: List,
35
+ isActive: ({ editor }) => editor?.isActive("bulletList") ?? false,
36
+ run: (controller) => controller.toggleBulletList()
37
+ },
38
+ {
39
+ key: "orderedList",
40
+ label: "Numbered List",
41
+ Icon: ListOrdered,
42
+ isActive: ({ editor }) => editor?.isActive("orderedList") ?? false,
43
+ run: (controller) => controller.toggleOrderedList()
44
+ },
45
+ {
46
+ key: "taskList",
47
+ label: "Task List",
48
+ Icon: ListTodo,
49
+ isActive: ({ editor }) => editor?.isActive("taskList") ?? false,
50
+ run: (controller) => controller.toggleTaskList()
51
+ },
52
+ {
53
+ key: "blockquote",
54
+ label: "Quote",
55
+ Icon: Quote,
56
+ isActive: ({ editor }) => editor?.isActive("blockquote") ?? false,
57
+ run: (controller) => controller.toggleBlockquote()
58
+ },
59
+ {
60
+ key: "codeBlock",
61
+ label: "Code",
62
+ Icon: Code,
63
+ isActive: ({ editor }) => editor?.isActive("codeBlock") ?? false,
64
+ run: (controller) => controller.toggleCodeBlock()
65
+ }
66
+ ];
67
+ var getActiveBlockTransform = (controller) => [
68
+ "taskList",
69
+ "bulletList",
70
+ "orderedList",
71
+ "blockquote",
72
+ "codeBlock",
73
+ "heading",
74
+ "paragraph"
75
+ ].map((key) => blockTransformActions.find((action) => action.key === key)).find((action) => action?.isActive(controller)) ?? blockTransformActions[0];
76
+ var slashMenuIcons = {
77
+ paragraph: Pilcrow,
78
+ heading: Heading2,
79
+ bulletList: List,
80
+ orderedList: ListOrdered,
81
+ taskList: ListTodo,
82
+ blockquote: Quote,
83
+ codeBlock: Code,
84
+ divider: Minus,
85
+ image: Image,
86
+ columns: Columns2,
87
+ table: Table,
88
+ moveBlockUp: ArrowUp,
89
+ moveBlockDown: ArrowDown
90
+ };
91
+ var getSlashMenuIcon = (item) => slashMenuIcons[item.key] ?? Type;
92
+ var pointRect = (left, top) => ({
93
+ left,
94
+ right: left,
95
+ top,
96
+ bottom: top,
97
+ width: 0,
98
+ height: 0
99
+ });
100
+ var getAnchorRect = (state) => state.anchorRect ?? pointRect(state.left, state.top);
101
+ var toVirtualAnchor = (state, contextElement) => ({
102
+ contextElement: contextElement ?? void 0,
103
+ getBoundingClientRect: () => {
104
+ const rect = getAnchorRect(state);
105
+ return {
106
+ ...rect,
107
+ x: rect.left,
108
+ y: rect.top,
109
+ toJSON: () => rect
110
+ };
111
+ }
112
+ });
113
+ var cx = (...classes) => classes.filter(Boolean).join(" ");
114
+ var withBaseClass = (baseClassName, className) => {
115
+ if (typeof className === "function") {
116
+ return (state) => cx(baseClassName, className(state));
117
+ }
118
+ return cx(baseClassName, className);
119
+ };
120
+ var OpenEditorButton = ({ className, ...props }) => /* @__PURE__ */ jsx(Button, { className: withBaseClass("oe-button", className), ...props });
121
+ var OpenEditorToggle = ({
122
+ className,
123
+ ...props
124
+ }) => /* @__PURE__ */ jsx(Toggle, { className: withBaseClass("oe-button oe-toggle", className), ...props });
125
+ var OpenEditorToggleGroup = ({
126
+ className,
127
+ ...props
128
+ }) => /* @__PURE__ */ jsx(ToggleGroup, { className: withBaseClass("oe-toggle-group", className), ...props });
129
+ var OpenEditorInput = ({ className, ...props }) => /* @__PURE__ */ jsx(Input, { className: withBaseClass("oe-input", className), ...props });
130
+ var OpenEditorLinkDialog = ({
9
131
  controller,
10
- className = "oe-bubble-menu",
11
- container
132
+ open,
133
+ onOpenChange
12
134
  }) => {
13
- const { editor, selectionBubbleState } = controller;
14
- const overlayContainer = getOverlayContainer(container);
15
- if (!editor || !selectionBubbleState || !overlayContainer) {
16
- return null;
135
+ const [url, setUrl] = useState("");
136
+ useEffect(() => {
137
+ if (open) {
138
+ setUrl(controller.getActiveLink() ?? "https://");
139
+ }
140
+ }, [open]);
141
+ const submitLink = (event) => {
142
+ event.preventDefault();
143
+ controller.setLink(url.trim());
144
+ onOpenChange(false);
145
+ };
146
+ return /* @__PURE__ */ jsx(Dialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [
147
+ /* @__PURE__ */ jsx(Dialog.Backdrop, { className: "oe-dialog-backdrop" }),
148
+ /* @__PURE__ */ jsxs(Dialog.Popup, { className: "oe-dialog", initialFocus: false, children: [
149
+ /* @__PURE__ */ jsx(Dialog.Close, { className: "oe-dialog-close", "aria-label": "Close link dialog", children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", size: 15, strokeWidth: 2 }) }),
150
+ /* @__PURE__ */ jsxs("form", { className: "oe-link-dialog-form", onSubmit: submitLink, children: [
151
+ /* @__PURE__ */ jsx(Dialog.Title, { className: "oe-dialog-title", children: "Link" }),
152
+ /* @__PURE__ */ jsx(
153
+ OpenEditorInput,
154
+ {
155
+ "aria-label": "Link URL",
156
+ autoComplete: "url",
157
+ inputMode: "url",
158
+ value: url,
159
+ onValueChange: setUrl,
160
+ placeholder: "https://example.com"
161
+ }
162
+ ),
163
+ /* @__PURE__ */ jsxs("div", { className: "oe-dialog-actions", children: [
164
+ /* @__PURE__ */ jsx(
165
+ OpenEditorButton,
166
+ {
167
+ type: "button",
168
+ className: "oe-dialog-button oe-dialog-button-remove",
169
+ onClick: () => {
170
+ controller.setLink(null);
171
+ onOpenChange(false);
172
+ },
173
+ children: "Remove"
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsx(OpenEditorButton, { type: "submit", className: "oe-dialog-button oe-dialog-button-primary", children: "Apply" })
177
+ ] })
178
+ ] })
179
+ ] })
180
+ ] }) });
181
+ };
182
+ var SelectionButton = ({
183
+ action
184
+ }) => /* @__PURE__ */ jsx(
185
+ Toolbar.Button,
186
+ {
187
+ type: "button",
188
+ "aria-label": action.label,
189
+ "aria-pressed": action.active,
190
+ className: "oe-toolbar-button",
191
+ "data-active": action.active ? "" : void 0,
192
+ onClick: action.run,
193
+ children: /* @__PURE__ */ jsx(action.Icon, { "aria-hidden": "true", className: "oe-toolbar-icon", size: 15, strokeWidth: 2 })
17
194
  }
18
- return createPortal(
195
+ );
196
+ var SelectionBlockTransformMenu = ({
197
+ controller,
198
+ container
199
+ }) => {
200
+ const activeAction = getActiveBlockTransform(controller);
201
+ return /* @__PURE__ */ jsxs(Menu.Root, { modal: false, children: [
19
202
  /* @__PURE__ */ jsxs(
20
- "div",
203
+ Menu.Trigger,
21
204
  {
22
- className,
23
- style: { left: selectionBubbleState.left, top: selectionBubbleState.top },
205
+ type: "button",
206
+ "aria-label": "Turn into",
207
+ className: "oe-toolbar-button oe-block-transform-trigger",
24
208
  onMouseDown: (event) => event.preventDefault(),
25
209
  children: [
26
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("bold") ? "is-active" : "", onClick: () => controller.toggleBold(), children: "B" }),
27
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("italic") ? "is-active" : "", onClick: () => controller.toggleItalic(), children: "I" }),
28
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("underline") ? "is-active" : "", onClick: () => controller.toggleUnderline(), children: "U" }),
29
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("strike") ? "is-active" : "", onClick: () => controller.toggleStrike(), children: "S" }),
30
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("code") ? "is-active" : "", onClick: () => controller.toggleInlineCode(), children: "</>" }),
31
- /* @__PURE__ */ jsx("button", { type: "button", className: editor.isActive("link") ? "is-active" : "", onClick: () => controller.setLink(), children: "Link" })
210
+ /* @__PURE__ */ jsx("span", { className: "oe-block-transform-trigger-label", children: "Turn into" }),
211
+ /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": "true", className: "oe-toolbar-chevron", size: 12, strokeWidth: 2 })
32
212
  ]
33
213
  }
34
214
  ),
35
- overlayContainer
215
+ /* @__PURE__ */ jsx(Menu.Portal, { container, children: /* @__PURE__ */ jsx(
216
+ Menu.Positioner,
217
+ {
218
+ positionMethod: "fixed",
219
+ side: "bottom",
220
+ align: "start",
221
+ sideOffset: 8,
222
+ collisionPadding: 12,
223
+ collisionAvoidance: { side: "flip", align: "shift", fallbackAxisSide: "none" },
224
+ children: /* @__PURE__ */ jsx(Menu.Popup, { className: "oe-block-transform-menu", children: blockTransformActions.map((action) => {
225
+ const active = action.key === activeAction.key;
226
+ return /* @__PURE__ */ jsxs(
227
+ Menu.Item,
228
+ {
229
+ className: "oe-block-transform-item",
230
+ "data-active": active ? "" : void 0,
231
+ label: action.label,
232
+ onClick: () => {
233
+ if (!active) {
234
+ action.run(controller);
235
+ }
236
+ },
237
+ children: [
238
+ /* @__PURE__ */ jsx(action.Icon, { "aria-hidden": "true", className: "oe-block-transform-icon", size: 15, strokeWidth: 2 }),
239
+ /* @__PURE__ */ jsx("span", { children: action.label })
240
+ ]
241
+ },
242
+ action.key
243
+ );
244
+ }) })
245
+ }
246
+ ) })
247
+ ] });
248
+ };
249
+ var OpenEditorSelectionBubble = ({
250
+ controller,
251
+ className = "oe-bubble-menu",
252
+ container
253
+ }) => {
254
+ const { editor, selectionBubbleState } = controller;
255
+ const [linkDialogOpen, setLinkDialogOpen] = useState(false);
256
+ const lastAnchorRef = useRef(null);
257
+ if (selectionBubbleState) {
258
+ lastAnchorRef.current = selectionBubbleState;
259
+ }
260
+ const anchor = useMemo(
261
+ () => {
262
+ const anchorState = selectionBubbleState ?? lastAnchorRef.current;
263
+ return anchorState ? toVirtualAnchor(anchorState, editor?.view.dom) : null;
264
+ },
265
+ [editor?.view.dom, selectionBubbleState]
36
266
  );
267
+ const actions = editor ? [
268
+ {
269
+ key: "bold",
270
+ label: "Bold",
271
+ active: editor.isActive("bold"),
272
+ Icon: Bold,
273
+ run: () => controller.toggleBold()
274
+ },
275
+ {
276
+ key: "italic",
277
+ label: "Italic",
278
+ active: editor.isActive("italic"),
279
+ Icon: Italic,
280
+ run: () => controller.toggleItalic()
281
+ },
282
+ {
283
+ key: "underline",
284
+ label: "Underline",
285
+ active: editor.isActive("underline"),
286
+ Icon: Underline,
287
+ run: () => controller.toggleUnderline()
288
+ },
289
+ {
290
+ key: "strike",
291
+ label: "Strikethrough",
292
+ active: editor.isActive("strike"),
293
+ Icon: Strikethrough,
294
+ run: () => controller.toggleStrike()
295
+ },
296
+ {
297
+ key: "code",
298
+ label: "Inline code",
299
+ active: editor.isActive("code"),
300
+ Icon: Code,
301
+ run: () => controller.toggleInlineCode()
302
+ }
303
+ ] : [];
304
+ if (!editor || !selectionBubbleState && !linkDialogOpen) {
305
+ return null;
306
+ }
307
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
308
+ /* @__PURE__ */ jsx(Popover.Root, { open: Boolean(selectionBubbleState), modal: false, children: /* @__PURE__ */ jsx(Popover.Portal, { container, children: /* @__PURE__ */ jsx(
309
+ Popover.Positioner,
310
+ {
311
+ anchor,
312
+ positionMethod: "fixed",
313
+ side: "top",
314
+ align: "center",
315
+ sideOffset: 10,
316
+ collisionPadding: 12,
317
+ collisionAvoidance: { side: "flip", align: "shift", fallbackAxisSide: "none" },
318
+ children: /* @__PURE__ */ jsx(
319
+ Popover.Popup,
320
+ {
321
+ className,
322
+ onMouseDown: (event) => event.preventDefault(),
323
+ children: /* @__PURE__ */ jsxs(Toolbar.Root, { className: "oe-selection-toolbar", "aria-label": "Selection formatting", children: [
324
+ /* @__PURE__ */ jsx(SelectionBlockTransformMenu, { controller, container }),
325
+ actions.map((action) => /* @__PURE__ */ jsx(SelectionButton, { action }, action.key)),
326
+ /* @__PURE__ */ jsx(
327
+ Toolbar.Button,
328
+ {
329
+ type: "button",
330
+ "aria-label": "Link",
331
+ className: "oe-toolbar-button",
332
+ "data-active": editor.isActive("link") ? "" : void 0,
333
+ onClick: () => setLinkDialogOpen(true),
334
+ children: /* @__PURE__ */ jsx(Link, { "aria-hidden": "true", className: "oe-toolbar-icon", size: 15, strokeWidth: 2 })
335
+ }
336
+ )
337
+ ] })
338
+ }
339
+ )
340
+ }
341
+ ) }) }),
342
+ /* @__PURE__ */ jsx(
343
+ OpenEditorLinkDialog,
344
+ {
345
+ controller,
346
+ open: linkDialogOpen,
347
+ onOpenChange: setLinkDialogOpen
348
+ }
349
+ )
350
+ ] });
37
351
  };
38
352
  var OpenEditorSlashMenu = ({
39
353
  controller,
@@ -43,31 +357,49 @@ var OpenEditorSlashMenu = ({
43
357
  }) => {
44
358
  const slashMenuItems = items ?? getDefaultSlashMenuItems(controller);
45
359
  const slashState = controller.slashState;
46
- const overlayContainer = getOverlayContainer(container);
47
- if (!slashState || !overlayContainer) {
360
+ const anchor = useMemo(
361
+ () => slashState ? toVirtualAnchor(
362
+ slashState,
363
+ controller.editor?.view.dom
364
+ ) : null,
365
+ [controller.editor?.view.dom, slashState]
366
+ );
367
+ if (!slashState) {
48
368
  return null;
49
369
  }
50
- return createPortal(
51
- /* @__PURE__ */ jsx("div", { className, style: { left: slashState.left, top: slashState.top }, children: slashMenuItems.filter((item) => {
52
- const haystack = `${item.label} ${item.group} ${item.keywords?.join(" ") ?? ""}`.toLowerCase();
53
- return haystack.includes(slashState.query.toLowerCase());
54
- }).map((item) => /* @__PURE__ */ jsxs(
55
- "button",
56
- {
57
- type: "button",
58
- onMouseDown: (event) => {
59
- event.preventDefault();
60
- item.run({ controller, range: { from: slashState.from, to: slashState.to } });
61
- },
62
- children: [
63
- /* @__PURE__ */ jsx("span", { children: item.label }),
64
- /* @__PURE__ */ jsx("small", { children: item.group })
65
- ]
66
- },
67
- item.key
68
- )) }),
69
- overlayContainer
70
- );
370
+ return /* @__PURE__ */ jsx(Menu.Root, { open: true, modal: false, children: /* @__PURE__ */ jsx(Menu.Portal, { container, children: /* @__PURE__ */ jsx(
371
+ Menu.Positioner,
372
+ {
373
+ anchor,
374
+ positionMethod: "fixed",
375
+ side: "bottom",
376
+ align: "start",
377
+ sideOffset: 8,
378
+ collisionPadding: 12,
379
+ collisionAvoidance: { side: "flip", align: "shift", fallbackAxisSide: "none" },
380
+ children: /* @__PURE__ */ jsx(Menu.Popup, { className, children: /* @__PURE__ */ jsx("div", { className: "oe-slash-menu-scroll", children: slashMenuItems.filter((item) => {
381
+ const haystack = `${item.label} ${item.group} ${item.keywords?.join(" ") ?? ""}`.toLowerCase();
382
+ return haystack.includes(slashState.query.toLowerCase());
383
+ }).map((item) => {
384
+ const Icon = getSlashMenuIcon(item);
385
+ return /* @__PURE__ */ jsxs(
386
+ Menu.Item,
387
+ {
388
+ className: "oe-slash-menu-item",
389
+ label: item.label,
390
+ onClick: () => {
391
+ item.run({ controller, range: { from: slashState.from, to: slashState.to } });
392
+ },
393
+ children: [
394
+ /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "oe-slash-menu-icon", size: 15, strokeWidth: 2 }),
395
+ /* @__PURE__ */ jsx("span", { children: item.label })
396
+ ]
397
+ },
398
+ item.key
399
+ );
400
+ }) }) })
401
+ }
402
+ ) }) });
71
403
  };
72
404
  var OpenEditor = ({
73
405
  className = "oe-editor-surface",
@@ -83,6 +415,6 @@ var OpenEditor = ({
83
415
  ] });
84
416
  };
85
417
 
86
- export { OpenEditor, OpenEditorSelectionBubble, OpenEditorSlashMenu };
418
+ export { OpenEditor, OpenEditorButton, OpenEditorInput, OpenEditorSelectionBubble, OpenEditorSlashMenu, OpenEditorToggle, OpenEditorToggleGroup };
87
419
  //# sourceMappingURL=index.js.map
88
420
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import \"./styles.css\";\nimport {\n getDefaultSlashMenuItems,\n OpenEditorContent,\n useOpenEditorController,\n type OpenEditorController,\n type OpenEditorReactProps,\n type OpenEditorSlashMenuItem,\n} from \"@openeditor/react\";\nimport { createPortal } from \"react-dom\";\n\nexport type OpenEditorSlashMenuProps = {\n controller: OpenEditorController;\n className?: string;\n items?: readonly OpenEditorSlashMenuItem[];\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorSelectionBubbleProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorProps = OpenEditorReactProps & {\n className?: string;\n contentClassName?: string;\n overlayContainer?: HTMLElement | null;\n};\n\nconst getOverlayContainer = (container?: HTMLElement | null) =>\n container ?? (typeof document === \"undefined\" ? null : document.body);\n\nexport const OpenEditorSelectionBubble = ({\n controller,\n className = \"oe-bubble-menu\",\n container,\n}: OpenEditorSelectionBubbleProps) => {\n const { editor, selectionBubbleState } = controller;\n const overlayContainer = getOverlayContainer(container);\n\n if (!editor || !selectionBubbleState || !overlayContainer) {\n return null;\n }\n\n return createPortal(\n <div\n className={className}\n style={{ left: selectionBubbleState.left, top: selectionBubbleState.top }}\n onMouseDown={(event) => event.preventDefault()}\n >\n <button type=\"button\" className={editor.isActive(\"bold\") ? \"is-active\" : \"\"} onClick={() => controller.toggleBold()}>B</button>\n <button type=\"button\" className={editor.isActive(\"italic\") ? \"is-active\" : \"\"} onClick={() => controller.toggleItalic()}>I</button>\n <button type=\"button\" className={editor.isActive(\"underline\") ? \"is-active\" : \"\"} onClick={() => controller.toggleUnderline()}>U</button>\n <button type=\"button\" className={editor.isActive(\"strike\") ? \"is-active\" : \"\"} onClick={() => controller.toggleStrike()}>S</button>\n <button type=\"button\" className={editor.isActive(\"code\") ? \"is-active\" : \"\"} onClick={() => controller.toggleInlineCode()}>{\"</>\"}</button>\n <button type=\"button\" className={editor.isActive(\"link\") ? \"is-active\" : \"\"} onClick={() => controller.setLink()}>Link</button>\n </div>,\n overlayContainer,\n );\n};\n\nexport const OpenEditorSlashMenu = ({\n controller,\n className = \"oe-slash-menu\",\n items,\n container,\n}: OpenEditorSlashMenuProps) => {\n const slashMenuItems = items ?? getDefaultSlashMenuItems(controller);\n const slashState = controller.slashState;\n const overlayContainer = getOverlayContainer(container);\n\n if (!slashState || !overlayContainer) {\n return null;\n }\n\n return createPortal(\n <div className={className} style={{ left: slashState.left, top: slashState.top }}>\n {slashMenuItems\n .filter((item) => {\n const haystack = `${item.label} ${item.group} ${item.keywords?.join(\" \") ?? \"\"}`.toLowerCase();\n return haystack.includes(slashState.query.toLowerCase());\n })\n .map((item) => (\n <button\n key={item.key}\n type=\"button\"\n onMouseDown={(event) => {\n event.preventDefault();\n item.run({ controller, range: { from: slashState.from, to: slashState.to } });\n }}\n >\n <span>{item.label}</span>\n <small>{item.group}</small>\n </button>\n ))}\n </div>,\n overlayContainer,\n );\n};\n\nexport const OpenEditor = ({\n className = \"oe-editor-surface\",\n contentClassName,\n overlayContainer,\n ...props\n}: OpenEditorProps) => {\n const controller = useOpenEditorController(props);\n\n return (\n <div className={className}>\n <OpenEditorContent controller={controller} className={contentClassName} />\n <OpenEditorSelectionBubble controller={controller} container={overlayContainer} />\n <OpenEditorSlashMenu controller={controller} container={overlayContainer} />\n </div>\n );\n};\n\nexport { OpenEditorContent, useOpenEditorController };\nexport type { OpenEditorController, OpenEditorReactProps, OpenEditorSlashMenuItem };\n"]}
1
+ {"version":3,"sources":["../src/index.tsx"],"names":["ImageIcon"],"mappings":"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","file":"index.js","sourcesContent":["import \"./styles.css\";\nimport { Button, type Button as BaseButton } from \"@base-ui/react/button\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { Input, type Input as BaseInput } from \"@base-ui/react/input\";\nimport { Menu } from \"@base-ui/react/menu\";\nimport { Popover } from \"@base-ui/react/popover\";\nimport { Toggle, type Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup, type ToggleGroup as BaseToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { Toolbar } from \"@base-ui/react/toolbar\";\nimport {\n ArrowDown,\n ArrowUp,\n Bold,\n ChevronDown,\n Columns2,\n Code,\n Heading2,\n Image as ImageIcon,\n Italic,\n Link,\n List,\n ListOrdered,\n ListTodo,\n Minus,\n Pilcrow,\n Quote,\n Strikethrough,\n Table,\n Type,\n Underline,\n X,\n type LucideIcon,\n} from \"lucide-react\";\nimport {\n getDefaultSlashMenuItems,\n OpenEditorContent,\n useOpenEditorController,\n type OpenEditorController,\n type OpenEditorReactProps,\n type OpenEditorSlashMenuItem,\n} from \"@openeditor/react\";\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n} from \"react\";\n\nexport type OpenEditorSlashMenuProps = {\n controller: OpenEditorController;\n className?: string;\n items?: readonly OpenEditorSlashMenuItem[];\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorSelectionBubbleProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorProps = OpenEditorReactProps & {\n className?: string;\n contentClassName?: string;\n overlayContainer?: HTMLElement | null;\n};\n\nexport type OpenEditorButtonProps = BaseButton.Props;\nexport type OpenEditorToggleProps<Value extends string = string> = BaseToggle.Props<Value>;\nexport type OpenEditorToggleGroupProps<Value extends string = string> = BaseToggleGroup.Props<Value>;\nexport type OpenEditorInputProps = BaseInput.Props;\n\ntype OverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype AnchoredOverlayState = {\n left: number;\n top: number;\n anchorRect?: OverlayRect;\n};\n\ntype VirtualAnchor = {\n contextElement?: Element;\n getBoundingClientRect: () => DOMRect;\n};\n\ntype SelectionAction = {\n key: string;\n label: string;\n active: boolean;\n Icon: LucideIcon;\n run: () => void;\n};\n\ntype BlockTransformAction = {\n key: string;\n label: string;\n Icon: LucideIcon;\n isActive: (controller: OpenEditorController) => boolean;\n run: (controller: OpenEditorController) => void;\n};\n\nconst blockTransformActions: BlockTransformAction[] = [\n {\n key: \"paragraph\",\n label: \"Paragraph\",\n Icon: Pilcrow,\n isActive: ({ editor }) => editor?.isActive(\"paragraph\") ?? false,\n run: (controller) => controller.setParagraph(),\n },\n {\n key: \"heading\",\n label: \"Heading\",\n Icon: Heading2,\n isActive: ({ editor }) => editor?.isActive(\"heading\") ?? false,\n run: (controller) => controller.toggleHeading(2),\n },\n {\n key: \"bulletList\",\n label: \"Bullet List\",\n Icon: List,\n isActive: ({ editor }) => editor?.isActive(\"bulletList\") ?? false,\n run: (controller) => controller.toggleBulletList(),\n },\n {\n key: \"orderedList\",\n label: \"Numbered List\",\n Icon: ListOrdered,\n isActive: ({ editor }) => editor?.isActive(\"orderedList\") ?? false,\n run: (controller) => controller.toggleOrderedList(),\n },\n {\n key: \"taskList\",\n label: \"Task List\",\n Icon: ListTodo,\n isActive: ({ editor }) => editor?.isActive(\"taskList\") ?? false,\n run: (controller) => controller.toggleTaskList(),\n },\n {\n key: \"blockquote\",\n label: \"Quote\",\n Icon: Quote,\n isActive: ({ editor }) => editor?.isActive(\"blockquote\") ?? false,\n run: (controller) => controller.toggleBlockquote(),\n },\n {\n key: \"codeBlock\",\n label: \"Code\",\n Icon: Code,\n isActive: ({ editor }) => editor?.isActive(\"codeBlock\") ?? false,\n run: (controller) => controller.toggleCodeBlock(),\n },\n];\n\nconst getActiveBlockTransform = (controller: OpenEditorController) =>\n [\n \"taskList\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"heading\",\n \"paragraph\",\n ]\n .map((key) => blockTransformActions.find((action) => action.key === key))\n .find((action) => action?.isActive(controller)) ?? blockTransformActions[0];\n\nconst slashMenuIcons: Record<string, LucideIcon> = {\n paragraph: Pilcrow,\n heading: Heading2,\n bulletList: List,\n orderedList: ListOrdered,\n taskList: ListTodo,\n blockquote: Quote,\n codeBlock: Code,\n divider: Minus,\n image: ImageIcon,\n columns: Columns2,\n table: Table,\n moveBlockUp: ArrowUp,\n moveBlockDown: ArrowDown,\n};\n\nconst getSlashMenuIcon = (item: OpenEditorSlashMenuItem) => slashMenuIcons[item.key] ?? Type;\n\nconst pointRect = (left: number, top: number): OverlayRect => ({\n left,\n right: left,\n top,\n bottom: top,\n width: 0,\n height: 0,\n});\n\nconst getAnchorRect = (state: AnchoredOverlayState) => state.anchorRect ?? pointRect(state.left, state.top);\n\nconst toVirtualAnchor = (\n state: AnchoredOverlayState,\n contextElement?: Element | null,\n): VirtualAnchor => ({\n contextElement: contextElement ?? undefined,\n getBoundingClientRect: () => {\n const rect = getAnchorRect(state);\n return {\n ...rect,\n x: rect.left,\n y: rect.top,\n toJSON: () => rect,\n } as DOMRect;\n },\n});\n\nconst cx = (...classes: Array<string | false | null | undefined>) => classes.filter(Boolean).join(\" \");\n\nconst withBaseClass = <State,>(baseClassName: string, className?: string | ((state: State) => string | undefined)) => {\n if (typeof className === \"function\") {\n return (state: State) => cx(baseClassName, className(state));\n }\n\n return cx(baseClassName, className);\n};\n\nexport const OpenEditorButton = ({ className, ...props }: OpenEditorButtonProps) => (\n <Button className={withBaseClass<BaseButton.State>(\"oe-button\", className)} {...props} />\n);\n\nexport const OpenEditorToggle = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleProps<Value>) => (\n <Toggle<Value> className={withBaseClass<BaseToggle.State>(\"oe-button oe-toggle\", className)} {...props} />\n);\n\nexport const OpenEditorToggleGroup = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleGroupProps<Value>) => (\n <ToggleGroup<Value> className={withBaseClass<BaseToggleGroup.State>(\"oe-toggle-group\", className)} {...props} />\n);\n\nexport const OpenEditorInput = ({ className, ...props }: OpenEditorInputProps) => (\n <Input className={withBaseClass<BaseInput.State>(\"oe-input\", className)} {...props} />\n);\n\nconst OpenEditorLinkDialog = ({\n controller,\n open,\n onOpenChange,\n}: {\n controller: OpenEditorController;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const [url, setUrl] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setUrl(controller.getActiveLink() ?? \"https://\");\n }\n }, [open]);\n\n const submitLink = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n controller.setLink(url.trim());\n onOpenChange(false);\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Backdrop className=\"oe-dialog-backdrop\" />\n <Dialog.Popup className=\"oe-dialog\" initialFocus={false}>\n <Dialog.Close className=\"oe-dialog-close\" aria-label=\"Close link dialog\">\n <X aria-hidden=\"true\" size={15} strokeWidth={2} />\n </Dialog.Close>\n <form className=\"oe-link-dialog-form\" onSubmit={submitLink}>\n <Dialog.Title className=\"oe-dialog-title\">Link</Dialog.Title>\n <OpenEditorInput\n aria-label=\"Link URL\"\n autoComplete=\"url\"\n inputMode=\"url\"\n value={url}\n onValueChange={setUrl}\n placeholder=\"https://example.com\"\n />\n <div className=\"oe-dialog-actions\">\n <OpenEditorButton\n type=\"button\"\n className=\"oe-dialog-button oe-dialog-button-remove\"\n onClick={() => {\n controller.setLink(null);\n onOpenChange(false);\n }}\n >\n Remove\n </OpenEditorButton>\n <OpenEditorButton type=\"submit\" className=\"oe-dialog-button oe-dialog-button-primary\">Apply</OpenEditorButton>\n </div>\n </form>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nconst SelectionButton = ({\n action,\n}: {\n action: SelectionAction;\n}) => (\n <Toolbar.Button\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.active}\n className=\"oe-toolbar-button\"\n data-active={action.active ? \"\" : undefined}\n onClick={action.run}\n >\n <action.Icon aria-hidden=\"true\" className=\"oe-toolbar-icon\" size={15} strokeWidth={2} />\n </Toolbar.Button>\n);\n\nconst SelectionBlockTransformMenu = ({\n controller,\n container,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n}) => {\n const activeAction = getActiveBlockTransform(controller);\n\n return (\n <Menu.Root modal={false}>\n <Menu.Trigger\n type=\"button\"\n aria-label=\"Turn into\"\n className=\"oe-toolbar-button oe-block-transform-trigger\"\n onMouseDown={(event) => event.preventDefault()}\n >\n <span className=\"oe-block-transform-trigger-label\">Turn into</span>\n <ChevronDown aria-hidden=\"true\" className=\"oe-toolbar-chevron\" size={12} strokeWidth={2} />\n </Menu.Trigger>\n <Menu.Portal container={container}>\n <Menu.Positioner\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Menu.Popup className=\"oe-block-transform-menu\">\n {blockTransformActions.map((action) => {\n const active = action.key === activeAction.key;\n\n return (\n <Menu.Item\n key={action.key}\n className=\"oe-block-transform-item\"\n data-active={active ? \"\" : undefined}\n label={action.label}\n onClick={() => {\n if (!active) {\n action.run(controller);\n }\n }}\n >\n <action.Icon aria-hidden=\"true\" className=\"oe-block-transform-icon\" size={15} strokeWidth={2} />\n <span>{action.label}</span>\n </Menu.Item>\n );\n })}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nexport const OpenEditorSelectionBubble = ({\n controller,\n className = \"oe-bubble-menu\",\n container,\n}: OpenEditorSelectionBubbleProps) => {\n const { editor, selectionBubbleState } = controller;\n const [linkDialogOpen, setLinkDialogOpen] = useState(false);\n const lastAnchorRef = useRef<AnchoredOverlayState | null>(null);\n\n if (selectionBubbleState) {\n lastAnchorRef.current = selectionBubbleState;\n }\n\n const anchor = useMemo(\n () => {\n const anchorState = selectionBubbleState ?? lastAnchorRef.current;\n return anchorState ? toVirtualAnchor(anchorState, editor?.view.dom) : null;\n },\n [editor?.view.dom, selectionBubbleState],\n );\n\n const actions: SelectionAction[] = editor\n ? [\n {\n key: \"bold\",\n label: \"Bold\",\n active: editor.isActive(\"bold\"),\n Icon: Bold,\n run: () => controller.toggleBold(),\n },\n {\n key: \"italic\",\n label: \"Italic\",\n active: editor.isActive(\"italic\"),\n Icon: Italic,\n run: () => controller.toggleItalic(),\n },\n {\n key: \"underline\",\n label: \"Underline\",\n active: editor.isActive(\"underline\"),\n Icon: Underline,\n run: () => controller.toggleUnderline(),\n },\n {\n key: \"strike\",\n label: \"Strikethrough\",\n active: editor.isActive(\"strike\"),\n Icon: Strikethrough,\n run: () => controller.toggleStrike(),\n },\n {\n key: \"code\",\n label: \"Inline code\",\n active: editor.isActive(\"code\"),\n Icon: Code,\n run: () => controller.toggleInlineCode(),\n },\n ]\n : [];\n\n if (!editor || (!selectionBubbleState && !linkDialogOpen)) {\n return null;\n }\n\n return (\n <>\n <Popover.Root open={Boolean(selectionBubbleState)} modal={false}>\n <Popover.Portal container={container}>\n <Popover.Positioner\n anchor={anchor}\n positionMethod=\"fixed\"\n side=\"top\"\n align=\"center\"\n sideOffset={10}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Popover.Popup\n className={className}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Toolbar.Root className=\"oe-selection-toolbar\" aria-label=\"Selection formatting\">\n <SelectionBlockTransformMenu controller={controller} container={container} />\n {actions.map((action) => (\n <SelectionButton key={action.key} action={action} />\n ))}\n <Toolbar.Button\n type=\"button\"\n aria-label=\"Link\"\n className=\"oe-toolbar-button\"\n data-active={editor.isActive(\"link\") ? \"\" : undefined}\n onClick={() => setLinkDialogOpen(true)}\n >\n <Link aria-hidden=\"true\" className=\"oe-toolbar-icon\" size={15} strokeWidth={2} />\n </Toolbar.Button>\n </Toolbar.Root>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n <OpenEditorLinkDialog\n controller={controller}\n open={linkDialogOpen}\n onOpenChange={setLinkDialogOpen}\n />\n </>\n );\n};\n\nexport const OpenEditorSlashMenu = ({\n controller,\n className = \"oe-slash-menu\",\n items,\n container,\n}: OpenEditorSlashMenuProps) => {\n const slashMenuItems = items ?? getDefaultSlashMenuItems(controller);\n const slashState = controller.slashState;\n const anchor = useMemo(\n () =>\n slashState\n ? toVirtualAnchor(\n slashState,\n controller.editor?.view.dom,\n )\n : null,\n [controller.editor?.view.dom, slashState],\n );\n\n if (!slashState) {\n return null;\n }\n\n return (\n <Menu.Root open modal={false}>\n <Menu.Portal container={container}>\n <Menu.Positioner\n anchor={anchor}\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Menu.Popup className={className}>\n <div className=\"oe-slash-menu-scroll\">\n {slashMenuItems\n .filter((item) => {\n const haystack = `${item.label} ${item.group} ${item.keywords?.join(\" \") ?? \"\"}`.toLowerCase();\n return haystack.includes(slashState.query.toLowerCase());\n })\n .map((item) => {\n const Icon = getSlashMenuIcon(item);\n\n return (\n <Menu.Item\n key={item.key}\n className=\"oe-slash-menu-item\"\n label={item.label}\n onClick={() => {\n item.run({ controller, range: { from: slashState.from, to: slashState.to } });\n }}\n >\n <Icon aria-hidden=\"true\" className=\"oe-slash-menu-icon\" size={15} strokeWidth={2} />\n <span>{item.label}</span>\n </Menu.Item>\n );\n })}\n </div>\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nexport const OpenEditor = ({\n className = \"oe-editor-surface\",\n contentClassName,\n overlayContainer,\n ...props\n}: OpenEditorProps) => {\n const controller = useOpenEditorController(props);\n\n return (\n <div className={className}>\n <OpenEditorContent controller={controller} className={contentClassName} />\n <OpenEditorSelectionBubble controller={controller} container={overlayContainer} />\n <OpenEditorSlashMenu controller={controller} container={overlayContainer} />\n </div>\n );\n};\n\nexport { OpenEditorContent, useOpenEditorController };\nexport type { OpenEditorController, OpenEditorReactProps, OpenEditorSlashMenuItem };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openeditor/ui",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css"
@@ -27,7 +27,9 @@
27
27
  "./package.json": "./package.json"
28
28
  },
29
29
  "dependencies": {
30
- "@openeditor/react": "0.0.5",
30
+ "@base-ui/react": "^1.6.0",
31
+ "@openeditor/react": "0.0.7",
32
+ "lucide-react": "^1.23.0",
31
33
  "react": "19.2.7",
32
34
  "react-dom": "19.2.7"
33
35
  },