docxodus 9.6.0 → 9.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,7 +22,7 @@
22
22
  * `[data-chrome="full"]` adds back the desktop affordances.
23
23
  */
24
24
  /** Bumped whenever RIBBON_CSS changes, so a stale injected stylesheet is replaced. */
25
- export const RIBBON_STYLE_VERSION = "5";
25
+ export const RIBBON_STYLE_VERSION = "8";
26
26
  export const RIBBON_STYLE_ATTR = "data-docxodus-ribbon-styles";
27
27
  /**
28
28
  * The ribbon stylesheet. Every rule is scoped under `.dxr` so injecting it is
@@ -32,19 +32,34 @@ export const RIBBON_STYLE_ATTR = "data-docxodus-ribbon-styles";
32
32
  */
33
33
  export const RIBBON_CSS = `
34
34
  .dxr {
35
- --dxr-ink: #101418;
35
+ /* OS-Legal design tokens (github.com/Open-Source-Legal/OS-Legal-Style):
36
+ deep-teal accent, slate foreground scale, warm neutral surfaces, and
37
+ "light touch" shadows at 0.03-0.06 opacity — structure over decoration. */
38
+ --dxr-ink: #1e293b;
36
39
  --dxr-sheet: #ffffff;
37
- --dxr-chrome: #eef1f6;
38
- --dxr-chrome-sunk: #e3e8f0;
39
- --dxr-rule: #d3dae4;
40
- --dxr-accent: #1f5fd0;
41
- --dxr-wash: #dde8fb;
42
- --dxr-muted: #5d6975;
43
- --dxr-data: #0b6f6a;
44
- --dxr-danger: #a3341f;
45
- --dxr-desk: #dfe3ea;
46
- --dxr-ui: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
40
+ --dxr-chrome: #ffffff;
41
+ --dxr-chrome-sunk: #f8fafc;
42
+ --dxr-rule: #e2e8f0;
43
+ --dxr-rule-strong: #cbd5e1;
44
+ --dxr-accent: #0f766e;
45
+ --dxr-accent-hover: #0d9488;
46
+ --dxr-accent-active: #115e59;
47
+ --dxr-wash: #f0fdfa;
48
+ --dxr-wash-on: #ccfbf1;
49
+ --dxr-muted: #475569;
50
+ --dxr-faint: #94a3b8;
51
+ --dxr-data: #0f766e;
52
+ --dxr-danger: #dc2626;
53
+ --dxr-danger-wash: #fef2f2;
54
+ --dxr-desk: #f1f5f9;
55
+ --dxr-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
56
+ --dxr-serif: Georgia, "Times New Roman", serif;
47
57
  --dxr-mono: ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, monospace;
58
+ --dxr-shadow-sm: 0 1px 2px rgba(15, 23, 42, .04);
59
+ --dxr-shadow-md: 0 1px 3px rgba(15, 23, 42, .06), 0 4px 6px rgba(15, 23, 42, .03);
60
+ --dxr-shadow-lg: 0 4px 6px rgba(15, 23, 42, .05), 0 10px 15px rgba(15, 23, 42, .04);
61
+ --dxr-shadow-xl: 0 8px 16px rgba(15, 23, 42, .06), 0 20px 25px rgba(15, 23, 42, .05);
62
+ --dxr-ease: cubic-bezier(.4, 0, .2, 1);
48
63
  --dxr-tap: 30px;
49
64
 
50
65
  position: relative;
@@ -60,6 +75,18 @@ export const RIBBON_CSS = `
60
75
  }
61
76
  .dxr *, .dxr *::before, .dxr *::after { box-sizing: border-box; }
62
77
 
78
+ /* ── Card frame ────────────────────────────────────────────────────────────────
79
+ A drop-in embed carries its OWN boundary instead of hoping the host clips it:
80
+ rounded corners, a hairline, and the house elevation. overflow: clip keeps
81
+ the sticky chrome, scrollbars, and the loading overlay inside the curve.
82
+ Full-bleed hosts mount with data-frame="flush" and stay edge-to-edge. */
83
+ .dxr[data-frame="card"] {
84
+ border: 1px solid var(--dxr-rule);
85
+ border-radius: 14px;
86
+ box-shadow: var(--dxr-shadow-xl);
87
+ overflow: clip;
88
+ }
89
+
63
90
  /* Touch devices get bigger hit targets everywhere the token is used. */
64
91
  @media (pointer: coarse) { .dxr { --dxr-tap: 40px; } }
65
92
 
