pptx-react-viewer 4.62.1 → 4.63.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/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ A release listed with no entries carried no Conventional Commit in this package'
7
7
  scope: scripts/release-plan.mjs releases whenever any published file changes, not only on
8
8
  conventional commits.
9
9
 
10
+ ## [4.63.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.63.0) - 2026-11-04
11
+
12
+ ### Features
13
+
14
+ - **embedding:** Connect office products to shared onedrive storage ([b8620c1](https://github.com/ChristopherVR/ooxml/commit/b8620c13a4903aa27fed365d113153cad76ed29f))
15
+ - **collab:** Merge concurrent onedrive document edits ([194529b](https://github.com/ChristopherVR/ooxml/commit/194529b06c63f994eed5d1d4b7e82759e17a704b))
16
+
17
+ ## [4.62.2](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.62.2) - 2026-11-03
18
+
19
+ ### Bug Fixes
20
+
21
+ - **release:** Publish pptx-angular-viewer from its built dist ([#240](https://github.com/ChristopherVR/ooxml/issues/240)) ([8015762](https://github.com/ChristopherVR/ooxml/commit/8015762a9eb2852cbaa4bc57bd0e7d6912802bd3))
22
+
10
23
  ## [4.62.1](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.62.1) - 2026-11-03
11
24
 
12
25
  ### Styling
package/README.md CHANGED
@@ -353,3 +353,12 @@ for registration and runtime switching. Existing English imports are unchanged.
353
353
  ## License
354
354
 
355
355
  [Apache-2.0](LICENSE). Please keep the [`NOTICE`](NOTICE) file with redistributions.
356
+
357
+ ## OneDrive integration
358
+
359
+ Use the optional shared `ooxml-core/embedding/onedrive` connection with host-supplied Microsoft
360
+ sign-in. See the [Office package and integration reference](https://github.com/ChristopherVR/ooxml/blob/main/docs/onedrive-integration.md#powerpoint-pptx)
361
+ for this product's load/save API, native storage wiring, sharing permissions and conflict recovery.
362
+ The [testing guide](https://github.com/ChristopherVR/ooxml/blob/main/docs/onedrive-testing.md)
363
+ separates test-local transports from live Microsoft acceptance. No simulation service is shipped;
364
+ OneDrive storage does not provide Microsoft Office coauthoring or automatic document merging.
@@ -2795,7 +2795,7 @@ function AccountPage() {
2795
2795
  return void 0;
2796
2796
  });
2797
2797
  };
2798
- const version = "4.62.1" ;
2798
+ const version = "4.63.0" ;
2799
2799
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
2800
2800
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
2801
2801
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
Binary file
@@ -2790,7 +2790,7 @@ function AccountPage() {
2790
2790
  return void 0;
2791
2791
  });
2792
2792
  };
2793
- const version = "4.62.1" ;
2793
+ const version = "4.63.0" ;
2794
2794
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
2795
2795
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
2796
2796
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
Binary file
Binary file
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHNNMNFA2_js = require('./chunk-HNNMNFA2.js');
3
+ var chunkG5XPJCS5_js = require('./chunk-G5XPJCS5.js');
4
4
  require('./chunk-F6WCYCHV.js');
5
5
  var chunkTXVGYIO6_js = require('./chunk-TXVGYIO6.js');
6
6
  var chunk5KFSMXI4_js = require('./chunk-5KFSMXI4.js');
@@ -12,83 +12,83 @@ var i18n = require('ooxml-ui/pptx/i18n');
12
12
 
13
13
  Object.defineProperty(exports, "PowerPointViewer", {
14
14
  enumerable: true,
15
- get: function () { return chunkHNNMNFA2_js.PowerPointViewer; }
15
+ get: function () { return chunkG5XPJCS5_js.PowerPointViewer; }
16
16
  });
17
17
  Object.defineProperty(exports, "PptxI18nProvider", {
18
18
  enumerable: true,
19
- get: function () { return chunkHNNMNFA2_js.PptxI18nProvider; }
19
+ get: function () { return chunkG5XPJCS5_js.PptxI18nProvider; }
20
20
  });
21
21
  Object.defineProperty(exports, "SlideCanvas", {
22
22
  enumerable: true,
23
- get: function () { return chunkHNNMNFA2_js.SlideCanvas; }
23
+ get: function () { return chunkG5XPJCS5_js.SlideCanvas; }
24
24
  });
25
25
  Object.defineProperty(exports, "SlideTemplateGalleryDialog", {
26
26
  enumerable: true,
27
- get: function () { return chunkHNNMNFA2_js.SlideTemplateGalleryDialog; }
27
+ get: function () { return chunkG5XPJCS5_js.SlideTemplateGalleryDialog; }
28
28
  });
29
29
  Object.defineProperty(exports, "SlideTemplatePreview", {
30
30
  enumerable: true,
31
- get: function () { return chunkHNNMNFA2_js.SlideTemplatePreview; }
31
+ get: function () { return chunkG5XPJCS5_js.SlideTemplatePreview; }
32
32
  });
33
33
  Object.defineProperty(exports, "SlidesPane", {
34
34
  enumerable: true,
35
- get: function () { return chunkHNNMNFA2_js.SlidesPaneSidebar; }
35
+ get: function () { return chunkG5XPJCS5_js.SlidesPaneSidebar; }
36
36
  });
37
37
  Object.defineProperty(exports, "THEME_CATALOG", {
38
38
  enumerable: true,
39
- get: function () { return chunkHNNMNFA2_js.THEME_CATALOG; }
39
+ get: function () { return chunkG5XPJCS5_js.THEME_CATALOG; }
40
40
  });
41
41
  Object.defineProperty(exports, "Toolbar", {
42
42
  enumerable: true,
43
- get: function () { return chunkHNNMNFA2_js.Toolbar; }
43
+ get: function () { return chunkG5XPJCS5_js.Toolbar; }
44
44
  });
45
45
  Object.defineProperty(exports, "ViewerThemeProvider", {
46
46
  enumerable: true,
47
- get: function () { return chunkHNNMNFA2_js.ViewerThemeProvider; }
47
+ get: function () { return chunkG5XPJCS5_js.ViewerThemeProvider; }
48
48
  });
49
49
  Object.defineProperty(exports, "defaultCssVars", {
50
50
  enumerable: true,
51
- get: function () { return chunkHNNMNFA2_js.defaultCssVars; }
51
+ get: function () { return chunkG5XPJCS5_js.defaultCssVars; }
52
52
  });
53
53
  Object.defineProperty(exports, "defaultRadius", {
54
54
  enumerable: true,
55
- get: function () { return chunkHNNMNFA2_js.defaultRadius; }
55
+ get: function () { return chunkG5XPJCS5_js.defaultRadius; }
56
56
  });
57
57
  Object.defineProperty(exports, "defaultThemeColors", {
58
58
  enumerable: true,
59
- get: function () { return chunkHNNMNFA2_js.defaultThemeColors; }
59
+ get: function () { return chunkG5XPJCS5_js.defaultThemeColors; }
60
60
  });
61
61
  Object.defineProperty(exports, "resolveThemeCatalogEntry", {
62
62
  enumerable: true,
63
- get: function () { return chunkHNNMNFA2_js.resolveThemeCatalogEntry; }
63
+ get: function () { return chunkG5XPJCS5_js.resolveThemeCatalogEntry; }
64
64
  });
65
65
  Object.defineProperty(exports, "themeToCssVars", {
66
66
  enumerable: true,
67
- get: function () { return chunkHNNMNFA2_js.themeToCssVars; }
67
+ get: function () { return chunkG5XPJCS5_js.themeToCssVars; }
68
68
  });
69
69
  Object.defineProperty(exports, "useViewerTheme", {
70
70
  enumerable: true,
71
- get: function () { return chunkHNNMNFA2_js.useViewerTheme; }
71
+ get: function () { return chunkG5XPJCS5_js.useViewerTheme; }
72
72
  });
73
73
  Object.defineProperty(exports, "vermilionDarkColors", {
74
74
  enumerable: true,
75
- get: function () { return chunkHNNMNFA2_js.vermilionDarkColors; }
75
+ get: function () { return chunkG5XPJCS5_js.vermilionDarkColors; }
76
76
  });
77
77
  Object.defineProperty(exports, "vermilionDarkTheme", {
78
78
  enumerable: true,
79
- get: function () { return chunkHNNMNFA2_js.vermilionDarkTheme; }
79
+ get: function () { return chunkG5XPJCS5_js.vermilionDarkTheme; }
80
80
  });
81
81
  Object.defineProperty(exports, "vermilionLightColors", {
82
82
  enumerable: true,
83
- get: function () { return chunkHNNMNFA2_js.vermilionLightColors; }
83
+ get: function () { return chunkG5XPJCS5_js.vermilionLightColors; }
84
84
  });
85
85
  Object.defineProperty(exports, "vermilionLightTheme", {
86
86
  enumerable: true,
87
- get: function () { return chunkHNNMNFA2_js.vermilionLightTheme; }
87
+ get: function () { return chunkG5XPJCS5_js.vermilionLightTheme; }
88
88
  });
89
89
  Object.defineProperty(exports, "vermilionRadius", {
90
90
  enumerable: true,
91
- get: function () { return chunkHNNMNFA2_js.vermilionRadius; }
91
+ get: function () { return chunkG5XPJCS5_js.vermilionRadius; }
92
92
  });
93
93
  Object.defineProperty(exports, "renderToCanvas", {
94
94
  enumerable: true,
package/dist/index.js.br CHANGED
Binary file
package/dist/index.js.gz CHANGED
Binary file
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { PowerPointViewer, PptxI18nProvider, SlideCanvas, SlideTemplateGalleryDialog, SlideTemplatePreview, SlidesPaneSidebar as SlidesPane, THEME_CATALOG, Toolbar, ViewerThemeProvider, defaultCssVars, defaultRadius, defaultThemeColors, resolveThemeCatalogEntry, themeToCssVars, useViewerTheme, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius } from './chunk-KHFBKZWP.mjs';
1
+ export { PowerPointViewer, PptxI18nProvider, SlideCanvas, SlideTemplateGalleryDialog, SlideTemplatePreview, SlidesPaneSidebar as SlidesPane, THEME_CATALOG, Toolbar, ViewerThemeProvider, defaultCssVars, defaultRadius, defaultThemeColors, resolveThemeCatalogEntry, themeToCssVars, useViewerTheme, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius } from './chunk-XCOYNPXR.mjs';
2
2
  import './chunk-NE5JQMED.mjs';
3
3
  export { renderToCanvas, useViewerBuildingBlocks } from './chunk-FYQVCABH.mjs';
4
4
  export { getAnimationInitialStyle } from './chunk-MR3ZSEHS.mjs';
package/dist/index.mjs.br CHANGED
Binary file
package/dist/index.mjs.gz CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHNNMNFA2_js = require('../chunk-HNNMNFA2.js');
3
+ var chunkG5XPJCS5_js = require('../chunk-G5XPJCS5.js');
4
4
  require('../chunk-F6WCYCHV.js');
5
5
  var chunkTXVGYIO6_js = require('../chunk-TXVGYIO6.js');
6
6
  var chunk5KFSMXI4_js = require('../chunk-5KFSMXI4.js');
@@ -11,19 +11,19 @@ var pptx = require('ooxml-ui/pptx');
11
11
 
12
12
  Object.defineProperty(exports, "CollaborationStatusIndicator", {
13
13
  enumerable: true,
14
- get: function () { return chunkHNNMNFA2_js.CollaborationStatusIndicator; }
14
+ get: function () { return chunkG5XPJCS5_js.CollaborationStatusIndicator; }
15
15
  });
16
16
  Object.defineProperty(exports, "PowerPointViewer", {
17
17
  enumerable: true,
18
- get: function () { return chunkHNNMNFA2_js.PowerPointViewer; }
18
+ get: function () { return chunkG5XPJCS5_js.PowerPointViewer; }
19
19
  });
20
20
  Object.defineProperty(exports, "PptxI18nProvider", {
21
21
  enumerable: true,
22
- get: function () { return chunkHNNMNFA2_js.PptxI18nProvider; }
22
+ get: function () { return chunkG5XPJCS5_js.PptxI18nProvider; }
23
23
  });
24
24
  Object.defineProperty(exports, "UserAvatarBar", {
25
25
  enumerable: true,
26
- get: function () { return chunkHNNMNFA2_js.UserAvatarBar; }
26
+ get: function () { return chunkG5XPJCS5_js.UserAvatarBar; }
27
27
  });
28
28
  Object.defineProperty(exports, "CollaborationProvider", {
29
29
  enumerable: true,
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- export { CollaborationStatusIndicator, PowerPointViewer, PptxI18nProvider, UserAvatarBar } from '../chunk-KHFBKZWP.mjs';
1
+ export { CollaborationStatusIndicator, PowerPointViewer, PptxI18nProvider, UserAvatarBar } from '../chunk-XCOYNPXR.mjs';
2
2
  import '../chunk-NE5JQMED.mjs';
3
3
  export { CollaborationProvider, RemoteUserCursors, clearAudienceContent, isAudienceTab, loadAudienceContent, parseAudienceNonce, storeAudienceContent, useCollaborativeHistory, useCollaborativeState, usePresenceTracking, useThemeSwitching, useYjsProvider } from '../chunk-FYQVCABH.mjs';
4
4
  export { getAnimationInitialStyle } from '../chunk-MR3ZSEHS.mjs';
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-react-viewer",
3
- "version": "4.62.1",
3
+ "version": "4.63.0",
4
4
  "description": "pptx-viewer for React: a PowerPoint viewer and editor component to render, edit, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "editor",
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "files": [
33
33
  "dist/",
34
+ "src/styles/theme.css",
34
35
  "CHANGELOG.md",
35
36
  "LICENSE",
36
37
  "NOTICE",
@@ -125,8 +126,8 @@
125
126
  "clsx": "^2.1.1",
126
127
  "dompurify": "^3.4.17",
127
128
  "html2canvas-pro": "^2.5.4",
128
- "ooxml-core": "^1.37.1",
129
- "ooxml-ui": "^1.39.2",
129
+ "ooxml-core": "^1.38.0",
130
+ "ooxml-ui": "^1.40.0",
130
131
  "opentype.js": "^2.0.0",
131
132
  "tailwind-merge": "^3.7.0"
132
133
  },
@@ -138,7 +139,7 @@
138
139
  "@types/react": "^19.3.0",
139
140
  "@types/react-dom": "^19.3.0",
140
141
  "esbuild": "^0.28.2",
141
- "pptx-viewer-core": "^4.13.5",
142
+ "pptx-viewer-core": "^4.14.0",
142
143
  "tailwindcss": "^4.3.3",
143
144
  "tsdown": "^0.23.4",
144
145
  "tsup": "^9.0.0",
@@ -0,0 +1,205 @@
1
+ /*
2
+ * pptx-viewer: theme tokens
3
+ *
4
+ * Reusable @theme block that maps Tailwind semantic color tokens to --pptx-*
5
+ * CSS custom properties. Import this file into any Tailwind v4 entry-point
6
+ * that renders <PowerPointViewer>.
7
+ *
8
+ * @import "pptx-viewer/theme.css"; // from published package
9
+ * @import "../packages/react/src/styles/theme.css"; // from monorepo
10
+ *
11
+ * All colours follow shared Office tokens when the --pptx-* properties
12
+ * are not set. Override them via the `theme` prop on the component or by
13
+ * setting the custom properties in your own CSS.
14
+ */
15
+
16
+ @theme inline {
17
+ /* ── Semantic colors ─────────────────────────────────────────────── */
18
+ --color-background: var(--pptx-background, var(--office-background, #ffffff));
19
+ --color-foreground: var(--pptx-foreground, var(--office-foreground, #1f2937));
20
+
21
+ --color-card: var(--pptx-card, var(--office-surface, #f3f4f6));
22
+ --color-card-foreground: var(--pptx-card-foreground, var(--office-foreground, #1f2937));
23
+
24
+ --color-popover: var(--pptx-popover, var(--office-popover, var(--office-background, #ffffff)));
25
+ --color-popover-foreground: var(
26
+ --pptx-popover-foreground,
27
+ var(--office-popover-foreground, var(--office-foreground, #1f2937))
28
+ );
29
+
30
+ --color-primary: var(--pptx-primary, var(--office-accent, #2563eb));
31
+ --color-primary-foreground: var(
32
+ --pptx-primary-foreground,
33
+ var(--office-accent-foreground, #ffffff)
34
+ );
35
+
36
+ --color-secondary: var(--pptx-secondary, var(--office-surface, #f3f4f6));
37
+ --color-secondary-foreground: var(--pptx-secondary-foreground, var(--office-foreground, #1f2937));
38
+
39
+ --color-muted: var(--pptx-muted, var(--office-surface, #f3f4f6));
40
+ --color-muted-foreground: var(--pptx-muted-foreground, var(--office-muted-foreground, #6b7280));
41
+
42
+ --color-accent: var(--pptx-accent, var(--office-selected, #e5e7eb));
43
+ --color-accent-foreground: var(--pptx-accent-foreground, var(--office-foreground, #1f2937));
44
+
45
+ --color-destructive: var(--pptx-destructive, var(--office-danger, #b91c1c));
46
+ --color-destructive-foreground: var(
47
+ --pptx-destructive-foreground,
48
+ var(--office-danger-foreground, #ffffff)
49
+ );
50
+
51
+ --color-border: var(--pptx-border, var(--office-border, #d1d5db));
52
+ --color-input: var(--pptx-input, var(--office-border, #d1d5db));
53
+ --color-ring: var(--pptx-ring, var(--office-ring, #2563eb));
54
+
55
+ /* ── Radius ──────────────────────────────────────────────────────── */
56
+ --radius-sm: calc(var(--pptx-radius, var(--office-radius, 4px)) - 4px);
57
+ --radius-md: calc(var(--pptx-radius, var(--office-radius, 4px)) - 2px);
58
+ --radius-lg: var(--pptx-radius, var(--office-radius, 4px));
59
+ --radius-xl: calc(var(--pptx-radius, var(--office-radius, 4px)) + 4px);
60
+ }
61
+
62
+ /* ── Reduced motion ──────────────────────────────────────────────────
63
+ * When the OS prefers-reduced-motion OR the user manually enables it
64
+ * via the .pptx-reduced-motion class, disable all CSS animations and
65
+ * transitions throughout the viewer.
66
+ */
67
+ @media (prefers-reduced-motion: reduce) {
68
+ [data-pptx-viewer] *,
69
+ [data-pptx-viewer] *::before,
70
+ [data-pptx-viewer] *::after {
71
+ animation-duration: 0.01ms !important;
72
+ animation-iteration-count: 1 !important;
73
+ transition-duration: 0.01ms !important;
74
+ scroll-behavior: auto !important;
75
+ }
76
+ }
77
+
78
+ .pptx-reduced-motion *,
79
+ .pptx-reduced-motion *::before,
80
+ .pptx-reduced-motion *::after {
81
+ animation-duration: 0.01ms !important;
82
+ animation-iteration-count: 1 !important;
83
+ transition-duration: 0.01ms !important;
84
+ scroll-behavior: auto !important;
85
+ }
86
+
87
+ /* ── Text autosizing. Slide text is laid out against fixed PowerPoint canvas
88
+ * geometry and the viewer scales the whole slide as one unit. Mobile browsers
89
+ * (and responsive iframes) may otherwise inflate only the glyphs, which
90
+ * changes line wrapping and clips text even though the deck is correct.
91
+ */
92
+ [data-pptx-viewer] {
93
+ font-family: var(--pptx-font, var(--office-font, system-ui, sans-serif));
94
+ -webkit-text-size-adjust: none;
95
+ text-size-adjust: none;
96
+ }
97
+
98
+ /* ── Hardware acceleration (Options > Advanced > "Disable hardware
99
+ * graphics acceleration"). Strips the GPU-compositing hints (will-change,
100
+ * backface-visibility, perspective) transitions/3D effects rely on, for
101
+ * users on underpowered/unstable graphics drivers. See
102
+ * `resolveOptionRootClasses` in pptx-viewer-shared.
103
+ */
104
+ [data-pptx-viewer].pptx-no-hw-accel *,
105
+ [data-pptx-viewer].pptx-no-hw-accel *::before,
106
+ [data-pptx-viewer].pptx-no-hw-accel *::after {
107
+ will-change: auto !important;
108
+ backface-visibility: visible !important;
109
+ perspective: none !important;
110
+ }
111
+
112
+ /* ── Display optimization (Options > General > "Optimize for compatibility")
113
+ * Drops shadow/blur/blend-mode effects across the viewer, mirroring
114
+ * PowerPoint's own degraded-effects mode for older/weaker hardware. See
115
+ * `resolveOptionRootClasses` in pptx-viewer-shared.
116
+ */
117
+ [data-pptx-viewer].pptx-compat-display *,
118
+ [data-pptx-viewer].pptx-compat-display *::before,
119
+ [data-pptx-viewer].pptx-compat-display *::after {
120
+ box-shadow: none !important;
121
+ backdrop-filter: none !important;
122
+ -webkit-backdrop-filter: none !important;
123
+ mix-blend-mode: normal !important;
124
+ }
125
+
126
+ /* ── Custom scrollbar styling ───────────────────────────────────────
127
+ * Thin, subtle scrollbars that match the dark theme. Uses both the
128
+ * WebKit pseudo-elements and the standard scrollbar-* properties.
129
+ */
130
+ :where([data-pptx-viewer]) {
131
+ scrollbar-width: thin;
132
+ scrollbar-color: var(--pptx-border, var(--office-border, #d1d5db)) transparent;
133
+ }
134
+
135
+ :where([data-pptx-viewer]) ::-webkit-scrollbar {
136
+ width: 6px;
137
+ height: 6px;
138
+ }
139
+
140
+ :where([data-pptx-viewer]) ::-webkit-scrollbar-track {
141
+ background: transparent;
142
+ }
143
+
144
+ :where([data-pptx-viewer]) ::-webkit-scrollbar-thumb {
145
+ background-color: var(--pptx-border, var(--office-border, #d1d5db));
146
+ border-radius: 3px;
147
+ }
148
+
149
+ :where([data-pptx-viewer]) ::-webkit-scrollbar-thumb:hover {
150
+ background-color: var(--pptx-muted-foreground, var(--office-muted-foreground, #6b7280));
151
+ }
152
+
153
+ :where([data-pptx-viewer]) ::-webkit-scrollbar-corner {
154
+ background: transparent;
155
+ }
156
+
157
+ /* ── Button press feedback ──────────────────────────────────────────
158
+ * Subtle scale-down on press for all interactive elements in the
159
+ * toolbar and status bar areas.
160
+ */
161
+ [data-pptx-viewer] [role='toolbar'] button,
162
+ [data-pptx-viewer] [role='toolbar'] [role='button'] {
163
+ transition:
164
+ transform 0.1s ease,
165
+ opacity 0.1s ease;
166
+ }
167
+
168
+ /* ── Focus indicators ────────────────────────────────────────────────
169
+ * Ensure keyboard focus is visible on interactive slide elements.
170
+ */
171
+ [data-pptx-element]:focus-visible {
172
+ outline: 2px solid var(--pptx-ring, var(--office-ring, #2563eb));
173
+ outline-offset: 2px;
174
+ z-index: 999;
175
+ }
176
+
177
+ :where([data-pptx-viewer])
178
+ :where(button, a, input, select, textarea, [tabindex]):not(
179
+ [data-pptx-search-input]
180
+ ):focus-visible {
181
+ outline: 2px solid var(--pptx-ring, var(--office-ring, #2563eb)) !important;
182
+ outline-offset: 2px;
183
+ }
184
+
185
+ :where([data-pptx-viewer])
186
+ :where(button, [role='button']):where(
187
+ :not([role='switch']):not([data-pptx-compact]):not([data-pptx-backstage-nav-item])
188
+ ) {
189
+ min-width: 24px;
190
+ min-height: 24px;
191
+ touch-action: manipulation;
192
+ }
193
+
194
+ @media (forced-colors: active) {
195
+ :where([data-pptx-viewer])
196
+ :where(button, a, input, select, textarea, [tabindex]):not(
197
+ [data-pptx-search-input]
198
+ ):focus-visible {
199
+ outline-color: Highlight;
200
+ }
201
+ :where([data-pptx-viewer]) [data-pptx-search-surface]:focus-within {
202
+ outline: 2px solid Highlight;
203
+ outline-offset: 2px;
204
+ }
205
+ }
Binary file
Binary file
Binary file