@pushwoosh/smart-components-kit 1.21.0 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MediaStorage/CreateCropDrawer.js +19 -5
- package/MediaStorage/cropWindow.d.ts +13 -0
- package/MediaStorage/cropWindow.js +20 -0
- package/MediaStorage/polyglot/messages_ar.js +1 -0
- package/MediaStorage/polyglot/messages_bn.js +1 -0
- package/MediaStorage/polyglot/messages_de.js +1 -0
- package/MediaStorage/polyglot/messages_en.js +1 -0
- package/MediaStorage/polyglot/messages_es.js +1 -0
- package/MediaStorage/polyglot/messages_fr.js +1 -0
- package/MediaStorage/polyglot/messages_he.js +1 -0
- package/MediaStorage/polyglot/messages_hi.js +1 -0
- package/MediaStorage/polyglot/messages_ja.js +1 -0
- package/MediaStorage/polyglot/messages_ko.js +1 -0
- package/MediaStorage/polyglot/messages_pt.js +1 -0
- package/MediaStorage/polyglot/messages_ru.js +1 -0
- package/MediaStorage/polyglot/messages_th.js +1 -0
- package/MediaStorage/polyglot/messages_zh.js +1 -0
- package/MediaStorage/polyglot/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ import { CloseIcon, TrashIcon } from '@pushwoosh/kit-icons';
|
|
|
6
6
|
import { Text } from '@pushwoosh/kit-typography';
|
|
7
7
|
import { useSPAContext } from '@pushwoosh/spa-context';
|
|
8
8
|
import { CropFramePicker } from './CropFramePicker';
|
|
9
|
-
import { CENTER_FOCAL, getCropWindow, getStoredOrigin } from './cropWindow';
|
|
9
|
+
import { CENTER_FOCAL, getCropWindow, getRequestedSize, getStoredOrigin, getStoredSize } from './cropWindow';
|
|
10
10
|
import { useDeleteMediaFile } from './hooks';
|
|
11
11
|
import { getAspectRatio, getCropCaption, getThumbUrl } from './mediaFile.utils';
|
|
12
12
|
import { useLang } from './polyglot';
|
|
@@ -115,15 +115,25 @@ export const CreateCropDrawer = ({
|
|
|
115
115
|
setViewedCrop(crop);
|
|
116
116
|
};
|
|
117
117
|
const selectedRatio = RATIOS.find(item => item.value === ratio) ?? RATIOS[0];
|
|
118
|
-
const outputWidth = dimension === 'width' ? sizeValue : Math.round(sizeValue * selectedRatio.ar);
|
|
119
|
-
const outputHeight = dimension === 'height' ? sizeValue : Math.round(sizeValue / selectedRatio.ar);
|
|
120
118
|
const [ratioW, ratioH] = selectedRatio.label.split(':').map(Number);
|
|
119
|
+
const {
|
|
120
|
+
width: outputWidth,
|
|
121
|
+
height: outputHeight
|
|
122
|
+
} = getRequestedSize(ratioW, ratioH, dimension, sizeValue);
|
|
121
123
|
const srcW = originalMeta?.width ?? 0;
|
|
122
124
|
const srcH = originalMeta?.height ?? 0;
|
|
123
125
|
const canPlaceWindow = !isOriginalView && srcW > 0 && srcH > 0;
|
|
124
126
|
const cropWindow = canPlaceWindow ? getCropWindow(srcW, srcH, ratioW, ratioH, focal) : null;
|
|
125
127
|
const centeredWindow = canPlaceWindow ? getCropWindow(srcW, srcH, ratioW, ratioH, CENTER_FOCAL) : null;
|
|
126
128
|
const isOffCenter = Boolean(cropWindow && centeredWindow && (cropWindow.x !== centeredWindow.x || cropWindow.y !== centeredWindow.y));
|
|
129
|
+
const storedSize = cropWindow ? getStoredSize(cropWindow, {
|
|
130
|
+
width: outputWidth,
|
|
131
|
+
height: outputHeight
|
|
132
|
+
}) : {
|
|
133
|
+
width: outputWidth,
|
|
134
|
+
height: outputHeight
|
|
135
|
+
};
|
|
136
|
+
const isCapped = storedSize.width !== outputWidth || storedSize.height !== outputHeight;
|
|
127
137
|
// Both inputs are always visible: the driving one is editable, the other is
|
|
128
138
|
// read-only and shows the value computed from the aspect ratio.
|
|
129
139
|
const computedText = value => isSizeValid ? String(value) : '';
|
|
@@ -146,7 +156,7 @@ export const CreateCropDrawer = ({
|
|
|
146
156
|
width,
|
|
147
157
|
height
|
|
148
158
|
} = crop.meta.data;
|
|
149
|
-
if (cropRatio !== selectedRatio.label || width !==
|
|
159
|
+
if (cropRatio !== selectedRatio.label || width !== storedSize.width || height !== storedSize.height) return false;
|
|
150
160
|
const origin = getStoredOrigin(crop.url);
|
|
151
161
|
return isOffCenter ? origin?.x === cropWindow?.x && origin?.y === cropWindow?.y : origin === null;
|
|
152
162
|
});
|
|
@@ -326,7 +336,11 @@ export const CreateCropDrawer = ({
|
|
|
326
336
|
}), isOriginalShown && originalMeta && _jsxs(Text, {
|
|
327
337
|
children: [originalMeta.width, ' × ', originalMeta.height]
|
|
328
338
|
}), !isOriginalView && isSizeValid && _jsxs(Text, {
|
|
329
|
-
children: [selectedRatio.label, ' · ',
|
|
339
|
+
children: [selectedRatio.label, ' · ', storedSize.width, ' × ', storedSize.height]
|
|
340
|
+
}), !isOriginalView && isSizeValid && isCapped && _jsx(Text, {
|
|
341
|
+
children: lang({
|
|
342
|
+
message: 'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT'
|
|
343
|
+
})
|
|
330
344
|
})]
|
|
331
345
|
}), !isOriginalView && isJpeg && _jsxs("div", {
|
|
332
346
|
children: [_jsx(FieldLabel, {
|
|
@@ -20,3 +20,16 @@ export declare const getStoredOrigin: (url: string) => {
|
|
|
20
20
|
x: number;
|
|
21
21
|
y: number;
|
|
22
22
|
} | null;
|
|
23
|
+
/** Size requested by the width/height field, derived like rpc-v2 `targetSize` (integer division). */
|
|
24
|
+
export declare const getRequestedSize: (ratioW: number, ratioH: number, dimension: "width" | "height", size: number) => {
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
};
|
|
28
|
+
/** Size rpc-v2 stores for a request: the requested one when smaller than the window, else the window. */
|
|
29
|
+
export declare const getStoredSize: (window: CropRect, requested: {
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
}) => {
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
};
|
|
@@ -33,4 +33,24 @@ export const getStoredOrigin = url => {
|
|
|
33
33
|
x: Number(match[1]),
|
|
34
34
|
y: Number(match[2])
|
|
35
35
|
} : null;
|
|
36
|
+
};
|
|
37
|
+
/** Size requested by the width/height field, derived like rpc-v2 `targetSize` (integer division). */
|
|
38
|
+
export const getRequestedSize = (ratioW, ratioH, dimension, size) => {
|
|
39
|
+
const value = Math.floor(size);
|
|
40
|
+
if (!(value > 0)) return {
|
|
41
|
+
width: 0,
|
|
42
|
+
height: 0
|
|
43
|
+
};
|
|
44
|
+
return dimension === 'width' ? {
|
|
45
|
+
width: value,
|
|
46
|
+
height: Math.floor(value * ratioH / ratioW)
|
|
47
|
+
} : {
|
|
48
|
+
width: Math.floor(value * ratioW / ratioH),
|
|
49
|
+
height: value
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
/** Size rpc-v2 stores for a request: the requested one when smaller than the window, else the window. */
|
|
53
|
+
export const getStoredSize = (window, requested) => requested.width > 0 && requested.height > 0 && requested.width < window.width ? requested : {
|
|
54
|
+
width: window.width,
|
|
55
|
+
height: window.height
|
|
36
56
|
};
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'لا توجد اقتصاصات بعد',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'تم إنشاء الاقتصاص',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'تعذّر إنشاء الاقتصاص',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'الأصل أصغر، لذلك يُحفظ الاقتصاص بهذا الحجم',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'اسحب الإطار لاختيار منطقة الاقتصاص',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'عرض هذا الاقتصاص',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'حذف الاقتصاص',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'এখনো কোনো ক্রপ নেই',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'ক্রপ তৈরি হয়েছে',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'ক্রপ তৈরি করা যায়নি',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'মূল ছবি ছোট, তাই ক্রপ এই আকারে সংরক্ষিত হবে',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'ক্রপের এলাকা বেছে নিতে ফ্রেম টেনে আনুন',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'এই ক্রপ দেখান',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'ক্রপ মুছুন',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'Noch keine Zuschnitte',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Zuschnitt erstellt',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'Zuschnitt konnte nicht erstellt werden',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'Das Original ist kleiner, daher wird der Zuschnitt in dieser Größe gespeichert',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Rahmen ziehen, um den Zuschnitt zu wählen',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Zuschnitt anzeigen',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Zuschnitt löschen',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'No crops yet',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Crop created',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'Failed to create crop',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'The original is smaller, so the crop is saved at this size',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Drag the frame to choose the crop area',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Show this crop',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Delete crop',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'Aún no hay recortes',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Recorte creado',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'No se pudo crear el recorte',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'El original es más pequeño, así que el recorte se guarda con este tamaño',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Arrastra el marco para elegir el área del recorte',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Mostrar este recorte',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Eliminar recorte',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'Aucun recadrage pour le moment',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Recadrage créé',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'Échec de la création du recadrage',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'L’original est plus petit, le recadrage est donc enregistré à cette taille',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Faites glisser le cadre pour choisir la zone du recadrage',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Afficher ce recadrage',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Supprimer le recadrage',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'אין עדיין חיתוכים',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'החיתוך נוצר',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'יצירת החיתוך נכשלה',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'המקור קטן יותר, ולכן החיתוך יישמר בגודל הזה',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'גררו את המסגרת כדי לבחור את אזור החיתוך',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'הצג חיתוך זה',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'מחיקת חיתוך',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'अभी तक कोई क्रॉप नहीं',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'क्रॉप बनाया गया',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'क्रॉप नहीं बनाया जा सका',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'मूल छवि छोटी है, इसलिए क्रॉप इसी आकार में सहेजा जाएगा',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'क्रॉप क्षेत्र चुनने के लिए फ़्रेम खींचें',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'यह क्रॉप दिखाएँ',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'क्रॉप हटाएँ',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'トリミングはまだありません',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'トリミングを作成しました',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'トリミングの作成に失敗しました',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': '元画像が小さいため、このサイズで保存されます',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': '枠をドラッグしてトリミング範囲を選択',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'このトリミングを表示',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'トリミングを削除',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': '아직 크롭이 없습니다',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': '크롭이 생성되었습니다',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': '크롭을 생성하지 못했습니다',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': '원본이 더 작아 이 크기로 저장됩니다',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': '프레임을 드래그해 크롭 영역을 선택하세요',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': '이 크롭 보기',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': '크롭 삭제',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'Nenhum recorte ainda',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Recorte criado',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'Falha ao criar o recorte',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'O original é menor, então o recorte é salvo neste tamanho',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Arraste o quadro para escolher a área do recorte',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Mostrar este recorte',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Excluir recorte',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'Кропов пока нет',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'Кроп создан',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'Не удалось создать кроп',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'Оригинал меньше, поэтому кроп сохранится в этом размере',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'Перетащите рамку, чтобы выбрать область кропа',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'Показать кроп',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'Удалить кроп',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': 'ยังไม่มีครอป',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': 'สร้างครอปแล้ว',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': 'สร้างครอปไม่สำเร็จ',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': 'ภาพต้นฉบับเล็กกว่า จึงบันทึกภาพครอปที่ขนาดนี้',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': 'ลากกรอบเพื่อเลือกพื้นที่ครอป',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': 'แสดงภาพครอปนี้',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': 'ลบครอป',
|
|
@@ -52,6 +52,7 @@ export const messages = {
|
|
|
52
52
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': '暂无裁剪图',
|
|
53
53
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': '裁剪图已创建',
|
|
54
54
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': '创建裁剪图失败',
|
|
55
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': '原图较小,裁剪将按此尺寸保存',
|
|
55
56
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': '拖动框选择裁剪区域',
|
|
56
57
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': '查看此裁剪',
|
|
57
58
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': '删除裁剪图',
|
|
@@ -75,6 +75,7 @@ export type MediaStorageMessages = {
|
|
|
75
75
|
'SMART.MEDIA_STORAGE.CREATE_CROP.NO_CROPS': NoParams;
|
|
76
76
|
'SMART.MEDIA_STORAGE.CREATE_CROP.SUCCESS': NoParams;
|
|
77
77
|
'SMART.MEDIA_STORAGE.CREATE_CROP.ERROR': NoParams;
|
|
78
|
+
'SMART.MEDIA_STORAGE.CREATE_CROP.CAPPED_HINT': NoParams;
|
|
78
79
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DRAG_HINT': NoParams;
|
|
79
80
|
'SMART.MEDIA_STORAGE.CREATE_CROP.PREVIEW_HINT': NoParams;
|
|
80
81
|
'SMART.MEDIA_STORAGE.CREATE_CROP.DELETE_HINT': NoParams;
|