@preference-sl/pref-viewer 2.16.0-beta.1 → 2.16.0-beta.11

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/src/styles.js CHANGED
@@ -1,25 +1,71 @@
1
- export const PrefViewerStyleVariables = {
2
- colorPrimary: "#ff6700", // Default accent color - can be overridden via attribute
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
- // 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
- ];
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,8 +147,6 @@ export const PrefViewer3DStyles = `
105
147
  display: block;
106
148
  position: relative;
107
149
  outline: none;
108
- box-sizing: border-box;
109
- background: #ffffff;
110
150
  }
111
151
  `;
112
152
 
@@ -115,13 +155,14 @@ export const PrefViewerMenu3DStyles = `
115
155
  --font-family: ${PrefViewerStyleVariables.fontFamily};
116
156
  --font-weight-bold: 600;
117
157
  --font-weight-medium: 500;
118
- --font-size-large: 1.1rem;
119
- --font-size-medium: 0.95rem;
120
- --font-size-small: 0.75rem;
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});
121
161
  --text-color: #ffffff;
122
162
  --muted-color: #b2b2b2;
123
- --accent-color: ${PrefViewerStyleVariables.colorPrimary};
124
- --status-color: #ffb0b0;
163
+ --accent-color: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
164
+
165
+ --separator-border: 1px solid rgba(255, 255, 255, 0.1);
125
166
 
126
167
  --toggle-margin: 16px;
127
168
  --toggle-bg-color: rgba(19, 21, 28, 0.6);
@@ -137,7 +178,7 @@ export const PrefViewerMenu3DStyles = `
137
178
  --button-shadow: 0 8px 16px rgba(0, 0, 0, 0.35);
138
179
  --button-radius: 8px;
139
180
 
140
- --panel-width: 280px;
181
+ --panel-width: 300px;
141
182
  --panel-spacing: 16px;
142
183
  --panel-spacing-large: calc(var(--panel-spacing) * 1.5);
143
184
  --panel-bg-color: rgba(19, 21, 28, 0.85);
@@ -154,6 +195,13 @@ export const PrefViewerMenu3DStyles = `
154
195
  --switch-control-width: calc((var(--switch-control-thumb-size) * 2) + (var(--switch-control-bar-spacing) * 2));
155
196
  --switch-control-height: calc(var(--switch-control-thumb-size) + (var(--switch-control-bar-spacing) * 2));
156
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
+
157
205
  position: absolute;
158
206
  top: var(--toggle-margin);
159
207
  right: var(--toggle-margin);
@@ -223,7 +271,7 @@ export const PrefViewerMenu3DStyles = `
223
271
  }
224
272
 
225
273
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header {
226
- margin-bottom: var(--panel-spacing-large);
274
+ margin-bottom: var(--panel-spacing);
227
275
  }
228
276
 
229
277
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header>.menu-title {
@@ -250,11 +298,11 @@ export const PrefViewerMenu3DStyles = `
250
298
  justify-content: space-between;
251
299
  gap: var(--panel-spacing-large);
252
300
  padding: var(--panel-spacing) 0;
253
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
301
+ border-bottom: var(--separator-border);
254
302
  }
255
303
 
256
- pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:last-child {
257
- border-bottom: none;
304
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:first-child {
305
+ border-top: var(--separator-border);
258
306
  }
259
307
 
260
308
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch>.menu-switch-copy {
@@ -268,18 +316,6 @@ export const PrefViewerMenu3DStyles = `
268
316
  font-weight: var(--font-weight-medium);
269
317
  }
270
318
 
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
319
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch small {
284
320
  color: var(--muted-color);
285
321
  font-size: var(--font-size-small);
@@ -300,6 +336,10 @@ export const PrefViewerMenu3DStyles = `
300
336
  cursor: pointer;
301
337
  }
302
338
 
339
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-hidden] {
340
+ display: none;
341
+ }
342
+
303
343
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-disabled]>.menu-switch-copy {
304
344
  opacity: 0.6;
305
345
  }
@@ -346,87 +386,35 @@ export const PrefViewerMenu3DStyles = `
346
386
  transform: translateX(var(--switch-control-thumb-size));
347
387
  }
348
388
 
349
- pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer {
350
- margin-top: calc(var(--panel-spacing) / 2);
351
- display: flex;
352
- flex-direction: column;
353
- gap: calc(var(--panel-spacing) / 2);
354
- }
355
-
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);
389
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-hidden] {
381
390
  display: none;
382
391
  }
383
392
 
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;
393
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] .menu-slider-label {
394
+ opacity: 0.6;
398
395
  }
399
396
 
