contentoh-components-library 21.6.54 → 21.6.55

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.
Files changed (28) hide show
  1. package/dist/components/pages/RetailerProductEdition/index.js +29 -10
  2. package/dist/components/pages/RetailerProductEdition/utils.js +48 -1
  3. package/package.json +1 -1
  4. package/src/components/pages/RetailerProductEdition/index.js +23 -3
  5. package/src/components/pages/RetailerProductEdition/utils.js +34 -0
  6. package/dist/ai/prompts/attribute.prompt.js +0 -28
  7. package/dist/ai/prompts/description.prompt.js +0 -33
  8. package/dist/ai/schemas/attribute.schema.js +0 -35
  9. package/dist/ai/schemas/description.schema.js +0 -27
  10. package/dist/components/atoms/AssetPreview/AssetPreview.stories.js +0 -118
  11. package/dist/components/atoms/AssetPreview/index.js +0 -150
  12. package/dist/components/atoms/AssetPreview/styles.js +0 -28
  13. package/dist/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +0 -147
  14. package/dist/components/molecules/GalleryAssetElement/index.js +0 -178
  15. package/dist/components/molecules/GalleryAssetElement/styles.js +0 -26
  16. package/dist/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +0 -56
  17. package/dist/components/molecules/GalleryTrayTabs/index.js +0 -60
  18. package/dist/components/molecules/GalleryTrayTabs/styles.js +0 -20
  19. package/dist/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +0 -171
  20. package/dist/components/organisms/DigitalAssetsTray/index.js +0 -211
  21. package/dist/components/organisms/DigitalAssetsTray/styles.js +0 -22
  22. package/dist/global-files/digital-assets/assetTypes.js +0 -480
  23. package/dist/global-files/digital-assets/assets.actions.js +0 -64
  24. package/dist/global-files/digital-assets/assets.adapter.js +0 -304
  25. package/dist/global-files/digital-assets/assets.mock.js +0 -136
  26. package/dist/global-files/digital-assets/assets.reducer.js +0 -220
  27. package/dist/global-files/digital-assets/uploadAssets.js +0 -179
  28. package/dist/global-files/digital-assets/useDigitalAssets.js +0 -522
