pptx-vanilla-viewer 3.36.3 → 3.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -23,6 +23,112 @@
23
23
  --pptx-radius: 0.5rem;
24
24
  }
25
25
 
26
+ /* ── Inspector baseline for bare form markup ─────────────────────────── */
27
+ .pptxv-inspector :where(input:not([type='checkbox']):not([type='radio']):not([type='color']):not([type='range']):not([type='file']):not([type='button']):not([type='submit']):not([type='reset']):not([type='hidden']), textarea) {
28
+ box-sizing: border-box;
29
+ min-width: 0;
30
+ height: 26px;
31
+ margin: 0;
32
+ padding: 2px 6px;
33
+ border: 1px solid var(--pptx-border);
34
+ border-radius: var(--pptx-radius);
35
+ background: var(--pptx-background);
36
+ color: var(--pptx-foreground);
37
+ font: inherit;
38
+ font-size: 12px;
39
+ }
40
+ .pptxv-inspector :where(textarea) {
41
+ display: block;
42
+ width: 100%;
43
+ height: auto;
44
+ min-height: 52px;
45
+ resize: vertical;
46
+ }
47
+ .pptxv-inspector :where(input, textarea)::placeholder { color: var(--pptx-muted-foreground); opacity: 1; }
48
+ .pptxv-inspector :where(input, textarea):disabled { opacity: 0.5; }
49
+ .pptxv-inspector :where(input[type='color']) {
50
+ box-sizing: border-box;
51
+ flex: none;
52
+ width: 28px;
53
+ height: 20px;
54
+ margin: 0;
55
+ padding: 0;
56
+ border: 1px solid var(--pptx-border);
57
+ border-radius: 4px;
58
+ background: none;
59
+ cursor: pointer;
60
+ }
61
+ .pptxv-inspector :where(fieldset) {
62
+ min-width: 0;
63
+ margin: 0 0 8px;
64
+ padding: 0;
65
+ border: 0;
66
+ }
67
+ .pptxv-inspector :where(legend) {
68
+ margin-bottom: 4px;
69
+ padding: 0;
70
+ color: var(--pptx-foreground);
71
+ font-size: 11px;
72
+ font-weight: 600;
73
+ }
74
+
75
+ /* One field per row: caption on the left, control on the right. A checkbox
76
+ or radio goes first and its caption follows it, as in PowerPoint's panes.
77
+ Only unclassed labels (and the chart helpers' field classes, which carry no
78
+ rule of their own) take part: a classed label such as `.pptxv-field` has its
79
+ own layout, and these flex declarations would otherwise leak into it. */
80
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field) {
81
+ display: flex;
82
+ flex-wrap: wrap;
83
+ align-items: center;
84
+ gap: 4px 8px;
85
+ min-width: 0;
86
+ margin-bottom: 6px;
87
+ color: var(--pptx-muted-foreground);
88
+ font-size: 11px;
89
+ }
90
+ /* A field toggled off with the hidden attribute must stay off: the flex
91
+ display above would otherwise override the user-agent display: none. */
92
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field)[hidden] { display: none; }
93
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field) > :where(input, textarea, select, pptx-ui-select) {
94
+ flex: 0 1 60%;
95
+ margin-left: auto;
96
+ }
97
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field) > :where(input[type='color']) {
98
+ flex: none;
99
+ margin-left: auto;
100
+ }
101
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field) > :where(pptx-ui-checkbox, pptx-ui-radio, input[type='checkbox'], input[type='radio']) {
102
+ flex: none;
103
+ order: -1;
104
+ }
105
+ .pptxv-inspector-section :where(label:not([class]), .pptxv-exhaustive-field, .pptxv-chart-filters-range-field) > :where(textarea) {
106
+ flex-basis: 100%;
107
+ margin-left: 0;
108
+ }
109
+
110
+ /* Chart sub-blocks: a gap and a rule between the groups instead of one run. */
111
+ .pptxv-inspector :where(.pptxv-chart-advanced, .pptxv-chart-exhaustive, .pptxv-chart-subtype, .pptxv-chart-filters, .pptxv-chart-usershapes) {
112
+ margin-top: 8px;
113
+ padding-top: 8px;
114
+ border-top: 1px solid var(--pptx-border);
115
+ }
116
+ .pptxv-inspector :where(.pptxv-chart-advanced, .pptxv-chart-exhaustive, .pptxv-chart-subtype, .pptxv-chart-filters, .pptxv-chart-usershapes)[hidden] { display: none; }
117
+ .pptxv-inspector :where(.pptxv-chart-advanced, .pptxv-chart-exhaustive, .pptxv-chart-filters, .pptxv-chart-usershapes) :where(button:not([class]), .pptxv-chart-clear-series-color) {
118
+ min-height: 24px;
119
+ padding: 2px 8px;
120
+ border: 1px solid var(--pptx-border);
121
+ border-radius: var(--pptx-radius);
122
+ background: var(--pptx-secondary);
123
+ color: var(--pptx-secondary-foreground);
124
+ font: inherit;
125
+ font-size: 11px;
126
+ cursor: pointer;
127
+ }
128
+ .pptxv-inspector :where(.pptxv-chart-clear-series-color) { margin-bottom: 6px; }
129
+ .pptxv-inspector :where(.pptxv-chart-clear-series-color)[hidden] { display: none; }
130
+
131
+
26
132
  .pptxv {
27
133
  position: relative;
28
134
  display: flex;
@@ -1131,7 +1237,12 @@
1131
1237
  .pptxv-smartart-layout-button:hover { background: var(--pptx-accent); color: var(--pptx-accent-foreground); }
1132
1238
  .pptxv-smartart-layout-button.is-active { border-color: var(--pptx-primary); background: color-mix(in srgb, var(--pptx-primary) 16%, transparent); color: var(--pptx-primary); }
1133
1239
  .pptxv-smartart-nodes { display: flex; max-height: 208px; flex-direction: column; gap: 5px; overflow-y: auto; }
1134
- .pptxv-smartart-node { display: grid; grid-template-columns: 20px minmax(0, 1fr); align-items: center; gap: 5px; }
1240
+ /* One row per node: index, text, fill, font colour, bold, italic; the
1241
+ hierarchy actions (inspector-extras-css.ts) wrap onto a second row under
1242
+ the text. With two columns the six controls used to scatter over four. */
1243
+ .pptxv-smartart-node { display: grid; grid-template-columns: 20px minmax(0, 1fr) repeat(4, auto); align-items: center; gap: 5px; }
1244
+ .pptxv-smartart-node > input[type='color'] { width: 22px; height: 22px; }
1245
+ .pptxv-smartart-node > button { min-width: 22px; height: 22px; padding: 0 4px; border: 1px solid var(--pptx-border); border-radius: var(--pptx-radius); background: transparent; color: var(--pptx-foreground); font: inherit; font-weight: 600; cursor: pointer; }
1135
1246
  .pptxv-smartart-node-index { color: var(--pptx-muted-foreground); text-align: center; }
1136
1247
  .pptxv-smartart-node-input { min-width: 0; height: 26px; box-sizing: border-box; padding: 2px 6px; border: 1px solid var(--pptx-border); border-radius: var(--pptx-radius); background: var(--pptx-background); color: var(--pptx-foreground); font: inherit; }
1137
1248
  .pptxv-smartart-node-input:focus-visible { outline: 2px solid var(--pptx-ring); outline-offset: -1px; }
@@ -2870,8 +2981,6 @@
2870
2981
  .pptxv-ole-edit-table input:focus { background: var(--pptx-accent); outline: none; }
2871
2982
  .pptxv-ole-edit-paragraphs, .pptxv-ole-edit-deck { display: flex; flex-direction: column; gap: 8px; }
2872
2983
  .pptxv-ole-edit-paragraphs textarea { padding: 6px 8px; border: 1px solid var(--pptx-border); border-radius: 4px; background: var(--pptx-muted); color: inherit; resize: vertical; }
2873
- .pptxv-ole-edit-deck-row { display: flex; flex-direction: column; gap: 4px; color: var(--pptx-muted-foreground); }
2874
- .pptxv-ole-edit-deck-row input { padding: 6px 8px; border: 1px solid var(--pptx-border); border-radius: 4px; background: var(--pptx-muted); color: var(--pptx-foreground); }
2875
2984
  /* Touch target: matches MIN_TOUCH_TARGET_PX (44) from pptx-viewer-shared's
2876
2985
  render/responsive module, below MOBILE_BREAKPOINT (768). The workspace
2877
2986
  Comments pane's "Add Comment" button (comments-panel.ts) carries no class
@@ -2883,17 +2992,6 @@
2883
2992
  }
2884
2993
 
2885
2994
 
2886
- /* ── Dialog shell override: the Options dialog is wider than parity dialogs ── */
2887
- .pptxv-options-dialog { width: min(56rem, calc(100vw - 32px)); height: min(620px, 88vh); }
2888
- .pptxv-options-dialog .pptxv-parity-body { flex: 1; min-height: 0; padding: 0; gap: 0; }
2889
- .pptxv-options-body { display: flex; flex: 1; min-height: 0; }
2890
- .pptxv-options-nav { display: flex; flex-direction: column; gap: 2px; flex: none; width: 172px; overflow-y: auto; padding: 8px; border-right: 1px solid var(--pptx-border); }
2891
- .pptxv-options-nav button { padding: 8px 10px; border: 0; border-radius: 4px; background: transparent; color: var(--pptx-foreground); font: inherit; font-size: 12px; text-align: left; cursor: pointer; white-space: nowrap; }
2892
- .pptxv-options-nav button:hover { background: var(--pptx-accent); color: var(--pptx-accent-foreground); }
2893
- .pptxv-options-nav button.is-active { background: color-mix(in srgb, var(--pptx-primary) 14%, transparent); color: var(--pptx-primary); font-weight: 600; }
2894
- .pptxv-options-pane { flex: 1; min-width: 0; overflow-y: auto; padding: 14px 18px; font-size: 12px; }
2895
- .pptxv-options-headline { margin: 0 0 12px; font-size: 12px; font-weight: 600; }
2896
-
2897
2995
  /* ── Sections + control rows ── */
2898
2996
  .pptxv-options-section { margin: 0 0 16px; }
2899
2997
  .pptxv-options-section > h3 { margin: 0 0 4px; padding-bottom: 3px; border-bottom: 1px solid var(--pptx-border); color: var(--pptx-muted-foreground); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
@@ -2908,17 +3006,6 @@
2908
3006
  gap: 2px;
2909
3007
  font-size: 12px;
2910
3008
  }
2911
- .pptxv-options-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 28px; padding: 2px 0; }
2912
- .pptxv-options-row.is-indent { padding-left: 22px; }
2913
- label.pptxv-options-row { cursor: pointer; }
2914
- .pptxv-options-row-label { display: inline-flex; align-items: center; gap: 5px; min-width: 0; }
2915
- .pptxv-options-info { display: inline-grid; place-items: center; width: 13px; height: 13px; flex: none; border: 1px solid currentcolor; border-radius: 50%; color: var(--pptx-primary); font-size: 9px; font-style: normal; cursor: help; opacity: .75; }
2916
- .pptxv-options-row select, .pptxv-options-row input[type='text'], .pptxv-options-row input[type='number'] { max-width: 55%; padding: 5px 7px; border: 1px solid var(--pptx-border); border-radius: 4px; background: var(--pptx-muted); color: inherit; font: inherit; font-size: 12px; }
2917
- .pptxv-options-row input[type='number'] { width: 72px; text-align: right; }
2918
- .pptxv-options-row input[type='text'] { width: 180px; }
2919
- .pptxv-options-row pptx-ui-checkbox { flex: none; }
2920
- .pptxv-options-unit { color: var(--pptx-muted-foreground); font-size: 11px; }
2921
- .pptxv-options-number { display: inline-flex; align-items: center; gap: 6px; }
2922
3009
  .pptxv-options-action { padding: 6px 11px; border: 1px solid var(--pptx-border); border-radius: 4px; background: var(--pptx-muted); color: inherit; font: inherit; font-size: 12px; cursor: pointer; }