400
- pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:not(:disabled):hover {
401
- box-shadow: var(--button-shadow);
397
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] input[type="range"] {
398
+ opacity: 0.4;
402
399
  }
403
400
 
404
- pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:disabled {
401
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-slider[data-disabled] input[type="range"]:disabled {
405
402
  cursor: not-allowed;
406
- opacity: 0.55;
407
403
  }
408
404
 
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
405
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker {
415
406
  display: flex;
416
407
  flex-direction: column;
417
- gap: 8px;
408
+ gap: calc(var(--panel-spacing) / 2);
418
409
  padding: var(--panel-spacing) 0;
419
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
420
- }
421
-
422
- pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker:last-child {
423
- border-bottom: none;
410
+ border-bottom: var(--separator-border);
424
411
  }
425
412
 
426
413
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row {
427
414
  display: flex;
428
415
  align-items: center;
429
416
  justify-content: space-between;
417
+ gap: calc(var(--panel-spacing) / 2);
430
418
  }
431
419
 
432
420
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-picker-label {
@@ -436,10 +424,10 @@ export const PrefViewerMenu3DStyles = `
436
424
  }
437
425
 
438
426
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider-row>.color-preview {
439
- width: 20px;
440
- height: 20px;
441
- border-radius: 50%;
442
- border: 2px solid rgba(255, 255, 255, 0.3);
427
+ width: var(--switch-control-width);
428
+ align-self: stretch;
429
+ border-radius: calc(var(--slider-bar-height) / 2);
430
+ border: var(--slider-bar-border);
443
431
  flex-shrink: 0;
444
432
  }
445
433
 
@@ -447,35 +435,37 @@ export const PrefViewerMenu3DStyles = `
447
435
  -webkit-appearance: none;
448
436
  appearance: none;
449
437
  width: 100%;
450
- height: 10px;
451
- border-radius: 5px;
452
- cursor: pointer;
438
+ height: var(--slider-bar-height);
439
+ border-radius: calc(var(--slider-bar-height) / 2);
453
440
  background: linear-gradient(to right,
454
441
  hsl(0,100%,50%), hsl(30,100%,50%), hsl(60,100%,50%), hsl(90,100%,50%),
455
442
  hsl(120,100%,50%), hsl(150,100%,50%), hsl(180,100%,50%), hsl(210,100%,50%),
456
443
  hsl(240,100%,50%), hsl(270,100%,50%), hsl(300,100%,50%), hsl(330,100%,50%),
457
444
  hsl(360,100%,50%));
445
+ border: var(--slider-bar-border);
458
446
  outline: none;
447
+ margin: 0;
448
+ cursor: pointer;
459
449
  }
460
450
 
461
451
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-webkit-slider-thumb {
462
452
  -webkit-appearance: none;
463
- width: 16px;
464
- height: 16px;
453
+ width: var(--slider-thumb-size);
454
+ height: var(--slider-thumb-size);
465
455
  border-radius: 50%;
466
- background: white;
467
- border: 2px solid rgba(0, 0, 0, 0.25);
468
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
456
+ background: var(--slider-thumb-color);
457
+ border: var(--slider-thumb-border);
458
+ box-shadow: var(--slider-thumb-shadow);
469
459
  cursor: pointer;
470
460
  }
471
461
 
472
462
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-color-picker>.color-slider::-moz-range-thumb {
473
- width: 16px;
474
- height: 16px;
463
+ width: var(--slider-thumb-size);
464
+ height: var(--slider-thumb-size);
475
465
  border-radius: 50%;
476
- background: white;
477
- border: 2px solid rgba(0, 0, 0, 0.25);
478
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
466
+ background: var(--slider-thumb-color);
467
+ border: var(--slider-thumb-border);
468
+ box-shadow: var(--slider-thumb-shadow);
479
469
  cursor: pointer;
480
470
  }
481
471
 
@@ -487,23 +477,16 @@ export const PrefViewerMenu3DStyles = `
487
477
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider {
488
478
  display: flex;
489
479
  flex-direction: column;
490
- gap: 8px;
480
+ gap: calc(var(--panel-spacing) / 2);
491
481
  padding: var(--panel-spacing) 0;
492
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
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;
482
+ border-bottom: var(--separator-border);
500
483
  }
501
484
 
502
485
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row {
503
486
  display: flex;
504
487
  align-items: center;
505
488
  justify-content: space-between;
506
- gap: 12px;
489
+ gap: calc(var(--panel-spacing) / 2);
507
490
  }
508
491
 
509
492
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-row>.lighting-slider-label {
@@ -523,37 +506,40 @@ export const PrefViewerMenu3DStyles = `
523
506
  -webkit-appearance: none;
524
507
  appearance: none;
525
508
  width: 100%;
526
- height: 10px;
527
- border-radius: 999px;
528
- cursor: pointer;
529
- background:
530
- linear-gradient(to right,
531
- rgba(255, 214, 120, 0.95) 0%,
532
- rgba(255, 179, 71, 0.98) 20%,
533
- rgba(255, 244, 214, 0.95) 50%,
534
- rgba(118, 165, 255, 0.92) 80%,
535
- rgba(56, 66, 115, 0.95) 100%);
509
+ height: var(--slider-bar-height);
510
+ border-radius: calc(var(--slider-bar-height) / 2);
511
+ background: linear-gradient(to right,
512
+ rgba(56, 66, 115, 0.95) 0%,
513
+ rgba(118, 165, 255, 0.92) 10%,
514
+ rgba(255, 214, 120, 0.95) 30%,
515
+ rgba(255, 244, 214, 0.95) 50%,
516
+ rgba(255, 214, 120, 0.95) 70%,
517
+ rgba(118, 165, 255, 0.92) 90%,
518
+ rgba(56, 66, 115, 0.95) 100%);
519
+ border: var(--slider-bar-border);
536
520
  outline: none;
521
+ margin: 0;
522
+ cursor: pointer;
537
523
  }
