@preference-sl/pref-viewer 2.16.0-beta.9 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -102
- package/index.d.ts +373 -12
- package/package.json +7 -6
- package/src/babylonjs-animation-opening.js +11 -5
- package/src/babylonjs-controller.js +484 -271
- package/src/localization/translations.js +5 -17
- package/src/material-utils.js +72 -0
- package/src/panzoom-controller.js +36 -17
- package/src/pref-viewer-2d.js +395 -21
- package/src/pref-viewer-3d.js +160 -89
- package/src/pref-viewer-menu-3d.js +185 -268
- package/src/pref-viewer-task.js +7 -2
- package/src/pref-viewer.js +618 -188
- package/src/render-math.js +127 -0
- package/src/styles.js +169 -178
package/src/styles.js
CHANGED
|
@@ -1,25 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* localStorage key used to persist supported PrefViewer runtime style overrides.
|
|
3
|
+
* @type {string}
|
|
4
|
+
*/
|
|
5
|
+
export const PREF_VIEWER_STYLES_STORAGE_KEY = "pref-viewer/styles";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Default style variables used before host overrides or persisted values are applied.
|
|
9
|
+
* @type {{colorPrimary: string, fontFamily: string, fontSize: string}}
|
|
10
|
+
*/
|
|
11
|
+
const PrefViewerDefaultStyleVariables = {
|
|
12
|
+
colorPrimary: "#ff6700",
|
|
3
13
|
fontFamily: "'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji",
|
|
14
|
+
fontSize: "15px",
|
|
4
15
|
};
|
|
5
16
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Reads persisted runtime style overrides in browser contexts.
|
|
19
|
+
* Only `colorPrimary` is consumed by `PrefViewerStyleVariables`; other keys are ignored by the host component.
|
|
20
|
+
* @returns {object} Parsed persisted style overrides, or an empty object when unavailable or invalid.
|
|
21
|
+
*/
|
|
22
|
+
function readPersistedStyleVariables() {
|
|
23
|
+
if (typeof window === "undefined") {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const serialized = window.localStorage?.getItem(PREF_VIEWER_STYLES_STORAGE_KEY);
|
|
28
|
+
return serialized ? JSON.parse(serialized) : {};
|
|
29
|
+
} catch (_error) {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @type {object} Persisted raw style overrides loaded during module initialization. */
|
|
35
|
+
const persistedStyleVariables = readPersistedStyleVariables();
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Shared style variables consumed by PrefViewer CSS templates and Babylon defaults.
|
|
39
|
+
* `colorPrimary` can be overridden at runtime through `<pref-viewer styles>`, `viewer.styles`, `viewer.setStyles()`, or `loadConfig({ styles })`.
|
|
40
|
+
* @type {{colorPrimary: string, fontFamily: string, fontSize: string}}
|
|
41
|
+
*/
|
|
42
|
+
export const PrefViewerStyleVariables = {
|
|
43
|
+
...PrefViewerDefaultStyleVariables,
|
|
44
|
+
colorPrimary: typeof persistedStyleVariables.colorPrimary === "string" && persistedStyleVariables.colorPrimary.trim().length > 0
|
|
45
|
+
? persistedStyleVariables.colorPrimary.trim()
|
|
46
|
+
: PrefViewerDefaultStyleVariables.colorPrimary,
|
|
47
|
+
};
|
|
21
48
|
|
|
49
|
+
/** Root `<pref-viewer>` host styles. Uses `--pref-viewer-color-primary` so `setStyles({ colorPrimary })` can update mounted instances. */
|
|
22
50
|
export const PrefViewerStyles = `
|
|
51
|
+
:host {
|
|
52
|
+
all: initial;
|
|
53
|
+
display: block;
|
|
54
|
+
font-family: ${PrefViewerStyleVariables.fontFamily};
|
|
55
|
+
font-size: ${PrefViewerStyleVariables.fontSize};
|
|
56
|
+
line-height: 1.2;
|
|
57
|
+
color: #000000;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
:host *, :host *::before, :host *::after {
|
|
61
|
+
box-sizing: border-box;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
:host ::selection {
|
|
65
|
+
background: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
|
|
66
|
+
color: #ffffff;
|
|
67
|
+
}
|
|
68
|
+
|
|
23
69
|
:host .pref-viewer-wrapper {
|
|
24
70
|
display: grid !important;
|
|
25
71
|
position: relative;
|
|
@@ -66,7 +112,6 @@ export const PrefViewer2DStyles = `
|
|
|
66
112
|
display: block;
|
|
67
113
|
position: relative;
|
|
68
114
|
outline: none;
|
|
69
|
-
box-sizing: border-box;
|
|
70
115
|
}
|
|
71
116
|
|
|
72
117
|
pref-viewer-2d>div>svg {
|
|
@@ -83,9 +128,6 @@ export const PrefViewer3DStyles = `
|
|
|
83
128
|
display: none;
|
|
84
129
|
}
|
|
85
130
|
|
|
86
|
-
pref-viewer-3d[show-animation-menu="false"] > div.animation-menu {
|
|
87
|
-
display: none;
|
|
88
|
-
}
|
|
89
131
|
|
|
90
132
|
pref-viewer-3d {
|
|
91
133
|
grid-column: 1;
|
|
@@ -105,7 +147,6 @@ export const PrefViewer3DStyles = `
|
|
|
105
147
|
display: block;
|
|
106
148
|
position: relative;
|
|
107
149
|
outline: none;
|
|
108
|
-
box-sizing: border-box;
|
|
109
150
|
}
|
|
110
151
|
`;
|
|
111
152
|
|
|
@@ -114,13 +155,14 @@ export const PrefViewerMenu3DStyles = `
|
|
|
114
155
|
--font-family: ${PrefViewerStyleVariables.fontFamily};
|
|
115
156
|
--font-weight-bold: 600;
|
|
116
157
|
--font-weight-medium: 500;
|
|
117
|
-
--font-size-large: 1.
|
|
118
|
-
--font-size-medium: 0.
|
|
119
|
-
--font-size-small: 0.
|
|
158
|
+
--font-size-large: calc(1.1 * ${PrefViewerStyleVariables.fontSize});
|
|
159
|
+
--font-size-medium: calc(0.95 * ${PrefViewerStyleVariables.fontSize});
|
|
160
|
+
--font-size-small: calc(0.75 * ${PrefViewerStyleVariables.fontSize});
|
|
120
161
|
--text-color: #ffffff;
|
|
121
162
|
--muted-color: #b2b2b2;
|
|
122
|
-
--accent-color: ${PrefViewerStyleVariables.colorPrimary};
|
|
123
|
-
|
|
163
|
+
--accent-color: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
|
|
164
|
+
|
|
165
|
+
--separator-border: 1px solid rgba(255, 255, 255, 0.1);
|
|
124
166
|
|
|
125
167
|
--toggle-margin: 16px;
|
|
126
168
|
--toggle-bg-color: rgba(19, 21, 28, 0.6);
|
|
@@ -136,7 +178,7 @@ export const PrefViewerMenu3DStyles = `
|
|
|
136
178
|
--button-shadow: 0 8px 16px rgba(0, 0, 0, 0.35);
|
|
137
179
|
--button-radius: 8px;
|
|
138
180
|
|
|
139
|
-
--panel-width:
|
|
181
|
+
--panel-width: 300px;
|
|
140
182
|
--panel-spacing: 16px;
|
|
141
183
|
--panel-spacing-large: calc(var(--panel-spacing) * 1.5);
|
|
142
184
|
--panel-bg-color: rgba(19, 21, 28, 0.85);
|
|
@@ -153,10 +195,23 @@ export const PrefViewerMenu3DStyles = `
|
|
|
153
195
|
--switch-control-width: calc((var(--switch-control-thumb-size) * 2) + (var(--switch-control-bar-spacing) * 2));
|
|
154
196
|
--switch-control-height: calc(var(--switch-control-thumb-size) + (var(--switch-control-bar-spacing) * 2));
|
|
155
197
|
|
|
198
|
+
--slider-thumb-size: 18px;
|
|
199
|
+
--slider-thumb-color: #ffffff;
|
|
200
|
+
--slider-thumb-border: 1px solid rgba(0, 0, 0, 0.25);
|
|
201
|
+
--slider-thumb-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
|
|
202
|
+
--slider-bar-height: 12px;
|
|
203
|
+
--slider-bar-border: 1px solid rgba(255, 255, 255, 0.5);
|
|
204
|
+
|
|
156
205
|
position: absolute;
|
|
157
206
|
top: var(--toggle-margin);
|
|
158
207
|
right: var(--toggle-margin);
|
|
159
208
|
z-index: 1200;
|
|
209
|
+
/* The closed panel keeps its place in the flex column (opacity:0, not display:none), so
|
|
210
|
+
this host spans the panel's full 300px x 70vh even when only the toggle is showing.
|
|
211
|
+
Left clickable, that empty space is an invisible catcher over the right edge of the
|
|
212
|
+
viewer: it swallowed the XR entry button and orbiting alike. The toggle and the panel
|
|
213
|
+
each flip back to auto when they become usable, so nothing else is needed. */
|
|
214
|
+
pointer-events: none;
|
|
160
215
|
|
|
161
216
|
font-family: var(--font-family);
|
|
162
217
|
}
|
|
@@ -222,7 +277,7 @@ export const PrefViewerMenu3DStyles = `
|
|
|
222
277
|
}
|
|
223
278
|
|
|
224
279
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header {
|
|
225
|
-
margin-bottom: var(--panel-spacing
|
|
280
|
+
margin-bottom: var(--panel-spacing);
|
|
226
281
|
}
|
|
227
282
|
|
|
228
283
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header>.menu-title {
|
|
@@ -249,11 +304,11 @@ export const PrefViewerMenu3DStyles = `
|
|
|
249
304
|
justify-content: space-between;
|
|
250
305
|
gap: var(--panel-spacing-large);
|
|
251
306
|
padding: var(--panel-spacing) 0;
|
|
252
|
-
border-bottom:
|
|
307
|
+
border-bottom: var(--separator-border);
|
|
253
308
|
}
|
|
254
309
|
|
|
255
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:
|
|
256
|
-
border-
|
|
310
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:first-child {
|
|
311
|
+
border-top: var(--separator-border);
|
|
257
312
|
}
|
|
258
313
|
|
|
259
314
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch>.menu-switch-copy {
|
|
@@ -267,18 +322,6 @@ export const PrefViewerMenu3DStyles = `
|
|
|
267
322
|
font-weight: var(--font-weight-medium);
|
|
268
323
|
}
|
|
269
324
|
|
|
270
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-title::after {
|
|
271
|
-
content: " *";
|
|
272
|
-
color: var(--accent-color);
|
|
273
|
-
font-weight: var(--font-weight-bold);
|
|
274
|
-
opacity: 0;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-pending] .menu-switch-title::after {
|
|
278
|
-
opacity: 1;
|
|
279
|
-
transition: opacity 0.2s ease;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
325
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch small {
|
|
283
326
|
color: var(--muted-color);
|
|
284
327
|
font-size: var(--font-size-small);
|
|
@@ -299,6 +342,10 @@ export const PrefViewerMenu3DStyles = `
|
|
|
299
342
|
cursor: pointer;
|
|
300
343
|
}
|
|
301
344
|
|
|
345
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-hidden] {
|
|
346
|
+
display: none;
|
|
347
|
+
}
|
|
348
|
+
|
|
302
349
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-disabled]>.menu-switch-copy {
|
|
303
350
|
opacity: 0.6;
|
|
304
351
|
}
|
|
@@ -345,87 +392,35 @@ export const PrefViewerMenu3DStyles = `
|
|
|
345
392
|
transform: translateX(var(--switch-control-thumb-size));
|
|
346
393
|
}
|
|
347
394
|
|
|
348
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-
|
|
349
|
-
margin-top: calc(var(--panel-spacing) / 2);
|
|
350
|
-
display: flex;
|
|
351
|
-
flex-direction: column;
|
|
352
|
-
gap: calc(var(--panel-spacing) / 2);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending {
|
|
356
|
-
font-size: var(--font-size-small);
|
|
357
|
-
text-transform: uppercase;
|
|
358
|
-
letter-spacing: 0.08em;
|
|
359
|
-
color: var(--accent-color);
|
|
360
|
-
font-weight: var(--font-weight-medium);
|
|
361
|
-
display: block;
|
|
362
|
-
opacity: 1;
|
|
363
|
-
transition: opacity 0.2s ease;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending::before {
|
|
367
|
-
content: "* ";
|
|
368
|
-
font-size: var(--font-size-medium);
|
|
369
|
-
color: var(--accent-color);
|
|
370
|
-
font-weight: var(--font-weight-bold);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending[hidden] {
|
|
374
|
-
opacity: 0;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-status {
|
|
378
|
-
font-size: var(--font-size-small);
|
|
379
|
-
color: var(--status-color);
|
|
395
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-hidden] {
|
|
380
396
|
display: none;
|
|
381
397
|
}
|
|
382
398
|
|
|
383
|
-
pref-viewer-menu-3d
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
|
|
388
|
-
border: none;
|
|
389
|
-
border-radius: var(--button-radius);
|
|
390
|
-
padding: round(down, calc(var(--panel-spacing) * 0.625), 1px) var(--panel-spacing);
|
|
391
|
-
font-size: var(--button-font-size);
|
|
392
|
-
font-weight: var(--button-font-weight);
|
|
393
|
-
background: var(--accent-color);
|
|
394
|
-
color: var(--button-font-color);
|
|
395
|
-
cursor: pointer;
|
|
396
|
-
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
|
|
399
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] .menu-slider-label {
|
|
400
|
+
opacity: 0.6;
|
|
397
401
|
}
|
|
398
402
|
|
|
399
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-
|
|
400
|
-
|
|
403
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] input[type="range"] {
|
|
404
|
+
opacity: 0.4;
|
|
401
405
|
}
|
|
402
406
|
|
|
403
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-
|
|
407
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] input[type="range"]:disabled {
|
|
404
408
|
cursor: not-allowed;
|
|
405
|
-
opacity: 0.55;
|
|
406
409
|
}
|
|
407
410
|
|
|
408
|
-
pref-viewer-menu-3d[data-applying]>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
|
|
409
|
-
opacity: 0.75;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
/* Color Slider Styles */
|
|
413
411
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker {
|
|
414
412
|
display: flex;
|
|
415
413
|
flex-direction: column;
|
|
416
|
-
gap:
|
|
414
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
417
415
|
padding: var(--panel-spacing) 0;
|
|
418
|
-
border-bottom:
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker:last-child {
|
|
422
|
-
border-bottom: none;
|
|
416
|
+
border-bottom: var(--separator-border);
|
|
423
417
|
}
|
|
424
418
|
|
|
425
419
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row {
|
|
426
420
|
display: flex;
|
|
427
421
|
align-items: center;
|
|
428
422
|
justify-content: space-between;
|
|
423
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
429
424
|
}
|
|
430
425
|
|
|
431
426
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-picker-label {
|
|
@@ -435,10 +430,10 @@ export const PrefViewerMenu3DStyles = `
|
|
|
435
430
|
}
|
|
436
431
|
|
|
437
432
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-preview {
|
|
438
|
-
width:
|
|
439
|
-
|
|
440
|
-
border-radius:
|
|
441
|
-
border:
|
|
433
|
+
width: var(--switch-control-width);
|
|
434
|
+
align-self: stretch;
|
|
435
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
436
|
+
border: var(--slider-bar-border);
|
|
442
437
|
flex-shrink: 0;
|
|
443
438
|
}
|
|
444
439
|
|
|
@@ -446,35 +441,37 @@ export const PrefViewerMenu3DStyles = `
|
|
|
446
441
|
-webkit-appearance: none;
|
|
447
442
|
appearance: none;
|
|
448
443
|
width: 100%;
|
|
449
|
-
height:
|
|
450
|
-
border-radius:
|
|
451
|
-
cursor: pointer;
|
|
444
|
+
height: var(--slider-bar-height);
|
|
445
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
452
446
|
background: linear-gradient(to right,
|
|
453
447
|
hsl(0,100%,50%), hsl(30,100%,50%), hsl(60,100%,50%), hsl(90,100%,50%),
|
|
454
448
|
hsl(120,100%,50%), hsl(150,100%,50%), hsl(180,100%,50%), hsl(210,100%,50%),
|
|
455
449
|
hsl(240,100%,50%), hsl(270,100%,50%), hsl(300,100%,50%), hsl(330,100%,50%),
|
|
456
450
|
hsl(360,100%,50%));
|
|
451
|
+
border: var(--slider-bar-border);
|
|
457
452
|
outline: none;
|
|
453
|
+
margin: 0;
|
|
454
|
+
cursor: pointer;
|
|
458
455
|
}
|
|
459
456
|
|
|
460
457
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-webkit-slider-thumb {
|
|
461
458
|
-webkit-appearance: none;
|
|
462
|
-
width:
|
|
463
|
-
height:
|
|
459
|
+
width: var(--slider-thumb-size);
|
|
460
|
+
height: var(--slider-thumb-size);
|
|
464
461
|
border-radius: 50%;
|
|
465
|
-
background:
|
|
466
|
-
border:
|
|
467
|
-
box-shadow:
|
|
462
|
+
background: var(--slider-thumb-color);
|
|
463
|
+
border: var(--slider-thumb-border);
|
|
464
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
468
465
|
cursor: pointer;
|
|
469
466
|
}
|
|
470
467
|
|
|
471
468
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-moz-range-thumb {
|
|
472
|
-
width:
|
|
473
|
-
height:
|
|
469
|
+
width: var(--slider-thumb-size);
|
|
470
|
+
height: var(--slider-thumb-size);
|
|
474
471
|
border-radius: 50%;
|
|
475
|
-
background:
|
|
476
|
-
border:
|
|
477
|
-
box-shadow:
|
|
472
|
+
background: var(--slider-thumb-color);
|
|
473
|
+
border: var(--slider-thumb-border);
|
|
474
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
478
475
|
cursor: pointer;
|
|
479
476
|
}
|
|
480
477
|
|
|
@@ -486,23 +483,16 @@ export const PrefViewerMenu3DStyles = `
|
|
|
486
483
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider {
|
|
487
484
|
display: flex;
|
|
488
485
|
flex-direction: column;
|
|
489
|
-
gap:
|
|
486
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
490
487
|
padding: var(--panel-spacing) 0;
|
|
491
|
-
border-bottom:
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider[data-pending] .lighting-slider-label::after {
|
|
495
|
-
content: "•";
|
|
496
|
-
margin-left: 8px;
|
|
497
|
-
color: var(--accent-color);
|
|
498
|
-
font-size: 1.1em;
|
|
488
|
+
border-bottom: var(--separator-border);
|
|
499
489
|
}
|
|
500
490
|
|
|
501
491
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row {
|
|
502
492
|
display: flex;
|
|
503
493
|
align-items: center;
|
|
504
494
|
justify-content: space-between;
|
|
505
|
-
gap:
|
|
495
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
506
496
|
}
|
|
507
497
|
|
|
508
498
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row>.lighting-slider-label {
|
|
@@ -522,37 +512,40 @@ export const PrefViewerMenu3DStyles = `
|
|
|
522
512
|
-webkit-appearance: none;
|
|
523
513
|
appearance: none;
|
|
524
514
|
width: 100%;
|
|
525
|
-
height:
|
|
526
|
-
border-radius:
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
515
|
+
height: var(--slider-bar-height);
|
|
516
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
517
|
+
background: linear-gradient(to right,
|
|
518
|
+
rgba(56, 66, 115, 0.95) 0%,
|
|
519
|
+
rgba(118, 165, 255, 0.92) 10%,
|
|
520
|
+
rgba(255, 214, 120, 0.95) 30%,
|
|
521
|
+
rgba(255, 244, 214, 0.95) 50%,
|
|
522
|
+
rgba(255, 214, 120, 0.95) 70%,
|
|
523
|
+
rgba(118, 165, 255, 0.92) 90%,
|
|
524
|
+
rgba(56, 66, 115, 0.95) 100%);
|
|
525
|
+
border: var(--slider-bar-border);
|
|
535
526
|
outline: none;
|
|
527
|
+
margin: 0;
|
|
528
|
+
cursor: pointer;
|
|
536
529
|
}
|
|
537
530
|
|
|
538
531
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-webkit-slider-thumb {
|
|
539
532
|
-webkit-appearance: none;
|
|
540
|
-
width:
|
|
541
|
-
height:
|
|
533
|
+
width: var(--slider-thumb-size);
|
|
534
|
+
height: var(--slider-thumb-size);
|
|
542
535
|
border-radius: 50%;
|
|
543
|
-
background:
|
|
544
|
-
border:
|
|
545
|
-
box-shadow:
|
|
536
|
+
background: var(--slider-thumb-color);
|
|
537
|
+
border: var(--slider-thumb-border);
|
|
538
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
546
539
|
cursor: pointer;
|
|
547
540
|
}
|
|
548
541
|
|
|
549
542
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-moz-range-thumb {
|
|
550
|
-
width:
|
|
551
|
-
height:
|
|
543
|
+
width: var(--slider-thumb-size);
|
|
544
|
+
height: var(--slider-thumb-size);
|
|
552
545
|
border-radius: 50%;
|
|
553
|
-
background:
|
|
554
|
-
border:
|
|
555
|
-
box-shadow:
|
|
546
|
+
background: var(--slider-thumb-color);
|
|
547
|
+
border: var(--slider-thumb-border);
|
|
548
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
556
549
|
cursor: pointer;
|
|
557
550
|
}
|
|
558
551
|
|
|
@@ -571,45 +564,41 @@ export const PrefViewerMenu3DStyles = `
|
|
|
571
564
|
|
|
572
565
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button {
|
|
573
566
|
appearance: none;
|
|
574
|
-
|
|
575
|
-
border
|
|
576
|
-
|
|
567
|
+
background: rgba(255, 255, 255, 0.1);
|
|
568
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
569
|
+
border-radius: var(--button-radius);
|
|
570
|
+
padding: calc(var(--panel-spacing) * 0.5) var(--panel-spacing);
|
|
577
571
|
color: var(--text-color);
|
|
578
|
-
padding: 6px 12px;
|
|
579
572
|
font-size: var(--font-size-small);
|
|
580
573
|
font-weight: var(--font-weight-medium);
|
|
574
|
+
transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.2s ease;
|
|
581
575
|
cursor: pointer;
|
|
582
|
-
transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
|
|
583
576
|
}
|
|
584
577
|
|
|
585
578
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button:hover,
|
|
586
579
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button:focus-visible {
|
|
587
|
-
background: rgba(255, 255, 255, 0.
|
|
588
|
-
border-color: rgba(255, 255, 255, 0.
|
|
589
|
-
transform: translateY(-1px);
|
|
580
|
+
background: rgba(255, 255, 255, 0.15);
|
|
581
|
+
border-color: rgba(255, 255, 255, 0.3);
|
|
590
582
|
outline: none;
|
|
583
|
+
box-shadow: var(--button-shadow);
|
|
591
584
|
}
|
|
592
585
|
|
|
593
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
rgba(255, 247, 226, 0.96) 50%,
|
|
599
|
-
rgba(112, 154, 255, 0.92) 82%,
|
|
600
|
-
rgba(45, 55, 102, 0.98) 100%);
|
|
586
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer {
|
|
587
|
+
margin-top: calc(var(--panel-spacing) / 2);
|
|
588
|
+
display: flex;
|
|
589
|
+
flex-direction: column;
|
|
590
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
601
591
|
}
|
|
602
592
|
`;
|
|
603
593
|
|
|
604
594
|
export const PrefViewer3DAnimationMenuStyles = `
|
|
605
595
|
div.pref-viewer-3d.animation-menu, div.pref-viewer-3d.animation-menu * {
|
|
606
|
-
box-sizing: border-box;
|
|
607
596
|
padding: 0;
|
|
608
597
|
margin: 0;
|
|
609
598
|
}
|
|
610
599
|
|
|
611
600
|
div.pref-viewer-3d.animation-menu {
|
|
612
|
-
--color-primary: ${PrefViewerStyleVariables.colorPrimary};
|
|
601
|
+
--color-primary: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
|
|
613
602
|
--color-active: var(--color-primary);
|
|
614
603
|
--color-active-hover: color-mix(in oklab, var(--color-active), black 10%);
|
|
615
604
|
--color-enabled: #7a7a7a;
|
|
@@ -627,7 +616,7 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
627
616
|
--selector-button-radius: 6px;
|
|
628
617
|
--selector-button-padding-horizontal: 8px;
|
|
629
618
|
--selector-button-padding-vertical: 4px;
|
|
630
|
-
--selector-button-font-size:
|
|
619
|
+
--selector-button-font-size: ${PrefViewerStyleVariables.fontSize};
|
|
631
620
|
--selector-button-font-weight: 500;
|
|
632
621
|
--width: calc(var(--button-size) * 6 + var(--button-spacing) * 5 + var(--button-loop-margin-left));
|
|
633
622
|
|
|
@@ -668,6 +657,7 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
668
657
|
font-size: var(--selector-button-font-size);
|
|
669
658
|
font-weight: var(--selector-button-font-weight);
|
|
670
659
|
line-height: 1;
|
|
660
|
+
letter-spacing: 0.05em;
|
|
671
661
|
flex: 1;
|
|
672
662
|
}
|
|
673
663
|
|
|
@@ -683,7 +673,7 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
683
673
|
cursor: pointer;
|
|
684
674
|
}
|
|
685
675
|
|
|
686
|
-
div.pref-viewer-3d.animation-menu>div.animation-menu-
|
|
676
|
+
div.pref-viewer-3d.animation-menu>div.animation-menu-selector>button:not(.active):hover {
|
|
687
677
|
background: var(--color-enabled-hover);
|
|
688
678
|
}
|
|
689
679
|
|
|
@@ -700,7 +690,6 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
700
690
|
justify-content: center;
|
|
701
691
|
padding: 0;
|
|
702
692
|
margin: 0;
|
|
703
|
-
cursor: pointer;
|
|
704
693
|
border: 1px solid var(--color-border);
|
|
705
694
|
width: var(--button-size);
|
|
706
695
|
height: var(--button-size);
|
|
@@ -723,13 +712,15 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
723
712
|
|
|
724
713
|
div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.enabled {
|
|
725
714
|
background: var(--color-enabled);
|
|
715
|
+
cursor: pointer;
|
|
726
716
|
}
|
|
727
717
|
|
|
728
718
|
div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.enabled:hover {
|
|
729
719
|
background: var(--color-enabled-hover);
|
|
730
720
|
}
|
|
731
721
|
|
|
732
|
-
div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled
|
|
722
|
+
div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled,
|
|
723
|
+
div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled:hover {
|
|
733
724
|
background: var(--color-disabled);
|
|
734
725
|
}
|
|
735
726
|
|
|
@@ -795,7 +786,7 @@ export const PrefViewer3DAnimationMenuStyles = `
|
|
|
795
786
|
|
|
796
787
|
export const PrefViewerDialogStyles = `
|
|
797
788
|
pref-viewer-dialog {
|
|
798
|
-
--color-primary: ${PrefViewerStyleVariables.colorPrimary};
|
|
789
|
+
--color-primary: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
|
|
799
790
|
--dialog-general-space: 16px;
|
|
800
791
|
--dialog-bg-color: #ffffff;
|
|
801
792
|
--dialog-backdrop-color: rgba(0, 0, 0, 0.25);
|
|
@@ -855,7 +846,7 @@ export const PrefViewerDialogStyles = `
|
|
|
855
846
|
pref-viewer-dialog .dialog-header h3 {
|
|
856
847
|
margin: 0;
|
|
857
848
|
font-weight: 500;
|
|
858
|
-
font-size: 1.
|
|
849
|
+
font-size: calc(1.1 * ${PrefViewerStyleVariables.fontSize});
|
|
859
850
|
}
|
|
860
851
|
|
|
861
852
|
pref-viewer-dialog .dialog-content {
|
|
@@ -865,7 +856,7 @@ export const PrefViewerDialogStyles = `
|
|
|
865
856
|
pref-viewer-dialog .dialog-content h4 {
|
|
866
857
|
margin: 0;
|
|
867
858
|
font-weight: 500;
|
|
868
|
-
font-size: 1.
|
|
859
|
+
font-size: calc(1.05 * ${PrefViewerStyleVariables.fontSize});
|
|
869
860
|
}
|
|
870
861
|
|
|
871
862
|
pref-viewer-dialog .dialog-footer {
|
|
@@ -878,7 +869,7 @@ export const PrefViewerDialogStyles = `
|
|
|
878
869
|
|
|
879
870
|
pref-viewer-dialog .dialog-footer button {
|
|
880
871
|
width: 100%;
|
|
881
|
-
font-size: 0.
|
|
872
|
+
font-size: calc(0.95 * ${PrefViewerStyleVariables.fontSize});
|
|
882
873
|
font-weight: 600;
|
|
883
874
|
padding: var(--button-padding-vertical) var(--button-padding-horizontal);
|
|
884
875
|
border-radius: var(--button-border-radius);
|