payload 2.0.0-beta.24 → 2.0.0-beta.26
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/dist/admin/components/elements/DocumentControls/index.d.ts +1 -1
- package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/admin/components/elements/DocumentControls/index.js +2 -2
- package/dist/admin/components/elements/DocumentDrawer/DrawerContent.js +3 -2
- package/dist/admin/components/elements/Drawer/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Drawer/index.js +4 -3
- package/dist/admin/components/elements/Drawer/types.d.ts +1 -0
- package/dist/admin/components/elements/Drawer/types.d.ts.map +1 -1
- package/dist/admin/components/elements/Dropzone/index.d.ts +10 -0
- package/dist/admin/components/elements/Dropzone/index.d.ts.map +1 -0
- package/dist/admin/components/elements/Dropzone/index.js +120 -0
- package/dist/admin/components/elements/Dropzone/index.scss +52 -0
- package/dist/admin/components/elements/EditUpload/index.d.ts +13 -0
- package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -0
- package/dist/admin/components/elements/EditUpload/index.js +378 -0
- package/dist/admin/components/elements/EditUpload/index.scss +218 -0
- package/dist/admin/components/elements/FileDetails/index.d.ts.map +1 -1
- package/dist/admin/components/elements/FileDetails/index.js +14 -99
- package/dist/admin/components/elements/FileDetails/index.scss +21 -0
- package/dist/admin/components/elements/FileDetails/types.d.ts +3 -0
- package/dist/admin/components/elements/FileDetails/types.d.ts.map +1 -1
- package/dist/admin/components/elements/Hamburger/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Hamburger/index.js +6 -4
- package/dist/admin/components/elements/PreviewSizes/index.d.ts +14 -0
- package/dist/admin/components/elements/PreviewSizes/index.d.ts.map +1 -0
- package/dist/admin/components/elements/PreviewSizes/index.js +146 -0
- package/dist/admin/components/elements/PreviewSizes/index.scss +146 -0
- package/dist/admin/components/elements/Thumbnail/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Thumbnail/index.js +61 -7
- package/dist/admin/components/elements/Thumbnail/types.d.ts +4 -2
- package/dist/admin/components/elements/Thumbnail/types.d.ts.map +1 -1
- package/dist/admin/components/forms/Form/buildStateFromSchema/index.d.ts +2 -2
- package/dist/admin/components/forms/Form/buildStateFromSchema/index.d.ts.map +1 -1
- package/dist/admin/components/forms/Form/buildStateFromSchema/index.js +1 -1
- package/dist/admin/components/utilities/FormQueryParams/index.d.ts +17 -0
- package/dist/admin/components/utilities/FormQueryParams/index.d.ts.map +1 -0
- package/dist/admin/components/utilities/FormQueryParams/index.js +23 -0
- package/dist/admin/components/utilities/Locale/index.d.ts +2 -2
- package/dist/admin/components/utilities/Locale/index.d.ts.map +1 -1
- package/dist/admin/components/utilities/Locale/index.js +2 -2
- package/dist/admin/components/utilities/OperationProvider/index.d.ts +1 -1
- package/dist/admin/components/utilities/OperationProvider/index.d.ts.map +1 -1
- package/dist/admin/components/utilities/OperationProvider/index.js +2 -2
- package/dist/admin/components/utilities/RenderCustomComponent/types.d.ts +1 -1
- package/dist/admin/components/utilities/RenderCustomComponent/types.d.ts.map +1 -1
- package/dist/admin/components/views/Account/Default.d.ts.map +1 -1
- package/dist/admin/components/views/Account/Default.js +4 -4
- package/dist/admin/components/views/Account/index.d.ts.map +1 -1
- package/dist/admin/components/views/Account/index.js +10 -6
- package/dist/admin/components/views/Dashboard/index.d.ts.map +1 -1
- package/dist/admin/components/views/Dashboard/index.js +1 -1
- package/dist/admin/components/views/Global/index.d.ts.map +1 -1
- package/dist/admin/components/views/Global/index.js +8 -4
- package/dist/admin/components/views/LivePreview/Context/context.d.ts +4 -4
- package/dist/admin/components/views/LivePreview/Context/context.d.ts.map +1 -1
- package/dist/admin/components/views/LivePreview/Context/context.js +1 -1
- package/dist/admin/components/views/LivePreview/Context/index.d.ts +2 -2
- package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -1
- package/dist/admin/components/views/LivePreview/Context/index.js +1 -1
- package/dist/admin/components/views/LivePreview/DeviceContainer/index.js +2 -2
- package/dist/admin/components/views/LivePreview/Preview/index.js +1 -1
- package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
- package/dist/admin/components/views/LivePreview/index.js +13 -4
- package/dist/admin/components/views/Login/index.js +2 -2
- package/dist/admin/components/views/Routes/collections.d.ts.map +1 -1
- package/dist/admin/components/views/Routes/collections.js +1 -1
- package/dist/admin/components/views/Routes/custom.d.ts +3 -3
- package/dist/admin/components/views/Routes/custom.d.ts.map +1 -1
- package/dist/admin/components/views/Routes/custom.js +1 -1
- package/dist/admin/components/views/Routes/globals.d.ts.map +1 -1
- package/dist/admin/components/views/Routes/globals.js +1 -1
- package/dist/admin/components/views/Routes/index.js +5 -5
- package/dist/admin/components/views/Verify/index.js +1 -1
- package/dist/admin/components/views/collections/Edit/Default/index.d.ts.map +1 -1
- package/dist/admin/components/views/collections/Edit/Default/index.js +6 -6
- package/dist/admin/components/views/collections/Edit/Upload/index.d.ts +7 -2
- package/dist/admin/components/views/collections/Edit/Upload/index.d.ts.map +1 -1
- package/dist/admin/components/views/collections/Edit/Upload/index.js +116 -121
- package/dist/admin/components/views/collections/Edit/Upload/index.scss +68 -68
- package/dist/admin/components/views/collections/Edit/Upload/types.d.ts +2 -3
- package/dist/admin/components/views/collections/Edit/Upload/types.d.ts.map +1 -1
- package/dist/admin/components/views/collections/Edit/formatFields.d.ts +1 -1
- package/dist/admin/components/views/collections/Edit/formatFields.d.ts.map +1 -1
- package/dist/admin/components/views/collections/Edit/formatFields.js +1 -1
- package/dist/admin/components/views/collections/Edit/index.d.ts.map +1 -1
- package/dist/admin/components/views/collections/Edit/index.js +33 -6
- package/dist/admin/components/views/collections/Edit/types.d.ts +12 -0
- package/dist/admin/components/views/collections/Edit/types.d.ts.map +1 -1
- package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.d.ts +4 -1
- package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.d.ts.map +1 -1
- package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.js +7 -3
- package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.scss +7 -2
- package/dist/admin/components/views/collections/List/Cell/field-types/index.d.ts +1 -1
- package/dist/admin/components/views/collections/List/Cell/index.d.ts.map +1 -1
- package/dist/admin/components/views/collections/List/Cell/index.js +11 -1
- package/dist/admin/components/views/types.d.ts +8 -8
- package/dist/admin/components/views/types.d.ts.map +1 -1
- package/dist/collections/config/schema.d.ts.map +1 -1
- package/dist/collections/config/schema.js +4 -2
- package/dist/collections/config/types.d.ts +2 -2
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js +1 -1
- package/dist/config/types.d.ts +16 -11
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -1
- package/dist/database/migrations/migrateRefresh.d.ts +1 -1
- package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
- package/dist/database/migrations/migrateRefresh.js +59 -7
- package/dist/database/migrations/migrationTemplate.d.ts +1 -1
- package/dist/database/migrations/migrationTemplate.d.ts.map +1 -1
- package/dist/database/migrations/migrationTemplate.js +2 -2
- package/dist/globals/config/schema.js +2 -2
- package/dist/globals/config/types.d.ts +3 -3
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/translations/ar.json +14 -2
- package/dist/translations/az.json +14 -2
- package/dist/translations/bg.json +14 -2
- package/dist/translations/cs.json +14 -2
- package/dist/translations/de.json +14 -2
- package/dist/translations/en.json +12 -0
- package/dist/translations/es.json +14 -2
- package/dist/translations/fa.json +14 -2
- package/dist/translations/fr.json +14 -2
- package/dist/translations/hr.json +14 -2
- package/dist/translations/hu.json +14 -2
- package/dist/translations/index.d.ts +340 -26
- package/dist/translations/index.d.ts.map +1 -1
- package/dist/translations/it.json +16 -3
- package/dist/translations/ja.json +14 -2
- package/dist/translations/my.json +14 -2
- package/dist/translations/nb.json +14 -2
- package/dist/translations/nl.json +14 -2
- package/dist/translations/pl.json +15 -2
- package/dist/translations/pt.json +14 -2
- package/dist/translations/ro.json +14 -2
- package/dist/translations/ru.json +14 -2
- package/dist/translations/sv.json +14 -2
- package/dist/translations/th.json +14 -2
- package/dist/translations/tr.json +14 -2
- package/dist/translations/translation-schema.json +36 -0
- package/dist/translations/ua.json +14 -2
- package/dist/translations/vi.json +14 -2
- package/dist/translations/zh.json +14 -2
- package/dist/uploads/cropImage.d.ts +12 -0
- package/dist/uploads/cropImage.d.ts.map +1 -0
- package/dist/uploads/cropImage.js +47 -0
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +49 -14
- package/dist/uploads/imageResizer.d.ts +6 -1
- package/dist/uploads/imageResizer.d.ts.map +1 -1
- package/dist/uploads/imageResizer.js +48 -3
- package/dist/uploads/types.d.ts +5 -1
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EditUpload", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EditUpload;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _modal = require("@faceless-ui/modal");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
|
+
const _reacti18next = require("react-i18next");
|
|
14
|
+
const _reactimagecrop = /*#__PURE__*/ _interop_require_default(require("react-image-crop"));
|
|
15
|
+
require("react-image-crop/dist/ReactCrop.css");
|
|
16
|
+
const _Plus = /*#__PURE__*/ _interop_require_default(require("../../icons/Plus"));
|
|
17
|
+
const _FormQueryParams = require("../../utilities/FormQueryParams");
|
|
18
|
+
const _Upload = require("../../views/collections/Edit/Upload");
|
|
19
|
+
const _Button = /*#__PURE__*/ _interop_require_default(require("../Button"));
|
|
20
|
+
require("./index.scss");
|
|
21
|
+
function _interop_require_default(obj) {
|
|
22
|
+
return obj && obj.__esModule ? obj : {
|
|
23
|
+
default: obj
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
27
|
+
if (typeof WeakMap !== "function") return null;
|
|
28
|
+
var cacheBabelInterop = new WeakMap();
|
|
29
|
+
var cacheNodeInterop = new WeakMap();
|
|
30
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
31
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
32
|
+
})(nodeInterop);
|
|
33
|
+
}
|
|
34
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
35
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
36
|
+
return obj;
|
|
37
|
+
}
|
|
38
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
39
|
+
return {
|
|
40
|
+
default: obj
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
44
|
+
if (cache && cache.has(obj)) {
|
|
45
|
+
return cache.get(obj);
|
|
46
|
+
}
|
|
47
|
+
var newObj = {};
|
|
48
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
49
|
+
for(var key in obj){
|
|
50
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
51
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
52
|
+
if (desc && (desc.get || desc.set)) {
|
|
53
|
+
Object.defineProperty(newObj, key, desc);
|
|
54
|
+
} else {
|
|
55
|
+
newObj[key] = obj[key];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
newObj.default = obj;
|
|
60
|
+
if (cache) {
|
|
61
|
+
cache.set(obj, newObj);
|
|
62
|
+
}
|
|
63
|
+
return newObj;
|
|
64
|
+
}
|
|
65
|
+
const baseClass = 'edit-upload';
|
|
66
|
+
const Input = ({ name, onChange, value })=>/*#__PURE__*/ _react.default.createElement("div", {
|
|
67
|
+
className: `${baseClass}__input`
|
|
68
|
+
}, name, /*#__PURE__*/ _react.default.createElement("input", {
|
|
69
|
+
name: name,
|
|
70
|
+
onChange: (e)=>onChange(e.target.value),
|
|
71
|
+
type: "number",
|
|
72
|
+
value: value
|
|
73
|
+
}));
|
|
74
|
+
const EditUpload = ({ fileName, fileSrc, imageCacheTag, showCrop, showFocalPoint })=>{
|
|
75
|
+
const { closeModal } = (0, _modal.useModal)();
|
|
76
|
+
const { t } = (0, _reacti18next.useTranslation)([
|
|
77
|
+
'general',
|
|
78
|
+
'upload'
|
|
79
|
+
]);
|
|
80
|
+
const { formQueryParams, setFormQueryParams } = (0, _FormQueryParams.useFormQueryParams)();
|
|
81
|
+
const { uploadEdits } = formQueryParams || {};
|
|
82
|
+
const [crop, setCrop] = (0, _react.useState)({
|
|
83
|
+
height: uploadEdits?.crop?.height || 100,
|
|
84
|
+
unit: '%',
|
|
85
|
+
width: uploadEdits?.crop?.width || 100,
|
|
86
|
+
x: uploadEdits?.crop?.x || 0,
|
|
87
|
+
y: uploadEdits?.crop?.y || 0
|
|
88
|
+
});
|
|
89
|
+
const [pointPosition, setPointPosition] = (0, _react.useState)({
|
|
90
|
+
x: uploadEdits?.focalPoint?.x || 50,
|
|
91
|
+
y: uploadEdits?.focalPoint?.y || 50
|
|
92
|
+
});
|
|
93
|
+
const [checkBounds, setCheckBounds] = (0, _react.useState)(false);
|
|
94
|
+
const focalWrapRef = (0, _react.useRef)();
|
|
95
|
+
const imageRef = (0, _react.useRef)();
|
|
96
|
+
const cropRef = (0, _react.useRef)();
|
|
97
|
+
const originalHeight = imageRef.current ? imageRef.current.naturalHeight : 0;
|
|
98
|
+
const originalWidth = imageRef.current ? imageRef.current.naturalWidth : 0;
|
|
99
|
+
const fineTuneCrop = ({ dimension, value })=>{
|
|
100
|
+
const intValue = parseInt(value);
|
|
101
|
+
if (dimension === 'width' && intValue >= originalWidth) return null;
|
|
102
|
+
if (dimension === 'height' && intValue >= originalHeight) return null;
|
|
103
|
+
const percentage = 100 * (intValue / (dimension === 'width' ? originalWidth : originalHeight));
|
|
104
|
+
if (percentage === 100 || percentage === 0) return null;
|
|
105
|
+
setCrop({
|
|
106
|
+
...crop,
|
|
107
|
+
[dimension]: percentage
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
const fineTuneFocalPoint = ({ coordinate, value })=>{
|
|
111
|
+
const intValue = parseInt(value);
|
|
112
|
+
if (intValue >= 0 && intValue <= 100) {
|
|
113
|
+
setPointPosition((prevPosition)=>({
|
|
114
|
+
...prevPosition,
|
|
115
|
+
[coordinate]: intValue
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const saveEdits = ()=>{
|
|
120
|
+
setFormQueryParams({
|
|
121
|
+
...formQueryParams,
|
|
122
|
+
uploadEdits: {
|
|
123
|
+
crop: crop ? crop : undefined,
|
|
124
|
+
focalPoint: pointPosition ? pointPosition : undefined
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
closeModal(_Upload.editDrawerSlug);
|
|
128
|
+
};
|
|
129
|
+
const onDragEnd = _react.default.useCallback(({ x, y })=>{
|
|
130
|
+
setPointPosition({
|
|
131
|
+
x,
|
|
132
|
+
y
|
|
133
|
+
});
|
|
134
|
+
setCheckBounds(false);
|
|
135
|
+
}, []);
|
|
136
|
+
const centerFocalPoint = ()=>{
|
|
137
|
+
const containerRect = focalWrapRef.current.getBoundingClientRect();
|
|
138
|
+
const boundsRect = cropRef.current.getBoundingClientRect();
|
|
139
|
+
const xCenter = (boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width * 100;
|
|
140
|
+
const yCenter = (boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height * 100;
|
|
141
|
+
setPointPosition({
|
|
142
|
+
x: xCenter,
|
|
143
|
+
y: yCenter
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
const fileSrcToUse = imageCacheTag ? `${fileSrc}?${imageCacheTag}` : fileSrc;
|
|
147
|
+
return /*#__PURE__*/ _react.default.createElement("div", {
|
|
148
|
+
className: baseClass
|
|
149
|
+
}, /*#__PURE__*/ _react.default.createElement("div", {
|
|
150
|
+
className: `${baseClass}__header`
|
|
151
|
+
}, /*#__PURE__*/ _react.default.createElement("h2", {
|
|
152
|
+
title: `${t('general:editing')} ${fileName}`
|
|
153
|
+
}, t('general:editing'), " ", fileName), /*#__PURE__*/ _react.default.createElement("div", {
|
|
154
|
+
className: `${baseClass}__actions`
|
|
155
|
+
}, /*#__PURE__*/ _react.default.createElement(_Button.default, {
|
|
156
|
+
"aria-label": t('cancel'),
|
|
157
|
+
buttonStyle: "secondary",
|
|
158
|
+
className: `${baseClass}__cancel`,
|
|
159
|
+
onClick: ()=>closeModal(_Upload.editDrawerSlug)
|
|
160
|
+
}, t('general:cancel')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
|
|
161
|
+
"aria-label": t('general:applyChanges'),
|
|
162
|
+
buttonStyle: "primary",
|
|
163
|
+
className: `${baseClass}__save`,
|
|
164
|
+
onClick: ()=>saveEdits()
|
|
165
|
+
}, t('general:applyChanges')))), /*#__PURE__*/ _react.default.createElement("div", {
|
|
166
|
+
className: `${baseClass}__toolWrap`
|
|
167
|
+
}, /*#__PURE__*/ _react.default.createElement("div", {
|
|
168
|
+
className: `${baseClass}__crop`
|
|
169
|
+
}, /*#__PURE__*/ _react.default.createElement("div", {
|
|
170
|
+
className: `${baseClass}__focal-wrapper`,
|
|
171
|
+
ref: focalWrapRef,
|
|
172
|
+
style: {
|
|
173
|
+
aspectRatio: `${originalWidth / originalHeight}`
|
|
174
|
+
}
|
|
175
|
+
}, showCrop ? /*#__PURE__*/ _react.default.createElement(_reactimagecrop.default, {
|
|
176
|
+
className: `${baseClass}__reactCrop`,
|
|
177
|
+
crop: crop,
|
|
178
|
+
onChange: (_, c)=>setCrop(c),
|
|
179
|
+
onComplete: ()=>setCheckBounds(true),
|
|
180
|
+
renderSelectionAddon: ()=>{
|
|
181
|
+
return /*#__PURE__*/ _react.default.createElement("div", {
|
|
182
|
+
className: `${baseClass}__crop-window`,
|
|
183
|
+
ref: cropRef
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}, /*#__PURE__*/ _react.default.createElement("img", {
|
|
187
|
+
alt: t('upload:setCropArea'),
|
|
188
|
+
ref: imageRef,
|
|
189
|
+
src: fileSrcToUse
|
|
190
|
+
})) : /*#__PURE__*/ _react.default.createElement("img", {
|
|
191
|
+
alt: t('upload:setFocalPoint'),
|
|
192
|
+
ref: imageRef,
|
|
193
|
+
src: fileSrcToUse
|
|
194
|
+
}), /*#__PURE__*/ _react.default.createElement(DraggableElement, {
|
|
195
|
+
boundsRef: cropRef,
|
|
196
|
+
checkBounds: checkBounds,
|
|
197
|
+
className: `${baseClass}__focalPoint`,
|
|
198
|
+
containerRef: focalWrapRef,
|
|
199
|
+
initialPosition: pointPosition,
|
|
200
|
+
onDragEnd: onDragEnd,
|
|
201
|
+
setCheckBounds: setCheckBounds
|
|
202
|
+
}, /*#__PURE__*/ _react.default.createElement(_Plus.default, null)))), (showCrop || showFocalPoint) && /*#__PURE__*/ _react.default.createElement("div", {
|
|
203
|
+
className: `${baseClass}__sidebar`
|
|
204
|
+
}, showCrop && /*#__PURE__*/ _react.default.createElement("div", {
|
|
205
|
+
className: `${baseClass}__groupWrap`
|
|
206
|
+
}, /*#__PURE__*/ _react.default.createElement("div", null, /*#__PURE__*/ _react.default.createElement("div", {
|
|
207
|
+
className: `${baseClass}__titleWrap`
|
|
208
|
+
}, /*#__PURE__*/ _react.default.createElement("h3", null, t('upload:crop')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
|
|
209
|
+
buttonStyle: "none",
|
|
210
|
+
className: `${baseClass}__reset`,
|
|
211
|
+
onClick: ()=>setCrop({
|
|
212
|
+
height: 100,
|
|
213
|
+
unit: '%',
|
|
214
|
+
width: 100,
|
|
215
|
+
x: 0,
|
|
216
|
+
y: 0
|
|
217
|
+
})
|
|
218
|
+
}, t('general:reset')))), /*#__PURE__*/ _react.default.createElement("span", {
|
|
219
|
+
className: `${baseClass}__description`
|
|
220
|
+
}, t('upload:cropToolDescription')), /*#__PURE__*/ _react.default.createElement("div", {
|
|
221
|
+
className: `${baseClass}__inputsWrap`
|
|
222
|
+
}, /*#__PURE__*/ _react.default.createElement(Input, {
|
|
223
|
+
name: `${t('upload:width')} (px)`,
|
|
224
|
+
onChange: (value)=>fineTuneCrop({
|
|
225
|
+
dimension: 'width',
|
|
226
|
+
value
|
|
227
|
+
}),
|
|
228
|
+
value: (crop.width / 100 * originalWidth).toFixed(0)
|
|
229
|
+
}), /*#__PURE__*/ _react.default.createElement(Input, {
|
|
230
|
+
name: `${t('upload:height')} (px)`,
|
|
231
|
+
onChange: (value)=>fineTuneCrop({
|
|
232
|
+
dimension: 'height',
|
|
233
|
+
value
|
|
234
|
+
}),
|
|
235
|
+
value: (crop.height / 100 * originalHeight).toFixed(0)
|
|
236
|
+
}))), showFocalPoint && /*#__PURE__*/ _react.default.createElement("div", {
|
|
237
|
+
className: `${baseClass}__groupWrap`
|
|
238
|
+
}, /*#__PURE__*/ _react.default.createElement("div", null, /*#__PURE__*/ _react.default.createElement("div", {
|
|
239
|
+
className: `${baseClass}__titleWrap`
|
|
240
|
+
}, /*#__PURE__*/ _react.default.createElement("h3", null, t('upload:focalPoint')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
|
|
241
|
+
buttonStyle: "none",
|
|
242
|
+
className: `${baseClass}__reset`,
|
|
243
|
+
onClick: centerFocalPoint
|
|
244
|
+
}, t('general:reset')))), /*#__PURE__*/ _react.default.createElement("span", {
|
|
245
|
+
className: `${baseClass}__description`
|
|
246
|
+
}, t('upload:focalPointDescription')), /*#__PURE__*/ _react.default.createElement("div", {
|
|
247
|
+
className: `${baseClass}__inputsWrap`
|
|
248
|
+
}, /*#__PURE__*/ _react.default.createElement(Input, {
|
|
249
|
+
name: "X %",
|
|
250
|
+
onChange: (value)=>fineTuneFocalPoint({
|
|
251
|
+
coordinate: 'x',
|
|
252
|
+
value
|
|
253
|
+
}),
|
|
254
|
+
value: pointPosition.x.toFixed(0)
|
|
255
|
+
}), /*#__PURE__*/ _react.default.createElement(Input, {
|
|
256
|
+
name: "Y %",
|
|
257
|
+
onChange: (value)=>fineTuneFocalPoint({
|
|
258
|
+
coordinate: 'y',
|
|
259
|
+
value
|
|
260
|
+
}),
|
|
261
|
+
value: pointPosition.y.toFixed(0)
|
|
262
|
+
}))))));
|
|
263
|
+
};
|
|
264
|
+
const DraggableElement = ({ boundsRef, checkBounds, children, className, containerRef, initialPosition = {
|
|
265
|
+
x: 50,
|
|
266
|
+
y: 50
|
|
267
|
+
}, onDragEnd, setCheckBounds })=>{
|
|
268
|
+
const [position, setPosition] = (0, _react.useState)({
|
|
269
|
+
x: initialPosition.x,
|
|
270
|
+
y: initialPosition.y
|
|
271
|
+
});
|
|
272
|
+
const [isDragging, setIsDragging] = (0, _react.useState)(false);
|
|
273
|
+
const dragRef = (0, _react.useRef)();
|
|
274
|
+
const getCoordinates = _react.default.useCallback((mouseXArg, mouseYArg, recenter)=>{
|
|
275
|
+
const containerRect = containerRef.current.getBoundingClientRect();
|
|
276
|
+
const boundsRect = boundsRef.current.getBoundingClientRect();
|
|
277
|
+
const mouseX = mouseXArg ?? boundsRect.left;
|
|
278
|
+
const mouseY = mouseYArg ?? boundsRect.top;
|
|
279
|
+
const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right;
|
|
280
|
+
const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom;
|
|
281
|
+
let x = (mouseX - containerRect.left) / containerRect.width * 100;
|
|
282
|
+
let y = (mouseY - containerRect.top) / containerRect.height * 100;
|
|
283
|
+
const xCenter = (boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width * 100;
|
|
284
|
+
const yCenter = (boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height * 100;
|
|
285
|
+
if (xOutOfBounds || yOutOfBounds) {
|
|
286
|
+
setIsDragging(false);
|
|
287
|
+
if (mouseX < boundsRect.left) {
|
|
288
|
+
x = (boundsRect.left - containerRect.left) / containerRect.width * 100;
|
|
289
|
+
} else if (mouseX > boundsRect.right) {
|
|
290
|
+
x = (containerRect.width - (containerRect.right - boundsRect.right)) / containerRect.width * 100;
|
|
291
|
+
}
|
|
292
|
+
if (mouseY < boundsRect.top) {
|
|
293
|
+
y = (boundsRect.top - containerRect.top) / containerRect.height * 100;
|
|
294
|
+
} else if (mouseY > boundsRect.bottom) {
|
|
295
|
+
y = (containerRect.height - (containerRect.bottom - boundsRect.bottom)) / containerRect.height * 100;
|
|
296
|
+
}
|
|
297
|
+
if (recenter) {
|
|
298
|
+
x = xOutOfBounds ? xCenter : x;
|
|
299
|
+
y = yOutOfBounds ? yCenter : y;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
x,
|
|
304
|
+
y
|
|
305
|
+
};
|
|
306
|
+
}, []);
|
|
307
|
+
const handleMouseDown = (event)=>{
|
|
308
|
+
event.preventDefault();
|
|
309
|
+
setIsDragging(true);
|
|
310
|
+
};
|
|
311
|
+
const handleMouseMove = (event)=>{
|
|
312
|
+
if (!isDragging) return null;
|
|
313
|
+
const { x, y } = getCoordinates(event.clientX, event.clientY);
|
|
314
|
+
setPosition({
|
|
315
|
+
x,
|
|
316
|
+
y
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
const onDrop = ()=>{
|
|
320
|
+
setIsDragging(false);
|
|
321
|
+
onDragEnd(position);
|
|
322
|
+
};
|
|
323
|
+
_react.default.useEffect(()=>{
|
|
324
|
+
if (isDragging || !dragRef.current) return;
|
|
325
|
+
if (checkBounds) {
|
|
326
|
+
const { height, left, top, width } = dragRef.current.getBoundingClientRect();
|
|
327
|
+
const { x, y } = getCoordinates(left + width / 2, top + height / 2, true);
|
|
328
|
+
onDragEnd({
|
|
329
|
+
x,
|
|
330
|
+
y
|
|
331
|
+
});
|
|
332
|
+
setPosition({
|
|
333
|
+
x,
|
|
334
|
+
y
|
|
335
|
+
});
|
|
336
|
+
setCheckBounds(false);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
}, [
|
|
340
|
+
getCoordinates,
|
|
341
|
+
isDragging,
|
|
342
|
+
checkBounds,
|
|
343
|
+
setCheckBounds,
|
|
344
|
+
position.x,
|
|
345
|
+
position.y
|
|
346
|
+
]);
|
|
347
|
+
_react.default.useEffect(()=>{
|
|
348
|
+
setPosition({
|
|
349
|
+
x: initialPosition.x,
|
|
350
|
+
y: initialPosition.y
|
|
351
|
+
});
|
|
352
|
+
}, [
|
|
353
|
+
initialPosition.x,
|
|
354
|
+
initialPosition.y
|
|
355
|
+
]);
|
|
356
|
+
return /*#__PURE__*/ _react.default.createElement("div", {
|
|
357
|
+
className: [
|
|
358
|
+
`${baseClass}__draggable-container`,
|
|
359
|
+
isDragging && `${baseClass}__draggable-container--dragging`
|
|
360
|
+
].filter(Boolean).join(' '),
|
|
361
|
+
onMouseMove: handleMouseMove
|
|
362
|
+
}, /*#__PURE__*/ _react.default.createElement("div", {
|
|
363
|
+
className: [
|
|
364
|
+
`${baseClass}__draggable`,
|
|
365
|
+
className
|
|
366
|
+
].filter(Boolean).join(' '),
|
|
367
|
+
onMouseDown: handleMouseDown,
|
|
368
|
+
onMouseUp: onDrop,
|
|
369
|
+
ref: dragRef,
|
|
370
|
+
style: {
|
|
371
|
+
left: `${position.x}%`,
|
|
372
|
+
position: 'absolute',
|
|
373
|
+
top: `${position.y}%`
|
|
374
|
+
}
|
|
375
|
+
}, children), /*#__PURE__*/ _react.default.createElement("div", null));
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL0VkaXRVcGxvYWQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCBSZWFjdENyb3AsIHsgdHlwZSBDcm9wIGFzIENyb3BUeXBlIH0gZnJvbSAncmVhY3QtaW1hZ2UtY3JvcCdcbmltcG9ydCAncmVhY3QtaW1hZ2UtY3JvcC9kaXN0L1JlYWN0Q3JvcC5jc3MnXG5cbmltcG9ydCB0eXBlIHsgRGF0YSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vdHlwZXMnXG5cbmltcG9ydCBQbHVzIGZyb20gJy4uLy4uL2ljb25zL1BsdXMnXG5pbXBvcnQgeyB1c2VGb3JtUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvRm9ybVF1ZXJ5UGFyYW1zJ1xuaW1wb3J0IHsgZWRpdERyYXdlclNsdWcgfSBmcm9tICcuLi8uLi92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L1VwbG9hZCdcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vQnV0dG9uJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdlZGl0LXVwbG9hZCdcblxuY29uc3QgSW5wdXQ6IFJlYWN0LkZDPHsgbmFtZTogc3RyaW5nOyBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7IHZhbHVlOiBzdHJpbmcgfT4gPSAoe1xuICBuYW1lLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dGB9PlxuICAgIHtuYW1lfVxuICAgIDxpbnB1dCBuYW1lPXtuYW1lfSBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0gdHlwZT1cIm51bWJlclwiIHZhbHVlPXt2YWx1ZX0gLz5cbiAgPC9kaXY+XG4pXG5cbmV4cG9ydCBjb25zdCBFZGl0VXBsb2FkOiBSZWFjdC5GQzx7XG4gIGRvYz86IERhdGFcbiAgZmlsZU5hbWU6IHN0cmluZ1xuICBmaWxlU3JjOiBzdHJpbmdcbiAgaW1hZ2VDYWNoZVRhZz86IHN0cmluZ1xuICBzaG93Q3JvcD86IGJvb2xlYW5cbiAgc2hvd0ZvY2FsUG9pbnQ/OiBib29sZWFuXG59PiA9ICh7IGZpbGVOYW1lLCBmaWxlU3JjLCBpbWFnZUNhY2hlVGFnLCBzaG93Q3JvcCwgc2hvd0ZvY2FsUG9pbnQgfSkgPT4ge1xuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ2dlbmVyYWwnLCAndXBsb2FkJ10pXG4gIGNvbnN0IHsgZm9ybVF1ZXJ5UGFyYW1zLCBzZXRGb3JtUXVlcnlQYXJhbXMgfSA9IHVzZUZvcm1RdWVyeVBhcmFtcygpXG4gIGNvbnN0IHsgdXBsb2FkRWRpdHMgfSA9IGZvcm1RdWVyeVBhcmFtcyB8fCB7fVxuICBjb25zdCBbY3JvcCwgc2V0Q3JvcF0gPSB1c2VTdGF0ZTxDcm9wVHlwZT4oe1xuICAgIGhlaWdodDogdXBsb2FkRWRpdHM/LmNyb3A/LmhlaWdodCB8fCAxMDAsXG4gICAgdW5pdDogJyUnLFxuICAgIHdpZHRoOiB1cGxvYWRFZGl0cz8uY3JvcD8ud2lkdGggfHwgMTAwLFxuICAgIHg6IHVwbG9hZEVkaXRzPy5jcm9wPy54IHx8IDAsXG4gICAgeTogdXBsb2FkRWRpdHM/LmNyb3A/LnkgfHwgMCxcbiAgfSlcblxuICBjb25zdCBbcG9pbnRQb3NpdGlvbiwgc2V0UG9pbnRQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+KHtcbiAgICB4OiB1cGxvYWRFZGl0cz8uZm9jYWxQb2ludD8ueCB8fCA1MCxcbiAgICB5OiB1cGxvYWRFZGl0cz8uZm9jYWxQb2ludD8ueSB8fCA1MCxcbiAgfSlcbiAgY29uc3QgW2NoZWNrQm91bmRzLCBzZXRDaGVja0JvdW5kc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcblxuICBjb25zdCBmb2NhbFdyYXBSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ+KClcbiAgY29uc3QgaW1hZ2VSZWYgPSB1c2VSZWY8SFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZD4oKVxuICBjb25zdCBjcm9wUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkPigpXG5cbiAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSBpbWFnZVJlZi5jdXJyZW50ID8gaW1hZ2VSZWYuY3VycmVudC5uYXR1cmFsSGVpZ2h0IDogMFxuICBjb25zdCBvcmlnaW5hbFdpZHRoID0gaW1hZ2VSZWYuY3VycmVudCA/IGltYWdlUmVmLmN1cnJlbnQubmF0dXJhbFdpZHRoIDogMFxuXG4gIGNvbnN0IGZpbmVUdW5lQ3JvcCA9ICh7IGRpbWVuc2lvbiwgdmFsdWUgfTogeyBkaW1lbnNpb246ICdoZWlnaHQnIHwgJ3dpZHRoJzsgdmFsdWU6IHN0cmluZyB9KSA9PiB7XG4gICAgY29uc3QgaW50VmFsdWUgPSBwYXJzZUludCh2YWx1ZSlcbiAgICBpZiAoZGltZW5zaW9uID09PSAnd2lkdGgnICYmIGludFZhbHVlID49IG9yaWdpbmFsV2lkdGgpIHJldHVybiBudWxsXG4gICAgaWYgKGRpbWVuc2lvbiA9PT0gJ2hlaWdodCcgJiYgaW50VmFsdWUgPj0gb3JpZ2luYWxIZWlnaHQpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwZXJjZW50YWdlID0gMTAwICogKGludFZhbHVlIC8gKGRpbWVuc2lvbiA9PT0gJ3dpZHRoJyA/IG9yaWdpbmFsV2lkdGggOiBvcmlnaW5hbEhlaWdodCkpXG5cbiAgICBpZiAocGVyY2VudGFnZSA9PT0gMTAwIHx8IHBlcmNlbnRhZ2UgPT09IDApIHJldHVybiBudWxsXG5cbiAgICBzZXRDcm9wKHtcbiAgICAgIC4uLmNyb3AsXG4gICAgICBbZGltZW5zaW9uXTogcGVyY2VudGFnZSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgZmluZVR1bmVGb2NhbFBvaW50ID0gKHsgY29vcmRpbmF0ZSwgdmFsdWUgfTogeyBjb29yZGluYXRlOiAneCcgfCAneSc7IHZhbHVlOiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGludFZhbHVlID0gcGFyc2VJbnQodmFsdWUpXG4gICAgaWYgKGludFZhbHVlID49IDAgJiYgaW50VmFsdWUgPD0gMTAwKSB7XG4gICAgICBzZXRQb2ludFBvc2l0aW9uKChwcmV2UG9zaXRpb24pID0+ICh7IC4uLnByZXZQb3NpdGlvbiwgW2Nvb3JkaW5hdGVdOiBpbnRWYWx1ZSB9KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzYXZlRWRpdHMgPSAoKSA9PiB7XG4gICAgc2V0Rm9ybVF1ZXJ5UGFyYW1zKHtcbiAgICAgIC4uLmZvcm1RdWVyeVBhcmFtcyxcbiAgICAgIHVwbG9hZEVkaXRzOiB7XG4gICAgICAgIGNyb3A6IGNyb3AgPyBjcm9wIDogdW5kZWZpbmVkLFxuICAgICAgICBmb2NhbFBvaW50OiBwb2ludFBvc2l0aW9uID8gcG9pbnRQb3NpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBjbG9zZU1vZGFsKGVkaXREcmF3ZXJTbHVnKVxuICB9XG5cbiAgY29uc3Qgb25EcmFnRW5kID0gUmVhY3QudXNlQ2FsbGJhY2soKHsgeCwgeSB9KSA9PiB7XG4gICAgc2V0UG9pbnRQb3NpdGlvbih7IHgsIHkgfSlcbiAgICBzZXRDaGVja0JvdW5kcyhmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgY2VudGVyRm9jYWxQb2ludCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gZm9jYWxXcmFwUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBib3VuZHNSZWN0ID0gY3JvcFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3QgeENlbnRlciA9XG4gICAgICAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIGJvdW5kc1JlY3Qud2lkdGggLyAyKSAvIGNvbnRhaW5lclJlY3Qud2lkdGgpICogMTAwXG4gICAgY29uc3QgeUNlbnRlciA9XG4gICAgICAoKGJvdW5kc1JlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3AgKyBib3VuZHNSZWN0LmhlaWdodCAvIDIpIC8gY29udGFpbmVyUmVjdC5oZWlnaHQpICogMTAwXG4gICAgc2V0UG9pbnRQb3NpdGlvbih7IHg6IHhDZW50ZXIsIHk6IHlDZW50ZXIgfSlcbiAgfVxuXG4gIGNvbnN0IGZpbGVTcmNUb1VzZSA9IGltYWdlQ2FjaGVUYWcgPyBgJHtmaWxlU3JjfT8ke2ltYWdlQ2FjaGVUYWd9YCA6IGZpbGVTcmNcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgICA8aDIgdGl0bGU9e2Ake3QoJ2dlbmVyYWw6ZWRpdGluZycpfSAke2ZpbGVOYW1lfWB9PlxuICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXRpbmcnKX0ge2ZpbGVOYW1lfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jYW5jZWxgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2VNb2RhbChlZGl0RHJhd2VyU2x1Zyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6Y2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDphcHBseUNoYW5nZXMnKX1cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NhdmVgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2F2ZUVkaXRzKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6YXBwbHlDaGFuZ2VzJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9vbFdyYXBgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Nyb3BgfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZvY2FsLXdyYXBwZXJgfVxuICAgICAgICAgICAgcmVmPXtmb2NhbFdyYXBSZWZ9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogYCR7b3JpZ2luYWxXaWR0aCAvIG9yaWdpbmFsSGVpZ2h0fWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzaG93Q3JvcCA/IChcbiAgICAgICAgICAgICAgPFJlYWN0Q3JvcFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVhY3RDcm9wYH1cbiAgICAgICAgICAgICAgICBjcm9wPXtjcm9wfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoXywgYykgPT4gc2V0Q3JvcChjKX1cbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXsoKSA9PiBzZXRDaGVja0JvdW5kcyh0cnVlKX1cbiAgICAgICAgICAgICAgICByZW5kZXJTZWxlY3Rpb25BZGRvbj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jcm9wLXdpbmRvd2B9IHJlZj17Y3JvcFJlZn0gLz5cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGltZyBhbHQ9e3QoJ3VwbG9hZDpzZXRDcm9wQXJlYScpfSByZWY9e2ltYWdlUmVmfSBzcmM9e2ZpbGVTcmNUb1VzZX0gLz5cbiAgICAgICAgICAgICAgPC9SZWFjdENyb3A+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8aW1nIGFsdD17dCgndXBsb2FkOnNldEZvY2FsUG9pbnQnKX0gcmVmPXtpbWFnZVJlZn0gc3JjPXtmaWxlU3JjVG9Vc2V9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPERyYWdnYWJsZUVsZW1lbnRcbiAgICAgICAgICAgICAgYm91bmRzUmVmPXtjcm9wUmVmfVxuICAgICAgICAgICAgICBjaGVja0JvdW5kcz17Y2hlY2tCb3VuZHN9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZm9jYWxQb2ludGB9XG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlZj17Zm9jYWxXcmFwUmVmfVxuICAgICAgICAgICAgICBpbml0aWFsUG9zaXRpb249e3BvaW50UG9zaXRpb259XG4gICAgICAgICAgICAgIG9uRHJhZ0VuZD17b25EcmFnRW5kfVxuICAgICAgICAgICAgICBzZXRDaGVja0JvdW5kcz17c2V0Q2hlY2tCb3VuZHN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzIC8+XG4gICAgICAgICAgICA8L0RyYWdnYWJsZUVsZW1lbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KHNob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50KSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpZGViYXJgfT5cbiAgICAgICAgICAgIHtzaG93Q3JvcCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ncm91cFdyYXBgfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RpdGxlV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgICA8aDM+e3QoJ3VwbG9hZDpjcm9wJyl9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZXNldGB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENyb3Aoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpyZXNldCcpfVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGVzY3JpcHRpb25gfT5cbiAgICAgICAgICAgICAgICAgIHt0KCd1cGxvYWQ6Y3JvcFRvb2xEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faW5wdXRzV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9e2Ake3QoJ3VwbG9hZDp3aWR0aCcpfSAocHgpYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVDcm9wKHsgZGltZW5zaW9uOiAnd2lkdGgnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9eygoY3JvcC53aWR0aCAvIDEwMCkgKiBvcmlnaW5hbFdpZHRoKS50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPXtgJHt0KCd1cGxvYWQ6aGVpZ2h0Jyl9IChweClgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiBmaW5lVHVuZUNyb3AoeyBkaW1lbnNpb246ICdoZWlnaHQnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9eygoY3JvcC5oZWlnaHQgLyAxMDApICogb3JpZ2luYWxIZWlnaHQpLnRvRml4ZWQoMCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtzaG93Rm9jYWxQb2ludCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ncm91cFdyYXBgfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RpdGxlV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgICA8aDM+e3QoJ3VwbG9hZDpmb2NhbFBvaW50Jyl9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZXNldGB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2VudGVyRm9jYWxQb2ludH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOnJlc2V0Jyl9XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kZXNjcmlwdGlvbmB9PlxuICAgICAgICAgICAgICAgICAge3QoJ3VwbG9hZDpmb2NhbFBvaW50RGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2lucHV0c1dyYXBgfT5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiWCAlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVGb2NhbFBvaW50KHsgY29vcmRpbmF0ZTogJ3gnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BvaW50UG9zaXRpb24ueC50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiWSAlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVGb2NhbFBvaW50KHsgY29vcmRpbmF0ZTogJ3knLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BvaW50UG9zaXRpb24ueS50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuY29uc3QgRHJhZ2dhYmxlRWxlbWVudCA9ICh7XG4gIGJvdW5kc1JlZixcbiAgY2hlY2tCb3VuZHMsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW5pdGlhbFBvc2l0aW9uID0geyB4OiA1MCwgeTogNTAgfSxcbiAgb25EcmFnRW5kLFxuICBzZXRDaGVja0JvdW5kcyxcbn0pID0+IHtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHg6IGluaXRpYWxQb3NpdGlvbi54LCB5OiBpbml0aWFsUG9zaXRpb24ueSB9KVxuICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgZHJhZ1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZD4oKVxuXG4gIGNvbnN0IGdldENvb3JkaW5hdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG1vdXNlWEFyZz86IG51bWJlciwgbW91c2VZQXJnPzogbnVtYmVyLCByZWNlbnRlcj86IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgYm91bmRzUmVjdCA9IGJvdW5kc1JlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBtb3VzZVggPSBtb3VzZVhBcmcgPz8gYm91bmRzUmVjdC5sZWZ0XG4gICAgICBjb25zdCBtb3VzZVkgPSBtb3VzZVlBcmcgPz8gYm91bmRzUmVjdC50b3BcblxuICAgICAgY29uc3QgeE91dE9mQm91bmRzID0gbW91c2VYIDwgYm91bmRzUmVjdC5sZWZ0IHx8IG1vdXNlWCA+IGJvdW5kc1JlY3QucmlnaHRcbiAgICAgIGNvbnN0IHlPdXRPZkJvdW5kcyA9IG1vdXNlWSA8IGJvdW5kc1JlY3QudG9wIHx8IG1vdXNlWSA+IGJvdW5kc1JlY3QuYm90dG9tXG5cbiAgICAgIGxldCB4ID0gKChtb3VzZVggLSBjb250YWluZXJSZWN0LmxlZnQpIC8gY29udGFpbmVyUmVjdC53aWR0aCkgKiAxMDBcbiAgICAgIGxldCB5ID0gKChtb3VzZVkgLSBjb250YWluZXJSZWN0LnRvcCkgLyBjb250YWluZXJSZWN0LmhlaWdodCkgKiAxMDBcbiAgICAgIGNvbnN0IHhDZW50ZXIgPVxuICAgICAgICAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIGJvdW5kc1JlY3Qud2lkdGggLyAyKSAvIGNvbnRhaW5lclJlY3Qud2lkdGgpICogMTAwXG4gICAgICBjb25zdCB5Q2VudGVyID1cbiAgICAgICAgKChib3VuZHNSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgYm91bmRzUmVjdC5oZWlnaHQgLyAyKSAvIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqIDEwMFxuICAgICAgaWYgKHhPdXRPZkJvdW5kcyB8fCB5T3V0T2ZCb3VuZHMpIHtcbiAgICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICAgICAgaWYgKG1vdXNlWCA8IGJvdW5kc1JlY3QubGVmdCkge1xuICAgICAgICAgIHggPSAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCkgLyBjb250YWluZXJSZWN0LndpZHRoKSAqIDEwMFxuICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWCA+IGJvdW5kc1JlY3QucmlnaHQpIHtcbiAgICAgICAgICB4ID1cbiAgICAgICAgICAgICgoY29udGFpbmVyUmVjdC53aWR0aCAtIChjb250YWluZXJSZWN0LnJpZ2h0IC0gYm91bmRzUmVjdC5yaWdodCkpIC9cbiAgICAgICAgICAgICAgY29udGFpbmVyUmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW91c2VZIDwgYm91bmRzUmVjdC50b3ApIHtcbiAgICAgICAgICB5ID0gKChib3VuZHNSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wKSAvIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqIDEwMFxuICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWSA+IGJvdW5kc1JlY3QuYm90dG9tKSB7XG4gICAgICAgICAgeSA9XG4gICAgICAgICAgICAoKGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gKGNvbnRhaW5lclJlY3QuYm90dG9tIC0gYm91bmRzUmVjdC5ib3R0b20pKSAvXG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWNlbnRlcikge1xuICAgICAgICAgIHggPSB4T3V0T2ZCb3VuZHMgPyB4Q2VudGVyIDogeFxuICAgICAgICAgIHkgPSB5T3V0T2ZCb3VuZHMgPyB5Q2VudGVyIDogeVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH0sXG4gICAgW10sXG4gIClcblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHsgeCwgeSB9ID0gZ2V0Q29vcmRpbmF0ZXMoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgIHNldFBvc2l0aW9uKHsgeCwgeSB9KVxuICB9XG5cbiAgY29uc3Qgb25Ecm9wID0gKCkgPT4ge1xuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG4gICAgb25EcmFnRW5kKHBvc2l0aW9uKVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEcmFnZ2luZyB8fCAhZHJhZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBpZiAoY2hlY2tCb3VuZHMpIHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBsZWZ0LCB0b3AsIHdpZHRoIH0gPSBkcmFnUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gZ2V0Q29vcmRpbmF0ZXMobGVmdCArIHdpZHRoIC8gMiwgdG9wICsgaGVpZ2h0IC8gMiwgdHJ1ZSlcbiAgICAgIG9uRHJhZ0VuZCh7IHgsIHkgfSlcbiAgICAgIHNldFBvc2l0aW9uKHsgeCwgeSB9KVxuICAgICAgc2V0Q2hlY2tCb3VuZHMoZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0sIFtnZXRDb29yZGluYXRlcywgaXNEcmFnZ2luZywgY2hlY2tCb3VuZHMsIHNldENoZWNrQm91bmRzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55XSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvc2l0aW9uKHsgeDogaW5pdGlhbFBvc2l0aW9uLngsIHk6IGluaXRpYWxQb3NpdGlvbi55IH0pXG4gIH0sIFtpbml0aWFsUG9zaXRpb24ueCwgaW5pdGlhbFBvc2l0aW9uLnldKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGAke2Jhc2VDbGFzc31fX2RyYWdnYWJsZS1jb250YWluZXJgLFxuICAgICAgICBpc0RyYWdnaW5nICYmIGAke2Jhc2VDbGFzc31fX2RyYWdnYWJsZS1jb250YWluZXItLWRyYWdnaW5nYCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZU1vdXNlTW92ZX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2RyYWdnYWJsZWAsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgICAgb25Nb3VzZURvd249e2hhbmRsZU1vdXNlRG93bn1cbiAgICAgICAgb25Nb3VzZVVwPXtvbkRyb3B9XG4gICAgICAgIHJlZj17ZHJhZ1JlZn1cbiAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7cG9zaXRpb24ueH0lYCwgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogYCR7cG9zaXRpb24ueX0lYCB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIkVkaXRVcGxvYWQiLCJiYXNlQ2xhc3MiLCJJbnB1dCIsIm5hbWUiLCJvbkNoYW5nZSIsInZhbHVlIiwiZGl2IiwiY2xhc3NOYW1lIiwiaW5wdXQiLCJlIiwidGFyZ2V0IiwidHlwZSIsImZpbGVOYW1lIiwiZmlsZVNyYyIsImltYWdlQ2FjaGVUYWciLCJzaG93Q3JvcCIsInNob3dGb2NhbFBvaW50IiwiY2xvc2VNb2RhbCIsInVzZU1vZGFsIiwidCIsInVzZVRyYW5zbGF0aW9uIiwiZm9ybVF1ZXJ5UGFyYW1zIiwic2V0Rm9ybVF1ZXJ5UGFyYW1zIiwidXNlRm9ybVF1ZXJ5UGFyYW1zIiwidXBsb2FkRWRpdHMiLCJjcm9wIiwic2V0Q3JvcCIsInVzZVN0YXRlIiwiaGVpZ2h0IiwidW5pdCIsIndpZHRoIiwieCIsInkiLCJwb2ludFBvc2l0aW9uIiwic2V0UG9pbnRQb3NpdGlvbiIsImZvY2FsUG9pbnQiLCJjaGVja0JvdW5kcyIsInNldENoZWNrQm91bmRzIiwiZm9jYWxXcmFwUmVmIiwidXNlUmVmIiwiaW1hZ2VSZWYiLCJjcm9wUmVmIiwib3JpZ2luYWxIZWlnaHQiLCJjdXJyZW50IiwibmF0dXJhbEhlaWdodCIsIm9yaWdpbmFsV2lkdGgiLCJuYXR1cmFsV2lkdGgiLCJmaW5lVHVuZUNyb3AiLCJkaW1lbnNpb24iLCJpbnRWYWx1ZSIsInBhcnNlSW50IiwicGVyY2VudGFnZSIsImZpbmVUdW5lRm9jYWxQb2ludCIsImNvb3JkaW5hdGUiLCJwcmV2UG9zaXRpb24iLCJzYXZlRWRpdHMiLCJ1bmRlZmluZWQiLCJlZGl0RHJhd2VyU2x1ZyIsIm9uRHJhZ0VuZCIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJjZW50ZXJGb2NhbFBvaW50IiwiY29udGFpbmVyUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdW5kc1JlY3QiLCJ4Q2VudGVyIiwibGVmdCIsInlDZW50ZXIiLCJ0b3AiLCJmaWxlU3JjVG9Vc2UiLCJoMiIsInRpdGxlIiwiQnV0dG9uIiwiYXJpYS1sYWJlbCIsImJ1dHRvblN0eWxlIiwib25DbGljayIsInJlZiIsInN0eWxlIiwiYXNwZWN0UmF0aW8iLCJSZWFjdENyb3AiLCJfIiwiYyIsIm9uQ29tcGxldGUiLCJyZW5kZXJTZWxlY3Rpb25BZGRvbiIsImltZyIsImFsdCIsInNyYyIsIkRyYWdnYWJsZUVsZW1lbnQiLCJib3VuZHNSZWYiLCJjb250YWluZXJSZWYiLCJpbml0aWFsUG9zaXRpb24iLCJQbHVzIiwiaDMiLCJzcGFuIiwidG9GaXhlZCIsImNoaWxkcmVuIiwicG9zaXRpb24iLCJzZXRQb3NpdGlvbiIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiZHJhZ1JlZiIsImdldENvb3JkaW5hdGVzIiwibW91c2VYQXJnIiwibW91c2VZQXJnIiwicmVjZW50ZXIiLCJtb3VzZVgiLCJtb3VzZVkiLCJ4T3V0T2ZCb3VuZHMiLCJyaWdodCIsInlPdXRPZkJvdW5kcyIsImJvdHRvbSIsImhhbmRsZU1vdXNlRG93biIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVNb3VzZU1vdmUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9uRHJvcCIsInVzZUVmZmVjdCIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlRG93biIsIm9uTW91c2VVcCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEyQmFBOzs7ZUFBQUE7Ozt1QkEzQlk7K0RBQ2U7OEJBQ1Q7dUVBQ2tCO1FBQzFDOzZEQUlVO2lDQUNrQjt3QkFDSjsrREFDWjtRQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxNQUFNQyxZQUFZO0FBRWxCLE1BQU1DLFFBQXNGLENBQUMsRUFDM0ZDLElBQUksRUFDSkMsUUFBUSxFQUNSQyxLQUFLLEVBQ04saUJBQ0MsNkJBQUNDO1FBQUlDLFdBQVcsQ0FBQyxFQUFFTixVQUFVLE9BQU8sQ0FBQztPQUNsQ0Usb0JBQ0QsNkJBQUNLO1FBQU1MLE1BQU1BO1FBQU1DLFVBQVUsQ0FBQ0ssSUFBTUwsU0FBU0ssRUFBRUMsTUFBTSxDQUFDTCxLQUFLO1FBQUdNLE1BQUs7UUFBU04sT0FBT0E7O0FBSWhGLE1BQU1MLGFBT1IsQ0FBQyxFQUFFWSxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxRQUFRLEVBQUVDLGNBQWMsRUFBRTtJQUNsRSxNQUFNLEVBQUVDLFVBQVUsRUFBRSxHQUFHQyxJQUFBQSxlQUFRO0lBQy9CLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEdBQUdDLElBQUFBLDRCQUFjLEVBQUM7UUFBQztRQUFXO0tBQVM7SUFDbEQsTUFBTSxFQUFFQyxlQUFlLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLElBQUFBLG1DQUFrQjtJQUNsRSxNQUFNLEVBQUVDLFdBQVcsRUFBRSxHQUFH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
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
@import '../../../scss/styles.scss';
|
|
2
|
+
|
|
3
|
+
$header-height: base(5);
|
|
4
|
+
|
|
5
|
+
.edit-upload {
|
|
6
|
+
--edit-upload-cell-spacing: calc(var(--base) * 1.5);
|
|
7
|
+
--edit-upload-sidebar-width: calc(350px + var(--gutter-h));
|
|
8
|
+
height: 100%;
|
|
9
|
+
margin-right: calc(var(--gutter-h) * -1);
|
|
10
|
+
margin-left: calc(var(--gutter-h) * -1);
|
|
11
|
+
|
|
12
|
+
&__header {
|
|
13
|
+
height: $header-height;
|
|
14
|
+
border-bottom: 1px solid var(--theme-elevation-150);
|
|
15
|
+
padding: 0 var(--gutter-h);
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
align-items: center;
|
|
19
|
+
|
|
20
|
+
& h2 {
|
|
21
|
+
margin: 0;
|
|
22
|
+
text-wrap: nowrap;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
text-overflow: ellipsis;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&__actions {
|
|
29
|
+
min-width: 350px;
|
|
30
|
+
margin-left: auto;
|
|
31
|
+
padding: base(0.5) 0 base(0.5) base(1.5);
|
|
32
|
+
justify-content: flex-end;
|
|
33
|
+
display: flex;
|
|
34
|
+
gap: base(1);
|
|
35
|
+
text-wrap: nowrap;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&__cancel,
|
|
39
|
+
&__save {
|
|
40
|
+
width: 50%;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&__toolWrap {
|
|
44
|
+
display: flex;
|
|
45
|
+
justify-content: flex-end;
|
|
46
|
+
height: (calc(100% - #{$header-height}));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.ReactCrop__selection-addon,
|
|
50
|
+
&__crop-window {
|
|
51
|
+
height: 100%;
|
|
52
|
+
width: 100%;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
&__focal-wrapper {
|
|
56
|
+
position: relative;
|
|
57
|
+
display: inline-flex;
|
|
58
|
+
max-height: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&__draggable-container {
|
|
62
|
+
position: absolute;
|
|
63
|
+
left: 0;
|
|
64
|
+
right: 0;
|
|
65
|
+
bottom: 0;
|
|
66
|
+
top: 0;
|
|
67
|
+
pointer-events: none;
|
|
68
|
+
|
|
69
|
+
&--dragging {
|
|
70
|
+
pointer-events: all;
|
|
71
|
+
|
|
72
|
+
.edit-upload__focalPoint {
|
|
73
|
+
cursor: grabbing;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&__focalPoint {
|
|
79
|
+
position: absolute;
|
|
80
|
+
top: 50%;
|
|
81
|
+
left: 50%;
|
|
82
|
+
border-radius: 50%;
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
cursor: grab;
|
|
87
|
+
width: 50px;
|
|
88
|
+
height: 50px;
|
|
89
|
+
transform: translate3d(-50%, -50%, 0);
|
|
90
|
+
pointer-events: all;
|
|
91
|
+
|
|
92
|
+
svg {
|
|
93
|
+
position: absolute;
|
|
94
|
+
left: 0;
|
|
95
|
+
right: 0;
|
|
96
|
+
top: 0;
|
|
97
|
+
bottom: 0;
|
|
98
|
+
background: rgba(0, 0, 0, 0.5);
|
|
99
|
+
border-radius: 100%;
|
|
100
|
+
width: base(2);
|
|
101
|
+
height: base(2);
|
|
102
|
+
color: white;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&__crop,
|
|
107
|
+
&__focalOnly {
|
|
108
|
+
padding: base(1.5) base(1.5) base(1.5) 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&__crop {
|
|
112
|
+
padding: var(--edit-upload-cell-spacing);
|
|
113
|
+
padding-left: var(--gutter-h);
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: flex-start;
|
|
116
|
+
height: 100%;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
&__imageWrap {
|
|
120
|
+
position: relative;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
&__point {
|
|
124
|
+
cursor: move;
|
|
125
|
+
position: absolute;
|
|
126
|
+
background: rgba(0, 0, 0, 0.5);
|
|
127
|
+
border-radius: 100%;
|
|
128
|
+
|
|
129
|
+
& svg {
|
|
130
|
+
width: base(2);
|
|
131
|
+
height: base(2);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
&__sidebar {
|
|
136
|
+
border-left: 1px solid var(--theme-elevation-150);
|
|
137
|
+
padding-top: var(--edit-upload-cell-spacing);
|
|
138
|
+
min-width: var(--edit-upload-sidebar-width);
|
|
139
|
+
|
|
140
|
+
& > div:first-child {
|
|
141
|
+
margin-bottom: base(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
&__groupWrap {
|
|
146
|
+
display: flex;
|
|
147
|
+
flex-direction: column;
|
|
148
|
+
gap: base(0.5);
|
|
149
|
+
padding-right: var(--gutter-h);
|
|
150
|
+
padding-left: var(--edit-upload-cell-spacing);
|
|
151
|
+
width: 100%;
|
|
152
|
+
|
|
153
|
+
+ .edit-upload__groupWrap {
|
|
154
|
+
padding-top: var(--edit-upload-cell-spacing);
|
|
155
|
+
margin-top: var(--edit-upload-cell-spacing);
|
|
156
|
+
border-top: 1px solid var(--theme-elevation-150);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
&__inputsWrap,
|
|
161
|
+
&__titleWrap {
|
|
162
|
+
display: flex;
|
|
163
|
+
gap: base(1);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
&__titleWrap {
|
|
167
|
+
justify-content: space-between;
|
|
168
|
+
align-items: center;
|
|
169
|
+
|
|
170
|
+
& h3 {
|
|
171
|
+
margin: 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
&__reset {
|
|
176
|
+
height: fit-content;
|
|
177
|
+
border-radius: var(--style-radius-s);
|
|
178
|
+
background-color: var(--theme-elevation-150);
|
|
179
|
+
padding: 0 base(0.25);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
&__input {
|
|
183
|
+
flex: 1;
|
|
184
|
+
& input {
|
|
185
|
+
@include formInput;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@include mid-break {
|
|
190
|
+
--edit-upload-cell-spacing: var(--gutter-h);
|
|
191
|
+
&__sidebar {
|
|
192
|
+
padding-left: 0;
|
|
193
|
+
border-left: 0;
|
|
194
|
+
width: 100%;
|
|
195
|
+
}
|
|
196
|
+
&__toolWrap {
|
|
197
|
+
flex-direction: column-reverse;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@include small-break {
|
|
202
|
+
flex-direction: column;
|
|
203
|
+
|
|
204
|
+
&__focalPoint {
|
|
205
|
+
border-right: none;
|
|
206
|
+
padding: base(1) 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
&__inputsWrap {
|
|
210
|
+
flex-direction: column;
|
|
211
|
+
gap: base(1);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
&__sidebar {
|
|
215
|
+
min-width: 0;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/elements/FileDetails/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/elements/FileDetails/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4ChC,CAAA;AAED,eAAe,WAAW,CAAA"}
|