@openeditor/ui 0.0.29 → 0.0.31

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,11 +7,44 @@ 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
+ - `OpenEditorTableMenu` for selection-aware row, column, header, cell, and table actions
10
11
  - `OpenEditorButton`, `OpenEditorToggle`, `OpenEditorToggleGroup`, and `OpenEditorInput` as Base UI-backed app primitives
11
12
  - `OpenEditorContent` and `useOpenEditorController` re-exported from `@openeditor/react`
12
13
 
13
14
  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.
14
15
 
16
+ ## Editor interaction contract
17
+
18
+ OpenEditor keeps keyboard ownership in the editable surface unless the user
19
+ explicitly enters another control:
20
+
21
+ - Selecting text shows the formatting toolbar without moving focus. Delete,
22
+ Backspace, typing, arrow keys, and formatting/history shortcuts therefore keep
23
+ their normal editing meaning. The toolbar follows its document selection in
24
+ the editor's actual scroll container and hides once that selection is clipped.
25
+ Pointer presses on toolbar actions preserve the document selection. `Alt+F10`
26
+ moves focus into the toolbar, its arrow keys move between controls, and
27
+ `Escape` returns focus to the document.
28
+ - Typing `/` opens one flat, filtered command list. Focus stays in the document;
29
+ `ArrowUp`/`ArrowDown`, `Home`/`End`, and `PageUp`/`PageDown` change the active
30
+ command, `Enter` runs it, and `Escape` dismisses the current slash session.
31
+ Its anchor is resolved live from the document position while scrolling and is
32
+ hidden when clipped. A dismissed session does not reopen merely because more
33
+ query characters are typed.
34
+ - The block handle menu is an explicit focus-owning menu. `Enter` or `Space`
35
+ opens it, menu arrow keys navigate it, `Enter` runs an action, and `Escape` or
36
+ an outside press closes it. Closing, dragging, and running an action all pass
37
+ through the same unlock transition, so hover targeting cannot remain frozen.
38
+ - Selecting a table cell shows a toolbar anchored to the table. Row and column
39
+ menus preserve the cell selection while insert/delete commands run, and
40
+ header, merge/split, and whole-table actions use the same transactional table
41
+ controller as custom host UI.
42
+
43
+ Formatting and history shortcuts come from Tiptap's registered mark and history
44
+ extensions. OpenEditor keeps focus in the editor so those extension-owned
45
+ bindings receive `Cmd` on macOS and `Ctrl` elsewhere without a competing global
46
+ shortcut layer.
47
+
15
48
  ## Theming
16
49
 
17
50
  Use the typed theme contract instead of targeting OpenEditor implementation classes or defining global custom properties. The provider scopes tokens to editor content and automatically forwards them to portaled menus and dialogs.
@@ -47,7 +80,7 @@ export function Editor() {
47
80
  export function HeadlessComposition() {
48
81
  return (
49
82
  <OpenEditorThemeProvider theme={theme}>
50
- {/* OpenEditorContent, OpenEditorSelectionBubble, OpenEditorSlashMenu */}
83
+ {/* OpenEditorContent, OpenEditorSelectionBubble, OpenEditorTableMenu, OpenEditorSlashMenu */}
51
84
  </OpenEditorThemeProvider>
52
85
  );
53
86
  }
package/dist/index.css CHANGED
@@ -188,6 +188,229 @@
188
188
  margin: var(--oe-space-block, 16px) 0;
189
189
  max-width: 100%;
190
190
  }