538
524
 
539
525
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-webkit-slider-thumb {
540
526
  -webkit-appearance: none;
541
- width: 18px;
542
- height: 18px;
527
+ width: var(--slider-thumb-size);
528
+ height: var(--slider-thumb-size);
543
529
  border-radius: 50%;
544
- background: #ffffff;
545
- border: 2px solid rgba(0, 0, 0, 0.24);
546
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
530
+ background: var(--slider-thumb-color);
531
+ border: var(--slider-thumb-border);
532
+ box-shadow: var(--slider-thumb-shadow);
547
533
  cursor: pointer;
548
534
  }
549
535
 
550
536
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider::-moz-range-thumb {
551
- width: 18px;
552
- height: 18px;
537
+ width: var(--slider-thumb-size);
538
+ height: var(--slider-thumb-size);
553
539
  border-radius: 50%;
554
- background: #ffffff;
555
- border: 2px solid rgba(0, 0, 0, 0.24);
556
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
540
+ background: var(--slider-thumb-color);
541
+ border: var(--slider-thumb-border);
542
+ box-shadow: var(--slider-thumb-shadow);
557
543
  cursor: pointer;
558
544
  }
559
545
 
@@ -572,45 +558,41 @@ export const PrefViewerMenu3DStyles = `
572
558
 
573
559
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button {
574
560
  appearance: none;
575
- border: 1px solid rgba(255, 255, 255, 0.18);
576
- border-radius: 999px;
577
- background: rgba(255, 255, 255, 0.08);
561
+ background: rgba(255, 255, 255, 0.1);
562
+ border: 1px solid rgba(255, 255, 255, 0.2);
563
+ border-radius: var(--button-radius);
564
+ padding: calc(var(--panel-spacing) * 0.5) var(--panel-spacing);
578
565
  color: var(--text-color);
579
- padding: 6px 12px;
580
566
  font-size: var(--font-size-small);
581
567
  font-weight: var(--font-weight-medium);
568
+ transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.2s ease;
582
569
  cursor: pointer;
583
- transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
584
570
  }
585
571
 
586
572
  pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-lighting-slider>.lighting-slider-actions>.lighting-play-button:hover,
587
573
  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.14);
589
- border-color: rgba(255, 255, 255, 0.28);
590
- transform: translateY(-1px);
574
+ background: rgba(255, 255, 255, 0.15);
575
+ border-color: rgba(255, 255, 255, 0.3);
591
576
  outline: none;
577
+ box-shadow: var(--button-shadow);
592
578
  }
593
579
 
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%);
580
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer {
581
+ margin-top: calc(var(--panel-spacing) / 2);
582
+ display: flex;
583
+ flex-direction: column;
584
+ gap: calc(var(--panel-spacing) / 2);
602
585
  }
603
586
  `;
604
587
 
605
588
  export const PrefViewer3DAnimationMenuStyles = `
606
589
  div.pref-viewer-3d.animation-menu, div.pref-viewer-3d.animation-menu * {
607
- box-sizing: border-box;
608
590
  padding: 0;
609
591
  margin: 0;
610
592
  }
611
593
 
612
594
  div.pref-viewer-3d.animation-menu {
613
- --color-primary: ${PrefViewerStyleVariables.colorPrimary};
595
+ --color-primary: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
614
596
  --color-active: var(--color-primary);
615
597
  --color-active-hover: color-mix(in oklab, var(--color-active), black 10%);
616
598
  --color-enabled: #7a7a7a;
@@ -628,7 +610,7 @@ export const PrefViewer3DAnimationMenuStyles = `
628
610
  --selector-button-radius: 6px;
