@preference-sl/pref-viewer 2.11.0-beta.11 → 2.11.0-beta.12
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/package.json +2 -5
- package/src/babylonjs-animation-controller.js +3 -2
- package/src/babylonjs-animation-opening-menu.js +4 -3
- package/src/babylonjs-animation-opening.js +2 -2
- package/src/index.js +8 -7
- package/src/pref-viewer-2d.js +4 -3
- package/src/pref-viewer-3d.js +6 -3
- package/src/pref-viewer-dialog.js +4 -4
- package/src/pref-viewer-task.js +1 -1
- package/src/styles.js +196 -0
- package/src/css/pref-viewer-2d.css +0 -39
- package/src/css/pref-viewer-3d.css +0 -28
- package/src/css/pref-viewer-dialog.css +0 -105
- package/src/css/pref-viewer.css +0 -11
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@preference-sl/pref-viewer",
|
|
3
|
-
"version": "2.11.0-beta.
|
|
3
|
+
"version": "2.11.0-beta.12",
|
|
4
4
|
"description": "Web Component to preview GLTF models with Babylon.js",
|
|
5
5
|
"author": "Alex Moreno Palacio <amoreno@preference.es>",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"copy-css": "cpx \"src/css/**/*\" dist/css/",
|
|
8
7
|
"release": "standard-version --releaseCommitMessageFormat \"chore(release): {{currentTag}} [skip ci]\"",
|
|
9
8
|
"release:beta": "standard-version --prerelease beta --releaseCommitMessageFormat \"chore(release): {{currentTag}} [skip ci]\"",
|
|
10
|
-
"build": "
|
|
9
|
+
"build": "esbuild src/index.js --bundle --platform=node --format=esm --outfile=dist/bundle.js --sourcemap",
|
|
11
10
|
"start": "npm run build && http-server -c-1 . -p 8080",
|
|
12
11
|
"test": "vitest"
|
|
13
12
|
},
|
|
@@ -31,7 +30,6 @@
|
|
|
31
30
|
"sideEffects": false,
|
|
32
31
|
"files": [
|
|
33
32
|
"src",
|
|
34
|
-
"src/css",
|
|
35
33
|
"index.d.ts"
|
|
36
34
|
],
|
|
37
35
|
"dependencies": {
|
|
@@ -46,7 +44,6 @@
|
|
|
46
44
|
"jszip": "^3.10.1"
|
|
47
45
|
},
|
|
48
46
|
"devDependencies": {
|
|
49
|
-
"cpx": "^1.5.0",
|
|
50
47
|
"esbuild": "^0.25.10",
|
|
51
48
|
"http-server": "^14.1.1",
|
|
52
49
|
"jsdom": "^26.1.0",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Color3, HighlightLayer, Mesh, PickingInfo, PointerEventTypes, Scene } from "@babylonjs/core";
|
|
2
2
|
import { AdvancedDynamicTexture } from "@babylonjs/gui";
|
|
3
|
-
import {
|
|
3
|
+
import { PrefViewerColors } from "./styles.js";
|
|
4
|
+
import OpeningAnimation from "./babylonjs-animation-opening.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* BabylonJSAnimationController - Manages animation playback and interactive highlighting for model containers in Babylon.js scenes.
|
|
@@ -21,7 +22,7 @@ export default class BabylonJSAnimationController {
|
|
|
21
22
|
#scene = null;
|
|
22
23
|
#animatedNodes = [];
|
|
23
24
|
#highlightLayer = null;
|
|
24
|
-
#highlightColor =
|
|
25
|
+
#highlightColor = Color3.FromHexString(PrefViewerColors.primary);
|
|
25
26
|
#advancedDynamicTexture = null;
|
|
26
27
|
#openingAnimations = [];
|
|
27
28
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AdvancedDynamicTexture, Button, Control, Image, Slider, StackPanel } from "@babylonjs/gui";
|
|
2
|
-
import
|
|
2
|
+
import OpeningAnimation from "./babylonjs-animation-opening.js";
|
|
3
|
+
import { PrefViewerColors } from "./styles.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* OpeningAnimationMenu - Manages and renders the animation control menu for opening/closing animations in a Babylon.js scene.
|
|
@@ -42,7 +43,7 @@ import { OpeningAnimation } from "./babylonjs-animation-opening.js";
|
|
|
42
43
|
* menu.animationProgress = 0.5;
|
|
43
44
|
* menu.animationLoop = true;
|
|
44
45
|
*/
|
|
45
|
-
export class OpeningAnimationMenu {
|
|
46
|
+
export default class OpeningAnimationMenu {
|
|
46
47
|
#animationState = OpeningAnimation.states.closed;
|
|
47
48
|
#animationProgress = 0;
|
|
48
49
|
#animationLoop = false;
|
|
@@ -57,7 +58,7 @@ export class OpeningAnimationMenu {
|
|
|
57
58
|
// Style properties
|
|
58
59
|
#buttonSize = 28;
|
|
59
60
|
#buttonLoopPaddingLeft = 3;
|
|
60
|
-
#colorActive =
|
|
61
|
+
#colorActive = PrefViewerColors.primary;
|
|
61
62
|
#colorEnabled = "#333333";
|
|
62
63
|
#colorDisabled = "#777777";
|
|
63
64
|
#colorIcon = "#FFFFFF";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AdvancedDynamicTexture } from "@babylonjs/gui";
|
|
2
|
-
import
|
|
2
|
+
import OpeningAnimationMenu from "./babylonjs-animation-opening-menu.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OpeningAnimation - Manages open/close animations for a model part (e.g., a door) in a Babylon.js scene.
|
|
@@ -48,7 +48,7 @@ import { OpeningAnimationMenu } from "./babylonjs-animation-opening-menu.js";
|
|
|
48
48
|
* anim.showControls(adt);
|
|
49
49
|
* anim.hideControls();
|
|
50
50
|
*/
|
|
51
|
-
export class OpeningAnimation {
|
|
51
|
+
export default class OpeningAnimation {
|
|
52
52
|
static states = {
|
|
53
53
|
paused: 0,
|
|
54
54
|
closed: 1,
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import PrefViewer2D from "./pref-viewer-2d.js";
|
|
2
|
+
import PrefViewer3D from "./pref-viewer-3d.js";
|
|
3
|
+
import PrefViewerDialog from "./pref-viewer-dialog.js";
|
|
4
|
+
import PrefViewerTask from "./pref-viewer-task.js";
|
|
5
|
+
import { PrefViewerStyles } from "./styles.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* PrefViewer - Custom Web Component for advanced 2D and 3D product visualization and configuration.
|
|
@@ -133,7 +134,7 @@ class PrefViewer extends HTMLElement {
|
|
|
133
134
|
if (_old === value || value.toLowerCase() === this.#mode) {
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
136
|
-
this.setMode(value
|
|
137
|
+
this.setMode(value);
|
|
137
138
|
break;
|
|
138
139
|
case "model":
|
|
139
140
|
this.loadModel(value);
|
|
@@ -173,8 +174,7 @@ class PrefViewer extends HTMLElement {
|
|
|
173
174
|
this.shadowRoot.append(this.#wrapper);
|
|
174
175
|
|
|
175
176
|
const style = document.createElement("style");
|
|
176
|
-
|
|
177
|
-
style.textContent = `@import "${cssUrl}";`;
|
|
177
|
+
style.textContent = PrefViewerStyles;
|
|
178
178
|
this.shadowRoot.append(style);
|
|
179
179
|
|
|
180
180
|
this.#createComponent3D();
|
|
@@ -503,6 +503,7 @@ class PrefViewer extends HTMLElement {
|
|
|
503
503
|
* @returns {void}
|
|
504
504
|
*/
|
|
505
505
|
setMode(mode = this.#mode) {
|
|
506
|
+
mode = mode.toLowerCase();
|
|
506
507
|
if (mode !== "2d" && mode !== "3d") {
|
|
507
508
|
console.warn(`PrefViewer: invalid mode "${mode}". Allowed modes are "2d" and "3d".`);
|
|
508
509
|
mode = this.#mode;
|
package/src/pref-viewer-2d.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import SVGResolver from "./svg-resolver.js";
|
|
2
2
|
import PanzoomController from "./panzoom-controller.js";
|
|
3
|
+
import { PrefViewer2DStyles } from "./styles.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* PrefViewer2D - Custom element for rendering and interacting with 2D SVG content.
|
|
@@ -46,7 +47,7 @@ import PanzoomController from "./panzoom-controller.js";
|
|
|
46
47
|
* Notes on extensibility
|
|
47
48
|
* - Modeled for easy addition of other input sources or interaction modes (e.g., selection callbacks).
|
|
48
49
|
*/
|
|
49
|
-
export class PrefViewer2D extends HTMLElement {
|
|
50
|
+
export default class PrefViewer2D extends HTMLElement {
|
|
50
51
|
// State flags
|
|
51
52
|
#isInitialized = false;
|
|
52
53
|
#isLoaded = false;
|
|
@@ -143,9 +144,9 @@ export class PrefViewer2D extends HTMLElement {
|
|
|
143
144
|
#createDOMElements() {
|
|
144
145
|
this.#wrapper = document.createElement("div");
|
|
145
146
|
this.append(this.#wrapper);
|
|
147
|
+
|
|
146
148
|
const style = document.createElement("style");
|
|
147
|
-
|
|
148
|
-
style.textContent = `@import "${cssUrl}";`;
|
|
149
|
+
style.textContent = PrefViewer2DStyles;
|
|
149
150
|
this.append(style);
|
|
150
151
|
}
|
|
151
152
|
|
package/src/pref-viewer-3d.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CameraData, ContainerData, MaterialData } from "./pref-viewer-3d-data.js";
|
|
2
2
|
import BabylonJSController from "./babylonjs-controller.js";
|
|
3
|
+
import { PrefViewer3DStyles } from "./styles.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* PrefViewer3D - Custom Web Component for interactive 3D visualization and configuration.
|
|
@@ -56,7 +57,7 @@ import BabylonJSController from "./babylonjs-controller.js";
|
|
|
56
57
|
* - Designed for extensibility and integration in product configurators and visualization tools.
|
|
57
58
|
* - All resource management and rendering operations are performed asynchronously for performance.
|
|
58
59
|
*/
|
|
59
|
-
export class PrefViewer3D extends HTMLElement {
|
|
60
|
+
export default class PrefViewer3D extends HTMLElement {
|
|
60
61
|
// State flags
|
|
61
62
|
#isInitialized = false;
|
|
62
63
|
#isLoaded = false;
|
|
@@ -157,11 +158,12 @@ export class PrefViewer3D extends HTMLElement {
|
|
|
157
158
|
#createDOMElements() {
|
|
158
159
|
this.#wrapper = document.createElement("div");
|
|
159
160
|
this.append(this.#wrapper);
|
|
161
|
+
|
|
160
162
|
this.#canvas = document.createElement("canvas");
|
|
161
163
|
this.#wrapper.appendChild(this.#canvas);
|
|
164
|
+
|
|
162
165
|
const style = document.createElement("style");
|
|
163
|
-
|
|
164
|
-
style.textContent = `@import "${cssUrl}";`;
|
|
166
|
+
style.textContent = PrefViewer3DStyles;
|
|
165
167
|
this.append(style);
|
|
166
168
|
}
|
|
167
169
|
|
|
@@ -461,6 +463,7 @@ export class PrefViewer3D extends HTMLElement {
|
|
|
461
463
|
show() {
|
|
462
464
|
this.#isVisible = true;
|
|
463
465
|
this.setAttribute("visible", "true");
|
|
466
|
+
this.#canvas.focus();
|
|
464
467
|
}
|
|
465
468
|
|
|
466
469
|
/**
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { PrefViewerDialogStyles } from "./styles.js";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* PrefViewerDialog - Custom Web Component for displaying modal dialogs in PrefViewer.
|
|
3
5
|
*
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
* - close(): Hides and removes the dialog, refocuses the canvas if available.
|
|
21
23
|
* - #createDOMElements(): Creates the dialog structure and applies styles.
|
|
22
24
|
*/
|
|
23
|
-
export class PrefViewerDialog extends HTMLElement {
|
|
25
|
+
export default class PrefViewerDialog extends HTMLElement {
|
|
24
26
|
#wrapper = null;
|
|
25
27
|
#header = null;
|
|
26
28
|
#content = null;
|
|
@@ -68,8 +70,7 @@ export class PrefViewerDialog extends HTMLElement {
|
|
|
68
70
|
this.append(this.#wrapper);
|
|
69
71
|
|
|
70
72
|
const style = document.createElement("style");
|
|
71
|
-
|
|
72
|
-
style.textContent = `@import "${cssUrl}";`;
|
|
73
|
+
style.textContent = PrefViewerDialogStyles;
|
|
73
74
|
this.append(style);
|
|
74
75
|
|
|
75
76
|
this.addEventListener("click", this.#closeOnBackdropClick.bind(this));
|
|
@@ -132,7 +133,6 @@ export class PrefViewerDialog extends HTMLElement {
|
|
|
132
133
|
component2D.focus();
|
|
133
134
|
}
|
|
134
135
|
}
|
|
135
|
-
|
|
136
136
|
}
|
|
137
137
|
this.#wrapper = this.#header = this.#content = this.#footer = null;
|
|
138
138
|
this.remove();
|
package/src/pref-viewer-task.js
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* - Validates the type (case-insensitive) and throws a TypeError if invalid.
|
|
19
19
|
* - Freezes the instance to prevent further modification.
|
|
20
20
|
*/
|
|
21
|
-
export class PrefViewerTask {
|
|
21
|
+
export default class PrefViewerTask {
|
|
22
22
|
static Types = Object.freeze({
|
|
23
23
|
Config: "config",
|
|
24
24
|
Drawing: "drawing",
|
package/src/styles.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
export const PrefViewerColors = {
|
|
2
|
+
primary: "#ff6700", // Always specify in hexadecimal
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export const PrefViewerStyles = `
|
|
6
|
+
:host .pref-viewer-wrapper {
|
|
7
|
+
display: grid !important;
|
|
8
|
+
position: relative;
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 100%;
|
|
11
|
+
grid-template-columns: 1fr;
|
|
12
|
+
grid-template-rows: 1fr;
|
|
13
|
+
grid-gap: 0;
|
|
14
|
+
min-width: 0;
|
|
15
|
+
min-height: 0;
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
export const PrefViewer2DStyles = `
|
|
20
|
+
pref-viewer-2d {
|
|
21
|
+
--pref-viewer-2d-bg-color: #ffffff;
|
|
22
|
+
--pref-viewer-2d-svg-padding: 10px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
pref-viewer-2d[visible="true"] {
|
|
26
|
+
display: block;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
pref-viewer-2d[visible="false"] {
|
|
30
|
+
display: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
pref-viewer-2d {
|
|
34
|
+
grid-column: 1;
|
|
35
|
+
grid-row: 1;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
min-width: 0;
|
|
38
|
+
min-height: 0;
|
|
39
|
+
align-self: stretch;
|
|
40
|
+
justify-self: stretch;
|
|
41
|
+
background: var(--pref-viewer-2d-bg-color);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
pref-viewer-2d,
|
|
45
|
+
pref-viewer-2d>div,
|
|
46
|
+
pref-viewer-2d>div>svg {
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: 100%;
|
|
49
|
+
display: block;
|
|
50
|
+
position: relative;
|
|
51
|
+
outline: none;
|
|
52
|
+
box-sizing: border-box;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
pref-viewer-2d>div>svg {
|
|
56
|
+
padding: var(--pref-viewer-2d-svg-padding);
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
export const PrefViewer3DStyles = `
|
|
61
|
+
pref-viewer-3d[visible="true"] {
|
|
62
|
+
display: block;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
pref-viewer-3d[visible="false"] {
|
|
66
|
+
display: none;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
pref-viewer-3d {
|
|
70
|
+
grid-column: 1;
|
|
71
|
+
grid-row: 1;
|
|
72
|
+
overflow: hidden;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
min-height: 0;
|
|
75
|
+
align-self: stretch;
|
|
76
|
+
justify-self: stretch;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
pref-viewer-3d,
|
|
80
|
+
pref-viewer-3d>div,
|
|
81
|
+
pref-viewer-3d>div>canvas {
|
|
82
|
+
width: 100%;
|
|
83
|
+
height: 100%;
|
|
84
|
+
display: block;
|
|
85
|
+
position: relative;
|
|
86
|
+
outline: none;
|
|
87
|
+
box-sizing: border-box;
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
export const PrefViewerDialogStyles = `
|
|
92
|
+
pref-viewer-dialog {
|
|
93
|
+
--color-primary: ${PrefViewerColors.primary};
|
|
94
|
+
--dialog-general-space: 16px;
|
|
95
|
+
--dialog-bg-color: #ffffff;
|
|
96
|
+
--dialog-backdrop-color: rgba(0, 0, 0, 0.25);
|
|
97
|
+
--dialog-border-color: #e7e7e7;
|
|
98
|
+
--dialog-border-radius: 8px;
|
|
99
|
+
--dialog-box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
|
|
100
|
+
--button-default-bg-color: #bbbbbb;
|
|
101
|
+
--button-default-bg-color-hover: #a1a1a1;
|
|
102
|
+
--button-primary-bg-color: color-mix(in oklab, var(--color-primary), white 25%);
|
|
103
|
+
--button-primary-bg-color-hover: var(--color-primary);
|
|
104
|
+
--button-border-radius: 4px;
|
|
105
|
+
--button-padding-horizontal: 16px;
|
|
106
|
+
--button-padding-vertical: 8px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
pref-viewer-dialog:not {
|
|
110
|
+
display: none;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
pref-viewer-dialog[open] {
|
|
114
|
+
font-family: 'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
|
|
115
|
+
grid-row: 1;
|
|
116
|
+
grid-column: 1;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
min-width: 0;
|
|
119
|
+
min-height: 0;
|
|
120
|
+
align-self: stretch;
|
|
121
|
+
justify-self: stretch;
|
|
122
|
+
display: flex;
|
|
123
|
+
align-items: center;
|
|
124
|
+
justify-content: center;
|
|
125
|
+
background-color: var(--dialog-backdrop-color);
|
|
126
|
+
position: relative;
|
|
127
|
+
z-index: 1000;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
pref-viewer-dialog>.dialog-wrapper {
|
|
131
|
+
display: flex;
|
|
132
|
+
flex-direction: column;
|
|
133
|
+
align-items: stretch;
|
|
134
|
+
background: var(--dialog-bg-color);
|
|
135
|
+
border: 1px solid var(--dialog-border-color);
|
|
136
|
+
border-radius: var(--dialog-border-radius);
|
|
137
|
+
box-shadow: var(--dialog-box-shadow);
|
|
138
|
+
padding: 0;
|
|
139
|
+
min-width: 320px;
|
|
140
|
+
max-width: 90%;
|
|
141
|
+
max-height: 90%;
|
|
142
|
+
overflow: auto;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
pref-viewer-dialog .dialog-header {
|
|
146
|
+
padding: var(--dialog-general-space);
|
|
147
|
+
border-bottom: 1px solid var(--dialog-border-color);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
pref-viewer-dialog .dialog-header h3 {
|
|
151
|
+
margin: 0;
|
|
152
|
+
font-weight: 500;
|
|
153
|
+
font-size: 1.1em;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
pref-viewer-dialog .dialog-content {
|
|
157
|
+
padding: var(--dialog-general-space);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
pref-viewer-dialog .dialog-content h4 {
|
|
161
|
+
margin: 0;
|
|
162
|
+
font-weight: 500;
|
|
163
|
+
font-size: 1.05em;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
pref-viewer-dialog .dialog-footer {
|
|
167
|
+
border-top: 1px solid var(--dialog-border-color);
|
|
168
|
+
padding: var(--dialog-general-space);
|
|
169
|
+
display: flex;
|
|
170
|
+
gap: var(--dialog-general-space);
|
|
171
|
+
justify-content: stretch;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
pref-viewer-dialog .dialog-footer button {
|
|
175
|
+
width: 100%;
|
|
176
|
+
font-size: 1em;
|
|
177
|
+
padding: var(--button-padding-vertical) var(--button-padding-horizontal);
|
|
178
|
+
border-radius: var(--button-border-radius);
|
|
179
|
+
border: none;
|
|
180
|
+
background: var(--button-default-bg-color);
|
|
181
|
+
cursor: pointer;
|
|
182
|
+
transition: background 0.2s;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
pref-viewer-dialog .dialog-footer button.primary {
|
|
186
|
+
background: var(--button-primary-bg-color);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
pref-viewer-dialog .dialog-footer button:hover {
|
|
190
|
+
background: var(--button-default-bg-color-hover);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
pref-viewer-dialog .dialog-footer button.primary:hover {
|
|
194
|
+
background: var(--button-primary-bg-color-hover);
|
|
195
|
+
}
|
|
196
|
+
`;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/* Variables */
|
|
2
|
-
pref-viewer-2d {
|
|
3
|
-
--pref-viewer-2d-bg-color: #ffffff;
|
|
4
|
-
--pref-viewer-2d-svg-padding: 10px;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
pref-viewer-2d[visible="true"] {
|
|
8
|
-
display: block;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
pref-viewer-2d[visible="false"] {
|
|
12
|
-
display: none;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
pref-viewer-2d {
|
|
16
|
-
grid-column: 1;
|
|
17
|
-
grid-row: 1;
|
|
18
|
-
overflow: hidden;
|
|
19
|
-
min-width: 0;
|
|
20
|
-
min-height: 0;
|
|
21
|
-
align-self: stretch;
|
|
22
|
-
justify-self: stretch;
|
|
23
|
-
background: var(--pref-viewer-2d-bg-color);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
pref-viewer-2d,
|
|
27
|
-
pref-viewer-2d>div,
|
|
28
|
-
pref-viewer-2d>div>svg {
|
|
29
|
-
width: 100%;
|
|
30
|
-
height: 100%;
|
|
31
|
-
display: block;
|
|
32
|
-
position: relative;
|
|
33
|
-
outline: none;
|
|
34
|
-
box-sizing: border-box;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
pref-viewer-2d>div>svg {
|
|
38
|
-
padding: var(--pref-viewer-2d-svg-padding);
|
|
39
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
pref-viewer-3d[visible="true"] {
|
|
2
|
-
display: block;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
pref-viewer-3d[visible="false"] {
|
|
6
|
-
display: none;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
pref-viewer-3d {
|
|
10
|
-
grid-column: 1;
|
|
11
|
-
grid-row: 1;
|
|
12
|
-
overflow: hidden;
|
|
13
|
-
min-width: 0;
|
|
14
|
-
min-height: 0;
|
|
15
|
-
align-self: stretch;
|
|
16
|
-
justify-self: stretch;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
pref-viewer-3d,
|
|
20
|
-
pref-viewer-3d>div,
|
|
21
|
-
pref-viewer-3d>div>canvas {
|
|
22
|
-
width: 100%;
|
|
23
|
-
height: 100%;
|
|
24
|
-
display: block;
|
|
25
|
-
position: relative;
|
|
26
|
-
outline: none;
|
|
27
|
-
box-sizing: border-box;
|
|
28
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/* Variables */
|
|
2
|
-
pref-viewer-dialog {
|
|
3
|
-
--brand-color: #ff6700;
|
|
4
|
-
--dialog-general-space: 16px;
|
|
5
|
-
--dialog-bg-color: #ffffff;
|
|
6
|
-
--dialog-backdrop-color: rgba(0, 0, 0, 0.25);
|
|
7
|
-
--dialog-border-color: #e7e7e7;
|
|
8
|
-
--dialog-border-radius: 8px;
|
|
9
|
-
--dialog-box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
|
|
10
|
-
--button-default-bg-color: #bbbbbb;
|
|
11
|
-
--button-default-bg-color-hover: #a1a1a1;
|
|
12
|
-
--button-primary-bg-color: color-mix(in oklab, var(--brand-color), white 25%);
|
|
13
|
-
--button-primary-bg-color-hover: var(--brand-color);
|
|
14
|
-
--button-border-radius: 4px;
|
|
15
|
-
--button-padding-horizontal: 16px;
|
|
16
|
-
--button-padding-vertical: 8px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
pref-viewer-dialog:not {
|
|
20
|
-
display: none;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
pref-viewer-dialog[open] {
|
|
24
|
-
font-family: 'Roboto', ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
|
|
25
|
-
grid-row: 1;
|
|
26
|
-
grid-column: 1;
|
|
27
|
-
overflow: hidden;
|
|
28
|
-
min-width: 0;
|
|
29
|
-
min-height: 0;
|
|
30
|
-
align-self: stretch;
|
|
31
|
-
justify-self: stretch;
|
|
32
|
-
display: flex;
|
|
33
|
-
align-items: center;
|
|
34
|
-
justify-content: center;
|
|
35
|
-
background-color: var(--dialog-backdrop-color);
|
|
36
|
-
position: relative;
|
|
37
|
-
z-index: 1000;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
pref-viewer-dialog>.dialog-wrapper {
|
|
41
|
-
display: flex;
|
|
42
|
-
flex-direction: column;
|
|
43
|
-
align-items: stretch;
|
|
44
|
-
background: var(--dialog-bg-color);
|
|
45
|
-
border: 1px solid var(--dialog-border-color);
|
|
46
|
-
border-radius: var(--dialog-border-radius);
|
|
47
|
-
box-shadow: var(--dialog-box-shadow);
|
|
48
|
-
padding: 0;
|
|
49
|
-
min-width: 320px;
|
|
50
|
-
max-width: 90%;
|
|
51
|
-
max-height: 90%;
|
|
52
|
-
overflow: auto;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
pref-viewer-dialog .dialog-header {
|
|
56
|
-
padding: var(--dialog-general-space);
|
|
57
|
-
border-bottom: 1px solid var(--dialog-border-color);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
pref-viewer-dialog .dialog-header h3 {
|
|
61
|
-
margin: 0;
|
|
62
|
-
font-weight: 500;
|
|
63
|
-
font-size: 1.1em;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
pref-viewer-dialog .dialog-content {
|
|
67
|
-
padding: var(--dialog-general-space);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
pref-viewer-dialog .dialog-content h4 {
|
|
71
|
-
margin: 0;
|
|
72
|
-
font-weight: 500;
|
|
73
|
-
font-size: 1.05em;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
pref-viewer-dialog .dialog-footer {
|
|
77
|
-
border-top: 1px solid var(--dialog-border-color);
|
|
78
|
-
padding: var(--dialog-general-space);
|
|
79
|
-
display: flex;
|
|
80
|
-
gap: var(--dialog-general-space);
|
|
81
|
-
justify-content: stretch;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
pref-viewer-dialog .dialog-footer button {
|
|
85
|
-
width: 100%;
|
|
86
|
-
font-size: 1em;
|
|
87
|
-
padding: var(--button-padding-vertical) var(--button-padding-horizontal);
|
|
88
|
-
border-radius: var(--button-border-radius);
|
|
89
|
-
border: none;
|
|
90
|
-
background: var(--button-default-bg-color);
|
|
91
|
-
cursor: pointer;
|
|
92
|
-
transition: background 0.2s;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
pref-viewer-dialog .dialog-footer button.primary {
|
|
96
|
-
background: var(--button-primary-bg-color);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
pref-viewer-dialog .dialog-footer button:hover {
|
|
100
|
-
background: var(--button-default-bg-color-hover);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
pref-viewer-dialog .dialog-footer button.primary:hover {
|
|
104
|
-
background: var(--button-primary-bg-color-hover);
|
|
105
|
-
}
|
package/src/css/pref-viewer.css
DELETED