@preference-sl/pref-viewer 2.12.0 → 2.13.0-beta.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/src/styles.js CHANGED
@@ -1,5 +1,6 @@
1
- export const PrefViewerColors = {
2
- primary: "#ff6700", // Always specify in hexadecimal
1
+ export const PrefViewerStyleVariables = {
2
+ colorPrimary: "#ff6700", // Always specify in hexadecimal
3
+ fontFamily: "'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji",
3
4
  };
4
5
 
5
6
  export const PrefViewerStyles = `
@@ -88,6 +89,289 @@ export const PrefViewer3DStyles = `
88
89
  }
89
90
  `;
90
91
 
92
+ export const PrefViewerMenu3DStyles = `
93
+ pref-viewer-menu-3d {
94
+ --font-family: ${PrefViewerStyleVariables.fontFamily};
95
+ --font-weight-bold: 600;
96
+ --font-weight-medium: 500;
97
+ --font-size-large: 1.1rem;
98
+ --font-size-medium: 0.95rem;
99
+ --font-size-small: 0.75rem;
100
+ --text-color: #ffffff;
101
+ --muted-color: #b2b2b2;
102
+ --accent-color: ${PrefViewerStyleVariables.colorPrimary};
103
+ --status-color: #ffb0b0;
104
+
105
+ --toggle-margin: 16px;
106
+ --toggle-bg-color: rgba(19, 21, 28, 0.6);
107
+ --toggle-bg-hover-color: rgba(19, 21, 28, 0.85);
108
+ --toggle-border-color: rgba(255, 255, 255, 0.25);
109
+ --toggle-spacing: 10px;
110
+ --toggle-icon-color: #ffffff;
111
+ --toggle-icon-size: 24px;
112
+
113
+ --button-font-color: #000000;
114
+ --button-font-size: var(--font-size-medium);
115
+ --button-font-weight: 600;
116
+ --button-shadow: 0 8px 16px rgba(0, 0, 0, 0.35);
117
+ --button-radius: 8px;
118
+
119
+ --panel-width: 280px;
120
+ --panel-spacing: 16px;
121
+ --panel-spacing-large: calc(var(--panel-spacing) * 1.5);
122
+ --panel-bg-color: rgba(19, 21, 28, 0.85);
123
+ --panel-border-color: rgba(255, 255, 255, 0.25);
124
+ --panel-shadow: 0 16px 32px rgba(0, 0, 0, 0.65);
125
+ --panel-radius: calc(var(--button-radius) + var(--panel-spacing));
126
+
127
+ --switch-control-thumb-size: 24px;
128
+ --switch-control-thumb-shadow: 0 4px 8px rgba(0, 0, 0, 0.35);
129
+ --switch-control-thumb-color: #ffffff;
130
+ --switch-control-bar-spacing: 2px;
131
+ --switch-control-bar-color: #bfbfbf;
132
+ --switch-control-bar-checked-color: var(--accent-color);
133
+ --switch-control-width: calc((var(--switch-control-thumb-size) * 2) + (var(--switch-control-bar-spacing) * 2));
134
+ --switch-control-height: calc(var(--switch-control-thumb-size) + (var(--switch-control-bar-spacing) * 2));
135
+
136
+ position: absolute;
137
+ top: var(--toggle-margin);
138
+ right: var(--toggle-margin);
139
+ z-index: 1200;
140
+
141
+ font-family: var(--font-family);
142
+ }
143
+
144
+ pref-viewer-menu-3d>.menu-wrapper {
145
+ display: flex;
146
+ flex-direction: column;
147
+ align-items: flex-end;
148
+ }
149
+
150
+ pref-viewer-menu-3d>.menu-wrapper>.menu-toggle {
151
+ padding: var(--toggle-spacing);
152
+ border-radius: calc((var(--toggle-icon-size) + var(--toggle-spacing) * 2) / 2);
153
+ border: 1px solid var(--toggle-border-color);
154
+ background: var(--toggle-bg-color);
155
+ display: grid;
156
+ place-items: center;
157
+ cursor: pointer;
158
+ opacity: 0;
159
+ transform: translateY(calc(-1 * var(--toggle-margin) / 2));
160
+ transition: opacity 0.2s ease, transform 0.2s ease, background 0.2s ease;
161
+ pointer-events: none;
162
+ }
163
+
164
+ pref-viewer-menu-3d>.menu-wrapper>.menu-toggle>svg {
165
+ width: var(--toggle-icon-size);
166
+ height: var(--toggle-icon-size);
167
+ fill: var(--toggle-icon-color);
168
+ }
169
+
170
+ pref-viewer-menu-3d[data-viewer-hover="true"]>.menu-wrapper>.menu-toggle {
171
+ opacity: 1;
172
+ transform: translateY(0);
173
+ pointer-events: auto;
174
+ }
175
+
176
+ pref-viewer-menu-3d>.menu-wrapper>.menu-toggle:hover,
177
+ pref-viewer-menu-3d>.menu-wrapper>.menu-toggle:focus-visible {
178
+ background: var(--toggle-bg-hover-color);
179
+ outline: none;
180
+ }
181
+
182
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel {
183
+ width: var(--panel-width);
184
+ border-radius: var(--panel-radius);
185
+ background: var(--panel-bg-color);
186
+ border: 1px solid var(--panel-border-color);
187
+ box-shadow: var(--panel-shadow);
188
+ padding: 18px 20px 16px;
189
+ color: var(--text-color);
190
+ opacity: 0;
191
+ transform: translateY(calc(-1 * var(--toggle-margin) / 2));
192
+ transition: opacity 0.2s ease, transform 0.2s ease;
193
+ pointer-events: none;
194
+ }
195
+
196
+ pref-viewer-menu-3d[data-open="true"]>.menu-wrapper>.menu-panel {
197
+ opacity: 1;
198
+ transform: translateY(0);
199
+ pointer-events: auto;
200
+ }
201
+
202
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header {
203
+ margin-bottom: var(--panel-spacing-large);
204
+ }
205
+
206
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header>.menu-title {
207
+ margin: 0;
208
+ font-weight: var(--font-weight-bold);
209
+ letter-spacing: 0.02em;
210
+ font-size: var(--font-size-large);
211
+ }
212
+
213
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-header>.menu-subtitle {
214
+ margin: calc(var(--panel-spacing) / 4) 0 0 0;
215
+ color: var(--muted-color);
216
+ font-size: var(--font-size-medium);
217
+ }
218
+
219
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches {
220
+ display: flex;
221
+ flex-direction: column;
222
+ }
223
+
224
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch {
225
+ display: flex;
226
+ align-items: flex-start;
227
+ justify-content: space-between;
228
+ gap: var(--panel-spacing-large);
229
+ padding: var(--panel-spacing) 0;
230
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
231
+ }
232
+
233
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch:last-child {
234
+ border-bottom: none;
235
+ }
236
+
237
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-copy {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: calc(var(--panel-spacing) / 4);
241
+ }
242
+
243
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-title {
244
+ font-size: var(--font-size-medium);
245
+ font-weight: var(--font-weight-medium);
246
+ }
247
+
248
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-title::after {
249
+ content: " *";
250
+ color: var(--accent-color);
251
+ font-weight: var(--font-weight-bold);
252
+ opacity: 0;
253
+ }
254
+
255
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch[data-pending] .menu-switch-title::after {
256
+ opacity: 1;
257
+ transition: opacity 0.2s ease;
258
+ }
259
+
260
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch small {
261
+ color: var(--muted-color);
262
+ font-size: var(--font-size-small);
263
+ }
264
+
265
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-control {
266
+ position: relative;
267
+ width: var(--switch-control-width);
268
+ min-width: var(--switch-control-width);
269
+ height: var(--switch-control-height);
270
+ }
271
+
272
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-control input {
273
+ position: absolute;
274
+ inset: 0;
275
+ margin: 0;
276
+ opacity: 0;
277
+ cursor: pointer;
278
+ }
279
+
280
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-visual {
281
+ position: absolute;
282
+ inset: 0;
283
+ background: var(--switch-control-bar-color);
284
+ border-radius: 999px;
285
+ transition: background 0.2s ease;
286
+ cursor: pointer;
287
+ }
288
+
289
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-visual::after {
290
+ content: "";
291
+ position: absolute;
292
+ width: var(--switch-control-thumb-size);
293
+ height: var(--switch-control-thumb-size);
294
+ top: var(--switch-control-bar-spacing);
295
+ left: var(--switch-control-bar-spacing);
296
+ background: var(--switch-control-thumb-color);
297
+ border-radius: 50%;
298
+ box-shadow: var(--switch-control-thumb-shadow);
299
+ transition: transform 0.2s ease;
300
+ }
301
+
302
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-control input:checked + .menu-switch-visual {
303
+ background: var(--switch-control-bar-checked-color);
304
+ }
305
+
306
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-switches>.menu-switch .menu-switch-control input:checked + .menu-switch-visual::after {
307
+ transform: translateX(var(--switch-control-thumb-size));
308
+ }
309
+
310
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer {
311
+ margin-top: calc(var(--panel-spacing) / 2);
312
+ display: flex;
313
+ flex-direction: column;
314
+ gap: calc(var(--panel-spacing) / 2);
315
+ }
316
+
317
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending {
318
+ font-size: var(--font-size-small);
319
+ text-transform: uppercase;
320
+ letter-spacing: 0.08em;
321
+ color: var(--accent-color);
322
+ font-weight: var(--font-weight-medium);
323
+ display: block;
324
+ opacity: 1;
325
+ transition: opacity 0.2s ease;
326
+ }
327
+
328
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending::before {
329
+ content: "* ";
330
+ font-size: var(--font-size-medium);
331
+ color: var(--accent-color);
332
+ font-weight: var(--font-weight-bold);
333
+ }
334
+
335
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-pending[hidden] {
336
+ opacity: 0;
337
+ }
338
+
339
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-status {
340
+ font-size: var(--font-size-small);
341
+ color: var(--status-color);
342
+ display: none;
343
+ }
344
+
345
+ pref-viewer-menu-3d[data-status="visible"]>.menu-wrapper>.menu-panel>.menu-footer>.menu-status {
346
+ display: block;
347
+ }
348
+
349
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
350
+ border: none;
351
+ border-radius: var(--button-radius);
352
+ padding: round(down, calc(var(--panel-spacing) * 0.625), 1px) var(--panel-spacing);
353
+ font-size: var(--button-font-size);
354
+ font-weight: var(--button-font-weight);
355
+ background: var(--accent-color);
356
+ color: var(--button-font-color);
357
+ cursor: pointer;
358
+ transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
359
+ }
360
+
361
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:not(:disabled):hover {
362
+ box-shadow: var(--button-shadow);
363
+ }
364
+
365
+ pref-viewer-menu-3d>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply:disabled {
366
+ cursor: not-allowed;
367
+ opacity: 0.55;
368
+ }
369
+
370
+ pref-viewer-menu-3d[data-applying]>.menu-wrapper>.menu-panel>.menu-footer>.menu-apply {
371
+ opacity: 0.75;
372
+ }
373
+ `;
374
+
91
375
  export const PrefViewer3DAnimationMenuStyles = `