629
611
  --selector-button-padding-horizontal: 8px;
630
612
  --selector-button-padding-vertical: 4px;
631
- --selector-button-font-size: 14px;
613
+ --selector-button-font-size: ${PrefViewerStyleVariables.fontSize};
632
614
  --selector-button-font-weight: 500;
633
615
  --width: calc(var(--button-size) * 6 + var(--button-spacing) * 5 + var(--button-loop-margin-left));
634
616
 
@@ -669,6 +651,7 @@ export const PrefViewer3DAnimationMenuStyles = `
669
651
  font-size: var(--selector-button-font-size);
670
652
  font-weight: var(--selector-button-font-weight);
671
653
  line-height: 1;
654
+ letter-spacing: 0.05em;
672
655
  flex: 1;
673
656
  }
674
657
 
@@ -684,7 +667,7 @@ export const PrefViewer3DAnimationMenuStyles = `
684
667
  cursor: pointer;
685
668
  }
686
669
 
687
- div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button:not(.active):hover {
670
+ div.pref-viewer-3d.animation-menu>div.animation-menu-selector>button:not(.active):hover {
688
671
  background: var(--color-enabled-hover);
689
672
  }
690
673
 
@@ -701,7 +684,6 @@ export const PrefViewer3DAnimationMenuStyles = `
701
684
  justify-content: center;
702
685
  padding: 0;
703
686
  margin: 0;
704
- cursor: pointer;
705
687
  border: 1px solid var(--color-border);
706
688
  width: var(--button-size);
707
689
  height: var(--button-size);
@@ -724,13 +706,15 @@ export const PrefViewer3DAnimationMenuStyles = `
724
706
 
725
707
  div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.enabled {
726
708
  background: var(--color-enabled);
709
+ cursor: pointer;
727
710
  }
728
711
 
729
712
  div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.enabled:hover {
730
713
  background: var(--color-enabled-hover);
731
714
  }
732
715
 
733
- div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled {
716
+ div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled,
717
+ div.pref-viewer-3d.animation-menu>div.animation-menu-buttons>button.disabled:hover {
734
718
  background: var(--color-disabled);
735
719
  }
736
720
 
@@ -796,7 +780,7 @@ export const PrefViewer3DAnimationMenuStyles = `
796
780
 
797
781
  export const PrefViewerDialogStyles = `
798
782
  pref-viewer-dialog {
799
- --color-primary: ${PrefViewerStyleVariables.colorPrimary};
783
+ --color-primary: var(--pref-viewer-color-primary, ${PrefViewerStyleVariables.colorPrimary});
800
784
  --dialog-general-space: 16px;
801
785
  --dialog-bg-color: #ffffff;
802
786
  --dialog-backdrop-color: rgba(0, 0, 0, 0.25);
@@ -856,7 +840,7 @@ export const PrefViewerDialogStyles = `
856
840
  pref-viewer-dialog .dialog-header h3 {
857
841
  margin: 0;
858
842
  font-weight: 500;
859
- font-size: 1.1em;
843
+ font-size: calc(1.1 * ${PrefViewerStyleVariables.fontSize});
860
844
  }
861
845
 
862
846
  pref-viewer-dialog .dialog-content {
@@ -866,7 +850,7 @@ export const PrefViewerDialogStyles = `
866
850
  pref-viewer-dialog .dialog-content h4 {
867
851
  margin: 0;
868
852
  font-weight: 500;
869
- font-size: 1.05em;
853
+ font-size: calc(1.05 * ${PrefViewerStyleVariables.fontSize});
870
854
  }
871
855
 
872
856
  pref-viewer-dialog .dialog-footer {
@@ -879,7 +863,7 @@ export const PrefViewerDialogStyles = `
879
863
 
880
864
  pref-viewer-dialog .dialog-footer button {
881
865
  width: 100%;
882
- font-size: 0.95rem;
866
+ font-size: calc(0.95 * ${PrefViewerStyleVariables.fontSize});
883
867
  font-weight: 600;
884
868
  padding: var(--button-padding-vertical) var(--button-padding-horizontal);
885
869
  border-radius: var(--button-border-radius);
package/Readme.md DELETED
@@ -1,8 +0,0 @@
1
- # @preference-sl/pref-viewer
2
-
3
- A Web Component for visualizing GLTF models using Babylon.js.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @preference-sl/pref-viewer