@preference-sl/pref-viewer 2.16.0-beta.1 → 2.16.0-beta.10
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/LICENSE.md +13 -0
- package/README.md +463 -0
- package/package.json +7 -7
- package/src/babylonjs-controller.js +122 -847
- package/src/file-storage.js +5 -126
- package/src/gltf-resolver.js +24 -58
- package/src/localization/translations.js +5 -17
- package/src/material-utils.js +72 -0
- package/src/pref-viewer-3d.js +24 -112
- package/src/pref-viewer-menu-3d.js +133 -260
- package/src/pref-viewer.js +4 -150
- package/src/render-math.js +127 -0
- package/src/styles.js +71 -163
- package/Readme.md +0 -8
package/src/styles.js
CHANGED
|
@@ -3,22 +3,6 @@ export const PrefViewerStyleVariables = {
|
|
|
3
3
|
fontFamily: "'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji",
|
|
4
4
|
};
|
|
5
5
|
|
|
6
|
-
// Default palette colors for illumination color picker
|
|
7
|
-
export const DEFAULT_ILLUMINATION_PALETTE = [
|
|
8
|
-
"#ffffff", // White
|
|
9
|
-
"#ff6700", // Orange (default)
|
|
10
|
-
"#ff0000", // Red
|
|
11
|
-
"#00ff00", // Green
|
|
12
|
-
"#0000ff", // Blue
|
|
13
|
-
"#ffff00", // Yellow
|
|
14
|
-
"#ff00ff", // Magenta
|
|
15
|
-
"#00ffff", // Cyan
|
|
16
|
-
"#ffb6c1", // Light Pink
|
|
17
|
-
"#98fb98", // Light Green
|
|
18
|
-
"#87ceeb", // Light Blue
|
|
19
|
-
"#dda0dd", // Plum
|
|
20
|
-
];
|
|
21
|
-
|
|
22
6
|
export const PrefViewerStyles = `
|
|
23
7
|
:host .pref-viewer-wrapper {
|
|
24
8
|
display: grid !important;
|
|
@@ -106,7 +90,6 @@ export const PrefViewer3DStyles = `
|
|
|
106
90
|
position: relative;
|
|
107
91
|
outline: none;
|
|
108
92
|
box-sizing: border-box;
|
|
109
|
-
background: #ffffff;
|
|
110
93
|
}
|
|
111
94
|
`;
|
|
112
95
|
|
|
@@ -121,7 +104,8 @@ export const PrefViewerMenu3DStyles = `
|
|
|
121
104
|
--text-color: #ffffff;
|
|
122
105
|
--muted-color: #b2b2b2;
|
|
123
106
|
--accent-color: ${PrefViewerStyleVariables.colorPrimary};
|
|
124
|
-
|
|
107
|
+
|
|
108
|
+
--separator-border: 1px solid rgba(255, 255, 255, 0.1);
|
|
125
109
|
|
|
126
110
|
--toggle-margin: 16px;
|
|
127
111
|
--toggle-bg-color: rgba(19, 21, 28, 0.6);
|
|
@@ -154,6 +138,13 @@ export const PrefViewerMenu3DStyles = `
|
|
|
154
138
|
--switch-control-width: calc((var(--switch-control-thumb-size) * 2) + (var(--switch-control-bar-spacing) * 2));
|
|
155
139
|
--switch-control-height: calc(var(--switch-control-thumb-size) + (var(--switch-control-bar-spacing) * 2));
|
|
156
140
|
|
|
141
|
+
--slider-thumb-size: 18px;
|
|
142
|
+
--slider-thumb-color: #ffffff;
|
|
143
|
+
--slider-thumb-border: 1px solid rgba(0, 0, 0, 0.25);
|
|
144
|
+
--slider-thumb-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
|
|
145
|
+
--slider-bar-height: 12px;
|
|
146
|
+
--slider-bar-border: 1px solid rgba(255, 255, 255, 0.5);
|
|
147
|
+
|
|
157
148
|
position: absolute;
|
|
158
149
|
top: var(--toggle-margin);
|
|
159
150
|
right: var(--toggle-margin);
|
|
@@ -223,7 +214,7 @@ export const PrefViewerMenu3DStyles = `
|
|
|
223
214
|
}
|
|
224
215
|
|
|
225
216
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header {
|
|
226
|
-
margin-bottom: var(--panel-spacing
|
|
217
|
+
margin-bottom: var(--panel-spacing);
|
|
227
218
|
}
|
|
228
219
|
|
|
229
220
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header>.menu-title {
|
|
@@ -250,11 +241,11 @@ export const PrefViewerMenu3DStyles = `
|
|
|
250
241
|
justify-content: space-between;
|
|
251
242
|
gap: var(--panel-spacing-large);
|
|
252
243
|
padding: var(--panel-spacing) 0;
|
|
253
|
-
border-bottom:
|
|
244
|
+
border-bottom: var(--separator-border);
|
|
254
245
|
}
|
|
255
246
|
|
|
256
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:
|
|
257
|
-
border-
|
|
247
|
+
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:first-child {
|
|
248
|
+
border-top: var(--separator-border);
|
|
258
249
|
}
|
|
259
250
|
|
|
260
251
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch>.menu-switch-copy {
|
|
@@ -268,18 +259,6 @@ export const PrefViewerMenu3DStyles = `
|
|
|
268
259
|
font-weight: var(--font-weight-medium);
|
|
269
260
|
}
|
|
270
261
|
|
|
271
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-title::after {
|
|
272
|
-
content: " *";
|
|
273
|
-
color: var(--accent-color);
|
|
274
|
-
font-weight: var(--font-weight-bold);
|
|
275
|
-
opacity: 0;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-pending] .menu-switch-title::after {
|
|
279
|
-
opacity: 1;
|
|
280
|
-
transition: opacity 0.2s ease;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
262
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch small {
|
|
284
263
|
color: var(--muted-color);
|
|
285
264
|
font-size: var(--font-size-small);
|
|
@@ -353,80 +332,19 @@ export const PrefViewerMenu3DStyles = `
|
|
|
353
332
|
gap: calc(var(--panel-spacing) / 2);
|
|
354
333
|
}
|
|
355
334
|
|
|
356
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending {
|
|
357
|
-
font-size: var(--font-size-small);
|
|
358
|
-
text-transform: uppercase;
|
|
359
|
-
letter-spacing: 0.08em;
|
|
360
|
-
color: var(--accent-color);
|
|
361
|
-
font-weight: var(--font-weight-medium);
|
|
362
|
-
display: block;
|
|
363
|
-
opacity: 1;
|
|
364
|
-
transition: opacity 0.2s ease;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending::before {
|
|
368
|
-
content: "* ";
|
|
369
|
-
font-size: var(--font-size-medium);
|
|
370
|
-
color: var(--accent-color);
|
|
371
|
-
font-weight: var(--font-weight-bold);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending[hidden] {
|
|
375
|
-
opacity: 0;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-status {
|
|
379
|
-
font-size: var(--font-size-small);
|
|
380
|
-
color: var(--status-color);
|
|
381
|
-
display: none;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
pref-viewer-menu-3d[data-status="visible"]>.menu-wrapper>.menu-panel>.menu-footer>.menu-status {
|
|
385
|
-
display: block;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
|
|
389
|
-
border: none;
|
|
390
|
-
border-radius: var(--button-radius);
|
|
391
|
-
padding: round(down, calc(var(--panel-spacing) * 0.625), 1px) var(--panel-spacing);
|
|
392
|
-
font-size: var(--button-font-size);
|
|
393
|
-
font-weight: var(--button-font-weight);
|
|
394
|
-
background: var(--accent-color);
|
|
395
|
-
color: var(--button-font-color);
|
|
396
|
-
cursor: pointer;
|
|
397
|
-
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:not(:disabled):hover {
|
|
401
|
-
box-shadow: var(--button-shadow);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:disabled {
|
|
405
|
-
cursor: not-allowed;
|
|
406
|
-
opacity: 0.55;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
pref-viewer-menu-3d[data-applying]>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
|
|
410
|
-
opacity: 0.75;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
/* Color Slider Styles */
|
|
414
335
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker {
|
|
415
336
|
display: flex;
|
|
416
337
|
flex-direction: column;
|
|
417
|
-
gap:
|
|
338
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
418
339
|
padding: var(--panel-spacing) 0;
|
|
419
|
-
border-bottom:
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker:last-child {
|
|
423
|
-
border-bottom: none;
|
|
340
|
+
border-bottom: var(--separator-border);
|
|
424
341
|
}
|
|
425
342
|
|
|
426
343
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row {
|
|
427
344
|
display: flex;
|
|
428
345
|
align-items: center;
|
|
429
346
|
justify-content: space-between;
|
|
347
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
430
348
|
}
|
|
431
349
|
|
|
432
350
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-picker-label {
|
|
@@ -436,10 +354,10 @@ export const PrefViewerMenu3DStyles = `
|
|
|
436
354
|
}
|
|
437
355
|
|
|
438
356
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-preview {
|
|
439
|
-
width:
|
|
440
|
-
|
|
441
|
-
border-radius:
|
|
442
|
-
border:
|
|
357
|
+
width: var(--switch-control-width);
|
|
358
|
+
align-self: stretch;
|
|
359
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
360
|
+
border: var(--slider-bar-border);
|
|
443
361
|
flex-shrink: 0;
|
|
444
362
|
}
|
|
445
363
|
|
|
@@ -447,35 +365,38 @@ export const PrefViewerMenu3DStyles = `
|
|
|
447
365
|
-webkit-appearance: none;
|
|
448
366
|
appearance: none;
|
|
449
367
|
width: 100%;
|
|
450
|
-
height:
|
|
451
|
-
|
|
452
|
-
|
|
368
|
+
height: var(--slider-bar-height);
|
|
369
|
+
box-sizing: border-box;
|
|
370
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
453
371
|
background: linear-gradient(to right,
|
|
454
372
|
hsl(0,100%,50%), hsl(30,100%,50%), hsl(60,100%,50%), hsl(90,100%,50%),
|
|
455
373
|
hsl(120,100%,50%), hsl(150,100%,50%), hsl(180,100%,50%), hsl(210,100%,50%),
|
|
456
374
|
hsl(240,100%,50%), hsl(270,100%,50%), hsl(300,100%,50%), hsl(330,100%,50%),
|
|
457
375
|
hsl(360,100%,50%));
|
|
376
|
+
border: var(--slider-bar-border);
|
|
458
377
|
outline: none;
|
|
378
|
+
margin: 0;
|
|
379
|
+
cursor: pointer;
|
|
459
380
|
}
|
|
460
381
|
|
|
461
382
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-webkit-slider-thumb {
|
|
462
383
|
-webkit-appearance: none;
|
|
463
|
-
width:
|
|
464
|
-
height:
|
|
384
|
+
width: var(--slider-thumb-size);
|
|
385
|
+
height: var(--slider-thumb-size);
|
|
465
386
|
border-radius: 50%;
|
|
466
|
-
background:
|
|
467
|
-
border:
|
|
468
|
-
box-shadow:
|
|
387
|
+
background: var(--slider-thumb-color);
|
|
388
|
+
border: var(--slider-thumb-border);
|
|
389
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
469
390
|
cursor: pointer;
|
|
470
391
|
}
|
|
471
392
|
|
|
472
393
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-moz-range-thumb {
|
|
473
|
-
width:
|
|
474
|
-
height:
|
|
394
|
+
width: var(--slider-thumb-size);
|
|
395
|
+
height: var(--slider-thumb-size);
|
|
475
396
|
border-radius: 50%;
|
|
476
|
-
background:
|
|
477
|
-
border:
|
|
478
|
-
box-shadow:
|
|
397
|
+
background: var(--slider-thumb-color);
|
|
398
|
+
border: var(--slider-thumb-border);
|
|
399
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
479
400
|
cursor: pointer;
|
|
480
401
|
}
|
|
481
402
|
|
|
@@ -487,23 +408,16 @@ export const PrefViewerMenu3DStyles = `
|
|
|
487
408
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider {
|
|
488
409
|
display: flex;
|
|
489
410
|
flex-direction: column;
|
|
490
|
-
gap:
|
|
411
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
491
412
|
padding: var(--panel-spacing) 0;
|
|
492
|
-
border-bottom:
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider[data-pending] .lighting-slider-label::after {
|
|
496
|
-
content: "•";
|
|
497
|
-
margin-left: 8px;
|
|
498
|
-
color: var(--accent-color);
|
|
499
|
-
font-size: 1.1em;
|
|
413
|
+
border-bottom: var(--separator-border);
|
|
500
414
|
}
|
|
501
415
|
|
|
502
416
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row {
|
|
503
417
|
display: flex;
|
|
504
418
|
align-items: center;
|
|
505
419
|
justify-content: space-between;
|
|
506
|
-
gap:
|
|
420
|
+
gap: calc(var(--panel-spacing) / 2);
|
|
507
421
|
}
|
|
508
422
|
|
|
509
423
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row>.lighting-slider-label {
|
|
@@ -523,37 +437,41 @@ export const PrefViewerMenu3DStyles = `
|
|
|
523
437
|
-webkit-appearance: none;
|
|
524
438
|
appearance: none;
|
|
525
439
|
width: 100%;
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
background:
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
440
|
+
box-sizing: border-box;
|
|
441
|
+
height: var(--slider-bar-height);
|
|
442
|
+
border-radius: calc(var(--slider-bar-height) / 2);
|
|
443
|
+
background: linear-gradient(to right,
|
|
444
|
+
rgba(56, 66, 115, 0.95) 0%,
|
|
445
|
+
rgba(118, 165, 255, 0.92) 10%,
|
|
446
|
+
rgba(255, 214, 120, 0.95) 30%,
|
|
447
|
+
rgba(255, 244, 214, 0.95) 50%,
|
|
448
|
+
rgba(255, 214, 120, 0.95) 70%,
|
|
449
|
+
rgba(118, 165, 255, 0.92) 90%,
|
|
450
|
+
rgba(56, 66, 115, 0.95) 100%);
|
|
451
|
+
border: var(--slider-bar-border);
|
|
536
452
|
outline: none;
|
|
453
|
+
margin: 0;
|
|
454
|
+
cursor: pointer;
|
|
537
455
|
}
|
|
538
456
|
|
|
539
457
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-webkit-slider-thumb {
|
|
540
458
|
-webkit-appearance: none;
|
|
541
|
-
width:
|
|
542
|
-
height:
|
|
459
|
+
width: var(--slider-thumb-size);
|
|
460
|
+
height: var(--slider-thumb-size);
|
|
543
461
|
border-radius: 50%;
|
|
544
|
-
background:
|
|
545
|
-
border:
|
|
546
|
-
box-shadow:
|
|
462
|
+
background: var(--slider-thumb-color);
|
|
463
|
+
border: var(--slider-thumb-border);
|
|
464
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
547
465
|
cursor: pointer;
|
|
548
466
|
}
|
|
549
467
|
|
|
550
468
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-moz-range-thumb {
|
|
551
|
-
width:
|
|
552
|
-
height:
|
|
469
|
+
width: var(--slider-thumb-size);
|
|
470
|
+
height: var(--slider-thumb-size);
|
|
553
471
|
border-radius: 50%;
|
|
554
|
-
background:
|
|
555
|
-
border:
|
|
556
|
-
box-shadow:
|
|
472
|
+
background: var(--slider-thumb-color);
|
|
473
|
+
border: var(--slider-thumb-border);
|
|
474
|
+
box-shadow: var(--slider-thumb-shadow);
|
|
557
475
|
cursor: pointer;
|
|
558
476
|
}
|
|
559
477
|
|
|
@@ -572,33 +490,23 @@ export const PrefViewerMenu3DStyles = `
|
|
|
572
490
|
|
|
573
491
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button {
|
|
574
492
|
appearance: none;
|
|
575
|
-
|
|
576
|
-
border
|
|
577
|
-
|
|
493
|
+
background: rgba(255, 255, 255, 0.1);
|
|
494
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
495
|
+
border-radius: var(--button-radius);
|
|
496
|
+
padding: calc(var(--panel-spacing) * 0.5) var(--panel-spacing);
|
|
578
497
|
color: var(--text-color);
|
|
579
|
-
padding: 6px 12px;
|
|
580
498
|
font-size: var(--font-size-small);
|
|
581
499
|
font-weight: var(--font-weight-medium);
|
|
500
|
+
transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.2s ease;
|
|
582
501
|
cursor: pointer;
|
|
583
|
-
transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
|
|
584
502
|
}
|
|
585
503
|
|
|
586
504
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button:hover,
|
|
587
505
|
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button:focus-visible {
|
|
588
|
-
background: rgba(255, 255, 255, 0.
|
|
589
|
-
border-color: rgba(255, 255, 255, 0.
|
|
590
|
-
transform: translateY(-1px);
|
|
506
|
+
background: rgba(255, 255, 255, 0.15);
|
|
507
|
+
border-color: rgba(255, 255, 255, 0.3);
|
|
591
508
|
outline: none;
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider[data-playing] .lighting-slider {
|
|
595
|
-
background:
|
|
596
|
-
linear-gradient(to right,
|
|
597
|
-
rgba(255, 220, 132, 0.96) 0%,
|
|
598
|
-
rgba(255, 187, 88, 0.98) 18%,
|
|
599
|
-
rgba(255, 247, 226, 0.96) 50%,
|
|
600
|
-
rgba(112, 154, 255, 0.92) 82%,
|
|
601
|
-
rgba(45, 55, 102, 0.98) 100%);
|
|
509
|
+
box-shadow: var(--button-shadow);
|
|
602
510
|
}
|
|
603
511
|
`;
|
|
604
512
|
|