@mezzanine-ui/core 0.6.3 → 0.7.3
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/_internal/overlay-with-slide-fade/_index.scss +1 -0
- package/_internal/overlay-with-slide-fade/_overlay-with-slide-fade-styles.scss +7 -0
- package/_internal/overlay-with-slide-fade/_overlay-with-slider-fade.scss +1 -0
- package/_internal/overlay-with-slide-fade/index.d.ts +1 -0
- package/_internal/overlay-with-slide-fade/index.js +1 -0
- package/_internal/overlay-with-slide-fade/overlayWithSlideFade.d.ts +4 -0
- package/_internal/overlay-with-slide-fade/overlayWithSlideFade.js +6 -0
- package/_styles.scss +3 -0
- package/alert/_alert-styles.scss +2 -1
- package/calendar/_calendar-styles.scss +2 -1
- package/drawer/_drawer-styles.scss +0 -2
- package/icon/_icon-styles.scss +4 -0
- package/icon/icon.d.ts +2 -0
- package/icon/icon.js +29 -18
- package/message/_message-styles.scss +4 -3
- package/package.json +3 -3
- package/slider/_slider-styles.scss +3 -2
- package/slider/index.js +1 -1
- package/slider/slider.d.ts +3 -0
- package/slider/slider.js +37 -3
- package/table/table.d.ts +4 -3
- package/upload/UploadPictureBlock.d.ts +51 -0
- package/upload/UploadPictureBlock.js +111 -0
- package/upload/UploadPictureWall.d.ts +5 -0
- package/upload/UploadPictureWall.js +7 -0
- package/upload/_index.scss +3 -0
- package/upload/_upload-picture-block-styles.scss +119 -0
- package/upload/_upload-picture-block.scss +3 -0
- package/upload/_upload-picture-styles.scss +9 -0
- package/upload/_upload-picture-wall-styles.scss +20 -0
- package/upload/_upload-picture-wall.scss +3 -0
- package/upload/_upload-picture.scss +3 -0
- package/upload/index.d.ts +3 -0
- package/upload/index.js +3 -0
- package/upload/uploadPicture.d.ts +4 -0
- package/upload/uploadPicture.js +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@forward './overlay-with-slider-fade';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$prefix: mzn-overlay-with-slide-fade;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './overlayWithSlideFade';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { overlayWithSlideFadeClasses, overlayWithSlideFadePrefix } from './overlayWithSlideFade.js';
|
package/_styles.scss
CHANGED
|
@@ -61,6 +61,9 @@
|
|
|
61
61
|
@include _load-styles($options, textarea);
|
|
62
62
|
@include _load-styles($options, upload);
|
|
63
63
|
@include _load-styles($options, upload, upload-result);
|
|
64
|
+
@include _load-styles($options, upload, upload-picture);
|
|
65
|
+
@include _load-styles($options, upload, upload-picture-block);
|
|
66
|
+
@include _load-styles($options, upload, upload-picture-wall);
|
|
64
67
|
@include _load-styles($options, picker);
|
|
65
68
|
@include _load-styles($options, date-range-picker);
|
|
66
69
|
@include _load-styles($options, date-time-picker);
|
package/alert/_alert-styles.scss
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
1
2
|
@use '~@mezzanine-ui/system/palette';
|
|
2
3
|
@use '~@mezzanine-ui/system/transition';
|
|
3
4
|
@use '~@mezzanine-ui/system/typography';
|
|
@@ -18,7 +19,7 @@ $close-icon-width: $icon-size + 12px;
|
|
|
18
19
|
width: 100%;
|
|
19
20
|
|
|
20
21
|
&__icon {
|
|
21
|
-
$vertical-padding: #{($box-height - $icon-size
|
|
22
|
+
$vertical-padding: #{math.div($box-height - $icon-size, 2)};
|
|
22
23
|
|
|
23
24
|
padding: $vertical-padding $icon-horizontal-padding;
|
|
24
25
|
font-size: typography.px-to-rem($icon-size);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
1
2
|
@use '~@mezzanine-ui/system/typography';
|
|
2
3
|
@use '~@mezzanine-ui/system/palette';
|
|
3
4
|
@use '~@mezzanine-ui/system/transition';
|
|
@@ -90,7 +91,7 @@
|
|
|
90
91
|
|
|
91
92
|
content: '';
|
|
92
93
|
position: absolute;
|
|
93
|
-
left: calc(50% - #{$dot-width
|
|
94
|
+
left: calc(50% - #{math.div($dot-width, 2)});
|
|
94
95
|
display: block;
|
|
95
96
|
width: $dot-width;
|
|
96
97
|
height: $dot-width;
|
package/icon/_icon-styles.scss
CHANGED
package/icon/icon.d.ts
CHANGED
|
@@ -3,11 +3,13 @@ import { MainColor } from '@mezzanine-ui/system/palette';
|
|
|
3
3
|
export declare type IconColor = 'inherit' | MainColor | 'disabled';
|
|
4
4
|
export interface IconCssVars {
|
|
5
5
|
color?: IconColor;
|
|
6
|
+
size?: number;
|
|
6
7
|
}
|
|
7
8
|
export declare const iconPrefix = "mzn-icon";
|
|
8
9
|
export declare const iconClasses: {
|
|
9
10
|
readonly host: "mzn-icon";
|
|
10
11
|
readonly color: "mzn-icon--color";
|
|
11
12
|
readonly spin: "mzn-icon--spin";
|
|
13
|
+
readonly size: "mzn-icon--size";
|
|
12
14
|
};
|
|
13
15
|
export declare function toIconCssVars(variables: IconCssVars): CssVarInterpolations;
|
package/icon/icon.js
CHANGED
|
@@ -6,28 +6,39 @@ const iconClasses = {
|
|
|
6
6
|
host: iconPrefix,
|
|
7
7
|
color: `${iconPrefix}--color`,
|
|
8
8
|
spin: `${iconPrefix}--spin`,
|
|
9
|
+
size: `${iconPrefix}--size`,
|
|
9
10
|
};
|
|
10
11
|
function toIconCssVars(variables) {
|
|
11
|
-
const { color } = variables;
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const { color, size } = variables;
|
|
13
|
+
let result = {};
|
|
14
|
+
/** color mapping */
|
|
15
|
+
if (color) {
|
|
16
|
+
let colorValue;
|
|
17
|
+
if (color === 'inherit') {
|
|
18
|
+
colorValue = color;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
/**
|
|
22
|
+
* Use `action-disabled` color of palette as `disabled` color of icon.
|
|
23
|
+
*/
|
|
24
|
+
const colorName = color === 'disabled'
|
|
25
|
+
? 'action-disabled'
|
|
26
|
+
: color;
|
|
27
|
+
colorValue = toCssVar(`${palettePrefix}-${colorName}`);
|
|
28
|
+
}
|
|
29
|
+
result = {
|
|
30
|
+
...result,
|
|
31
|
+
[`--${iconPrefix}-color`]: colorValue,
|
|
32
|
+
};
|
|
14
33
|
}
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
|
|
34
|
+
/** size mapping */
|
|
35
|
+
if (typeof size !== 'undefined') {
|
|
36
|
+
result = {
|
|
37
|
+
...result,
|
|
38
|
+
[`--${iconPrefix}-size`]: `${size}px`,
|
|
39
|
+
};
|
|
18
40
|
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Use `action-disabled` color of palette as `disabled` color of icon.
|
|
22
|
-
*/
|
|
23
|
-
const colorName = color === 'disabled'
|
|
24
|
-
? 'action-disabled'
|
|
25
|
-
: color;
|
|
26
|
-
colorValue = toCssVar(`${palettePrefix}-${colorName}`);
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
[`--${iconPrefix}-color`]: colorValue,
|
|
30
|
-
};
|
|
41
|
+
return result;
|
|
31
42
|
}
|
|
32
43
|
|
|
33
44
|
export { iconClasses, iconPrefix, toIconCssVars };
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
$height: 40px !default;
|
|
9
9
|
$padding-left: 12px !default;
|
|
10
|
-
$padding-right:
|
|
10
|
+
$padding-right: 12px !default;
|
|
11
|
+
$content-padding: 12px !default;
|
|
11
12
|
$icon-size: 24px !default;
|
|
12
|
-
$icon-gap: 12px !default;
|
|
13
13
|
|
|
14
14
|
.#{$prefix} {
|
|
15
15
|
display: flex;
|
|
@@ -28,12 +28,13 @@ $icon-gap: 12px !default;
|
|
|
28
28
|
&__icon {
|
|
29
29
|
color: var(--#{$prefix}-color);
|
|
30
30
|
font-size: typography.px-to-rem($icon-size);
|
|
31
|
-
margin-right: $icon-gap;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
&__content {
|
|
35
34
|
@include typography.variant(body1);
|
|
36
35
|
@include typography.overflow-ellipsis();
|
|
36
|
+
|
|
37
|
+
padding: 0 $content-padding;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
@each $severity in $severities {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mezzanine-ui/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "Core for mezzanine-ui",
|
|
5
5
|
"author": "Mezzanine",
|
|
6
6
|
"repository": {
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"build:clean": "node ../../scripts/cleanBuild.js"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@mezzanine-ui/icons": "^0.
|
|
27
|
-
"@mezzanine-ui/system": "^0.
|
|
26
|
+
"@mezzanine-ui/icons": "^0.7.3",
|
|
27
|
+
"@mezzanine-ui/system": "^0.7.0",
|
|
28
28
|
"tslib": "^2.1.0"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
1
2
|
@use '~@mezzanine-ui/system/palette';
|
|
2
3
|
@use './slider' as *;
|
|
3
4
|
|
|
@@ -90,13 +91,13 @@ $handler-scale-size: 24px !default;
|
|
|
90
91
|
box-sizing: border-box;
|
|
91
92
|
|
|
92
93
|
&:hover {
|
|
93
|
-
transform: scale($handler-scale-size
|
|
94
|
+
transform: scale(math.div($handler-scale-size, $handler-size));
|
|
94
95
|
background-color: palette.color(primary-light);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
&--active {
|
|
98
99
|
z-index: 1;
|
|
99
|
-
transform: scale($handler-scale-size
|
|
100
|
+
transform: scale(math.div($handler-scale-size, $handler-size));
|
|
100
101
|
background-color: palette.color(primary-dark);
|
|
101
102
|
|
|
102
103
|
&:hover {
|
package/slider/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { findClosetValueIndex, getPercentage, getSliderRect, getValueFromClientX, isRangeSlider, roundToStep, sliderClasses, sliderHandlerPrefix, sliderPrefix, sortSliderValue, toSliderCssVars } from './slider.js';
|
|
1
|
+
export { findClosetValueIndex, fixRangeSliderValue, fixSingleSliderValue, getPercentage, getPrecision, getSliderRect, getValueFromClientX, isRangeSlider, roundToStep, sliderClasses, sliderHandlerPrefix, sliderPrefix, sortSliderValue, toSliderCssVars } from './slider.js';
|
package/slider/slider.d.ts
CHANGED
|
@@ -53,5 +53,8 @@ export declare function sortSliderValue(value: RangeSliderValue): RangeSliderVal
|
|
|
53
53
|
export declare function getSliderRect(element: HTMLDivElement): SliderRect;
|
|
54
54
|
export declare function getValueFromClientX(clientX: number, trackDims: SliderRect, min: number, max: number): number;
|
|
55
55
|
export declare function getPercentage(value: number, min: number, max: number): number;
|
|
56
|
+
export declare function getPrecision(step: number): number;
|
|
57
|
+
export declare function fixSingleSliderValue(value: SingleSliderValue, min: number, max: number): SingleSliderValue;
|
|
58
|
+
export declare function fixRangeSliderValue(value: RangeSliderValue, min: number, max: number): RangeSliderValue;
|
|
56
59
|
export declare function roundToStep(value: number, step: number, min: number, max: number): number;
|
|
57
60
|
export declare function findClosetValueIndex(value: SliderValue, newValue: number): number;
|
package/slider/slider.js
CHANGED
|
@@ -67,8 +67,42 @@ function getValueFromClientX(clientX, trackDims, min, max) {
|
|
|
67
67
|
return value + min;
|
|
68
68
|
}
|
|
69
69
|
function getPercentage(value, min, max) {
|
|
70
|
+
if (min > max)
|
|
71
|
+
return 0;
|
|
70
72
|
return Math.max(0, Math.min(100, (value / Math.abs(max - min)) * 100));
|
|
71
73
|
}
|
|
74
|
+
function getPrecision(step) {
|
|
75
|
+
const stepString = step.toString();
|
|
76
|
+
let precision = 0;
|
|
77
|
+
if (stepString.indexOf('.') >= 0) {
|
|
78
|
+
precision = stepString.length - stepString.indexOf('.') - 1;
|
|
79
|
+
}
|
|
80
|
+
return precision;
|
|
81
|
+
}
|
|
82
|
+
function fixSingleSliderValue(value, min, max) {
|
|
83
|
+
if (value < min) {
|
|
84
|
+
return min;
|
|
85
|
+
}
|
|
86
|
+
if (value > max) {
|
|
87
|
+
return max;
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
function fixRangeSliderValue(value, min, max) {
|
|
92
|
+
if (value[0] > max && value[1] > max) {
|
|
93
|
+
return [max, max];
|
|
94
|
+
}
|
|
95
|
+
if (value[0] < min && value[1] < min) {
|
|
96
|
+
return [min, min];
|
|
97
|
+
}
|
|
98
|
+
if (value[0] < min) {
|
|
99
|
+
return [min, value[1]];
|
|
100
|
+
}
|
|
101
|
+
if (value[1] > max) {
|
|
102
|
+
return [value[0], max];
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
72
106
|
function roundToStep(value, step, min, max) {
|
|
73
107
|
let left = min;
|
|
74
108
|
let right = max;
|
|
@@ -77,9 +111,9 @@ function roundToStep(value, step, min, max) {
|
|
|
77
111
|
}
|
|
78
112
|
right = Math.min(left + step, max);
|
|
79
113
|
if (value - left < right - value) {
|
|
80
|
-
return left;
|
|
114
|
+
return parseFloat(left.toFixed(getPrecision(step)));
|
|
81
115
|
}
|
|
82
|
-
return right;
|
|
116
|
+
return parseFloat(right.toFixed(getPrecision(step)));
|
|
83
117
|
}
|
|
84
118
|
function findClosetValueIndex(value, newValue) {
|
|
85
119
|
if (!isRangeSlider(value))
|
|
@@ -88,4 +122,4 @@ function findClosetValueIndex(value, newValue) {
|
|
|
88
122
|
return value.findIndex((element) => element === closetValue);
|
|
89
123
|
}
|
|
90
124
|
|
|
91
|
-
export { findClosetValueIndex, getPercentage, getSliderRect, getValueFromClientX, isRangeSlider, roundToStep, sliderClasses, sliderHandlerPrefix, sliderPrefix, sortSliderValue, toSliderCssVars };
|
|
125
|
+
export { findClosetValueIndex, fixRangeSliderValue, fixSingleSliderValue, getPercentage, getPrecision, getSliderRect, getValueFromClientX, isRangeSlider, roundToStep, sliderClasses, sliderHandlerPrefix, sliderPrefix, sortSliderValue, toSliderCssVars };
|
package/table/table.d.ts
CHANGED
|
@@ -75,9 +75,10 @@ export interface TableExpandable<SourceType> {
|
|
|
75
75
|
}
|
|
76
76
|
/** === Feature Pagination */
|
|
77
77
|
export interface TablePagination {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
current: number;
|
|
79
|
+
/** @NOTE set this to true, should control pageSize properly to make layout correct */
|
|
80
|
+
disableAutoSlicing?: boolean;
|
|
81
|
+
onChange(page: number): void;
|
|
81
82
|
total?: number;
|
|
82
83
|
options?: {
|
|
83
84
|
boundaryCount?: number;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { CssVarInterpolations } from '@mezzanine-ui/system/css';
|
|
3
|
+
import EventEmitter from 'events';
|
|
4
|
+
export declare const uploadPictureBlockPrefix = "mzn-upload-picture-block";
|
|
5
|
+
export interface UploadPictureBlockCssVars {
|
|
6
|
+
percentage?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const uploadPictureBlockClasses: {
|
|
9
|
+
host: string;
|
|
10
|
+
disabled: string;
|
|
11
|
+
error: string;
|
|
12
|
+
loading: string;
|
|
13
|
+
group: string;
|
|
14
|
+
status: string;
|
|
15
|
+
preview: string;
|
|
16
|
+
delete: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function toUploadPictureBlockCssVars(variables: UploadPictureBlockCssVars): CssVarInterpolations;
|
|
19
|
+
export declare class ImageUploader extends EventEmitter {
|
|
20
|
+
uid: string;
|
|
21
|
+
file: File | null;
|
|
22
|
+
percentage: number;
|
|
23
|
+
preview: string;
|
|
24
|
+
url: string;
|
|
25
|
+
isLoading: boolean;
|
|
26
|
+
isError: boolean;
|
|
27
|
+
constructor(file?: File, url?: string);
|
|
28
|
+
setNewFile(file: File): void;
|
|
29
|
+
setPreview(): void;
|
|
30
|
+
setPercentage(percentage: number): void;
|
|
31
|
+
setUrl(url: string): void;
|
|
32
|
+
setLoadingStatus(isLoading: boolean): void;
|
|
33
|
+
setErrorStatus(isError: boolean): void;
|
|
34
|
+
clear(): void;
|
|
35
|
+
getUid(): string;
|
|
36
|
+
getFile(): File | null;
|
|
37
|
+
getPercentage(): number;
|
|
38
|
+
getPreview(): string;
|
|
39
|
+
getUrl(): string;
|
|
40
|
+
getIsLoading(): boolean;
|
|
41
|
+
getIsError(): boolean;
|
|
42
|
+
getAll(): {
|
|
43
|
+
uid: string;
|
|
44
|
+
file: File | null;
|
|
45
|
+
percentage: number;
|
|
46
|
+
preview: string;
|
|
47
|
+
url: string;
|
|
48
|
+
isLoading: boolean;
|
|
49
|
+
isError: boolean;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import EventEmitter from 'events';
|
|
2
|
+
import uniqueId from 'lodash/uniqueId';
|
|
3
|
+
|
|
4
|
+
const uploadPictureBlockPrefix = 'mzn-upload-picture-block';
|
|
5
|
+
const uploadPictureBlockClasses = {
|
|
6
|
+
host: uploadPictureBlockPrefix,
|
|
7
|
+
disabled: `${uploadPictureBlockPrefix}--disabled`,
|
|
8
|
+
error: `${uploadPictureBlockPrefix}--error`,
|
|
9
|
+
loading: `${uploadPictureBlockPrefix}--loading`,
|
|
10
|
+
group: `${uploadPictureBlockPrefix}__group`,
|
|
11
|
+
status: `${uploadPictureBlockPrefix}__status`,
|
|
12
|
+
preview: `${uploadPictureBlockPrefix}__preview`,
|
|
13
|
+
delete: `${uploadPictureBlockPrefix}__delete`,
|
|
14
|
+
};
|
|
15
|
+
function toUploadPictureBlockCssVars(variables) {
|
|
16
|
+
const { percentage, } = variables;
|
|
17
|
+
return {
|
|
18
|
+
[`--${uploadPictureBlockPrefix}-percentage`]: percentage,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
class ImageUploader extends EventEmitter {
|
|
22
|
+
constructor(file, url) {
|
|
23
|
+
super();
|
|
24
|
+
this.uid = uniqueId('file_');
|
|
25
|
+
this.file = file || null;
|
|
26
|
+
this.percentage = 0;
|
|
27
|
+
this.preview = '';
|
|
28
|
+
this.url = url || '';
|
|
29
|
+
this.isLoading = false;
|
|
30
|
+
this.isError = false;
|
|
31
|
+
}
|
|
32
|
+
setNewFile(file) {
|
|
33
|
+
this.uid = uniqueId('file_');
|
|
34
|
+
this.file = file;
|
|
35
|
+
this.percentage = 0;
|
|
36
|
+
this.preview = '';
|
|
37
|
+
this.url = '';
|
|
38
|
+
this.isLoading = false;
|
|
39
|
+
this.isError = false;
|
|
40
|
+
this.emit('fileChange');
|
|
41
|
+
}
|
|
42
|
+
setPreview() {
|
|
43
|
+
if (this.file) {
|
|
44
|
+
const reader = new FileReader();
|
|
45
|
+
reader.addEventListener('load', () => {
|
|
46
|
+
this.preview = reader.result;
|
|
47
|
+
this.emit('previewChange');
|
|
48
|
+
});
|
|
49
|
+
reader.readAsDataURL(this.file);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
setPercentage(percentage) {
|
|
53
|
+
this.percentage = percentage;
|
|
54
|
+
this.emit('percentageChange');
|
|
55
|
+
}
|
|
56
|
+
setUrl(url) {
|
|
57
|
+
this.url = url;
|
|
58
|
+
this.emit('urlChange');
|
|
59
|
+
}
|
|
60
|
+
setLoadingStatus(isLoading) {
|
|
61
|
+
this.isLoading = isLoading;
|
|
62
|
+
this.emit('loadingStatusChange');
|
|
63
|
+
}
|
|
64
|
+
setErrorStatus(isError) {
|
|
65
|
+
this.isError = isError;
|
|
66
|
+
this.emit('errorStatusChange');
|
|
67
|
+
}
|
|
68
|
+
clear() {
|
|
69
|
+
this.file = null;
|
|
70
|
+
this.percentage = 0;
|
|
71
|
+
this.preview = '';
|
|
72
|
+
this.url = '';
|
|
73
|
+
this.isLoading = false;
|
|
74
|
+
this.isError = false;
|
|
75
|
+
this.emit('clear');
|
|
76
|
+
}
|
|
77
|
+
getUid() {
|
|
78
|
+
return this.uid;
|
|
79
|
+
}
|
|
80
|
+
getFile() {
|
|
81
|
+
return this.file;
|
|
82
|
+
}
|
|
83
|
+
getPercentage() {
|
|
84
|
+
return this.percentage;
|
|
85
|
+
}
|
|
86
|
+
getPreview() {
|
|
87
|
+
return this.preview;
|
|
88
|
+
}
|
|
89
|
+
getUrl() {
|
|
90
|
+
return this.url;
|
|
91
|
+
}
|
|
92
|
+
getIsLoading() {
|
|
93
|
+
return this.isLoading;
|
|
94
|
+
}
|
|
95
|
+
getIsError() {
|
|
96
|
+
return this.isError;
|
|
97
|
+
}
|
|
98
|
+
getAll() {
|
|
99
|
+
return {
|
|
100
|
+
uid: this.uid,
|
|
101
|
+
file: this.file,
|
|
102
|
+
percentage: this.percentage,
|
|
103
|
+
preview: this.preview,
|
|
104
|
+
url: this.url,
|
|
105
|
+
isLoading: this.isLoading,
|
|
106
|
+
isError: this.isError,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { ImageUploader, toUploadPictureBlockCssVars, uploadPictureBlockClasses, uploadPictureBlockPrefix };
|
package/upload/_index.scss
CHANGED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
@use '~@mezzanine-ui/system/palette';
|
|
2
|
+
@use '~@mezzanine-ui/system/transition';
|
|
3
|
+
@use '~@mezzanine-ui/system/spacing';
|
|
4
|
+
@use '~@mezzanine-ui/system/typography';
|
|
5
|
+
@use '../icon';
|
|
6
|
+
@use './upload-picture-block' as *;
|
|
7
|
+
|
|
8
|
+
$icon-size: 32px !default;
|
|
9
|
+
|
|
10
|
+
.#{$prefix} {
|
|
11
|
+
--#{$prefix}-status-color: #{palette.color(text-primary)};
|
|
12
|
+
--#{$prefix}-icon-color: #{palette.color(primary)};
|
|
13
|
+
--#{$prefix}-preview-opacity: 1;
|
|
14
|
+
|
|
15
|
+
position: relative;
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
background-color: palette.color(surface);
|
|
20
|
+
width: 100%;
|
|
21
|
+
height: 100%;
|
|
22
|
+
padding: 0;
|
|
23
|
+
border: 1px solid palette.color(border);
|
|
24
|
+
box-sizing: border-box;
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
transition: transition.standard(border-color);
|
|
27
|
+
will-change: border-color;
|
|
28
|
+
|
|
29
|
+
.#{icon.$prefix} {
|
|
30
|
+
width: $icon-size;
|
|
31
|
+
height: $icon-size;
|
|
32
|
+
color: var(--#{$prefix}-icon-color);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&__preview {
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: 100%;
|
|
38
|
+
opacity: var(--#{$prefix}-preview-opacity);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&__status {
|
|
42
|
+
@include typography.variant(input2);
|
|
43
|
+
|
|
44
|
+
color: var(--#{$prefix}-status-color);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&__group {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
align-items: center;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
position: absolute;
|
|
53
|
+
padding: spacing.level(2);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&__delete {
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
position: absolute;
|
|
61
|
+
width: 100%;
|
|
62
|
+
height: 100%;
|
|
63
|
+
padding: 0;
|
|
64
|
+
border: none;
|
|
65
|
+
pointer-events: none;
|
|
66
|
+
background-color: transparent;
|
|
67
|
+
opacity: 0;
|
|
68
|
+
transition: transition.standard(background-color), transition.standard(opacity);
|
|
69
|
+
will-change: background-color, opacity;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&:hover {
|
|
73
|
+
&:not(.#{$prefix}--loading):not(.#{$prefix}--disabled) {
|
|
74
|
+
.#{$prefix}__delete {
|
|
75
|
+
background-color: palette.color(surface);
|
|
76
|
+
opacity: 0.9;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&:not(.#{$prefix}--disabled):not(.#{$prefix}--error) {
|
|
81
|
+
border-color: palette.color(primary);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&--loading {
|
|
86
|
+
--#{$prefix}-preview-opacity: 0.15;
|
|
87
|
+
|
|
88
|
+
cursor: default;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
|
|
91
|
+
&::before {
|
|
92
|
+
position: absolute;
|
|
93
|
+
content: "";
|
|
94
|
+
top: 0;
|
|
95
|
+
left: 0;
|
|
96
|
+
width: 100%;
|
|
97
|
+
height: 100%;
|
|
98
|
+
background-color: palette.color(primary-hover-bg);
|
|
99
|
+
transform-origin: left;
|
|
100
|
+
transform: scaleX(calc(var(--#{$prefix}-percentage, 0) / 100));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&--error {
|
|
105
|
+
--#{$prefix}-status-color: #{palette.color(error)};
|
|
106
|
+
--#{$prefix}-icon-color: #{palette.color(error)};
|
|
107
|
+
|
|
108
|
+
border-color: palette.color(error);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&--disabled {
|
|
112
|
+
--#{$prefix}-status-color: #{palette.color(text-disabled)};
|
|
113
|
+
--#{$prefix}-icon-color: #{palette.color(action-disabled)};
|
|
114
|
+
|
|
115
|
+
background-color: palette.color(action-disabled-bg);
|
|
116
|
+
border-color: palette.color(action-disabled-bg);
|
|
117
|
+
cursor: default;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use '~@mezzanine-ui/system/spacing';
|
|
2
|
+
@use './upload-picture-wall' as *;
|
|
3
|
+
|
|
4
|
+
$width: 128px !default;
|
|
5
|
+
$height: 128px !default;
|
|
6
|
+
$row-gap: spacing.level(3) !default;
|
|
7
|
+
$column-gap: spacing.level(3) !default;
|
|
8
|
+
$repeat: 3;
|
|
9
|
+
|
|
10
|
+
.#{$prefix} {
|
|
11
|
+
display: grid;
|
|
12
|
+
grid-template-columns: repeat($repeat, minmax(0, $width));
|
|
13
|
+
row-gap: $row-gap;
|
|
14
|
+
column-gap: $column-gap;
|
|
15
|
+
|
|
16
|
+
&__item {
|
|
17
|
+
width: $width;
|
|
18
|
+
height: $height;
|
|
19
|
+
}
|
|
20
|
+
}
|
package/upload/index.d.ts
CHANGED
package/upload/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { uploadInputClasses, uploadInputPrefix } from './uploadInput.js';
|
|
2
2
|
export { toUploadResultCssVars, uploadResultClasses, uploadResultPrefix } from './uploadResult.js';
|
|
3
|
+
export { uploadPictureClasses, uploadPicturePrefix } from './uploadPicture.js';
|
|
4
|
+
export { ImageUploader, toUploadPictureBlockCssVars, uploadPictureBlockClasses, uploadPictureBlockPrefix } from './UploadPictureBlock.js';
|
|
5
|
+
export { uploadPictureWallClasses, uploadPictureWallPrefix } from './UploadPictureWall.js';
|