2923
3010
  .pptxv-options-action:hover:not(:disabled) { background: var(--pptx-accent); color: var(--pptx-accent-foreground); }
2924
3011
  .pptxv-options-action:disabled { opacity: .45; cursor: default; }
@@ -2967,23 +3054,6 @@ label.pptxv-options-row { cursor: pointer; }
2967
3054
  opacity/pointer-events on mousemove; !important here is required to win
2968
3055
  over that inline style regardless of the JS auto-show timer. */
2969
3056
  .pptxv.pptxv-no-show-popup .pptxv-present-toolbar-wrap { opacity: 0 !important; pointer-events: none !important; }
2970
- @media (max-width: 767px) {
2971
- .pptxv-options-body { flex-direction: column; }
2972
- .pptxv-options-nav { flex-direction: row; width: 100%; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--pptx-border); }
2973
- /* Matches isDensePanelCompact()/MOBILE_BREAKPOINT (768) in
2974
- pptx-viewer-shared: getDensePanelTouchTargetPx(width) returns
2975
- MIN_TOUCH_TARGET_PX (44). Every schema-driven control row (toggle /
2976
- select / number / text, across every tab) gets a touch-sized hit area:
2977
- the row itself (a <label> for a toggle, so enlarging it is enough there)
2978
- and each select/text/number control. */
2979
- .pptxv-options-row { min-height: 44px; }
2980
- .pptxv-options-row select, .pptxv-options-row input[type='text'], .pptxv-options-row input[type='number'] { min-height: 44px; }
2981
- /* The category rail's own tab buttons are discrete one-per-row controls
2982
- too, so they get the same touch target as everything else in this
2983
- dialog below the breakpoint - CLAUDE.md Rule 1 (React's SettingsDialog
2984
- navBtnStyle already covers its own nav for the same reason). */
2985
- .pptxv-options-nav button { min-height: 44px; }
2986
- }
2987
3057
 