@@ -1,171 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = exports.Vacia = exports.SoloLectura = exports.PayloadDeGuardado = exports.Cuadricula = exports.ConActivos = void 0;
9
-
10
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
11
-
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
13
-
14
- var _react = require("react");
15
-
16
- var _index = require("./index");
17
-
18
- var _useDigitalAssets = require("../../../global-files/digital-assets/useDigitalAssets");
19
-
20
- var _assets = require("../../../global-files/digital-assets/assets.reducer");
21
-
22
- var _assets2 = require("../../../global-files/digital-assets/assets.adapter");
23
-
24
- var _assets3 = require("../../../global-files/digital-assets/assets.mock");
25
-
26
- var _jsxRuntime = require("react/jsx-runtime");
27
-
28
- var _default = {
29
- title: "Components/organisms/DigitalAssetsTray",
30
- component: _index.DigitalAssetsTray
31
- };
32
- /*
33
- Las historias usan EL MISMO reducer que la ficha, no un estado de juguete.
34
- Así lo que se ve aquí es el comportamiento real: qué queda marcado para
35
- guardar, qué se anota para borrar y qué payload saldría hacia el backend.
36
- */
37
-
38
- exports.default = _default;
39
-
40
- var Demo = function Demo(_ref) {
41
- var _ref$initialAssets = _ref.initialAssets,
42
- initialAssets = _ref$initialAssets === void 0 ? [] : _ref$initialAssets,
43
- _ref$gridLayout = _ref.gridLayout,
44
- gridLayout = _ref$gridLayout === void 0 ? false : _ref$gridLayout,
45
- _ref$readOnly = _ref.readOnly,
46
- readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
47
- _ref$showPayload = _ref.showPayload,
48
- showPayload = _ref$showPayload === void 0 ? false : _ref$showPayload;
49
-
50
- var _useReducer = (0, _react.useReducer)(_assets.assetsReducer, _assets.assetsInitialState),
51
- _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
52
- state = _useReducer2[0],
53
- dispatch = _useReducer2[1];
54
-
55
- var _useState = (0, _react.useState)([]),
56
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
57
- notices = _useState2[0],
58
- setNotices = _useState2[1];
59
-
60
- var tray = (0, _useDigitalAssets.useDigitalAssets)({
61
- assets: state.assets_values,
62
- dispatch: dispatch,
63
- notices: notices,
64
- setNotices: setNotices
65
- }); // Carga inicial simulando la respuesta del backend, una sola vez.
66
-
67
- var _useState3 = (0, _react.useState)(false),
68
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
69
- loaded = _useState4[0],
70
- setLoaded = _useState4[1];
71
-
72
- if (!loaded && initialAssets.length) {
73
- tray.replaceAll(initialAssets);
74
- setLoaded(true);
75
- }
76
-
77
- var payload = (0, _assets2.buildSavePayload)((0, _assets.selectAssetsToSave)(state));
78
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
79
- style: {
80
- width: 960
81
- },
82
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.DigitalAssetsTray, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, tray), {}, {
83
- unsaved: (0, _assets.countUnsavedAssets)(state),
84
- gridLayout: gridLayout,
85
- readOnly: readOnly,
86
- selectedAssets: state.selected_assets,
87
- setSelectedAssets: function setSelectedAssets(assets) {
88
- return dispatch({
89
- type: "SET_SELECTED_ASSETS",
90
- payload: assets
91
- });
92
- },
93
- setCheckAll: function setCheckAll(checked) {
94
- return dispatch({
95
- type: "TOGGLE_CHECK_ALL_ASSETS",
96
- payload: checked
97
- });
98
- }
99
- })), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
100
- style: {
101
- fontFamily: "Lato",
102
- fontSize: 12
103
- },
104
- children: ["Seleccionados: ", state.selected_assets.length, " \xB7 Sin subir: ", tray.pending.length, " \xB7 Marcados para actualizar: ", state.updated_assets.length, " \xB7 Para borrar:", " ", state.deleted_assets.length, " \xB7 \xBFHay cambios sin guardar?", " ", (0, _assets.hasUnsavedAssets)(state) ? "sí" : "no"]
105
- }), showPayload && /*#__PURE__*/(0, _jsxRuntime.jsx)("pre", {
106
- style: {
107
- fontSize: 11,
108
- background: "#f7f7fc",
109
- padding: 12,
110
- borderRadius: 6,
111
- maxHeight: 280,
112
- overflow: "auto"
113
- },
114
- children: JSON.stringify(payload, null, 2)
115
- })]
116
- });
117
- };
118
- /**
119
- * Estado real de hoy: sin backend, la bandeja arranca vacía. Arrastrar un mp4,
120
- * un gif, un PDF, un xlsx o un psd lo valida y lo agrega; cualquier otra cosa se
121
- * rechaza con su motivo. Nada se sube.
122
- */
123
-
124
-
125
- var Vacia = function Vacia() {
126
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {});
127
- };
128
-
129
- exports.Vacia = Vacia;
130
-
131
- var ConActivos = function ConActivos() {
132
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
133
- initialAssets: _assets3.backendAssetsMock
134
- });
135
- };
136
-
137
- exports.ConActivos = ConActivos;
138
-
139
- var Cuadricula = function Cuadricula() {
140
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
141
- initialAssets: _assets3.backendAssetsMock,
142
- gridLayout: true
143
- });
144
- };
145
-
146
- exports.Cuadricula = Cuadricula;
147
-
148
- var SoloLectura = function SoloLectura() {
149
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
150
- initialAssets: _assets3.backendAssetsMock,
151
- readOnly: true
152
- });
153
- };
154
- /**
155
- * Lo que se le enviaría al backend, actualizándose en vivo. Cambia el tipo de un
156
- * activo y aparece en `updateAssets`; bórralo y su id pasa a `deleteAssets`;
157
- * suelta un archivo nuevo y aparece en `newAssets` sin `key`, porque todavía no
158
- * se ha subido a S3.
159
- */
160
-
161
-
162
- exports.SoloLectura = SoloLectura;
163
-
164
- var PayloadDeGuardado = function PayloadDeGuardado() {
165
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
166
- initialAssets: _assets3.backendAssetsMock,
167
- showPayload: true
168
- });
169
- };
170
-
171
- exports.PayloadDeGuardado = PayloadDeGuardado;
@@ -1,211 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.DigitalAssetsTray = void 0;
9
-
10
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
11
-
12
- var _reactDropzone = require("react-dropzone");
13
-
14
- var _styles = require("./styles");
15
-
16
- var _GalleryAssetElement = require("../../molecules/GalleryAssetElement");
17
-
18
- var _GalleryHeader = require("../../molecules/GalleryHeader");
19
-
20
- var _ButtonV = require("../../atoms/ButtonV2");
21
-
22
- var _assetTypes = require("../../../global-files/digital-assets/assetTypes");
23
-
24
- var _jsxRuntime = require("react/jsx-runtime");
25
-
26
- var CHECK_ALL_ID = "check-all-assets";
27
- var ITEM_SELECTOR = "[id^='gallery-asset-']";
28
- /**
29
- * Bandeja de activos digitales: soltar archivos, verlos, reetiquetarlos y
30
- * quitarlos.
31
- *
32
- * Tiene su propio dropzone en vez de compartir el de las imágenes porque los
33
- * formatos aceptados son distintos: mezclarlos dejaría soltar un PDF sobre la
34
- * bandeja de fotos y un JPG sobre la de activos.
35
- *
36
- * No guarda ni sube nada. Recibe el estado ya armado por `useDigitalAssets`,
37
- * así que cuando se defina el contrato del backend solo hay que conectarle las
38
- * llamadas; la interfaz no cambia.
39
- */
40
-
41
- var DigitalAssetsTray = function DigitalAssetsTray(_ref) {
42
- var _ref$assets = _ref.assets,
43
- assets = _ref$assets === void 0 ? [] : _ref$assets,
44
- _ref$notices = _ref.notices,
45
- notices = _ref$notices === void 0 ? [] : _ref$notices,
46
- _ref$unsaved = _ref.unsaved,
47
- unsaved = _ref$unsaved === void 0 ? {
48
- nuevos: 0,
49
- modificados: 0,
50
- borrados: 0,
51
- total: 0
52
- } : _ref$unsaved,
53
- _ref$remaining = _ref.remaining,
54
- remaining = _ref$remaining === void 0 ? _assetTypes.MAX_ASSETS_PER_PRODUCT : _ref$remaining,
55
- addFiles = _ref.addFiles,
56
- removeAsset = _ref.removeAsset,
57
- changeAssetType = _ref.changeAssetType,
58
- clearNotices = _ref.clearNotices,
59
- _ref$selectedAssets = _ref.selectedAssets,
60
- selectedAssets = _ref$selectedAssets === void 0 ? [] : _ref$selectedAssets,
61
- setSelectedAssets = _ref.setSelectedAssets,
62
- setCheckAll = _ref.setCheckAll,
63
- _ref$gridLayout = _ref.gridLayout,
64
- gridLayout = _ref$gridLayout === void 0 ? false : _ref$gridLayout,
65
- _ref$readOnly = _ref.readOnly,
66
- readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
67
- _ref$emptyMessage = _ref.emptyMessage,
68
- emptyMessage = _ref$emptyMessage === void 0 ? "Este producto no tiene activos digitales" : _ref$emptyMessage;
69
-
70
- var _useDropzone = (0, _reactDropzone.useDropzone)({
71
- accept: (0, _assetTypes.buildDropzoneAccept)(),
72
- noKeyboard: true,
73
- multiple: true,
74
- noClick: true,
75
- disabled: readOnly,
76
- onDrop: function onDrop(acceptedFiles) {
77
- return addFiles === null || addFiles === void 0 ? void 0 : addFiles(acceptedFiles);
78
- }
79
- }),
80
- getRootProps = _useDropzone.getRootProps,
81
- getInputProps = _useDropzone.getInputProps,
82
- isDragActive = _useDropzone.isDragActive,
83
- open = _useDropzone.open;
84
-
85
- var noticesBy = function noticesBy(level) {
86
- return notices.filter(function (item) {
87
- return item.level === level;
88
- });
89
- };
90
- /*
91
- Se desglosa en vez de mostrar solo el número: "3 cambios sin guardar" no le
92
- dice al usuario qué perdería si se va, y no es lo mismo dejar sin guardar un
93
- borrado que un archivo nuevo.
94
- */
95
-
96
-
97
- var detalleSinGuardar = [unsaved.nuevos && "".concat(unsaved.nuevos, " nuevo").concat(unsaved.nuevos > 1 ? "s" : ""), unsaved.modificados && "".concat(unsaved.modificados, " modificado").concat(unsaved.modificados > 1 ? "s" : ""), unsaved.borrados && "".concat(unsaved.borrados, " por borrar")].filter(Boolean).join(" · ");
98
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.Container, {
99
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
100
- className: "tray-toolbar",
101
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
102
- className: "tray-hint",
103
- title: "Formatos permitidos: ".concat((0, _assetTypes.acceptedFormatsLabel)()),
104
- children: ["Arrastra aqu\xED videos, 360, GIF, documentos, hojas de c\xE1lculo o archivos editables. Quedan ", remaining, " de ", _assetTypes.MAX_ASSETS_PER_PRODUCT, "."]
105
- }), !readOnly && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonV.ButtonV2, {
106
- label: "Agregar activos",
107
- type: "pink",
108
- size: 12,
109
- onClick: open
110
- })]
111
- }), unsaved.total > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
112
- className: "tray-unsaved",
113
- role: "status",
114
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
115
- className: "tray-unsaved-dot"
116
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
117
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("strong", {
118
- children: [unsaved.total, " cambio", unsaved.total > 1 ? "s" : "", " sin guardar"]
119
- }), detalleSinGuardar && /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
120
- className: "tray-unsaved-detail",
121
- children: [" \u2014 ", detalleSinGuardar]
122
- })]
123
- })]
124
- }), noticesBy("error").length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
125
- className: "tray-notice tray-notice-error",
126
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
127
- className: "tray-notice-head",
128
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
129
- children: ["No se pudieron agregar ", noticesBy("error").length, " archivo(s):"]
130
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
131
- type: "button",
132
- onClick: clearNotices,
133
- title: "Cerrar",
134
- children: "\xD7"
135
- })]
136
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
137
- children: noticesBy("error").map(function (item, index) {
138
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
139
- children: item.message
140
- }, "err-".concat(item.name, "-").concat(index));
141
- })
142
- })]
143
- }), noticesBy("warning").length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
144
- className: "tray-notice tray-notice-warning",
145
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
146
- className: "tray-notice-head",
147
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
148
- children: "Se agregaron, pero ten en cuenta:"
149
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
150
- type: "button",
151
- onClick: clearNotices,
152
- title: "Cerrar",
153
- children: "\xD7"
154
- })]
155
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
156
- children: noticesBy("warning").map(function (item, index) {
157
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
158
- children: item.message
159
- }, "warn-".concat(item.name, "-").concat(index));
160
- })
161
- })]
162
- }), !gridLayout && assets.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GalleryHeader.GalleryHeader, {
163
- variant: "asset",
164
- checkAllId: CHECK_ALL_ID,
165
- itemSelector: ITEM_SELECTOR,
166
- setCheckAll: setCheckAll,
167
- setSelectedImages: setSelectedAssets
168
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, getRootProps({
169
- className: "dropzone ".concat(isDragActive ? "drag-active" : "").trim()
170
- })), {}, {
171
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", (0, _objectSpread2.default)({}, getInputProps())), isDragActive && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
172
- className: "drag-overlay",
173
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
174
- children: "Suelta los activos aqu\xED"
175
- })
176
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("aside", {
177
- className: gridLayout ? "tray-grid" : "tray-rows",
178
- children: assets.map(function (asset, index) {
179
- var _asset$id;
180
-
181
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GalleryAssetElement.GalleryAssetElement, {
182
- asset: asset,
183
- index: index,
184
- gridLayout: gridLayout,
185
- checkAllId: CHECK_ALL_ID,
186
- itemSelector: ITEM_SELECTOR,
187
- selectedAssets: selectedAssets,
188
- setSelectedAssets: setSelectedAssets,
189
- setCheckAll: setCheckAll,
190
- changeAsset: function changeAsset(_ref2) {
191
- var value = _ref2.value;
192
- return changeAssetType === null || changeAssetType === void 0 ? void 0 : changeAssetType(index, value);
193
- },
194
- onRemove: removeAsset,
195
- readOnly: readOnly
196
- }, (_asset$id = asset.id) !== null && _asset$id !== void 0 ? _asset$id : asset.tempId);
197
- })
198
- }), assets.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
199
- className: "tray-empty",
200
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
201
- children: emptyMessage
202
- }), !readOnly && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
203
- className: "tray-empty-hint",
204
- children: "Arr\xE1stralos aqu\xED o usa \xABAgregar activos\xBB."
205
- })]
206
- })]
207
- }))]
208
- });
209
- };
210
-
211
- exports.DigitalAssetsTray = DigitalAssetsTray;
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.Container = void 0;
9
-
10
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/taggedTemplateLiteral"));
11
-
12
- var _styledComponents = _interopRequireDefault(require("styled-components"));
13
-
14
- var _variables = require("../../../global-files/variables");
15
-
16
- var _templateObject;
17
-
18
- /* El dropzone replica el de la bandeja de imágenes para que arrastrar se sienta
19
- igual en las dos. */
20
- var Container = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n .tray-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n\n .tray-hint {\n margin: 0;\n font-family: ", ";\n font-size: 12px;\n line-height: 18px;\n color: ", ";\n }\n\n /*\n Aviso de cambios sin guardar. Va arriba del listado y no junto al bot\xF3n de\n guardar, que vive en otra barra: el usuario mira la bandeja, no el men\xFA.\n */\n .tray-unsaved {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 6px;\n border: 1px solid ", ";\n background: rgba(237, 154, 77, 0.08);\n\n p {\n margin: 0;\n font-family: ", ";\n font-size: 12px;\n line-height: 18px;\n color: ", ";\n }\n\n strong {\n font-family: ", ";\n color: ", ";\n }\n }\n\n .tray-unsaved-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: ", ";\n flex-shrink: 0;\n }\n\n .tray-unsaved-detail {\n color: ", ";\n }\n\n .tray-notice {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid;\n\n .tray-notice-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n p {\n margin: 0;\n font-family: ", ";\n font-size: 12px;\n }\n\n button {\n border: none;\n background: none;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n color: inherit;\n }\n }\n\n ul {\n margin: 4px 0 0;\n padding-left: 18px;\n }\n\n li {\n font-family: ", ";\n font-size: 12px;\n line-height: 18px;\n color: ", ";\n }\n }\n\n /* Rojo = no entr\xF3. \xC1mbar = entr\xF3, pero hay algo que saber. */\n .tray-notice-error {\n border-color: ", ";\n background: rgba(", ", 0.05);\n color: ", ";\n }\n\n .tray-notice-warning {\n border-color: ", ";\n background: rgba(237, 154, 77, 0.08);\n color: ", ";\n }\n\n .dropzone {\n position: relative;\n width: 100%;\n min-height: 160px;\n transition: all 0.5s ease;\n\n &.drag-active {\n background-color: rgba(", ", 0.05);\n border: 2px dashed ", ";\n border-radius: 8px;\n\n aside {\n opacity: 0.3;\n pointer-events: none;\n }\n }\n\n .drag-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n\n p {\n font-family: ", ";\n font-size: 16px;\n color: ", ";\n }\n }\n }\n\n .tray-rows {\n display: flex;\n flex-direction: column;\n }\n\n .tray-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .tray-empty {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n width: 80%;\n\n p {\n margin: 0;\n font-family: ", ";\n font-size: 16px;\n color: ", ";\n }\n\n .tray-empty-hint {\n margin-top: 6px;\n font-size: 13px;\n color: ", ";\n }\n }\n"])), _variables.FontFamily.Lato, _variables.GlobalColors.s4, _variables.GlobalColors.in_progress, _variables.FontFamily.Lato, _variables.GlobalColors.s5, _variables.FontFamily.Raleway_600, _variables.GlobalColors.in_progress, _variables.GlobalColors.in_progress, _variables.GlobalColors.s4, _variables.FontFamily.Raleway_600, _variables.FontFamily.Lato, _variables.GlobalColors.s5, _variables.GlobalColors.secondary_magenta, _variables.GlobalColors.rgb_color_pink, _variables.GlobalColors.secondary_magenta, _variables.GlobalColors.in_progress, _variables.GlobalColors.in_progress, _variables.GlobalColors.rgb_color_pink, _variables.GlobalColors.color_pink, _variables.FontFamily.AvenirNext, _variables.GlobalColors.color_pink, _variables.FontFamily.Lato, _variables.GlobalColors.gray, _variables.GlobalColors.s4);
21
-
22
- exports.Container = Container;