92
376
  div.pref-viewer-3d.animation-menu, div.pref-viewer-3d.animation-menu * {
93
377
  box-sizing: border-box;
@@ -96,7 +380,7 @@ export const PrefViewer3DAnimationMenuStyles = `
96
380
  }
97
381
 
98
382
  div.pref-viewer-3d.animation-menu {
99
- --color-primary: ${PrefViewerColors.primary};
383
+ --color-primary: ${PrefViewerStyleVariables.colorPrimary};
100
384
  --color-active: var(--color-primary);
101
385
  --color-active-hover: color-mix(in oklab, var(--color-active), black 10%);
102
386
  --color-enabled: #7a7a7a;
@@ -124,6 +408,13 @@ export const PrefViewer3DAnimationMenuStyles = `
124
408
 
125
409
  right: calc(50% - (var(--width) / 2));
126
410
  z-index: 1000;
411
+
412
+ animation: fadeTo085 200ms ease-out forwards;
413
+ }
414
+
415
+ @keyframes fadeTo085 {
416
+ from { opacity: 0; }
417
+ to { opacity: 0.85; }
127
418
  }
128
419
 
129
420
  div.pref-viewer-3d.animation-menu>div.animation-menu-selector {
@@ -275,20 +566,20 @@ export const PrefViewer3DAnimationMenuStyles = `
275
566
 
276
567
  export const PrefViewerDialogStyles = `
277
568
  pref-viewer-dialog {
278
- --color-primary: ${PrefViewerColors.primary};
569
+ --color-primary: ${PrefViewerStyleVariables.colorPrimary};
279
570
  --dialog-general-space: 16px;
280
571
  --dialog-bg-color: #ffffff;
281
572
  --dialog-backdrop-color: rgba(0, 0, 0, 0.25);
282
573
  --dialog-border-color: #e7e7e7;
283
- --dialog-border-radius: 8px;
284
574
  --dialog-box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
285
575
  --button-default-bg-color: #bbbbbb;
286
576
  --button-default-bg-color-hover: color-mix(in oklab, var(--button-default-bg-color), black 10%);
287
577
  --button-primary-bg-color: var(--color-primary);
288
578
  --button-primary-bg-color-hover: color-mix(in oklab, var(--button-primary-bg-color), black 10%);
289
- --button-border-radius: 4px;
290
- --button-padding-horizontal: 16px;
291
- --button-padding-vertical: 8px;
579
+ --button-border-radius: 8px;
580
+ --button-padding-horizontal: var(--dialog-general-space);
581
+ --button-padding-vertical: round(down, calc(var(--dialog-general-space) * 0.625), 1px);
582
+ --dialog-border-radius: calc(var(--button-border-radius) + var(--dialog-general-space));
292
583
  }
293
584
 
294
585
  pref-viewer-dialog:not {
@@ -296,7 +587,7 @@ export const PrefViewerDialogStyles = `
296
587
  }
297
588
 
298
589
  pref-viewer-dialog[open] {
299
- font-family: 'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
590
+ font-family: ${PrefViewerStyleVariables.fontFamily};
300
591
  grid-row: 1;
301
592
  grid-column: 1;
302
593
  overflow: hidden;
@@ -358,7 +649,8 @@ export const PrefViewerDialogStyles = `
358
649
 
359
650
  pref-viewer-dialog .dialog-footer button {
360
651
  width: 100%;
361
- font-size: 1em;
652
+ font-size: 0.95rem;
653
+ font-weight: 600;
362
654
  padding: var(--button-padding-vertical) var(--button-padding-horizontal);
363
655
  border-radius: var(--button-border-radius);
364
656
  border: none;