2988
3058
 
2989
3059
  .pptxv-motion-path-row { display: grid; gap: 2px; font-size: 11px; }
@@ -3257,7 +3327,7 @@ svg[data-pptx-motion-path-overlay] [data-pptx-motion-path-handle] { pointer-even
3257
3327
  .pptxv-text3d-color { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
3258
3328
 
3259
3329
  /* ── Chart data grid ─────────────────────────────────────────────────── */
3260
- .pptxv-chart-grid { display: grid; gap: 4px; margin: 6px 0; }
3330
+ .pptxv-chart-grid { display: grid; gap: 4px; margin: 6px 0; max-width: 100%; overflow-x: auto; }
3261
3331
  .pptxv-chart-grid[hidden] { display: none; }
3262
3332
  .pptxv-chart-grid-toolbar { display: flex; justify-content: flex-end; gap: 4px; }
3263
3333
  .pptxv-chart-grid-btn {
@@ -3695,6 +3765,184 @@ svg[data-pptx-motion-path-overlay] [data-pptx-motion-path-handle] { pointer-even
3695
3765
  .pptxv-theme-swatch-grid-swatch.is-selected { outline: 2px solid var(--pptx-ring); outline-offset: 1px; }
3696
3766
 
3697
3767
 
3768
+ /* ── Media ───────────────────────────────────────────────────────────── */
3769
+ .pptxv-media-preview {
3770
+ display: block;
3771
+ width: 100%;
3772
+ max-height: 160px;
3773
+ margin-bottom: 8px;
3774
+ border: 1px solid var(--pptx-border);
3775
+ border-radius: var(--pptx-radius);
3776
+ background: #000;
3777
+ }
3778
+ .pptxv-media-preview[hidden] { display: none; }
3779
+ .pptxv-media-poster {
3780
+ display: block;
3781
+ max-width: 100%;
3782
+ max-height: 96px;
3783
+ margin-bottom: 8px;
3784
+ border-radius: var(--pptx-radius);
3785
+ object-fit: contain;
3786
+ }
3787
+ .pptxv-media-poster[hidden],
3788
+ .pptxv-media-poster:not([src]) { display: none; }
3789
+ .pptxv-media-reset-trim {
3790
+ align-self: flex-start;
3791
+ margin: 2px 0 8px;
3792
+ padding: 2px 8px;
3793
+ border: 1px solid var(--pptx-border);
3794
+ border-radius: var(--pptx-radius);
3795
+ background: var(--pptx-secondary);
3796
+ color: var(--pptx-secondary-foreground);
3797
+ font: inherit;
3798
+ font-size: 11px;
3799
+ cursor: pointer;
3800
+ }
3801
+ .pptxv-media-reset-trim:disabled { opacity: 0.5; cursor: default; }
3802
+ .pptxv-media-metadata {
3803
+ display: block;
3804
+ margin-top: 6px;
3805
+ color: var(--pptx-muted-foreground);
3806
+ font-size: 10px;
3807
+ font-variant-numeric: tabular-nums;
3808
+ white-space: pre-line;
3809
+ }
3810
+
3811
+ /* ── Animation rows ──────────────────────────────────────────────────── */
3812
+ .pptxv-effect-sound-row,
3813
+ .pptxv-after-animation-row {
3814
+ display: flex;
3815
+ flex-direction: column;
3816
+ gap: 4px;
3817
+ margin-bottom: 8px;
3818
+ color: var(--pptx-muted-foreground);
3819
+ font-size: 11px;
3820
+ }
3821
+ .pptxv-effect-sound-controls {
3822
+ display: flex;
3823
+ align-items: center;
3824
+ gap: 6px;
3825
+ min-width: 0;
3826
+ }
3827
+ .pptxv-effect-sound-controls > :first-child { flex: 1; min-width: 0; }
3828
+ .pptxv-effect-sound-preview {
3829
+ flex: none;
3830
+ width: 26px;
3831
+ height: 26px;
3832
+ padding: 0;
3833
+ border: 1px solid var(--pptx-border);
3834
+ border-radius: var(--pptx-radius);
3835
+ background: var(--pptx-secondary);
3836
+ color: var(--pptx-secondary-foreground);
3837
+ font-size: 10px;
3838
+ cursor: pointer;
3839
+ }
3840
+ .pptxv-effect-sound-preview:disabled { opacity: 0.5; cursor: default; }
3841
+ /* The picker opens from the "Other sound..." option; the input itself stays out of sight. */
3842
+ .pptxv-effect-sound-file-input {
3843
+ position: absolute;
3844
+ width: 1px;
3845
+ height: 1px;
3846
+ overflow: hidden;
3847
+ clip-path: inset(50%);
3848
+ white-space: nowrap;
3849
+ }
3850
+ .pptxv-after-animation-row > label,
3851
+ .pptxv-after-animation-color {
3852
+ display: flex;
3853
+ align-items: center;
3854
+ justify-content: space-between;
3855
+ gap: 8px;
3856
+ }
3857
+ .pptxv-after-animation-row > label > :last-child { flex: 0 1 60%; min-width: 0; }
3858
+ .pptxv-after-animation-color[hidden] { display: none; }
3859
+
3860
+ /* ── Slide size: rescale prompt ──────────────────────────────────────── */
3861
+ .pptxv-slide-size-rescale {
3862
+ display: grid;
3863
+ gap: 6px;
3864
+ margin-top: 8px;
3865
+ padding: 8px;
3866
+ border: 1px solid var(--pptx-primary);
3867
+ border-radius: 6px;
3868
+ background: color-mix(in srgb, var(--pptx-primary) 8%, transparent);
3869
+ }
3870
+ .pptxv-slide-size-rescale[hidden] { display: none; }
3871
+ .pptxv-slide-size-rescale-title { color: var(--pptx-foreground); font-size: 12px; font-weight: 600; }
3872
+ .pptxv-slide-size-rescale-description { margin: 0; color: var(--pptx-muted-foreground); font-size: 11px; line-height: 1.4; }
3873
+ .pptxv-slide-size-rescale-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 6px; }
3874
+ .pptxv-slide-size-rescale-btn {
3875
+ min-height: 28px;
3876
+ padding: 4px 8px;
3877
+ border: 1px solid var(--pptx-border);
3878
+ border-radius: var(--pptx-radius);
3879
+ background: var(--pptx-background);
3880
+ color: var(--pptx-foreground);
3881
+ font: inherit;
3882
+ font-size: 11px;
3883
+ cursor: pointer;
3884
+ }
3885
+ .pptxv-slide-size-rescale-btn:hover { border-color: var(--pptx-primary); background: var(--pptx-accent); }
3886
+
3887
+ /* ── Fill: pattern panel, alt text, tags ─────────────────────────────── */
3888
+ .pptxv-inspector-pattern {
3889
+ display: grid;
3890
+ gap: 6px;
3891
+ margin: 4px 0 8px;
3892
+ padding-left: 4px;
3893
+ border-left: 2px solid var(--pptx-border);
3894
+ }
3895
+ .pptxv-inspector-pattern[hidden],
3896
+ .pptxv-inspector-pattern:empty { display: none; }
3897
+ .pptxv-accessibility-alt {
3898
+ display: flex;
3899
+ flex-direction: column;
3900
+ align-items: stretch;
3901
+ gap: 4px;
3902
+ margin-bottom: 8px;
3903
+ }
3904
+ .pptxv-accessibility-alt-input { width: 100%; }
3905
+ .pptxv-accessibility-title-input { flex: 1 1 auto; min-width: 0; }
3906
+ .pptxv-tags-toggle-label {
3907
+ color: var(--pptx-foreground);
3908
+ font-size: 11px;
3909
+ font-weight: 600;
3910
+ }
3911
+
3912
+ /* ── SmartArt text pane: per-node hierarchy actions ──────────────────── */
3913
+ .pptxv-smartart-hierarchy {
3914
+ display: flex;
3915
+ flex-wrap: wrap;
3916
+ grid-column: 2 / -1;
3917
+ gap: 4px;
3918
+ margin-top: 2px;
3919
+ }
3920
+ .pptxv-smartart-hierarchy button {
3921
+ padding: 1px 6px;
3922
+ border: 1px solid var(--pptx-border);
3923
+ border-radius: var(--pptx-radius);
3924
+ background: transparent;
3925
+ color: var(--pptx-muted-foreground);
3926
+ font: inherit;
3927
+ font-size: 10px;
3928
+ cursor: pointer;
3929
+ }
3930
+ .pptxv-smartart-hierarchy button:hover { background: var(--pptx-accent); color: var(--pptx-accent-foreground); }
3931
+
3932
+ /* ── OLE editor dialog: nested deck tab ──────────────────────────────── */
3933
+ .pptxv-ole-edit-content { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
3934
+ .pptxv-ole-edit-deck-slide { display: flex; flex-direction: column; gap: 4px; color: var(--pptx-muted-foreground); }
3935
+ .pptxv-ole-edit-deck-caption { font-size: 11px; font-weight: 600; }
3936
+ .pptxv-ole-edit-deck-slide input {
3937
+ padding: 6px 8px;
3938
+ border: 1px solid var(--pptx-border);
3939
+ border-radius: 4px;
3940
+ background: var(--pptx-muted);
3941
+ color: var(--pptx-foreground);
3942
+ font: inherit;
3943
+ }
3944
+
3945
+
3698
3946
  .pptxv-account { display: flex; flex-direction: column; gap: 28px; max-width: 640px; margin-top: 24px; }
3699
3947
  .pptxv-account-section { padding: 20px; border: 1px solid var(--pptx-border); border-radius: 8px; background: var(--pptx-card); color: var(--pptx-card-foreground); }
3700
3948
  .pptxv-account-section h2 { margin: 0 0 14px; font-size: 14px; }
@@ -4554,6 +4802,15 @@ svg[data-pptx-motion-path-overlay] [data-pptx-motion-path-handle] { pointer-even
4554
4802
  .pptxv-run-program-notice-dismiss svg { width: 12px; height: 12px; margin: 0; }
4555
4803
 
4556
4804
 
4805
+ .pptxv-region { display: block; box-sizing: border-box; width: 100%; height: 100%; min-width: 0; min-height: 0; overflow: auto; }
4806
+ .pptxv-region-replaced > :not(.pptxv-region) { display: none !important; }
4807
+ .pptxv-notes.pptxv-region-replaced[data-collapsed='true'] { display: none; }
4808
+ .pptxv-statusbar.pptxv-region { height: auto; flex: none; }
4809
+ .pptxv-modal-panel > .pptxv-region,
4810
+ .pptxv-parity-dialog > .pptxv-region { height: auto; flex: 1 1 auto; }
4811
+ .pptxv-backstage main > .pptxv-region { height: auto; flex: 1 1 auto; }
4812
+
4813
+
4557
4814
  [data-pptx-editor-chrome] [data-pptx-chrome][hidden] { display: none !important; }
4558
4815
  @media (min-width: 768px) {
4559
4816
  [data-pptx-editor-chrome] [data-pptx-title-bar] {
@@ -4658,8 +4915,9 @@ svg[data-pptx-motion-path-overlay] [data-pptx-motion-path-handle] { pointer-even
4658
4915
  padding: 0; gap: 0; border: 0; scrollbar-width: none;
4659
4916
  }
4660
4917
  [data-pptx-editor-chrome] [data-pptx-chrome="ribbon-tabs"]:has([data-pptx-chrome="ribbon-tab-scroll"]) { overflow: visible; }
4918
+ /* Tabs keep their labels whole; a narrow editor scrolls the strip, as Office does. */
4661
4919
  [data-pptx-editor-chrome] [data-pptx-chrome="ribbon-tabs"] [role="tab"] {
4662
- position: relative; height: 34px; padding: 8px 14px;
4920
+ position: relative; flex: none; height: 34px; padding: 8px 14px;
4663
4921
  border: 0; border-radius: 0; font-size: 12px; line-height: 18px;
4664
4922
  font-weight: 500; white-space: nowrap; background: transparent;
4665
4923
  color: var(--pptx-muted-foreground);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-vanilla-viewer",
3
- "version": "3.36.3",
3
+ "version": "3.38.0",
4
4
  "description": "pptx-viewer for vanilla JS: a zero-framework PowerPoint viewer and editor to render, edit, present, and export PPTX slides with plain DOM, no React/Vue/Angular required.",
5
5
  "keywords": [
6
6
  "javascript",
@@ -107,8 +107,8 @@
107
107
  "jspdf": "^4.2.1",
108
108
  "jszip": "^3.10.2",
109
109
  "lucide": "^1.54.0",
110
- "ooxml-core": "^1.12.2",
111
- "ooxml-ui": "^1.12.3",
110
+ "ooxml-core": "^1.14.0",
111
+ "ooxml-ui": "^1.14.0",
112
112
  "opentype.js": "^2.0.0"
113
113
  },
114
114
  "devDependencies": {