@@ -88,12 +115,13 @@ export const RIBBON_CSS = `
88
115
  font-weight: 600;
89
116
  letter-spacing: -.01em;
90
117
  }
118
+ /* A filled circle, echoing the OS-Legal "Node" motif rather than a diamond. */
91
119
  .dxr-brand .dxr-mark {
92
120
  flex: 0 0 auto;
93
121
  width: 9px;
94
122
  height: 9px;
123
+ border-radius: 50%;
95
124
  background: var(--dxr-accent);
96
- clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
97
125
  }
98
126
  .dxr-brand .dxr-docname {
99
127
  overflow: hidden;
@@ -125,25 +153,25 @@ export const RIBBON_CSS = `
125
153
  scrollbar-width: none;
126
154
  }
127
155
  .dxr-tabs::-webkit-scrollbar { display: none; }
156
+ /* Line-variant tabs (the house Tabs default): no boxes, no fills — the selected
157
+ tab is a 2px accent underline sitting on the panel's own hairline. */
128
158
  .dxr-tab {
129
159
  flex: 0 0 auto;
130
- padding: 6px 15px 7px;
131
- border: 1px solid transparent;
132
- border-bottom: none;
133
- border-radius: 5px 5px 0 0;
160
+ padding: 7px 14px 8px;
161
+ border: none;
134
162
  background: none;
135
163
  color: var(--dxr-muted);
136
164
  font: inherit;
137
165
  font-size: 12.5px;
166
+ font-weight: 500;
138
167
  cursor: pointer;
168
+ transition: color .15s var(--dxr-ease), box-shadow .15s var(--dxr-ease);
139
169
  }