191
+ .oe-image {
192
+ border-radius: var(--oe-radius-medium, 8px);
193
+ margin: var(--oe-space-block, 16px) 0;
194
+ max-width: 100%;
195
+ position: relative;
196
+ }
197
+ .oe-image-preview {
198
+ border-radius: inherit;
199
+ overflow: hidden;
200
+ position: relative;
201
+ }
202
+ .oe-prosemirror .oe-image img {
203
+ border-radius: inherit;
204
+ height: auto;
205
+ margin: 0;
206
+ max-width: 100%;
207
+ }
208
+ .oe-image-empty {
209
+ align-items: center;
210
+ background: var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5));
211
+ border: 1px dashed var(--oe-border, #d4d4d4);
212
+ border-radius: inherit;
213
+ display: flex;
214
+ gap: 8px;
215
+ min-height: 56px;
216
+ padding: 8px;
217
+ transition: background 120ms ease, border-color 120ms ease;
218
+ }
219
+ .oe-image:focus-within .oe-image-empty,
220
+ .oe-image[data-selected=true] .oe-image-empty,
221
+ .oe-image-empty:hover {
222
+ background: color-mix(in srgb, var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5)) 92%, var(--oe-text, #171717));
223
+ border-color: var(--oe-muted, #737373);
224
+ }
225
+ .oe-image-empty-icon {
226
+ align-items: center;
227
+ color: var(--oe-muted, #737373);
228
+ display: inline-flex;
229
+ flex: 0 0 28px;
230
+ height: 28px;
231
+ justify-content: center;
232
+ }
233
+ .oe-image-empty-icon svg {
234
+ height: 17px;
235
+ width: 17px;
236
+ }
237
+ .oe-image-empty-copy {
238
+ display: flex;
239
+ flex: 1;
240
+ flex-direction: column;
241
+ line-height: 1.25;
242
+ min-width: 0;
243
+ }
244
+ .oe-image-empty-copy strong {
245
+ font-size: 13px;
246
+ font-weight: 600;
247
+ }
248
+ .oe-image-empty-copy span {
249
+ color: var(--oe-muted, #737373);
250
+ font-size: 11px;
251
+ margin-top: 2px;
252
+ }
253
+ .oe-image-empty > .oe-image-empty-action {
254
+ background: transparent;
255
+ border-color: transparent;
256
+ color: var(--oe-muted, #737373);
257
+ flex: 0 0 24px;
258
+ height: 24px;
259
+ padding: 0;
260
+ width: 24px;
261
+ }
262
+ .oe-image-empty > .oe-image-empty-action:hover,
263
+ .oe-image-empty > .oe-image-empty-action:focus-visible {
264
+ background: transparent;
265
+ border-color: transparent;
266
+ color: var(--oe-text, #171717);
267
+ }
268
+ .oe-image-empty > .oe-image-empty-action + .oe-image-empty-action {
269
+ margin-left: -6px;
270
+ }
271
+ .oe-image button {
272
+ align-items: center;
273
+ background: var(--oe-surface, #fff);
274
+ border: 1px solid var(--oe-border, #d4d4d4);
275
+ border-radius: 6px;
276
+ color: var(--oe-text, #171717);
277
+ cursor: pointer;
278
+ display: inline-flex;
279
+ font: inherit;
280
+ font-size: 11px;
281
+ font-weight: 500;
282
+ gap: 4px;
283
+ height: 26px;
284
+ justify-content: center;
285
+ padding: 0 7px;
286
+ }
287
+ .oe-image button:hover,
288
+ .oe-image button:focus-visible {
289
+ border-color: var(--oe-muted, #737373);
290
+ outline: none;
291
+ }
292
+ .oe-image button:disabled {
293
+ cursor: default;
294
+ opacity: .55;
295
+ }
296
+ .oe-image button svg {
297
+ height: 13px;
298
+ width: 13px;
299
+ }
300
+ .oe-image button.oe-image-primary {
301
+ background: var(--oe-text, #171717);
302
+ border-color: var(--oe-text, #171717);
303
+ color: var(--oe-surface, #fff);
304
+ }
305
+ .oe-image button.oe-image-remove {
306
+ background: transparent;
307
+ border-color: transparent;
308
+ color: var(--oe-muted, #737373);
309
+ padding: 0;
310
+ width: 24px;
311
+ }
312
+ .oe-image button.oe-image-remove:hover,
313
+ .oe-image button.oe-image-remove:focus-visible {
314
+ color: #c83232;
315
+ }
316
+ .oe-image-actions {
317
+ align-items: center;
318
+ background: color-mix(in srgb, var(--oe-surface, #fff) 94%, transparent);
319
+ border: 1px solid var(--oe-border, #d4d4d4);
320
+ border-radius: 8px;
321
+ bottom: 10px;
322
+ box-shadow: 0 8px 24px var(--oe-shadow, rgb(0 0 0 / 12%));
323
+ display: flex;
324
+ gap: 3px;
325
+ opacity: 0;
326
+ padding: 3px;
327
+ pointer-events: none;
328
+ position: absolute;
329
+ right: 10px;
330
+ transform: translateY(4px);
331
+ transition: opacity 120ms ease, transform 120ms ease;
332
+ }
333
+ .oe-image-preview:hover .oe-image-actions,
334
+ .oe-image:focus-within .oe-image-actions,
335
+ .oe-image[data-selected=true] .oe-image-actions {
336
+ opacity: 1;
337
+ pointer-events: auto;
338
+ transform: translateY(0);
339
+ }
340
+ .oe-image-actions button {
341
+ border: 0;
342
+ }
343
+ .oe-image-panel,
344
+ .oe-image-upload-status,
345
+ .oe-image-error {
346
+ align-items: end;
347
+ background: var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5));
348
+ border-radius: 0 0 var(--oe-radius-medium, 8px) var(--oe-radius-medium, 8px);
349
+ display: flex;
350
+ gap: 8px;
351
+ padding: 10px;
352
+ }
353
+ .oe-image-panel label {
354
+ display: flex;
355
+ flex: 1;
356
+ flex-direction: column;
357
+ gap: 5px;
358
+ min-width: 0;
359
+ }
360
+ .oe-image-panel label span {
361
+ color: var(--oe-muted, #737373);
362
+ font-size: 11px;
363
+ font-weight: 600;
364
+ }
365
+ .oe-image-panel input {
366
+ background: var(--oe-surface, #fff);
367
+ border: 1px solid var(--oe-border, #d4d4d4);
368
+ border-radius: 6px;
369
+ color: var(--oe-text, #171717);
370
+ font: inherit;
371
+ height: 32px;
372
+ outline: none;
373
+ padding: 0 9px;
374
+ width: 100%;
375
+ }
376
+ .oe-image-panel input:focus {
377
+ border-color: var(--oe-muted, #737373);
378
+ }
379
+ .oe-image-upload-status {
380
+ align-items: center;
381
+ color: var(--oe-muted, #737373);
382
+ font-size: 12px;
383
+ }
384
+ .oe-image-progress {
385
+ background: var(--oe-border, #d4d4d4);
386
+ border-radius: 2px;
387
+ flex: 1;
388
+ height: 4px;
389
+ overflow: hidden;
390
+ }
391
+ .oe-image-progress span {
392
+ background: var(--oe-accent-strong, #171717);
393
+ display: block;
394
+ height: 100%;
395
+ transition: width 90ms linear;
396
+ }
397
+ .oe-image-error {
398
+ align-items: center;
399
+ color: #b42318;
400
+ font-size: 12px;
401
+ }
402
+ .oe-image-error span {
403
+ flex: 1;
404
+ }
405
+ @media (max-width: 560px) {
406
+ .oe-image-panel {
407
+ align-items: stretch;
408
+ flex-wrap: wrap;
409
+ }
410
+ .oe-image-panel label {
411
+ flex-basis: 100%;
412
+ }
413
+ }
191
414
  .oe-prosemirror blockquote,
192
415
  .oe-viewer blockquote {
193
416
  border-left: 3px solid var(--oe-structural-line, var(--oe-border, #e5e5e5));
@@ -287,15 +510,15 @@
287
510
  .oe-viewer li {
288
511
  margin: 4px 0;
289
512
  }
290
- .oe-prosemirror [data-openeditor-toggle-list],
291
- .oe-viewer [data-openeditor-toggle-list] {
513
+ .oe-prosemirror ul[data-openeditor-toggle-list],
514
+ .oe-viewer ul[data-openeditor-toggle-list] {
292
515
  list-style: none;
293
516
  margin: 18px 0;
294
517
  padding: 0;
295
518
  }
296
519
  .oe-toggle-list-item:not(details) {
297
520
  display: grid;
298
- gap: 8px;
521
+ column-gap: 8px;
299
522
  grid-template-columns: 24px minmax(0, 1fr);
300
523
  }
301
524
  details.oe-toggle-list-item {
@@ -303,15 +526,22 @@ details.oe-toggle-list-item {
303
526
  margin: 8px 0;
304
527
  }
305
528
  details.oe-toggle-list-item > summary {
529
+ color: var(--oe-text-soft, #262626);
306
530
  cursor: pointer;
307
531
  font-weight: 500;
308
532
  }
533
+ details.oe-toggle-list-item > summary::marker {
534
+ color: currentColor;
535
+ }
536
+ details.oe-toggle-list-item > summary + * {
537
+ margin-top: 8px;
538
+ }
309
539
  .oe-toggle-list-trigger {
310
540
  align-items: center;
311
541
  align-self: start;
312
542
  background: transparent;
313
543
  border: 0;
314
- color: var(--oe-muted, #737373);
544
+ color: var(--oe-text-soft, #262626);
315
545
  cursor: pointer;
316
546
  display: inline-flex;
317
547
  height: 24px;
@@ -349,6 +579,14 @@ details.oe-toggle-list-item > summary {
349
579
  .oe-toggle-list-content > [data-node-view-content-react] > :first-child {
350
580
  margin-top: 0;
351
581
  }
582
+ .oe-toggle-list-content > :first-child:not(:last-child),
583
+ .oe-toggle-list-content > [data-node-view-content-react] > :first-child:not(:last-child) {
584
+ margin-bottom: 8px;
585
+ }
586
+ .oe-toggle-list-content > :first-child + *,
587
+ .oe-toggle-list-content > [data-node-view-content-react] > :first-child + * {
588
+ margin-top: 8px;
589
+ }
352
590
  .oe-toggle-list-content > :last-child,
353
591
  .oe-toggle-list-content > [data-node-view-content-react] > :last-child {
354
592
  margin-bottom: 0;
@@ -406,11 +644,12 @@ details.oe-toggle-list-item > summary {
406
644
  min-height: 34px;
407
645
  padding: 3px 6px;
408
646
  text-align: left;
647
+ transition: background 120ms ease;
409
648
  width: 100%;
410
649
  }
411
650
  .oe-page:hover,
412
651
  .oe-page:focus-within {
413
- background: var(--oe-surface-muted, #f5f5f5);
652
+ background: var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5));
414
653
  }
415
654
  .oe-page[data-page-id]:not([data-page-id=""]) {
416
655
  cursor: pointer;
@@ -815,6 +1054,15 @@ details.oe-toggle-list-item > summary {
815
1054
  table-layout: fixed;
816
1055
  width: 100%;
817
1056
  }
1057
+ .oe-prosemirror .tableWrapper {
1058
+ margin: 18px 0;
1059
+ max-width: 100%;
1060
+ overflow-x: auto;
1061
+ padding: 2px;
1062
+ }
1063
+ .oe-prosemirror .tableWrapper > table {
1064
+ margin: 0;
1065
+ }
818
1066
  .oe-prosemirror .tableWrapper > table th,
819
1067
  .oe-prosemirror .tableWrapper > table td,
820
1068
  .oe-prosemirror table[data-openeditor-table] th,
@@ -832,6 +1080,31 @@ details.oe-toggle-list-item > summary {
832
1080
  .oe-viewer table[data-openeditor-table] th {
833
1081
  font-weight: 700;
834
1082
  }
1083
+ .oe-prosemirror .selectedCell {
1084
+ position: relative;
1085
+ }
1086
+ .oe-prosemirror .selectedCell::after {
1087
+ background: color-mix(in srgb, var(--oe-accent-strong, #171717) 10%, transparent);
1088
+ border: 2px solid var(--oe-accent-strong, #171717);
1089
+ content: "";
1090
+ inset: -1px;
1091
+ pointer-events: none;
1092
+ position: absolute;
1093
+ z-index: 1;
1094
+ }
1095
+ .oe-prosemirror .column-resize-handle {
1096
+ background: var(--oe-accent-strong, #171717);
1097
+ bottom: -1px;
1098
+ pointer-events: none;
1099
+ position: absolute;
1100
+ right: -2px;
1101
+ top: -1px;
1102
+ width: 3px;
1103
+ z-index: 2;
1104
+ }
1105
+ .oe-prosemirror.resize-cursor {
1106
+ cursor: col-resize;
1107
+ }
835
1108
  .oe-button,
836
1109
  .oe-input {
837
1110
  border: 1px solid var(--oe-border-strong, #d4d4d4);
@@ -877,6 +1150,10 @@ details.oe-toggle-list-item > summary {
877
1150
  outline: none;
878
1151
  z-index: 1002;
879
1152
  }
1153
+ .oe-anchored-overlay-positioner[data-anchor-hidden] {
1154
+ visibility: hidden;
1155
+ pointer-events: none;
1156
+ }
880
1157
  .oe-cascade-panel {
881
1158
  flex: 0 0 auto;
882
1159
  }
@@ -965,6 +1242,93 @@ details.oe-toggle-list-item > summary {
965
1242
  padding: 3px;
966
1243
  z-index: 1000;
967
1244
  }
1245
+ .oe-table-menu {
1246
+ background: var(--oe-surface, #ffffff);
1247
+ border-radius: 999px;
1248
+ box-shadow: 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 7%)), 0 10px 28px var(--oe-shadow, rgb(0 0 0 / 12%));
1249
+ padding: 3px;
1250
+ z-index: 1000;
1251
+ }
1252
+ .oe-table-toolbar {
1253
+ align-items: center;
1254
+ display: flex;
1255
+ gap: 2px;
1256
+ }
1257
+ .oe-table-toolbar-button,
1258
+ .oe-table-toolbar-trigger {
1259
+ align-items: center;
1260
+ background: transparent;
1261
+ border: 0;
1262
+ border-radius: 999px;
1263
+ color: var(--oe-text, #171717);
1264
+ cursor: pointer;
1265
+ display: inline-flex;
1266
+ font: inherit;
1267
+ font-size: 12px;
1268
+ font-weight: 650;
1269
+ gap: 5px;
1270
+ justify-content: center;
1271
+ min-height: 28px;
1272
+ min-width: 28px;
1273
+ padding: 0 8px;
1274
+ white-space: nowrap;
1275
+ }
1276
+ .oe-table-toolbar-button:hover,
1277
+ .oe-table-toolbar-button:focus-visible,
1278
+ .oe-table-toolbar-button[data-active],
1279
+ .oe-table-toolbar-trigger:hover,
1280
+ .oe-table-toolbar-trigger:focus-visible,
1281
+ .oe-table-toolbar-trigger[data-popup-open] {
1282
+ background: var(--oe-surface-muted, #f5f5f5);
1283
+ outline: none;
1284
+ }
1285
+ .oe-table-toolbar-button[data-danger] {
1286
+ color: #b42318;
1287
+ }
1288
+ .oe-table-toolbar-button:disabled,
1289
+ .oe-table-action-item:disabled {
1290
+ cursor: default;
1291
+ opacity: 0.38;
1292
+ }
1293
+ .oe-table-toolbar-separator {
1294
+ background: var(--oe-border, #e5e5e5);
1295
+ height: 18px;
1296
+ margin: 0 2px;
1297
+ width: 1px;
1298
+ }
1299
+ .oe-table-action-menu {
1300
+ background: var(--oe-surface, #ffffff);
1301
+ border-radius: 16px;
1302
+ box-shadow: 0 0 0 1px var(--oe-shadow, rgb(0 0 0 / 7%)), 0 12px 32px var(--oe-shadow, rgb(0 0 0 / 14%));
1303
+ display: grid;
1304
+ gap: 2px;
1305
+ min-width: 190px;
1306
+ padding: 5px;
1307
+ z-index: 1002;
1308
+ }
1309
+ .oe-table-action-item {
1310
+ align-items: center;
1311
+ background: transparent;
1312
+ border: 0;
1313
+ border-radius: 12px;
1314
+ color: var(--oe-text, #171717);
1315
+ cursor: pointer;
1316
+ display: flex;
1317
+ font-size: 13px;
1318
+ font-weight: 620;
1319
+ gap: 9px;
1320
+ min-height: 34px;
1321
+ outline: none;
1322
+ padding: 0 10px;
1323
+ }
1324
+ .oe-table-action-item:hover,
1325
+ .oe-table-action-item:focus-visible,
1326
+ .oe-table-action-item[data-highlighted] {
1327
+ background: var(--oe-surface-muted, #f5f5f5);
1328
+ }
1329
+ .oe-table-action-item[data-danger] {
1330
+ color: #b42318;
1331
+ }
968
1332
  .oe-selection-toolbar {
969
1333
  align-items: center;
970
1334
  display: flex;
@@ -1205,48 +1569,61 @@ details.oe-toggle-list-item > summary {
1205
1569
  opacity: 0.88;
1206
1570
  }
1207
1571
  .oe-attachment {
1572
+ --oe-attachment-inset: 3px;
1573
+ --oe-attachment-radius: 6px;
1574
+ --oe-attachment-thumbnail-radius: calc(var(--oe-attachment-radius) - var(--oe-attachment-inset));
1208
1575
  align-items: center;
1209
- background: var(--oe-surface, #fff);
1210
- border: 1px solid var(--oe-border, #e5e5e5);
1211
- border-radius: 12px;
1576
+ background: var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5));
1577
+ border: 0;
1578
+ border-radius: var(--oe-attachment-radius);
1212
1579
  color: var(--oe-text, #171717);
1213
1580
  display: flex;
1214
- gap: 12px;
1215
- margin: 8px 0;
1216
- min-height: 68px;
1217
- padding: 10px 12px;
1581
+ font: inherit;
1582
+ gap: 8px;
1583
+ margin: 4px 0;
1584
+ min-height: 34px;
1585
+ padding: var(--oe-attachment-inset) calc(var(--oe-attachment-inset) + var(--oe-attachment-inset));
1586
+ position: relative;
1218
1587
  text-align: left;
1219
1588
  text-decoration: none;
1220
- transition:
1221
- border-color 140ms,
1222
- box-shadow 140ms,
1223
- background 140ms;
1589
+ transition: background 120ms ease;
1224
1590
  width: 100%;
1225
1591
  }
1226
1592
  .oe-attachment:hover,
1593
+ .oe-attachment-viewer:focus-visible,
1227
1594
  .oe-attachment:focus-within {
1228
- border-color: var(--oe-border-strong, #d4d4d4);
1229
- box-shadow: 0 4px 18px var(--oe-shadow, rgb(0 0 0 / 8%));
1595
+ background: color-mix(in srgb, var(--oe-block-surface, var(--oe-surface-muted, #f5f5f5)) 88%, var(--oe-text, #171717));
1230
1596
  outline: none;
1231
1597
  }
1232
1598
  .oe-attachment[data-state=error],
1233
1599
  .oe-attachment[data-state=missing] {
1234
- border-color: #efb0b0;
1600
+ background: color-mix(in srgb, var(--oe-surface-muted, #f5f5f5) 90%, #c83232);
1235
1601
  }
1236
- .oe-attachment-icon {
1237
- align-items: center;
1238
- background: var(--oe-surface-muted, #f5f5f5);
1239
- border-radius: 9px;
1240
- display: flex;
1241
- flex: 0 0 42px;
1242
- height: 48px;
1243
- justify-content: center;
1602
+ .oe-attachment-thumbnail {
1603
+ border-radius: var(--oe-attachment-thumbnail-radius);
1604
+ flex: 0 0 28px;
1605
+ height: 28px;
1606
+ margin-left: calc(0px - var(--oe-attachment-inset));
1607
+ overflow: hidden;
1244
1608
  }
1245
- .oe-attachment-icon span {
1246
- color: var(--oe-muted, #737373);
1247
- font-size: 9px;
1248
- font-weight: 750;
1249
- letter-spacing: .04em;
1609
+ .oe-attachment-thumbnail img {
1610
+ border-radius: 0;
1611
+ display: block;
1612
+ height: 100%;
1613
+ margin: 0;
1614
+ object-fit: cover;
1615
+ width: 100%;
1616
+ }
1617
+ .oe-attachment-open-control {
1618
+ background: transparent;
1619
+ border: 0;
1620
+ border-radius: inherit;
1621
+ cursor: pointer;
1622
+ inset: 0;
1623
+ outline: none;
1624
+ padding: 0;
1625
+ position: absolute;
1626
+ z-index: 1;
1250
1627
  }
1251
1628
  .oe-attachment-body {
1252
1629
  display: flex;
@@ -1259,7 +1636,7 @@ details.oe-toggle-list-item > summary {
1259
1636
  border: 0;
1260
1637
  color: inherit;
1261
1638
  font: inherit;
1262
- font-weight: 650;
1639
+ font-weight: 500;
1263
1640
  min-width: 0;
1264
1641
  outline: none;
1265
1642
  overflow: hidden;
@@ -1267,11 +1644,10 @@ details.oe-toggle-list-item > summary {
1267
1644
  text-overflow: ellipsis;
1268
1645
  white-space: nowrap;
1269
1646
  }
1270
- .oe-attachment-meta {
1271
- color: var(--oe-muted, #737373);
1272
- display: block;
1273
- font-size: 12px;
1274
- margin-top: 3px;
1647
+ .oe-attachment-name-input {
1648
+ position: relative;
1649
+ width: 100%;
1650
+ z-index: 2;
1275
1651
  }
1276
1652
  .oe-attachment-progress {
1277
1653
  background: var(--oe-surface-muted, #f5f5f5);
@@ -1295,26 +1671,40 @@ details.oe-toggle-list-item > summary {
1295
1671
  align-items: center;
1296
1672
  display: flex;
1297
1673
  flex-wrap: wrap;
1298
- gap: 4px;
1674
+ gap: 2px;
1299
1675
  justify-content: flex-end;
1676
+ position: relative;
1677
+ z-index: 2;
1300
1678
  }
1301
1679
  .oe-attachment-actions button {
1680
+ align-items: center;
1302
1681
  background: transparent;
1303
1682
  border: 0;
1304
- border-radius: 7px;
1305
1683
  color: var(--oe-muted, #737373);
1306
1684
  cursor: pointer;
1685
+ display: inline-flex;
1686
+ flex: 0 0 24px;
1307
1687
  font: inherit;
1308
- font-size: 12px;
1309
- min-height: 34px;
1310
- padding: 0 8px;
1688
+ height: 24px;
1689
+ justify-content: center;
1690
+ min-width: 24px;
1691
+ padding: 0;
1692
+ width: 24px;
1693
+ }
1694
+ .oe-attachment-actions button svg {
1695
+ height: 13px;
1696
+ width: 13px;
1311
1697
  }
1312
1698
  .oe-attachment-actions button:hover,
1313
1699
  .oe-attachment-actions button:focus-visible {
1314
- background: var(--oe-surface-muted, #f5f5f5);
1700
+ background: transparent;
1315
1701
  color: var(--oe-text, #171717);
1316
1702
  outline: none;
1317
1703
  }
1704
+ .oe-attachment-actions .oe-attachment-remove:hover,
1705
+ .oe-attachment-actions .oe-attachment-remove:focus-visible {
1706
+ color: #c83232;
1707
+ }
1318
1708
  .oe-attachment-viewer {
1319
1709
  cursor: pointer;
1320
1710
  }