x4js 2.0.35 → 2.1.0-manual
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 +21 -21
- package/package.json +39 -26
- package/src/components/base.scss +25 -89
- package/src/components/boxes/boxes.module.scss +54 -54
- package/src/components/boxes/boxes.ts +513 -513
- package/src/components/breadcrumb/breadcrumb.scss +56 -56
- package/src/components/breadcrumb/breadcrumb.ts +93 -93
- package/src/components/btngroup/btngroup.module.scss +40 -40
- package/src/components/btngroup/btngroup.ts +152 -152
- package/src/components/button/button.module.scss +172 -172
- package/src/components/button/button.ts +232 -232
- package/src/components/calendar/calendar.module.scss +162 -162
- package/src/components/calendar/calendar.ts +326 -326
- package/src/components/canvas/canvas.module.scss +24 -24
- package/src/components/canvas/canvas.ts +195 -195
- package/src/components/canvas/canvas_ex.ts +275 -275
- package/src/components/checkbox/check.svg +3 -3
- package/src/components/checkbox/checkbox.module.scss +141 -141
- package/src/components/checkbox/checkbox.ts +139 -139
- package/src/components/colorinput/colorinput.module.scss +64 -64
- package/src/components/colorinput/colorinput.ts +90 -90
- package/src/components/colorpicker/colorpicker.module.scss +132 -132
- package/src/components/colorpicker/colorpicker.ts +481 -481
- package/src/components/combobox/combobox.module.scss +145 -145
- package/src/components/combobox/combobox.ts +282 -282
- package/src/components/combobox/updown.svg +3 -3
- package/src/components/components.ts +45 -44
- package/src/components/dialog/dialog.module.scss +103 -105
- package/src/components/dialog/dialog.ts +233 -233
- package/src/components/filedrop/filedrop.module.scss +69 -69
- package/src/components/filedrop/filedrop.ts +130 -130
- package/src/components/form/form.module.scss +38 -38
- package/src/components/form/form.ts +172 -172
- package/src/components/gridview/gridview.module.scss +323 -337
- package/src/components/gridview/gridview.ts +1276 -1316
- package/src/components/header/header.module.scss +40 -40
- package/src/components/header/header.ts +141 -141
- package/src/components/icon/icon.module.scss +32 -32
- package/src/components/icon/icon.ts +165 -165
- package/src/components/image/image.module.scss +27 -27
- package/src/components/image/image.ts +168 -168
- package/src/components/input/input.module.scss +74 -74
- package/src/components/input/input.ts +537 -537
- package/src/components/keyboard/keyboard.module.scss +136 -136
- package/src/components/keyboard/keyboard.ts +549 -549
- package/src/components/label/label.module.scss +90 -91
- package/src/components/label/label.ts +101 -101
- package/src/components/link/link.module.scss +44 -44
- package/src/components/link/link.ts +87 -87
- package/src/components/listbox/listbox.module.scss +179 -179
- package/src/components/listbox/listbox.ts +596 -596
- package/src/components/menu/menu.module.scss +128 -128
- package/src/components/menu/menu.ts +174 -174
- package/src/components/messages/messages.module.scss +92 -146
- package/src/components/messages/messages.ts +237 -303
- package/src/components/normalize.scss +391 -391
- package/src/components/notification/notification.module.scss +83 -83
- package/src/components/notification/notification.ts +107 -107
- package/src/components/panel/panel.module.scss +66 -71
- package/src/components/panel/panel.ts +57 -57
- package/src/components/popup/popup.module.scss +51 -51
- package/src/components/popup/popup.ts +457 -457
- package/src/components/progress/progress.module.scss +56 -56
- package/src/components/progress/progress.ts +43 -43
- package/src/components/propgrid/progrid.module.scss +111 -111
- package/src/components/propgrid/propgrid.ts +300 -300
- package/src/components/propgrid/updown.svg +3 -3
- package/src/components/radio/radio.module.scss +163 -163
- package/src/components/radio/radio.svg +3 -3
- package/src/components/radio/radio.ts +141 -141
- package/src/components/rating/rating.module.scss +22 -22
- package/src/components/rating/rating.ts +131 -131
- package/src/components/select/select.module.scss +8 -8
- package/src/components/select/select.ts +134 -134
- package/src/components/shared.scss +141 -71
- package/src/components/sizers/sizer.module.scss +90 -112
- package/src/components/sizers/sizer.ts +131 -155
- package/src/components/slider/slider.module.scss +117 -117
- package/src/components/slider/slider.ts +197 -197
- package/src/components/spreadsheet/spreadsheet.module.scss +307 -307
- package/src/components/spreadsheet/spreadsheet.ts +1223 -1223
- package/src/components/switch/switch.module.scss +126 -126
- package/src/components/switch/switch.ts +61 -61
- package/src/components/tabs/tabs.module.scss +46 -67
- package/src/components/tabs/tabs.ts +229 -234
- package/src/components/textarea/textarea.module.scss +63 -63
- package/src/components/textarea/textarea.ts +131 -131
- package/src/components/textedit/textedit.module.scss +115 -115
- package/src/components/textedit/textedit.ts +122 -122
- package/src/components/themes.scss +90 -90
- package/src/components/tickline/tickline.module.scss +25 -25
- package/src/components/tickline/tickline.ts +81 -81
- package/src/components/tooltips/tooltips.scss +71 -71
- package/src/components/tooltips/tooltips.ts +120 -120
- package/src/components/treeview/treeview.module.scss +192 -192
- package/src/components/treeview/treeview.ts +484 -484
- package/src/components/viewport/viewport.module.scss +31 -31
- package/src/components/viewport/viewport.ts +41 -41
- package/src/core/component.ts +1299 -1299
- package/src/core/core_application.ts +361 -361
- package/src/core/core_colors.ts +512 -512
- package/src/core/core_data.ts +1297 -1310
- package/src/core/core_dom.ts +481 -481
- package/src/core/core_dragdrop.ts +225 -225
- package/src/core/core_element.ts +221 -221
- package/src/core/core_events.ts +214 -214
- package/src/core/core_i18n.ts +395 -395
- package/src/core/core_pdf.ts +454 -454
- package/src/core/core_react.ts +78 -78
- package/src/core/core_router.ts +296 -296
- package/src/core/core_state.ts +62 -62
- package/src/core/core_styles.ts +213 -213
- package/src/core/core_svg.ts +1042 -1042
- package/src/core/core_tools.ts +996 -996
- package/src/types/scss.d.ts +4 -4
- package/src/types/x4react.d.ts +8 -8
- package/src/x4.scss +19 -19
- package/src/x4.ts +36 -36
- package/src/x4tsx.d.ts +26 -26
- package/.vscode/launch.json +0 -14
- package/.vscode/settings.json +0 -2
- package/demo/assets/house-light.svg +0 -1
- package/demo/assets/radio.svg +0 -4
- package/demo/index.html +0 -12
- package/demo/main.scss +0 -23
- package/demo/main.ts +0 -324
- package/demo/package.json +0 -26
- package/demo/scss.d.ts +0 -4
- package/demo/svg.d.ts +0 -1
- package/demo/tsconfig.json +0 -14
- package/src/components/gridview/folder-open.svg +0 -1
- package/src/components/messages/spinner.svg +0 -1
- package/src/x4.d.ts +0 -10
- package/tsconfig.json +0 -11
|
@@ -1,165 +1,165 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file icon.ts
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import { class_ns } from '../../core/core_tools.ts';
|
|
18
|
-
import { Component, ComponentProps } from '../../core/component.ts';
|
|
19
|
-
|
|
20
|
-
import "./icon.module.scss"
|
|
21
|
-
|
|
22
|
-
type solveCallback = (data:string)=>void;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
class SvgLoader {
|
|
29
|
-
private cache: Map<string,string>;
|
|
30
|
-
private waiters: Map<string,solveCallback[]>;
|
|
31
|
-
|
|
32
|
-
constructor( ) {
|
|
33
|
-
this.cache = new Map( );
|
|
34
|
-
this.waiters = new Map( );
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async load( file: string ): Promise<string> {
|
|
38
|
-
|
|
39
|
-
if( this.cache.has(file) ) {
|
|
40
|
-
return Promise.resolve( this.cache.get(file) );
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return new Promise( (resolve,reject) => {
|
|
44
|
-
if( this.waiters.has(file) ) {
|
|
45
|
-
this.waiters.get(file).push( resolve );
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
this.waiters.set( file, [resolve] );
|
|
49
|
-
this._load( file )
|
|
50
|
-
.then( ( data: string ) => {
|
|
51
|
-
this.cache.set( file, data );
|
|
52
|
-
const ww = this.waiters.get( file );
|
|
53
|
-
ww.forEach( cb => cb(data ) );
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
private async _load( file: string ): Promise<string> {
|
|
60
|
-
const res = await fetch( file );
|
|
61
|
-
if( res.ok ) {
|
|
62
|
-
return res.text( );
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const svgLoader = new SvgLoader( );
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Icon component properties.
|
|
72
|
-
*
|
|
73
|
-
* @property {string} [iconId] - Identifier or path of the icon to display.
|
|
74
|
-
*/
|
|
75
|
-
|
|
76
|
-
export interface IconProps extends ComponentProps {
|
|
77
|
-
/**
|
|
78
|
-
* Identifier for the icon.
|
|
79
|
-
* Can be a URL, a CSS variable (prefixed with `var:`), or inline SVG data.
|
|
80
|
-
* @example
|
|
81
|
-
* // Using a CSS variable
|
|
82
|
-
* { iconId: "var:home" }
|
|
83
|
-
* @example
|
|
84
|
-
* // Using an imported SVG
|
|
85
|
-
* import myicon from "./myicon.svg";
|
|
86
|
-
* { iconId: myicon }
|
|
87
|
-
*/
|
|
88
|
-
iconId?: string;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* A component for rendering icons.
|
|
93
|
-
* Supports inline SVG, external SVG files, and CSS variables for icon paths.
|
|
94
|
-
* The CSS class for this component is automatically generated as `x4icon`.
|
|
95
|
-
*/
|
|
96
|
-
|
|
97
|
-
@class_ns( "x4" )
|
|
98
|
-
export class Icon extends Component<IconProps> {
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Create a new Icon.
|
|
102
|
-
*
|
|
103
|
-
* @param {IconProps} props - Optional initial icon identifier.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* const icon = new Icon({ iconId: "check" });
|
|
107
|
-
*/
|
|
108
|
-
|
|
109
|
-
constructor( props: IconProps ) {
|
|
110
|
-
super( props );
|
|
111
|
-
|
|
112
|
-
this.setIcon( props.iconId );
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Sets or updates the icon content.
|
|
117
|
-
* @param iconId - Identifier for the icon.
|
|
118
|
-
* If it starts with `var:`, the value is treated as a CSS variable name.
|
|
119
|
-
* If it is a data URL (e.g., `data:image/svg+xml,<svg...`), the SVG is rendered directly.
|
|
120
|
-
* If it ends with `.svg`, the file is loaded asynchronously.
|
|
121
|
-
* Otherwise, it is treated as an image URL.
|
|
122
|
-
* @example
|
|
123
|
-
* // Using a CSS variable
|
|
124
|
-
* setIcon("var:home");
|
|
125
|
-
* @example
|
|
126
|
-
* // Using an imported SVG
|
|
127
|
-
* import myicon from "./myicon.svg";
|
|
128
|
-
* setIcon(myicon);
|
|
129
|
-
*/
|
|
130
|
-
|
|
131
|
-
setIcon( iconId: string ) {
|
|
132
|
-
this.clearContent( );
|
|
133
|
-
|
|
134
|
-
if( iconId ) {
|
|
135
|
-
if( iconId.startsWith('var:') ) {
|
|
136
|
-
do {
|
|
137
|
-
const path = iconId.substring( 4 );
|
|
138
|
-
iconId = document.documentElement.style.getPropertyValue( path );
|
|
139
|
-
} while( iconId.startsWith('var:') );
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if( iconId.startsWith("data:image/svg+xml,<svg") ) {
|
|
143
|
-
this.dom.insertAdjacentHTML('beforeend', iconId.substring(19) );
|
|
144
|
-
}
|
|
145
|
-
else if( iconId.endsWith(".svg") ) {
|
|
146
|
-
svgLoader.load( iconId ).then( svg => {
|
|
147
|
-
this.clearContent( );
|
|
148
|
-
this.dom.insertAdjacentHTML('beforeend', svg );
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this.setContent( new Component( { tag: "img", attrs: { src: iconId } } ) );
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
this.removeClass( "empty" );
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
this.addClass( "empty" );
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file icon.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { class_ns } from '../../core/core_tools.ts';
|
|
18
|
+
import { Component, ComponentProps } from '../../core/component.ts';
|
|
19
|
+
|
|
20
|
+
import "./icon.module.scss"
|
|
21
|
+
|
|
22
|
+
type solveCallback = (data:string)=>void;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
class SvgLoader {
|
|
29
|
+
private cache: Map<string,string>;
|
|
30
|
+
private waiters: Map<string,solveCallback[]>;
|
|
31
|
+
|
|
32
|
+
constructor( ) {
|
|
33
|
+
this.cache = new Map( );
|
|
34
|
+
this.waiters = new Map( );
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async load( file: string ): Promise<string> {
|
|
38
|
+
|
|
39
|
+
if( this.cache.has(file) ) {
|
|
40
|
+
return Promise.resolve( this.cache.get(file) );
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return new Promise( (resolve,reject) => {
|
|
44
|
+
if( this.waiters.has(file) ) {
|
|
45
|
+
this.waiters.get(file).push( resolve );
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.waiters.set( file, [resolve] );
|
|
49
|
+
this._load( file )
|
|
50
|
+
.then( ( data: string ) => {
|
|
51
|
+
this.cache.set( file, data );
|
|
52
|
+
const ww = this.waiters.get( file );
|
|
53
|
+
ww.forEach( cb => cb(data ) );
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private async _load( file: string ): Promise<string> {
|
|
60
|
+
const res = await fetch( file );
|
|
61
|
+
if( res.ok ) {
|
|
62
|
+
return res.text( );
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const svgLoader = new SvgLoader( );
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Icon component properties.
|
|
72
|
+
*
|
|
73
|
+
* @property {string} [iconId] - Identifier or path of the icon to display.
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
export interface IconProps extends ComponentProps {
|
|
77
|
+
/**
|
|
78
|
+
* Identifier for the icon.
|
|
79
|
+
* Can be a URL, a CSS variable (prefixed with `var:`), or inline SVG data.
|
|
80
|
+
* @example
|
|
81
|
+
* // Using a CSS variable
|
|
82
|
+
* { iconId: "var:home" }
|
|
83
|
+
* @example
|
|
84
|
+
* // Using an imported SVG
|
|
85
|
+
* import myicon from "./myicon.svg";
|
|
86
|
+
* { iconId: myicon }
|
|
87
|
+
*/
|
|
88
|
+
iconId?: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* A component for rendering icons.
|
|
93
|
+
* Supports inline SVG, external SVG files, and CSS variables for icon paths.
|
|
94
|
+
* The CSS class for this component is automatically generated as `x4icon`.
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
@class_ns( "x4" )
|
|
98
|
+
export class Icon extends Component<IconProps> {
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Create a new Icon.
|
|
102
|
+
*
|
|
103
|
+
* @param {IconProps} props - Optional initial icon identifier.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* const icon = new Icon({ iconId: "check" });
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
constructor( props: IconProps ) {
|
|
110
|
+
super( props );
|
|
111
|
+
|
|
112
|
+
this.setIcon( props.iconId );
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Sets or updates the icon content.
|
|
117
|
+
* @param iconId - Identifier for the icon.
|
|
118
|
+
* If it starts with `var:`, the value is treated as a CSS variable name.
|
|
119
|
+
* If it is a data URL (e.g., `data:image/svg+xml,<svg...`), the SVG is rendered directly.
|
|
120
|
+
* If it ends with `.svg`, the file is loaded asynchronously.
|
|
121
|
+
* Otherwise, it is treated as an image URL.
|
|
122
|
+
* @example
|
|
123
|
+
* // Using a CSS variable
|
|
124
|
+
* setIcon("var:home");
|
|
125
|
+
* @example
|
|
126
|
+
* // Using an imported SVG
|
|
127
|
+
* import myicon from "./myicon.svg";
|
|
128
|
+
* setIcon(myicon);
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
setIcon( iconId: string ) {
|
|
132
|
+
this.clearContent( );
|
|
133
|
+
|
|
134
|
+
if( iconId ) {
|
|
135
|
+
if( iconId.startsWith('var:') ) {
|
|
136
|
+
do {
|
|
137
|
+
const path = iconId.substring( 4 );
|
|
138
|
+
iconId = document.documentElement.style.getPropertyValue( path );
|
|
139
|
+
} while( iconId.startsWith('var:') );
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if( iconId.startsWith("data:image/svg+xml,<svg") ) {
|
|
143
|
+
this.dom.insertAdjacentHTML('beforeend', iconId.substring(19) );
|
|
144
|
+
}
|
|
145
|
+
else if( iconId.endsWith(".svg") ) {
|
|
146
|
+
svgLoader.load( iconId ).then( svg => {
|
|
147
|
+
this.clearContent( );
|
|
148
|
+
this.dom.insertAdjacentHTML('beforeend', svg );
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.setContent( new Component( { tag: "img", attrs: { src: iconId } } ) );
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
this.removeClass( "empty" );
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.addClass( "empty" );
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file image.module.scss
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
:root {
|
|
18
|
-
--image-border-drop-hover: var( --accent-background );
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.x4image {
|
|
22
|
-
position: relative;
|
|
23
|
-
background: none;
|
|
24
|
-
|
|
25
|
-
&.hit {
|
|
26
|
-
border-color: var( --image-border-drop-hover ) !important;
|
|
27
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file image.module.scss
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
--image-border-drop-hover: var( --accent-background );
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.x4image {
|
|
22
|
+
position: relative;
|
|
23
|
+
background: none;
|
|
24
|
+
|
|
25
|
+
&.hit {
|
|
26
|
+
border-color: var( --image-border-drop-hover ) !important;
|
|
27
|
+
}
|
|
28
28
|
}
|