140
- .dxr-tab:hover { color: var(--dxr-ink); background: #e6ebf3; }
170
+ .dxr-tab:hover { color: var(--dxr-ink); }
141
171
  .dxr-tab[aria-selected="true"] {
142
172
  color: var(--dxr-ink);
143
173
  font-weight: 600;
144
- background: var(--dxr-chrome-sunk);
145
- border-color: var(--dxr-rule);
146
- box-shadow: inset 0 2px 0 var(--dxr-accent);
174
+ box-shadow: inset 0 -2px 0 var(--dxr-accent);
147
175
  }
148
176
  /* Contextual tab — present only while the caret is inside a table. */
149
177
  .dxr-tab[data-contextual] { color: var(--dxr-accent); }
@@ -173,7 +201,7 @@ export const RIBBON_CSS = `
173
201
  .dxr-group:last-child { border-right: none; }
174
202
  .dxr-group:first-child { padding-left: 0; }
175
203
  .dxr-glabel {
176
- color: var(--dxr-muted);
204
+ color: var(--dxr-faint);
177
205
  font-size: 9.5px;
178
206
  font-weight: 600;
179
207
  letter-spacing: .11em;
@@ -182,48 +210,69 @@ export const RIBBON_CSS = `
182
210
  .dxr-row { display: flex; gap: 3px; align-items: center; }
183
211
 
184
212
  /* ── Controls ─────────────────────────────────────────────────────────────── */
213
+ /* One button family, house-style: every control is a ghost — no borders, no
214
+ fills, no per-button boxes. Hover paints a quiet slate wash; the active
215
+ (toggled) state paints a teal one. Save alone is the flat primary, so the
216
+ surface has exactly one accent-colored action. */
185
217
  .dxr button, .dxr label.dxr-btn {
186
218
  min-height: var(--dxr-tap);
187
219
  padding: 5px 9px;
188
- border: 1px solid transparent;
189
- border-radius: 4px;
220
+ border: none;
221
+ border-radius: 6px;
190
222
  background: none;
191
223
  color: var(--dxr-ink);
192
224
  font: inherit;
193
225
  font-size: 13px;
226
+ font-weight: 500;
194
227
  line-height: 1.15;
195
228
  cursor: pointer;
229
+ transition: background-color .15s var(--dxr-ease), color .15s var(--dxr-ease),
230
+ box-shadow .15s var(--dxr-ease), transform .15s var(--dxr-ease);
196
231
  }
197
232
  .dxr label.dxr-btn { display: inline-flex; align-items: center; }
198
- .dxr button:hover, .dxr label.dxr-btn:hover { background: #d6deea; }
199
- .dxr button:active { background: #c8d3e3; }
233
+ .dxr button:hover, .dxr label.dxr-btn:hover { background: #f1f5f9; }
234
+ .dxr button:active { background: #e2e8f0; }
200
235
  .dxr button:disabled { opacity: .38; cursor: default; background: none; }
201
- .dxr button.dxr-on { color: var(--dxr-accent); background: var(--dxr-wash); border-color: #b3ccf2; }
202
- .dxr-quick button, .dxr-quick label.dxr-btn {
203
- padding: 4px 10px;
204
- border-color: var(--dxr-rule);
205
- background: #f7f9fc;
206
- font-size: 12.5px;
236
+ .dxr button.dxr-on { color: var(--dxr-accent); background: var(--dxr-wash-on); }
237
+ .dxr-quick button, .dxr-quick label.dxr-btn { padding: 4px 10px; font-size: 12.5px; }
238
+ /* Save — the house primary: flat accent, sm shadow, the 1px lift on hover. */
239
+ .dxr-quick button[data-dxr="save"]:not(:disabled) {
240
+ background: var(--dxr-accent);
241
+ color: #fff;
242
+ font-weight: 600;
243
+ box-shadow: var(--dxr-shadow-sm);
244
+ }
245
+ .dxr-quick button[data-dxr="save"]:not(:disabled):hover {
246
+ background: var(--dxr-accent-hover);
247
+ box-shadow: var(--dxr-shadow-md);
248
+ transform: translateY(-1px);
249
+ }
250
+ .dxr-quick button[data-dxr="save"]:not(:disabled):active {
251
+ background: var(--dxr-accent-active);
252
+ box-shadow: var(--dxr-shadow-sm);
253
+ transform: translateY(0);
207
254
  }
208
- .dxr-quick button:hover, .dxr-quick label.dxr-btn:hover { background: #fff; border-color: #b9c4d4; }
209
- .dxr-quick button:disabled:hover { background: #f7f9fc; border-color: var(--dxr-rule); }
210
- .dxr button.dxr-icon { min-width: var(--dxr-tap); text-align: center; }
255
+ /* Icon controls sit quieter than text ones until touched (house IconButton). */
256
+ .dxr button.dxr-icon { min-width: var(--dxr-tap); text-align: center; color: var(--dxr-muted); }
257
+ .dxr button.dxr-icon:hover:not(:disabled) { color: var(--dxr-ink); }
258
+ .dxr button.dxr-icon.dxr-on { color: var(--dxr-accent); }
211
259
  /* Icons are inline SVG drawn from the same shapes the control acts on (text lines,
212
260
  rules), so alignment and indent read at a glance instead of relying on arrow
213
261
  glyphs that collide with undo/redo. currentColor keeps them in step with state. */
214
262
  .dxr button svg { display: block; margin: 0 auto; fill: currentColor; }
215
263
  .dxr button.dxr-wide { display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
216
- .dxr button.dxr-danger:hover { color: var(--dxr-danger); background: #f6dcd6; }
264
+ .dxr button.dxr-danger:hover { color: var(--dxr-danger); background: var(--dxr-danger-wash); }
217
265
  .dxr select, .dxr input[type="number"], .dxr input[type="text"] {
218
266
  min-height: var(--dxr-tap);
219
267
  padding: 4px 6px;
220
268
  border: 1px solid var(--dxr-rule);
221
- border-radius: 4px;
222
- background: #f7f9fc;
269
+ border-radius: 6px;
270
+ background: var(--dxr-sheet);
223
271
  color: var(--dxr-ink);
224
272
  font: inherit;
225
273
  font-size: 12.5px;
226
274
  }
275
+ .dxr select:hover, .dxr input:hover { border-color: var(--dxr-rule-strong); }
227
276
  .dxr select:focus-visible, .dxr input:focus-visible, .dxr button:focus-visible,
228
277
  .dxr .dxr-tab:focus-visible, .dxr label.dxr-btn:focus-within {
229
278
  outline: 2px solid var(--dxr-accent);
@@ -254,7 +303,7 @@ export const RIBBON_CSS = `
254
303
  height: 25px;
255
304
  padding: 0 10px;
256
305
  overflow-x: auto;
257
- background: #f7f9fc;
306
+ background: #fafafa;
258
307
  border-top: 1px solid var(--dxr-rule);
259
308
  color: var(--dxr-muted);
260
309
  font-family: var(--dxr-mono);
@@ -273,7 +322,7 @@ export const RIBBON_CSS = `
273
322
  .dxr-rail .dxr-cell:first-child { padding-left: 0; }
274
323
  .dxr-rail .dxr-cell:last-child { border-right: none; }
275
324
  .dxr-rail .dxr-k {
276
- color: #8b96a3;
325
+ color: var(--dxr-faint);
277
326
  font-family: var(--dxr-ui);
278
327
  font-size: 9.5px;
279
328
  letter-spacing: .1em;
@@ -281,7 +330,7 @@ export const RIBBON_CSS = `
281
330
  }
282
331
  .dxr-rail .dxr-v { color: var(--dxr-data); }
283
332
  .dxr-rail .dxr-v.dxr-flash { animation: dxr-railflash .45s ease-out; }
284
- @keyframes dxr-railflash { from { background: #b9ecdf; } to { background: transparent; } }
333
+ @keyframes dxr-railflash { from { background: #ccfbf1; } to { background: transparent; } }
285
334
 
286
335
  /* ── Hint ─────────────────────────────────────────────────────────────────── */
287
336
  .dxr-hint {
@@ -296,8 +345,8 @@ export const RIBBON_CSS = `
296
345
  .dxr-hint kbd {
297
346
  padding: 0 4px;
298
347
  border: 1px solid var(--dxr-rule);
299
- border-radius: 3px;
300
- background: #e8ecf3;
348
+ border-radius: 4px;
349
+ background: #f1f5f9;
301
350
  font-family: var(--dxr-mono);
302
351
  font-size: 11px;
303
352
  }
@@ -312,13 +361,34 @@ export const RIBBON_CSS = `
312
361
  SHOULD win.
313
362
  (No backticks in this file's comments: the stylesheet is a template literal.) */
314
363
  .dxr-scroll { flex: 1 1 auto; min-height: 0; overflow: auto; -webkit-overflow-scrolling: touch; }
364
+ /* Soft scroll boundaries: content dissolves at the chrome and at the bottom edge
365
+ instead of hard-clipping. Sticky gradient veils cost one paint layer each and
366
+ never intercept input. */
367
+ .dxr-scroll::before, .dxr-scroll::after {
368
+ content: "";
369
+ position: sticky;
370
+ z-index: 3;
371
+ display: block;
372
+ height: 26px;
373
+ pointer-events: none;
374
+ }
375
+ .dxr-scroll::before {
376
+ top: 0;
377
+ margin-bottom: -26px;
378
+ background: linear-gradient(to bottom, var(--dxr-desk), transparent);
379
+ }
380
+ .dxr-scroll::after {
381
+ bottom: 0;
382
+ margin-top: -26px;
383
+ background: linear-gradient(to top, var(--dxr-desk), transparent);
384
+ }
315
385
  .dxr[data-chrome] .dxr-surface { margin: 26px auto; padding: 0 16px 96px; }
316
386
  .dxr-surface [contenteditable="true"]:focus {
317
387
  outline: 2px solid var(--dxr-accent);
318
388
  outline-offset: 2px;
319
389
  border-radius: 2px;
320
390
  }
321
- @media (hover: hover) { .dxr-surface [contenteditable="true"]:hover { background: #f2f7ff; } }
391
+ @media (hover: hover) { .dxr-surface [contenteditable="true"]:hover { background: var(--dxr-wash); } }
322
392
 
323
393
  /* Header/footer bands: stories live in their own OOXML parts outside the body,
324
394
  so they dock as their own regions. Styled from the same tokens as the ribbon
@@ -330,9 +400,10 @@ export const RIBBON_CSS = `
330
400
  margin: 0 auto 14px;
331
401
  padding: 9px 72px 13px;
332
402
  border: 1px solid var(--dxr-rule);
333
- border-left: 2px solid #c2ccd9;
334
- border-radius: 3px;
403
+ border-left: 2px solid #5eead4;
404
+ border-radius: 6px;
335
405
  background: var(--dxr-sheet);
406
+ box-shadow: var(--dxr-shadow-sm);
336
407
  }
337
408
  .dxr-surface .docx-hf-band + .docx-body-flow { margin-top: 0; }
338
409
  .dxr-surface .docx-hf-band[data-hf-band="footer"] { margin: 14px auto 0; }
@@ -351,8 +422,8 @@ export const RIBBON_CSS = `
351
422
  .dxr-surface .docx-hf-chrome select, .dxr-surface .docx-hf-chrome input {
352
423
  padding: 3px 5px;
353
424
  border: 1px solid var(--dxr-rule);
354
- border-radius: 4px;
355
- background: #f7f9fc;
425
+ border-radius: 6px;
426
+ background: var(--dxr-sheet);
356
427
  color: var(--dxr-ink);
357
428
  font: inherit;
358
429
  font-family: var(--dxr-ui);
@@ -366,22 +437,22 @@ export const RIBBON_CSS = `
366
437
  .dxr-surface .docx-hf-warning {
367
438
  margin: 0 0 8px -60px;
368
439
  padding: 7px 9px;
369
- border: 1px solid #e8d9a8;
370
- border-left: 2px solid #c9a227;
371
- border-radius: 3px;
372
- background: #fdf6e3;
373
- color: #6b5310;
440
+ border: 1px solid #fde68a;
441
+ border-left: 2px solid #d97706;
442
+ border-radius: 6px;
443
+ background: #fffbeb;
444
+ color: #92400e;
374
445
  font-size: 12px;
375
446
  line-height: 1.45;
376
447
  }
377
448
  .dxr-surface .docx-hf-warning button {
378
449
  margin-left: 6px;
379
450
  padding: 2px 8px;
380
- border-color: #e8d9a8;
451
+ border-color: #fde68a;
381
452
  background: #fff;
382
453
  font-size: 12px;
383
454
  }
384
- .dxr-surface .docx-hf-placeholder { color: #9aa4b1; font-style: italic; }
455
+ .dxr-surface .docx-hf-placeholder { color: var(--dxr-faint); font-style: italic; }
385
456
  .dxr-surface .docx-hf-inherited {
386
457
  color: var(--dxr-muted);
387
458
  font-style: italic;
@@ -401,7 +472,7 @@ export const RIBBON_CSS = `
401
472
  padding: 56px 0;
402
473
  border-radius: 3px;
403
474
  background: var(--dxr-sheet);
404
- box-shadow: 0 1px 3px rgba(16, 20, 24, .14), 0 8px 24px rgba(16, 20, 24, .05);
475
+ box-shadow: 0 1px 3px rgba(15, 23, 42, .08), 0 12px 24px rgba(15, 23, 42, .06);
405
476
  }
406
477
 
407
478
  /* ── Table size picker ────────────────────────────────────────────────────── */
@@ -411,9 +482,9 @@ export const RIBBON_CSS = `
411
482
  z-index: 30;
412
483
  padding: 9px;
413
484
  border: 1px solid var(--dxr-rule);
414
- border-radius: 6px;
485
+ border-radius: 12px;
415
486
  background: #fff;
416
- box-shadow: 0 4px 16px rgba(16, 20, 24, .18);
487
+ box-shadow: var(--dxr-shadow-xl);
417
488
  }
418
489
  .dxr-pop[data-open] { display: block; }
419
490
  .dxr-gridcells { display: grid; grid-template-columns: repeat(10, 16px); gap: 2px; }
@@ -421,11 +492,11 @@ export const RIBBON_CSS = `
421
492
  width: 16px;
422
493
  height: 16px;
423
494
  border: 1px solid var(--dxr-rule);
424
- border-radius: 2px;
425
- background: #f2f5f9;
495
+ border-radius: 3px;
496
+ background: var(--dxr-chrome-sunk);
426
497
  cursor: pointer;
427
498
  }
428
- .dxr-gridcells div[data-on] { background: var(--dxr-wash); border-color: var(--dxr-accent); }
499
+ .dxr-gridcells div[data-on] { background: #ccfbf1; border-color: var(--dxr-accent); }
429
500
  .dxr-popfoot {
430
501
  display: flex;
431
502
  justify-content: space-between;
@@ -508,11 +579,11 @@ export const RIBBON_CSS = `
508
579
  display: grid;
509
580
  place-items: center;
510
581
  padding: 24px;
511
- color: #f4f9ff;
582
+ color: #f8fafc;
512
583
  background:
513
- radial-gradient(circle at 20% 20%, rgba(63, 128, 255, .24), transparent 22rem),
514
- radial-gradient(circle at 82% 80%, rgba(176, 91, 255, .22), transparent 24rem),
515
- linear-gradient(145deg, #071221 0%, #0b1930 52%, #101426 100%);
584
+ radial-gradient(circle at 20% 20%, rgba(13, 148, 136, .2), transparent 22rem),
585
+ radial-gradient(circle at 82% 80%, rgba(45, 212, 191, .1), transparent 24rem),
586
+ linear-gradient(150deg, #0b1220 0%, #0f172a 55%, #0f2723 100%);
516
587
  transition: opacity .55s ease, visibility .55s ease;
517
588
  }
518
589
  .dxr-loader[hidden] { display: none; }
@@ -531,14 +602,14 @@ export const RIBBON_CSS = `
531
602
  .dxr-orbit {
532
603
  position: absolute;
533
604
  inset: 7%;
534
- border: 1px solid rgba(115, 204, 255, .22);
605
+ border: 1px solid rgba(45, 212, 191, .24);
535
606
  border-radius: 50%;
536
607
  animation: dxr-spin 9s linear infinite;
537
608
  }
538
609
  .dxr-orbit.dxr-two {
539
610
  inset: 20%;
540
611
  border-style: dashed;
541
- border-color: rgba(196, 128, 255, .32);
612
+ border-color: rgba(94, 234, 212, .3);
542
613
  animation-duration: 6s;
543
614
  animation-direction: reverse;
544
615
  }
@@ -548,19 +619,19 @@ export const RIBBON_CSS = `
548
619
  height: 10px;
549
620
  border-radius: 50%;
550
621
  content: "";
551
- background: #52e5ff;
552
- box-shadow: 0 0 18px #52e5ff;
622
+ background: #2dd4bf;
623
+ box-shadow: 0 0 18px rgba(45, 212, 191, .8);
553
624
  }
554
625
  .dxr-orbit::before { top: -5px; left: 50%; }
555
- .dxr-orbit::after { right: 7%; bottom: 12%; background: #b26cff; box-shadow: 0 0 18px #b26cff; }
626
+ .dxr-orbit::after { right: 7%; bottom: 12%; background: #5eead4; box-shadow: 0 0 18px rgba(94, 234, 212, .7); }
556
627
  .dxr-card {
557
628
  position: absolute;
558
629
  inset: 24% 28%;
559
630
  padding: 20px 15px;
560
- border: 1px solid rgba(255, 255, 255, .33);
631
+ border: 1px solid rgba(255, 255, 255, .3);
561
632
  border-radius: 14px;
562
- background: linear-gradient(150deg, rgba(255, 255, 255, .18), rgba(255, 255, 255, .06));
563
- box-shadow: 0 22px 50px rgba(0, 0, 0, .35), 0 0 45px rgba(71, 150, 255, .13);
633
+ background: linear-gradient(150deg, rgba(255, 255, 255, .16), rgba(255, 255, 255, .05));
634
+ box-shadow: 0 22px 50px rgba(0, 0, 0, .35), 0 0 45px rgba(13, 148, 136, .15);
564
635
  backdrop-filter: blur(10px);
565
636
  animation: dxr-float 3.6s ease-in-out infinite;
566
637
  }
@@ -570,8 +641,8 @@ export const RIBBON_CSS = `
570
641
  right: -9px;
571
642
  padding: 4px 7px;
572
643
  border-radius: 6px;
573
- background: #52e5ff;
574
- color: #06111d;
644
+ background: #2dd4bf;
645
+ color: #042f2e;
575
646
  content: "DOCX";
576
647
  font-size: 8px;
577
648
  font-weight: 900;
@@ -588,46 +659,49 @@ export const RIBBON_CSS = `
588
659
  }
589
660
  .dxr-card i:nth-child(2) { width: 76%; animation-delay: -.45s; }
590
661
  .dxr-card i:nth-child(3) { width: 88%; animation-delay: -.85s; }
591
- .dxr-card i:nth-child(4) { width: 58%; background: rgba(255, 111, 139, .75); animation-delay: -1.2s; }
662
+ .dxr-card i:nth-child(4) { width: 58%; background: rgba(248, 113, 113, .75); animation-delay: -1.2s; }
592
663
  .dxr-chip {
593
664
  position: absolute;
594
665
  display: grid;
595
666
  width: 34px;
596
667
  height: 34px;
597
668
  place-items: center;
598
- border: 1px solid rgba(255, 255, 255, .17);
669
+ border: 1px solid rgba(255, 255, 255, .16);
599
670
  border-radius: 11px;
600
- background: rgba(12, 28, 49, .88);
671
+ background: rgba(15, 30, 46, .88);
601
672
  box-shadow: 0 12px 30px rgba(0, 0, 0, .28);
602
673
  font-size: 11px;
603
674
  font-weight: 850;
604
675
  }
605
- .dxr-chip.dxr-b { left: 2%; top: 30%; color: #52e5ff; animation: dxr-chip 3s ease-in-out infinite; }
606
- .dxr-chip.dxr-r { right: -2%; bottom: 24%; color: #ff8da0; animation: dxr-chip 3s -1.4s ease-in-out infinite; }
607
- .dxr-chip.dxr-s { left: 20%; bottom: 0; color: #52e0a2; animation: dxr-chip 3s -.7s ease-in-out infinite; }
608
- .dxr-eyebrow { color: #52e5ff; font-size: 10px; font-weight: 850; letter-spacing: .16em; text-transform: uppercase; }
676
+ .dxr-chip.dxr-b { left: 2%; top: 30%; color: #5eead4; animation: dxr-chip 3s ease-in-out infinite; }
677
+ .dxr-chip.dxr-r { right: -2%; bottom: 24%; color: #fca5a5; animation: dxr-chip 3s -1.4s ease-in-out infinite; }
678
+ .dxr-chip.dxr-s { left: 20%; bottom: 0; color: #6ee7b7; animation: dxr-chip 3s -.7s ease-in-out infinite; }
679
+ .dxr-eyebrow { color: #5eead4; font-size: 10px; font-weight: 850; letter-spacing: .16em; text-transform: uppercase; }
680
+ /* Georgia headline — the house pairing of a serif headline over Inter UI copy. */
609
681
  .dxr-loader h2 {
610
682
  margin: 10px auto 10px;
611
683
  max-width: 520px;
612
- font-size: clamp(23px, 5vw, 40px);
613
- line-height: 1.05;
614
- letter-spacing: -.045em;
684
+ font-family: var(--dxr-serif);
685
+ font-size: clamp(23px, 5vw, 38px);
686
+ font-weight: 500;
687
+ line-height: 1.08;
688
+ letter-spacing: -.02em;
615
689
  }
616
- .dxr-loader-copy > p { margin: 0 auto; max-width: 46ch; color: #9eb2c9; font-size: 13.5px; line-height: 1.6; }
690
+ .dxr-loader-copy > p { margin: 0 auto; max-width: 46ch; color: #94a3b8; font-size: 13.5px; line-height: 1.6; }
617
691
  .dxr-ad {
618
692
  display: flex;
619
693
  gap: 12px;
620
694
  margin: 20px auto 0;
621
695
  max-width: 420px;
622
696
  padding: 13px;
623
- border: 1px solid rgba(126, 160, 200, .16);
624
- border-radius: 13px;
697
+ border: 1px solid rgba(148, 163, 184, .16);
698
+ border-radius: 12px;
625
699
  background: rgba(255, 255, 255, .04);
626
700
  text-align: left;
627
701
  }
628
- .dxr-ad .dxr-num { color: #b26cff; font: 800 10px/1.4 var(--dxr-mono); }
702
+ .dxr-ad .dxr-num { color: #2dd4bf; font: 800 10px/1.4 var(--dxr-mono); }
629
703
  .dxr-ad strong { display: block; font-size: 12.5px; }
630
- .dxr-ad .dxr-adcopy { display: block; margin-top: 4px; color: #849bb5; font-size: 11.5px; line-height: 1.45; }
704
+ .dxr-ad .dxr-adcopy { display: block; margin-top: 4px; color: #8ba0b9; font-size: 11.5px; line-height: 1.45; }
631
705
  .dxr-ad[data-swap] { animation: dxr-swap .4s ease; }
632
706
  .dxr-track {
633
707
  height: 3px;
@@ -641,8 +715,8 @@ export const RIBBON_CSS = `
641
715
  width: 12%;
642
716
  height: 100%;
643
717
  border-radius: inherit;
644
- background: linear-gradient(90deg, #52e5ff, #5c7cff, #b26cff);
645
- box-shadow: 0 0 16px rgba(82, 229, 255, .55);
718
+ background: linear-gradient(90deg, #14b8a6, #2dd4bf, #5eead4);
719
+ box-shadow: 0 0 16px rgba(45, 212, 191, .5);
646
720
  transition: width .65s cubic-bezier(.22, .8, .28, 1);
647
721
  }
648
722
  .dxr-meta {
@@ -651,7 +725,7 @@ export const RIBBON_CSS = `
651
725
  gap: 14px;
652
726
  margin: 9px auto 0;
653
727
  max-width: 420px;
654
- color: #647e9c;
728
+ color: #64748b;
655
729
  font: 700 9px/1 var(--dxr-mono);
656
730
  letter-spacing: .09em;
657
731
  text-transform: uppercase;
@@ -660,9 +734,9 @@ export const RIBBON_CSS = `
660
734
  display: none;
661
735
  margin-top: 18px;
662
736
  padding: 9px 14px;
663
- border: 1px solid rgba(255, 127, 145, .4);
737
+ border: 1px solid rgba(248, 113, 113, .4);
664
738
  border-radius: 9px;
665
- background: rgba(255, 127, 145, .12);
739
+ background: rgba(248, 113, 113, .12);
666
740
  color: #fff;
667
741
  cursor: pointer;
668
742
  }
@@ -773,8 +847,8 @@ export const RIBBON_HTML = `
773
847
  <button type="button" class="dxr-icon" data-indent="720" title="Increase indent">${ICON_ALIGN('<rect x="0" y="0" width="15" height="1.6"/><rect x="6" y="3.8" width="9" height="1.6"/><rect x="6" y="7.6" width="9" height="1.6"/><rect x="0" y="11.4" width="15" height="1.6"/><path d="M0.6 4.2v4.6l4-2.3z"/>')}</button>
774
848
  </div>
775
849
  <div class="dxr-row">
776
- <button type="button" data-list="bullet" title="Bullet list">&#8226; List</button>
777
- <button type="button" data-list="decimal" title="Numbered list">1. List</button>
850
+ <button type="button" data-list="bullet" title="Bullet list">Bullets</button>
851
+ <button type="button" data-list="decimal" title="Numbered list">Numbered</button>
778
852
  <button type="button" data-pagebreak title="Start this block on a new page">Page break</button>
779
853
  </div>
780
854
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"ribbon-chrome.js","sourceRoot":"","sources":["../src/ribbon-chrome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAypBzB,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,sEAAsE,IAAI,QAAQ,CAAC;AAErF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wFA4D6D,UAAU,CACtF,mLAAmL,CACpL;4FACiF,UAAU,CAC1F,mLAAmL,CACpL;0FAC+E,UAAU,CACxF,mLAAmL,CACpL;wFAC6E,UAAU,CACtF,qLAAqL,CACtL;8FACmF,UAAU,CAC5F,oNAAoN,CACrN;6FACkF,UAAU,CAC3F,kNAAkN,CACnN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0LV,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uFAAuF;IACvF,sGAAsG;IACtG,qGAAqG;IACrG,yDAAyD,CAAC"}
1
+ {"version":3,"file":"ribbon-chrome.js","sourceRoot":"","sources":["../src/ribbon-chrome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmuBzB,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,sEAAsE,IAAI,QAAQ,CAAC;AAErF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wFA4D6D,UAAU,CACtF,mLAAmL,CACpL;4FACiF,UAAU,CAC1F,mLAAmL,CACpL;0FAC+E,UAAU,CACxF,mLAAmL,CACpL;wFAC6E,UAAU,CACtF,qLAAqL,CACtL;8FACmF,UAAU,CAC5F,oNAAoN,CACrN;6FACkF,UAAU,CAC3F,kNAAkN,CACnN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0LV,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uFAAuF;IACvF,sGAAsG;IACtG,qGAAqG;IACrG,yDAAyD,CAAC"}
package/dist/ribbon.d.ts CHANGED
@@ -65,6 +65,14 @@ export interface RibbonOptions extends DocxEditorOptions {
65
65
  exports?: DocxEditorExports;
66
66
  /** Layout density. Default "auto". */
67
67
  chrome?: RibbonChromeMode;
68
+ /**
69
+ * Boundary treatment. "flush" (default) is edge-to-edge for full-bleed hosts
70
+ * and hosts that frame the surface themselves; "card" makes the surface carry
71
+ * its own boundary — rounded corners, hairline border, house shadow — for a
72
+ * drop-in embed in the middle of a page. `createRibbonEditor` defaults to
73
+ * "card", since that is the drop-in path.
74
+ */
75
+ frame?: "card" | "flush";
68
76
  /** Root width, in px, below which "auto" picks compact. Default 720. */
69
77
  compactBreakpoint?: number;
70
78
  /** Show the anchor rail (full chrome only). Default true. */
@@ -1 +1 @@
1
- {"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"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"}
package/dist/ribbon.js CHANGED
@@ -150,6 +150,7 @@ class RibbonSurface {
150
150
  const root = doc.createElement("div");
151
151
  root.className = "dxr";
152
152
  root.dataset.state = "idle";
153
+ root.dataset.frame = this.options.frame ?? "flush";
153
154
  root.innerHTML = RIBBON_HTML;
154
155
  for (const el of Array.from(root.querySelectorAll("[data-dxr]"))) {
155
156
  el.id = this.idPrefix + el.dataset.dxr;