@deckspec/renderer 0.1.0 → 0.1.2
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/compile-tsx.d.ts +19 -0
- package/dist/compile-tsx.d.ts.map +1 -0
- package/dist/compile-tsx.js +101 -0
- package/dist/compile-tsx.js.map +1 -0
- package/dist/dashboard-css.d.ts +2 -0
- package/dist/dashboard-css.d.ts.map +1 -0
- package/dist/dashboard-css.js +419 -0
- package/dist/dashboard-css.js.map +1 -0
- package/dist/dashboard-js.d.ts +2 -0
- package/dist/dashboard-js.d.ts.map +1 -0
- package/dist/dashboard-js.js +15 -0
- package/dist/dashboard-js.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/render-dashboard.d.ts +35 -0
- package/dist/render-dashboard.d.ts.map +1 -0
- package/dist/render-dashboard.js +96 -0
- package/dist/render-dashboard.js.map +1 -0
- package/dist/render-deck.d.ts +17 -0
- package/dist/render-deck.d.ts.map +1 -0
- package/dist/render-deck.js +117 -0
- package/dist/render-deck.js.map +1 -0
- package/dist/render-slide.d.ts +15 -0
- package/dist/render-slide.d.ts.map +1 -0
- package/dist/render-slide.js +32 -0
- package/dist/render-slide.js.map +1 -0
- package/dist/render-theme-detail.d.ts +18 -0
- package/dist/render-theme-detail.d.ts.map +1 -0
- package/dist/render-theme-detail.js +104 -0
- package/dist/render-theme-detail.js.map +1 -0
- package/dist/resolve-assets.d.ts +10 -0
- package/dist/resolve-assets.d.ts.map +1 -0
- package/dist/resolve-assets.js +48 -0
- package/dist/resolve-assets.js.map +1 -0
- package/dist/theme.d.ts +63 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +52 -0
- package/dist/theme.js.map +1 -0
- package/dist/viewer-css.d.ts +11 -0
- package/dist/viewer-css.d.ts.map +1 -0
- package/dist/viewer-css.js +281 -0
- package/dist/viewer-css.js.map +1 -0
- package/dist/viewer-js.d.ts +13 -0
- package/dist/viewer-js.d.ts.map +1 -0
- package/dist/viewer-js.js +233 -0
- package/dist/viewer-js.js.map +1 -0
- package/package.json +7 -3
- package/tsconfig.json +0 -14
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viewer CSS — slide viewer shell.
|
|
3
|
+
*
|
|
4
|
+
* Options (body classes):
|
|
5
|
+
* .maximum — scale slide to fill viewport (default on)
|
|
6
|
+
* .grid-on — thumbnail overview grid
|
|
7
|
+
*
|
|
8
|
+
* Fullscreen always forces maximum scaling.
|
|
9
|
+
*/
|
|
10
|
+
export declare const viewerCSS = "\n/* ================================================================ */\n/* Reset */\n/* ================================================================ */\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ================================================================ */\n/* Body \u2014 default: single-slide, centered on black */\n/* ================================================================ */\nbody {\n background: #000;\n margin: 0;\n overflow: hidden;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: system-ui, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* ================================================================ */\n/* Slide outer \u2014 scaling container (container queries) */\n/* ================================================================ */\n.slide-outer {\n container-type: size;\n aspect-ratio: 16 / 9;\n overflow: hidden;\n background: var(--color-background, #fff);\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.slide-outer.active {\n position: relative;\n visibility: visible;\n pointer-events: auto;\n}\n\n/* .slide is scaled by JS (resizeObserver sets --s on .slide-outer) */\n.slide-outer .slide,\n.slide-outer .slide-pad,\n.slide-outer .slide-stack,\n.slide-outer .slide-center,\n.slide-outer .slide-white {\n transform-origin: center center;\n transform: scale(var(--s, 1));\n flex-shrink: 0;\n}\n\n/* ================================================================ */\n/* Maximum OFF \u2014 fit viewport but cap at 1200px */\n/* ================================================================ */\nbody:not(.maximum):not(.grid-on) .slide-outer.active {\n width: min(100vw, calc(100vh * 16 / 9), 1200px);\n}\n\n/* ================================================================ */\n/* Maximum ON \u2014 fill viewport (aspect-ratio preserved) */\n/* ================================================================ */\nbody.maximum:not(.grid-on) .slide-outer.active {\n width: min(100vw, calc(100vh * 16 / 9));\n}\n\n/* ================================================================ */\n/* Grid ON \u2014 thumbnail overview */\n/* ================================================================ */\nbody.grid-on {\n overflow: auto;\n height: auto;\n display: block;\n padding: 1.5rem;\n background: #111;\n}\n\nbody.grid-on .slide-outer {\n position: relative;\n visibility: visible;\n pointer-events: auto;\n width: 100%;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.3);\n cursor: pointer;\n transition: box-shadow 0.15s, outline 0.15s;\n outline: 2px solid transparent;\n}\n\nbody.grid-on .slide-outer:hover {\n box-shadow: 0 4px 20px rgba(0,0,0,0.5);\n outline-color: var(--color-primary, #2563eb);\n}\n\n.grid-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 1rem;\n max-width: 1600px;\n margin: 0 auto;\n}\n\n/* ================================================================ */\n/* Navigation Controls */\n/* ================================================================ */\n.nav-controls {\n position: fixed;\n bottom: 1.5rem;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n gap: 0.25rem;\n align-items: center;\n background: rgba(0, 0, 0, 0.75);\n padding: 0.375rem;\n border-radius: 2rem;\n color: #fff;\n font-family: system-ui, sans-serif;\n font-size: 0.8rem;\n z-index: 1000;\n user-select: none;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s;\n}\n\n.nav-controls.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.nav-controls button {\n background: transparent;\n border: none;\n color: #fff;\n width: 2rem;\n height: 2rem;\n padding: 0;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n position: relative;\n}\n\n.nav-controls button:hover {\n background: rgba(255, 255, 255, 0.18);\n}\n\n.nav-controls button.active {\n background: rgba(255, 255, 255, 0.22);\n}\n\n.nav-controls button svg {\n width: 16px;\n height: 16px;\n}\n\n.nav-controls .slide-counter {\n min-width: 3.5rem;\n text-align: center;\n font-variant-numeric: tabular-nums;\n font-size: 0.75rem;\n opacity: 0.8;\n}\n\n.nav-controls .divider {\n width: 1px;\n height: 1.25rem;\n background: rgba(255, 255, 255, 0.2);\n margin: 0 0.125rem;\n}\n\n/* -- Home link ---------------------------------------------------- */\n.nav-home {\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n font-size: 0.85rem;\n padding: 0 0.375rem;\n display: flex;\n align-items: center;\n}\n\n.nav-home:hover {\n color: #fff;\n}\n\n/* -- More menu ---------------------------------------------------- */\n.nav-menu {\n position: absolute;\n bottom: calc(100% + 0.5rem);\n right: 0.375rem;\n background: rgba(0, 0, 0, 0.85);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border-radius: 0.75rem;\n padding: 0.375rem;\n min-width: 10rem;\n display: none;\n flex-direction: column;\n gap: 0.125rem;\n}\n\n.nav-menu.open {\n display: flex;\n}\n\n.nav-menu button {\n width: 100%;\n height: auto;\n border-radius: 0.5rem;\n padding: 0.5rem 0.75rem;\n font-size: 0.8rem;\n gap: 0.5rem;\n justify-content: flex-start;\n white-space: nowrap;\n}\n\n.nav-menu button svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n}\n\n.nav-menu button .menu-label {\n opacity: 0.9;\n}\n\n.nav-menu button .menu-key {\n margin-left: auto;\n opacity: 0.4;\n font-size: 0.7rem;\n}\n\n/* ================================================================ */\n/* State Badges \u2014 visible in grid mode */\n/* ================================================================ */\n.state-badge {\n display: none;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n align-items: center;\n gap: 0.25rem;\n padding: 0.2rem 0.5rem;\n border-radius: 1rem;\n font-size: 0.65rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: #fff;\n z-index: 10;\n pointer-events: none;\n text-transform: uppercase;\n}\n\nbody.grid-on .state-badge {\n display: flex;\n}\n\n.state-badge[data-badge=\"generated\"] { background: #6b7280; }\n.state-badge[data-badge=\"approved\"] { background: #16a34a; }\n.state-badge[data-badge=\"locked\"] { background: #7c3aed; }\n.state-badge[data-badge=\"derived\"] { background: #3b82f6; }\n";
|
|
11
|
+
//# sourceMappingURL=viewer-css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-css.d.ts","sourceRoot":"","sources":["../src/viewer-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,0vNA8QrB,CAAC"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viewer CSS — slide viewer shell.
|
|
3
|
+
*
|
|
4
|
+
* Options (body classes):
|
|
5
|
+
* .maximum — scale slide to fill viewport (default on)
|
|
6
|
+
* .grid-on — thumbnail overview grid
|
|
7
|
+
*
|
|
8
|
+
* Fullscreen always forces maximum scaling.
|
|
9
|
+
*/
|
|
10
|
+
export const viewerCSS = /* css */ `
|
|
11
|
+
/* ================================================================ */
|
|
12
|
+
/* Reset */
|
|
13
|
+
/* ================================================================ */
|
|
14
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
15
|
+
|
|
16
|
+
/* ================================================================ */
|
|
17
|
+
/* Body — default: single-slide, centered on black */
|
|
18
|
+
/* ================================================================ */
|
|
19
|
+
body {
|
|
20
|
+
background: #000;
|
|
21
|
+
margin: 0;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
height: 100vh;
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
font-family: system-ui, sans-serif;
|
|
28
|
+
-webkit-font-smoothing: antialiased;
|
|
29
|
+
-moz-osx-font-smoothing: grayscale;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* ================================================================ */
|
|
33
|
+
/* Slide outer — scaling container (container queries) */
|
|
34
|
+
/* ================================================================ */
|
|
35
|
+
.slide-outer {
|
|
36
|
+
container-type: size;
|
|
37
|
+
aspect-ratio: 16 / 9;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
background: var(--color-background, #fff);
|
|
40
|
+
position: absolute;
|
|
41
|
+
visibility: hidden;
|
|
42
|
+
pointer-events: none;
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.slide-outer.active {
|
|
49
|
+
position: relative;
|
|
50
|
+
visibility: visible;
|
|
51
|
+
pointer-events: auto;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* .slide is scaled by JS (resizeObserver sets --s on .slide-outer) */
|
|
55
|
+
.slide-outer .slide,
|
|
56
|
+
.slide-outer .slide-pad,
|
|
57
|
+
.slide-outer .slide-stack,
|
|
58
|
+
.slide-outer .slide-center,
|
|
59
|
+
.slide-outer .slide-white {
|
|
60
|
+
transform-origin: center center;
|
|
61
|
+
transform: scale(var(--s, 1));
|
|
62
|
+
flex-shrink: 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* ================================================================ */
|
|
66
|
+
/* Maximum OFF — fit viewport but cap at 1200px */
|
|
67
|
+
/* ================================================================ */
|
|
68
|
+
body:not(.maximum):not(.grid-on) .slide-outer.active {
|
|
69
|
+
width: min(100vw, calc(100vh * 16 / 9), 1200px);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* ================================================================ */
|
|
73
|
+
/* Maximum ON — fill viewport (aspect-ratio preserved) */
|
|
74
|
+
/* ================================================================ */
|
|
75
|
+
body.maximum:not(.grid-on) .slide-outer.active {
|
|
76
|
+
width: min(100vw, calc(100vh * 16 / 9));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ================================================================ */
|
|
80
|
+
/* Grid ON — thumbnail overview */
|
|
81
|
+
/* ================================================================ */
|
|
82
|
+
body.grid-on {
|
|
83
|
+
overflow: auto;
|
|
84
|
+
height: auto;
|
|
85
|
+
display: block;
|
|
86
|
+
padding: 1.5rem;
|
|
87
|
+
background: #111;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
body.grid-on .slide-outer {
|
|
91
|
+
position: relative;
|
|
92
|
+
visibility: visible;
|
|
93
|
+
pointer-events: auto;
|
|
94
|
+
width: 100%;
|
|
95
|
+
border-radius: 8px;
|
|
96
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
transition: box-shadow 0.15s, outline 0.15s;
|
|
99
|
+
outline: 2px solid transparent;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
body.grid-on .slide-outer:hover {
|
|
103
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.5);
|
|
104
|
+
outline-color: var(--color-primary, #2563eb);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.grid-container {
|
|
108
|
+
display: grid;
|
|
109
|
+
grid-template-columns: repeat(4, 1fr);
|
|
110
|
+
gap: 1rem;
|
|
111
|
+
max-width: 1600px;
|
|
112
|
+
margin: 0 auto;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* ================================================================ */
|
|
116
|
+
/* Navigation Controls */
|
|
117
|
+
/* ================================================================ */
|
|
118
|
+
.nav-controls {
|
|
119
|
+
position: fixed;
|
|
120
|
+
bottom: 1.5rem;
|
|
121
|
+
left: 50%;
|
|
122
|
+
transform: translateX(-50%);
|
|
123
|
+
display: flex;
|
|
124
|
+
gap: 0.25rem;
|
|
125
|
+
align-items: center;
|
|
126
|
+
background: rgba(0, 0, 0, 0.75);
|
|
127
|
+
padding: 0.375rem;
|
|
128
|
+
border-radius: 2rem;
|
|
129
|
+
color: #fff;
|
|
130
|
+
font-family: system-ui, sans-serif;
|
|
131
|
+
font-size: 0.8rem;
|
|
132
|
+
z-index: 1000;
|
|
133
|
+
user-select: none;
|
|
134
|
+
backdrop-filter: blur(12px);
|
|
135
|
+
-webkit-backdrop-filter: blur(12px);
|
|
136
|
+
opacity: 0;
|
|
137
|
+
pointer-events: none;
|
|
138
|
+
transition: opacity 0.3s;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.nav-controls.visible {
|
|
142
|
+
opacity: 1;
|
|
143
|
+
pointer-events: auto;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.nav-controls button {
|
|
147
|
+
background: transparent;
|
|
148
|
+
border: none;
|
|
149
|
+
color: #fff;
|
|
150
|
+
width: 2rem;
|
|
151
|
+
height: 2rem;
|
|
152
|
+
padding: 0;
|
|
153
|
+
border-radius: 50%;
|
|
154
|
+
cursor: pointer;
|
|
155
|
+
display: flex;
|
|
156
|
+
align-items: center;
|
|
157
|
+
justify-content: center;
|
|
158
|
+
transition: background 0.15s;
|
|
159
|
+
position: relative;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.nav-controls button:hover {
|
|
163
|
+
background: rgba(255, 255, 255, 0.18);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.nav-controls button.active {
|
|
167
|
+
background: rgba(255, 255, 255, 0.22);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.nav-controls button svg {
|
|
171
|
+
width: 16px;
|
|
172
|
+
height: 16px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.nav-controls .slide-counter {
|
|
176
|
+
min-width: 3.5rem;
|
|
177
|
+
text-align: center;
|
|
178
|
+
font-variant-numeric: tabular-nums;
|
|
179
|
+
font-size: 0.75rem;
|
|
180
|
+
opacity: 0.8;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.nav-controls .divider {
|
|
184
|
+
width: 1px;
|
|
185
|
+
height: 1.25rem;
|
|
186
|
+
background: rgba(255, 255, 255, 0.2);
|
|
187
|
+
margin: 0 0.125rem;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* -- Home link ---------------------------------------------------- */
|
|
191
|
+
.nav-home {
|
|
192
|
+
color: rgba(255, 255, 255, 0.7);
|
|
193
|
+
text-decoration: none;
|
|
194
|
+
font-size: 0.85rem;
|
|
195
|
+
padding: 0 0.375rem;
|
|
196
|
+
display: flex;
|
|
197
|
+
align-items: center;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.nav-home:hover {
|
|
201
|
+
color: #fff;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* -- More menu ---------------------------------------------------- */
|
|
205
|
+
.nav-menu {
|
|
206
|
+
position: absolute;
|
|
207
|
+
bottom: calc(100% + 0.5rem);
|
|
208
|
+
right: 0.375rem;
|
|
209
|
+
background: rgba(0, 0, 0, 0.85);
|
|
210
|
+
backdrop-filter: blur(12px);
|
|
211
|
+
-webkit-backdrop-filter: blur(12px);
|
|
212
|
+
border-radius: 0.75rem;
|
|
213
|
+
padding: 0.375rem;
|
|
214
|
+
min-width: 10rem;
|
|
215
|
+
display: none;
|
|
216
|
+
flex-direction: column;
|
|
217
|
+
gap: 0.125rem;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.nav-menu.open {
|
|
221
|
+
display: flex;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.nav-menu button {
|
|
225
|
+
width: 100%;
|
|
226
|
+
height: auto;
|
|
227
|
+
border-radius: 0.5rem;
|
|
228
|
+
padding: 0.5rem 0.75rem;
|
|
229
|
+
font-size: 0.8rem;
|
|
230
|
+
gap: 0.5rem;
|
|
231
|
+
justify-content: flex-start;
|
|
232
|
+
white-space: nowrap;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.nav-menu button svg {
|
|
236
|
+
width: 14px;
|
|
237
|
+
height: 14px;
|
|
238
|
+
flex-shrink: 0;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.nav-menu button .menu-label {
|
|
242
|
+
opacity: 0.9;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.nav-menu button .menu-key {
|
|
246
|
+
margin-left: auto;
|
|
247
|
+
opacity: 0.4;
|
|
248
|
+
font-size: 0.7rem;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* ================================================================ */
|
|
252
|
+
/* State Badges — visible in grid mode */
|
|
253
|
+
/* ================================================================ */
|
|
254
|
+
.state-badge {
|
|
255
|
+
display: none;
|
|
256
|
+
position: absolute;
|
|
257
|
+
top: 0.5rem;
|
|
258
|
+
right: 0.5rem;
|
|
259
|
+
align-items: center;
|
|
260
|
+
gap: 0.25rem;
|
|
261
|
+
padding: 0.2rem 0.5rem;
|
|
262
|
+
border-radius: 1rem;
|
|
263
|
+
font-size: 0.65rem;
|
|
264
|
+
font-weight: 600;
|
|
265
|
+
letter-spacing: 0.02em;
|
|
266
|
+
color: #fff;
|
|
267
|
+
z-index: 10;
|
|
268
|
+
pointer-events: none;
|
|
269
|
+
text-transform: uppercase;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
body.grid-on .state-badge {
|
|
273
|
+
display: flex;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.state-badge[data-badge="generated"] { background: #6b7280; }
|
|
277
|
+
.state-badge[data-badge="approved"] { background: #16a34a; }
|
|
278
|
+
.state-badge[data-badge="locked"] { background: #7c3aed; }
|
|
279
|
+
.state-badge[data-badge="derived"] { background: #3b82f6; }
|
|
280
|
+
`;
|
|
281
|
+
//# sourceMappingURL=viewer-css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-css.js","sourceRoot":"","sources":["../src/viewer-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8QlC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viewer JS — option-based slide viewer.
|
|
3
|
+
*
|
|
4
|
+
* Options (toggleable):
|
|
5
|
+
* maximum (M) — scale slide to fill viewport (default: on)
|
|
6
|
+
* grid (G) — thumbnail overview
|
|
7
|
+
*
|
|
8
|
+
* Fullscreen (F) always forces maximum scaling.
|
|
9
|
+
* Keyboard: ←/→/Space navigate, Home/End, Esc exit grid/fullscreen.
|
|
10
|
+
* URL params: ?page=N&maximum=off&grid=on
|
|
11
|
+
*/
|
|
12
|
+
export declare const viewerJS = "\n(function() {\n var slides = document.querySelectorAll('.slide-outer');\n var total = slides.length;\n if (total === 0) return;\n\n var current = 0;\n var body = document.body;\n var counter = document.getElementById('current-slide');\n var btnPrev = document.getElementById('btn-prev');\n var btnNext = document.getElementById('btn-next');\n var btnFullscreen = document.getElementById('btn-fullscreen');\n var btnMaximum = document.getElementById('btn-maximum');\n var btnGrid = document.getElementById('btn-grid');\n var btnMore = document.getElementById('btn-more');\n var navMenu = document.getElementById('nav-menu');\n var nav = document.getElementById('nav-controls');\n\n var ICON_FULLSCREEN = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3\"/><path d=\"M21 8V5a2 2 0 0 0-2-2h-3\"/><path d=\"M3 16v3a2 2 0 0 0 2 2h3\"/><path d=\"M16 21h3a2 2 0 0 0 2-2v-3\"/></svg>';\n var ICON_SHRINK = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 14h6v6\"/><path d=\"M20 10h-6V4\"/><path d=\"M14 10l7-7\"/><path d=\"M3 21l7-7\"/></svg>';\n\n /* -- State ------------------------------------------------------- */\n var maximum = true;\n var gridOn = false;\n\n /* -- URL params -------------------------------------------------- */\n var params = new URLSearchParams(window.location.search);\n var initialPage = parseInt(params.get('page'), 10);\n if (initialPage >= 1 && initialPage <= total) current = initialPage - 1;\n if (params.get('maximum') === 'off') maximum = false;\n if (params.get('grid') === 'on') gridOn = true;\n\n /* -- Nav auto-hide ----------------------------------------------- */\n var hideTimer = null;\n function showNav() {\n nav.classList.add('visible');\n clearTimeout(hideTimer);\n hideTimer = setTimeout(function() { nav.classList.remove('visible'); }, 3000);\n }\n document.addEventListener('mousemove', showNav);\n document.addEventListener('touchstart', showNav);\n nav.addEventListener('mouseenter', function() { clearTimeout(hideTimer); nav.classList.add('visible'); });\n nav.addEventListener('mouseleave', function() { hideTimer = setTimeout(function() { nav.classList.remove('visible'); }, 3000); });\n\n /* -- URL sync ---------------------------------------------------- */\n function syncURL() {\n var p = new URLSearchParams();\n p.set('page', current + 1);\n if (!maximum) p.set('maximum', 'off');\n if (gridOn) p.set('grid', 'on');\n var qs = p.toString();\n var url = window.location.pathname + (qs ? '?' + qs : '');\n history.replaceState(null, '', url);\n }\n\n /* -- Apply state to DOM ------------------------------------------ */\n function applyState() {\n body.classList.toggle('maximum', maximum && !gridOn);\n body.classList.toggle('grid-on', gridOn);\n\n if (gridOn) {\n /* Move slides into grid container */\n if (!gridWrap.parentNode) {\n body.insertBefore(gridWrap, nav);\n }\n slides.forEach(function(s) {\n s.classList.remove('active');\n gridWrap.appendChild(s);\n });\n gridWrap.style.display = '';\n } else {\n /* Move slides back to body */\n if (gridWrap.parentNode) {\n var frag = document.createDocumentFragment();\n while (gridWrap.firstChild) frag.appendChild(gridWrap.firstChild);\n body.insertBefore(frag, nav);\n gridWrap.style.display = 'none';\n }\n showSlide(current);\n }\n\n updateMenuLabels();\n syncURL();\n }\n\n /* -- Slide navigation -------------------------------------------- */\n function showSlide(index) {\n if (index < 0) index = 0;\n if (index >= total) index = total - 1;\n current = index;\n counter.textContent = (current + 1);\n slides.forEach(function(s, i) { s.classList.toggle('active', i === current); });\n syncURL();\n }\n\n /* -- Grid container ---------------------------------------------- */\n var gridWrap = document.createElement('div');\n gridWrap.className = 'grid-container';\n gridWrap.style.display = 'none';\n\n /* -- Toggle functions -------------------------------------------- */\n function toggleMaximum() {\n maximum = !maximum;\n applyState();\n }\n\n function toggleGrid() {\n gridOn = !gridOn;\n if (document.fullscreenElement) document.exitFullscreen();\n applyState();\n }\n\n function toggleFullscreen() {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n if (gridOn) { gridOn = false; }\n maximum = true;\n applyState();\n if (body.requestFullscreen) body.requestFullscreen();\n }\n }\n\n document.addEventListener('fullscreenchange', function() {\n if (document.fullscreenElement) {\n btnFullscreen.innerHTML = ICON_SHRINK;\n btnFullscreen.classList.add('active');\n } else {\n btnFullscreen.innerHTML = ICON_FULLSCREEN;\n btnFullscreen.classList.remove('active');\n }\n });\n\n /* -- More menu --------------------------------------------------- */\n function closeMenu() { navMenu.classList.remove('open'); }\n function toggleMenu(e) {\n e.stopPropagation();\n navMenu.classList.toggle('open');\n }\n btnMore.addEventListener('click', toggleMenu);\n document.addEventListener('click', function(e) {\n if (!navMenu.contains(e.target) && e.target !== btnMore) closeMenu();\n });\n navMenu.addEventListener('click', function(e) { e.stopPropagation(); });\n\n /* -- Grid click to single view ----------------------------------- */\n slides.forEach(function(s, i) {\n s.addEventListener('click', function() {\n if (!gridOn) return;\n current = i;\n gridOn = false;\n applyState();\n });\n });\n\n /* -- Button events ----------------------------------------------- */\n btnPrev.addEventListener('click', function(e) { e.stopPropagation(); showSlide(current - 1); });\n btnNext.addEventListener('click', function(e) { e.stopPropagation(); showSlide(current + 1); });\n btnMaximum.addEventListener('click', function() { closeMenu(); toggleMaximum(); });\n btnGrid.addEventListener('click', function() { closeMenu(); toggleGrid(); });\n btnFullscreen.addEventListener('click', toggleFullscreen);\n\n /* -- Keyboard ---------------------------------------------------- */\n document.addEventListener('keydown', function(e) {\n showNav();\n if (e.key === 'ArrowRight' || e.key === ' ' || e.key === 'PageDown') { e.preventDefault(); showSlide(current + 1); }\n else if (e.key === 'ArrowLeft' || e.key === 'PageUp') { e.preventDefault(); showSlide(current - 1); }\n else if (e.key === 'Home') { e.preventDefault(); showSlide(0); }\n else if (e.key === 'End') { e.preventDefault(); showSlide(total - 1); }\n else if (e.key === 'm' || e.key === 'M') { toggleMaximum(); }\n else if (e.key === 'g' || e.key === 'G') { toggleGrid(); }\n else if (e.key === 'f' || e.key === 'F') { toggleFullscreen(); }\n else if (e.key === 'Escape') {\n closeMenu();\n if (document.fullscreenElement) document.exitFullscreen();\n else if (gridOn) { gridOn = false; applyState(); }\n }\n });\n\n /* -- Menu labels ------------------------------------------------- */\n function updateMenuLabels() {\n var maxLabel = btnMaximum.querySelector('.menu-label');\n if (maxLabel) maxLabel.textContent = maximum ? 'Maximum off' : 'Maximum on';\n var gridLabel = btnGrid.querySelector('.menu-label');\n if (gridLabel) gridLabel.textContent = gridOn ? 'Grid off' : 'Grid on';\n }\n\n /* -- Slide scaling via ResizeObserver ----------------------------- */\n var SLIDE_W = 1200;\n var SLIDE_H = 675;\n\n function updateScale(outer) {\n var w = outer.clientWidth;\n var h = outer.clientHeight;\n if (w === 0 || h === 0) return;\n var s = Math.min(w / SLIDE_W, h / SLIDE_H);\n outer.style.setProperty('--s', s);\n }\n\n var ro = new ResizeObserver(function(entries) {\n entries.forEach(function(entry) { updateScale(entry.target); });\n });\n\n slides.forEach(function(s) { ro.observe(s); });\n\n /* -- State badges ------------------------------------------------ */\n var BADGE_LABELS = { generated: 'GEN', approved: 'APR', locked: 'LCK', derived: 'DER' };\n slides.forEach(function(s) {\n var state = s.getAttribute('data-state') || 'generated';\n var badge = document.createElement('span');\n badge.className = 'state-badge';\n badge.setAttribute('data-badge', state);\n badge.textContent = BADGE_LABELS[state] || state.toUpperCase().slice(0, 3);\n s.appendChild(badge);\n });\n\n /* -- Init -------------------------------------------------------- */\n applyState();\n showNav();\n})();\n";
|
|
13
|
+
//# sourceMappingURL=viewer-js.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-js.d.ts","sourceRoot":"","sources":["../src/viewer-js.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,6rRA4NpB,CAAC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viewer JS — option-based slide viewer.
|
|
3
|
+
*
|
|
4
|
+
* Options (toggleable):
|
|
5
|
+
* maximum (M) — scale slide to fill viewport (default: on)
|
|
6
|
+
* grid (G) — thumbnail overview
|
|
7
|
+
*
|
|
8
|
+
* Fullscreen (F) always forces maximum scaling.
|
|
9
|
+
* Keyboard: ←/→/Space navigate, Home/End, Esc exit grid/fullscreen.
|
|
10
|
+
* URL params: ?page=N&maximum=off&grid=on
|
|
11
|
+
*/
|
|
12
|
+
export const viewerJS = /* js */ `
|
|
13
|
+
(function() {
|
|
14
|
+
var slides = document.querySelectorAll('.slide-outer');
|
|
15
|
+
var total = slides.length;
|
|
16
|
+
if (total === 0) return;
|
|
17
|
+
|
|
18
|
+
var current = 0;
|
|
19
|
+
var body = document.body;
|
|
20
|
+
var counter = document.getElementById('current-slide');
|
|
21
|
+
var btnPrev = document.getElementById('btn-prev');
|
|
22
|
+
var btnNext = document.getElementById('btn-next');
|
|
23
|
+
var btnFullscreen = document.getElementById('btn-fullscreen');
|
|
24
|
+
var btnMaximum = document.getElementById('btn-maximum');
|
|
25
|
+
var btnGrid = document.getElementById('btn-grid');
|
|
26
|
+
var btnMore = document.getElementById('btn-more');
|
|
27
|
+
var navMenu = document.getElementById('nav-menu');
|
|
28
|
+
var nav = document.getElementById('nav-controls');
|
|
29
|
+
|
|
30
|
+
var ICON_FULLSCREEN = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3H5a2 2 0 0 0-2 2v3"/><path d="M21 8V5a2 2 0 0 0-2-2h-3"/><path d="M3 16v3a2 2 0 0 0 2 2h3"/><path d="M16 21h3a2 2 0 0 0 2-2v-3"/></svg>';
|
|
31
|
+
var ICON_SHRINK = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 14h6v6"/><path d="M20 10h-6V4"/><path d="M14 10l7-7"/><path d="M3 21l7-7"/></svg>';
|
|
32
|
+
|
|
33
|
+
/* -- State ------------------------------------------------------- */
|
|
34
|
+
var maximum = true;
|
|
35
|
+
var gridOn = false;
|
|
36
|
+
|
|
37
|
+
/* -- URL params -------------------------------------------------- */
|
|
38
|
+
var params = new URLSearchParams(window.location.search);
|
|
39
|
+
var initialPage = parseInt(params.get('page'), 10);
|
|
40
|
+
if (initialPage >= 1 && initialPage <= total) current = initialPage - 1;
|
|
41
|
+
if (params.get('maximum') === 'off') maximum = false;
|
|
42
|
+
if (params.get('grid') === 'on') gridOn = true;
|
|
43
|
+
|
|
44
|
+
/* -- Nav auto-hide ----------------------------------------------- */
|
|
45
|
+
var hideTimer = null;
|
|
46
|
+
function showNav() {
|
|
47
|
+
nav.classList.add('visible');
|
|
48
|
+
clearTimeout(hideTimer);
|
|
49
|
+
hideTimer = setTimeout(function() { nav.classList.remove('visible'); }, 3000);
|
|
50
|
+
}
|
|
51
|
+
document.addEventListener('mousemove', showNav);
|
|
52
|
+
document.addEventListener('touchstart', showNav);
|
|
53
|
+
nav.addEventListener('mouseenter', function() { clearTimeout(hideTimer); nav.classList.add('visible'); });
|
|
54
|
+
nav.addEventListener('mouseleave', function() { hideTimer = setTimeout(function() { nav.classList.remove('visible'); }, 3000); });
|
|
55
|
+
|
|
56
|
+
/* -- URL sync ---------------------------------------------------- */
|
|
57
|
+
function syncURL() {
|
|
58
|
+
var p = new URLSearchParams();
|
|
59
|
+
p.set('page', current + 1);
|
|
60
|
+
if (!maximum) p.set('maximum', 'off');
|
|
61
|
+
if (gridOn) p.set('grid', 'on');
|
|
62
|
+
var qs = p.toString();
|
|
63
|
+
var url = window.location.pathname + (qs ? '?' + qs : '');
|
|
64
|
+
history.replaceState(null, '', url);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* -- Apply state to DOM ------------------------------------------ */
|
|
68
|
+
function applyState() {
|
|
69
|
+
body.classList.toggle('maximum', maximum && !gridOn);
|
|
70
|
+
body.classList.toggle('grid-on', gridOn);
|
|
71
|
+
|
|
72
|
+
if (gridOn) {
|
|
73
|
+
/* Move slides into grid container */
|
|
74
|
+
if (!gridWrap.parentNode) {
|
|
75
|
+
body.insertBefore(gridWrap, nav);
|
|
76
|
+
}
|
|
77
|
+
slides.forEach(function(s) {
|
|
78
|
+
s.classList.remove('active');
|
|
79
|
+
gridWrap.appendChild(s);
|
|
80
|
+
});
|
|
81
|
+
gridWrap.style.display = '';
|
|
82
|
+
} else {
|
|
83
|
+
/* Move slides back to body */
|
|
84
|
+
if (gridWrap.parentNode) {
|
|
85
|
+
var frag = document.createDocumentFragment();
|
|
86
|
+
while (gridWrap.firstChild) frag.appendChild(gridWrap.firstChild);
|
|
87
|
+
body.insertBefore(frag, nav);
|
|
88
|
+
gridWrap.style.display = 'none';
|
|
89
|
+
}
|
|
90
|
+
showSlide(current);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
updateMenuLabels();
|
|
94
|
+
syncURL();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* -- Slide navigation -------------------------------------------- */
|
|
98
|
+
function showSlide(index) {
|
|
99
|
+
if (index < 0) index = 0;
|
|
100
|
+
if (index >= total) index = total - 1;
|
|
101
|
+
current = index;
|
|
102
|
+
counter.textContent = (current + 1);
|
|
103
|
+
slides.forEach(function(s, i) { s.classList.toggle('active', i === current); });
|
|
104
|
+
syncURL();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* -- Grid container ---------------------------------------------- */
|
|
108
|
+
var gridWrap = document.createElement('div');
|
|
109
|
+
gridWrap.className = 'grid-container';
|
|
110
|
+
gridWrap.style.display = 'none';
|
|
111
|
+
|
|
112
|
+
/* -- Toggle functions -------------------------------------------- */
|
|
113
|
+
function toggleMaximum() {
|
|
114
|
+
maximum = !maximum;
|
|
115
|
+
applyState();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function toggleGrid() {
|
|
119
|
+
gridOn = !gridOn;
|
|
120
|
+
if (document.fullscreenElement) document.exitFullscreen();
|
|
121
|
+
applyState();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function toggleFullscreen() {
|
|
125
|
+
if (document.fullscreenElement) {
|
|
126
|
+
document.exitFullscreen();
|
|
127
|
+
} else {
|
|
128
|
+
if (gridOn) { gridOn = false; }
|
|
129
|
+
maximum = true;
|
|
130
|
+
applyState();
|
|
131
|
+
if (body.requestFullscreen) body.requestFullscreen();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
document.addEventListener('fullscreenchange', function() {
|
|
136
|
+
if (document.fullscreenElement) {
|
|
137
|
+
btnFullscreen.innerHTML = ICON_SHRINK;
|
|
138
|
+
btnFullscreen.classList.add('active');
|
|
139
|
+
} else {
|
|
140
|
+
btnFullscreen.innerHTML = ICON_FULLSCREEN;
|
|
141
|
+
btnFullscreen.classList.remove('active');
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
/* -- More menu --------------------------------------------------- */
|
|
146
|
+
function closeMenu() { navMenu.classList.remove('open'); }
|
|
147
|
+
function toggleMenu(e) {
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
navMenu.classList.toggle('open');
|
|
150
|
+
}
|
|
151
|
+
btnMore.addEventListener('click', toggleMenu);
|
|
152
|
+
document.addEventListener('click', function(e) {
|
|
153
|
+
if (!navMenu.contains(e.target) && e.target !== btnMore) closeMenu();
|
|
154
|
+
});
|
|
155
|
+
navMenu.addEventListener('click', function(e) { e.stopPropagation(); });
|
|
156
|
+
|
|
157
|
+
/* -- Grid click to single view ----------------------------------- */
|
|
158
|
+
slides.forEach(function(s, i) {
|
|
159
|
+
s.addEventListener('click', function() {
|
|
160
|
+
if (!gridOn) return;
|
|
161
|
+
current = i;
|
|
162
|
+
gridOn = false;
|
|
163
|
+
applyState();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
/* -- Button events ----------------------------------------------- */
|
|
168
|
+
btnPrev.addEventListener('click', function(e) { e.stopPropagation(); showSlide(current - 1); });
|
|
169
|
+
btnNext.addEventListener('click', function(e) { e.stopPropagation(); showSlide(current + 1); });
|
|
170
|
+
btnMaximum.addEventListener('click', function() { closeMenu(); toggleMaximum(); });
|
|
171
|
+
btnGrid.addEventListener('click', function() { closeMenu(); toggleGrid(); });
|
|
172
|
+
btnFullscreen.addEventListener('click', toggleFullscreen);
|
|
173
|
+
|
|
174
|
+
/* -- Keyboard ---------------------------------------------------- */
|
|
175
|
+
document.addEventListener('keydown', function(e) {
|
|
176
|
+
showNav();
|
|
177
|
+
if (e.key === 'ArrowRight' || e.key === ' ' || e.key === 'PageDown') { e.preventDefault(); showSlide(current + 1); }
|
|
178
|
+
else if (e.key === 'ArrowLeft' || e.key === 'PageUp') { e.preventDefault(); showSlide(current - 1); }
|
|
179
|
+
else if (e.key === 'Home') { e.preventDefault(); showSlide(0); }
|
|
180
|
+
else if (e.key === 'End') { e.preventDefault(); showSlide(total - 1); }
|
|
181
|
+
else if (e.key === 'm' || e.key === 'M') { toggleMaximum(); }
|
|
182
|
+
else if (e.key === 'g' || e.key === 'G') { toggleGrid(); }
|
|
183
|
+
else if (e.key === 'f' || e.key === 'F') { toggleFullscreen(); }
|
|
184
|
+
else if (e.key === 'Escape') {
|
|
185
|
+
closeMenu();
|
|
186
|
+
if (document.fullscreenElement) document.exitFullscreen();
|
|
187
|
+
else if (gridOn) { gridOn = false; applyState(); }
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
/* -- Menu labels ------------------------------------------------- */
|
|
192
|
+
function updateMenuLabels() {
|
|
193
|
+
var maxLabel = btnMaximum.querySelector('.menu-label');
|
|
194
|
+
if (maxLabel) maxLabel.textContent = maximum ? 'Maximum off' : 'Maximum on';
|
|
195
|
+
var gridLabel = btnGrid.querySelector('.menu-label');
|
|
196
|
+
if (gridLabel) gridLabel.textContent = gridOn ? 'Grid off' : 'Grid on';
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* -- Slide scaling via ResizeObserver ----------------------------- */
|
|
200
|
+
var SLIDE_W = 1200;
|
|
201
|
+
var SLIDE_H = 675;
|
|
202
|
+
|
|
203
|
+
function updateScale(outer) {
|
|
204
|
+
var w = outer.clientWidth;
|
|
205
|
+
var h = outer.clientHeight;
|
|
206
|
+
if (w === 0 || h === 0) return;
|
|
207
|
+
var s = Math.min(w / SLIDE_W, h / SLIDE_H);
|
|
208
|
+
outer.style.setProperty('--s', s);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
var ro = new ResizeObserver(function(entries) {
|
|
212
|
+
entries.forEach(function(entry) { updateScale(entry.target); });
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
slides.forEach(function(s) { ro.observe(s); });
|
|
216
|
+
|
|
217
|
+
/* -- State badges ------------------------------------------------ */
|
|
218
|
+
var BADGE_LABELS = { generated: 'GEN', approved: 'APR', locked: 'LCK', derived: 'DER' };
|
|
219
|
+
slides.forEach(function(s) {
|
|
220
|
+
var state = s.getAttribute('data-state') || 'generated';
|
|
221
|
+
var badge = document.createElement('span');
|
|
222
|
+
badge.className = 'state-badge';
|
|
223
|
+
badge.setAttribute('data-badge', state);
|
|
224
|
+
badge.textContent = BADGE_LABELS[state] || state.toUpperCase().slice(0, 3);
|
|
225
|
+
s.appendChild(badge);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
/* -- Init -------------------------------------------------------- */
|
|
229
|
+
applyState();
|
|
230
|
+
showNav();
|
|
231
|
+
})();
|
|
232
|
+
`;
|
|
233
|
+
//# sourceMappingURL=viewer-js.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-js.js","sourceRoot":"","sources":["../src/viewer-js.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4NhC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deckspec/renderer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist",
|
|
6
|
+
"src"
|
|
7
|
+
],
|
|
4
8
|
"type": "module",
|
|
5
9
|
"main": "./dist/index.js",
|
|
6
10
|
"types": "./dist/index.d.ts",
|
|
7
11
|
"dependencies": {
|
|
8
12
|
"esbuild": "^0.27.4",
|
|
9
13
|
"zod": "^3.23.0",
|
|
10
|
-
"@deckspec/dsl": "0.1.
|
|
11
|
-
"@deckspec/schema": "0.1.
|
|
14
|
+
"@deckspec/dsl": "0.1.2",
|
|
15
|
+
"@deckspec/schema": "0.1.2"
|
|
12
16
|
},
|
|
13
17
|
"peerDependencies": {
|
|
14
18
|
"react": "^19.0.0",
|
package/tsconfig.json
DELETED