docs-combiner 0.1.12 → 0.1.13
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/renderer.js +2032 -387
- package/dist/renderer.js.map +1 -1
- package/package.json +1 -1
package/dist/renderer.js
CHANGED
|
@@ -2757,6 +2757,29 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2757
2757
|
|
|
2758
2758
|
/***/ }),
|
|
2759
2759
|
|
|
2760
|
+
/***/ "./node_modules/@mui/icons-material/esm/AttachMoney.js":
|
|
2761
|
+
/*!*************************************************************!*\
|
|
2762
|
+
!*** ./node_modules/@mui/icons-material/esm/AttachMoney.js ***!
|
|
2763
|
+
\*************************************************************/
|
|
2764
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
2765
|
+
|
|
2766
|
+
"use strict";
|
|
2767
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2768
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2769
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
2770
|
+
/* harmony export */ });
|
|
2771
|
+
/* harmony import */ var _utils_createSvgIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/createSvgIcon.js */ "./node_modules/@mui/material/esm/utils/createSvgIcon.js");
|
|
2772
|
+
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
|
|
2773
|
+
"use client";
|
|
2774
|
+
|
|
2775
|
+
|
|
2776
|
+
|
|
2777
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path", {
|
|
2778
|
+
d: "M11.8 10.9c-2.27-.59-3-1.2-3-2.15 0-1.09 1.01-1.85 2.7-1.85 1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-1.94.42-3.5 1.68-3.5 3.61 0 2.31 1.91 3.46 4.7 4.13 2.5.6 3 1.48 3 2.41 0 .69-.49 1.79-2.7 1.79-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c1.95-.37 3.5-1.5 3.5-3.55 0-2.84-2.43-3.81-4.7-4.4"
|
|
2779
|
+
}), 'AttachMoney'));
|
|
2780
|
+
|
|
2781
|
+
/***/ }),
|
|
2782
|
+
|
|
2760
2783
|
/***/ "./node_modules/@mui/icons-material/esm/AutoAwesome.js":
|
|
2761
2784
|
/*!*************************************************************!*\
|
|
2762
2785
|
!*** ./node_modules/@mui/icons-material/esm/AutoAwesome.js ***!
|
|
@@ -2964,6 +2987,29 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2964
2987
|
|
|
2965
2988
|
/***/ }),
|
|
2966
2989
|
|
|
2990
|
+
/***/ "./node_modules/@mui/icons-material/esm/DeleteOutline.js":
|
|
2991
|
+
/*!***************************************************************!*\
|
|
2992
|
+
!*** ./node_modules/@mui/icons-material/esm/DeleteOutline.js ***!
|
|
2993
|
+
\***************************************************************/
|
|
2994
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
2995
|
+
|
|
2996
|
+
"use strict";
|
|
2997
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2998
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2999
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
3000
|
+
/* harmony export */ });
|
|
3001
|
+
/* harmony import */ var _utils_createSvgIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/createSvgIcon.js */ "./node_modules/@mui/material/esm/utils/createSvgIcon.js");
|
|
3002
|
+
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
|
|
3003
|
+
"use client";
|
|
3004
|
+
|
|
3005
|
+
|
|
3006
|
+
|
|
3007
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path", {
|
|
3008
|
+
d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"
|
|
3009
|
+
}), 'DeleteOutline'));
|
|
3010
|
+
|
|
3011
|
+
/***/ }),
|
|
3012
|
+
|
|
2967
3013
|
/***/ "./node_modules/@mui/icons-material/esm/Edit.js":
|
|
2968
3014
|
/*!******************************************************!*\
|
|
2969
3015
|
!*** ./node_modules/@mui/icons-material/esm/Edit.js ***!
|
|
@@ -8295,6 +8341,206 @@ function getCircularProgressUtilityClass(slot) {
|
|
|
8295
8341
|
const circularProgressClasses = (0,_mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__["default"])('MuiCircularProgress', ['root', 'determinate', 'indeterminate', 'colorPrimary', 'colorSecondary', 'svg', 'track', 'circle', 'circleDeterminate', 'circleIndeterminate', 'circleDisableShrink']);
|
|
8296
8342
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (circularProgressClasses);
|
|
8297
8343
|
|
|
8344
|
+
/***/ }),
|
|
8345
|
+
|
|
8346
|
+
/***/ "./node_modules/@mui/material/esm/ClickAwayListener/ClickAwayListener.js":
|
|
8347
|
+
/*!*******************************************************************************!*\
|
|
8348
|
+
!*** ./node_modules/@mui/material/esm/ClickAwayListener/ClickAwayListener.js ***!
|
|
8349
|
+
\*******************************************************************************/
|
|
8350
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
8351
|
+
|
|
8352
|
+
"use strict";
|
|
8353
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8354
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8355
|
+
/* harmony export */ ClickAwayListener: () => (/* binding */ ClickAwayListener)
|
|
8356
|
+
/* harmony export */ });
|
|
8357
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
8358
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
8359
|
+
/* harmony import */ var _mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils/ownerDocument */ "./node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js");
|
|
8360
|
+
/* harmony import */ var _mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils/useForkRef */ "./node_modules/@mui/utils/esm/useForkRef/useForkRef.js");
|
|
8361
|
+
/* harmony import */ var _mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils/useEventCallback */ "./node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js");
|
|
8362
|
+
/* harmony import */ var _mui_utils_elementAcceptingRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils/elementAcceptingRef */ "./node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js");
|
|
8363
|
+
/* harmony import */ var _mui_utils_exactProp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/utils/exactProp */ "./node_modules/@mui/utils/esm/exactProp/exactProp.js");
|
|
8364
|
+
/* harmony import */ var _mui_utils_getReactElementRef__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils/getReactElementRef */ "./node_modules/@mui/utils/esm/getReactElementRef/getReactElementRef.js");
|
|
8365
|
+
'use client';
|
|
8366
|
+
|
|
8367
|
+
|
|
8368
|
+
|
|
8369
|
+
|
|
8370
|
+
|
|
8371
|
+
|
|
8372
|
+
|
|
8373
|
+
|
|
8374
|
+
|
|
8375
|
+
|
|
8376
|
+
// TODO: return `EventHandlerName extends `on${infer EventName}` ? Lowercase<EventName> : never` once generatePropTypes runs with TS 4.1
|
|
8377
|
+
function mapEventPropToEvent(eventProp) {
|
|
8378
|
+
return eventProp.substring(2).toLowerCase();
|
|
8379
|
+
}
|
|
8380
|
+
function clickedRootScrollbar(event, doc) {
|
|
8381
|
+
return doc.documentElement.clientWidth < event.clientX || doc.documentElement.clientHeight < event.clientY;
|
|
8382
|
+
}
|
|
8383
|
+
/**
|
|
8384
|
+
* Listen for click events that occur somewhere in the document, outside of the element itself.
|
|
8385
|
+
* For instance, if you need to hide a menu when people click anywhere else on your page.
|
|
8386
|
+
*
|
|
8387
|
+
* Demos:
|
|
8388
|
+
*
|
|
8389
|
+
* - [Click-Away Listener](https://mui.com/material-ui/react-click-away-listener/)
|
|
8390
|
+
* - [Menu](https://mui.com/material-ui/react-menu/)
|
|
8391
|
+
*
|
|
8392
|
+
* API:
|
|
8393
|
+
*
|
|
8394
|
+
* - [ClickAwayListener API](https://mui.com/material-ui/api/click-away-listener/)
|
|
8395
|
+
*/
|
|
8396
|
+
function ClickAwayListener(props) {
|
|
8397
|
+
const {
|
|
8398
|
+
children,
|
|
8399
|
+
disableReactTree = false,
|
|
8400
|
+
mouseEvent = 'onClick',
|
|
8401
|
+
onClickAway,
|
|
8402
|
+
touchEvent = 'onTouchEnd'
|
|
8403
|
+
} = props;
|
|
8404
|
+
const movedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
|
|
8405
|
+
const nodeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);
|
|
8406
|
+
const activatedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
|
|
8407
|
+
const syntheticEventRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
|
|
8408
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
8409
|
+
// Ensure that this component is not "activated" synchronously.
|
|
8410
|
+
// https://github.com/facebook/react/issues/20074
|
|
8411
|
+
setTimeout(() => {
|
|
8412
|
+
activatedRef.current = true;
|
|
8413
|
+
}, 0);
|
|
8414
|
+
return () => {
|
|
8415
|
+
activatedRef.current = false;
|
|
8416
|
+
};
|
|
8417
|
+
}, []);
|
|
8418
|
+
const handleRef = (0,_mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_mui_utils_getReactElementRef__WEBPACK_IMPORTED_MODULE_7__["default"])(children), nodeRef);
|
|
8419
|
+
|
|
8420
|
+
// The handler doesn't take event.defaultPrevented into account:
|
|
8421
|
+
//
|
|
8422
|
+
// event.preventDefault() is meant to stop default behaviors like
|
|
8423
|
+
// clicking a checkbox to check it, hitting a button to submit a form,
|
|
8424
|
+
// and hitting left arrow to move the cursor in a text input etc.
|
|
8425
|
+
// Only special HTML elements have these default behaviors.
|
|
8426
|
+
const handleClickAway = (0,_mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_4__["default"])(event => {
|
|
8427
|
+
// Given developers can stop the propagation of the synthetic event,
|
|
8428
|
+
// we can only be confident with a positive value.
|
|
8429
|
+
const insideReactTree = syntheticEventRef.current;
|
|
8430
|
+
syntheticEventRef.current = false;
|
|
8431
|
+
const doc = (0,_mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_2__["default"])(nodeRef.current);
|
|
8432
|
+
|
|
8433
|
+
// 1. IE11 support, which trigger the handleClickAway even after the unbind
|
|
8434
|
+
// 2. The child might render null.
|
|
8435
|
+
// 3. Behave like a blur listener.
|
|
8436
|
+
if (!activatedRef.current || !nodeRef.current || 'clientX' in event && clickedRootScrollbar(event, doc)) {
|
|
8437
|
+
return;
|
|
8438
|
+
}
|
|
8439
|
+
|
|
8440
|
+
// Do not act if user performed touchmove
|
|
8441
|
+
if (movedRef.current) {
|
|
8442
|
+
movedRef.current = false;
|
|
8443
|
+
return;
|
|
8444
|
+
}
|
|
8445
|
+
let insideDOM;
|
|
8446
|
+
|
|
8447
|
+
// If not enough, can use https://github.com/DieterHolvoet/event-propagation-path/blob/master/propagationPath.js
|
|
8448
|
+
if (event.composedPath) {
|
|
8449
|
+
insideDOM = event.composedPath().includes(nodeRef.current);
|
|
8450
|
+
} else {
|
|
8451
|
+
insideDOM = !doc.documentElement.contains(
|
|
8452
|
+
// @ts-expect-error returns `false` as intended when not dispatched from a Node
|
|
8453
|
+
event.target) || nodeRef.current.contains(
|
|
8454
|
+
// @ts-expect-error returns `false` as intended when not dispatched from a Node
|
|
8455
|
+
event.target);
|
|
8456
|
+
}
|
|
8457
|
+
if (!insideDOM && (disableReactTree || !insideReactTree)) {
|
|
8458
|
+
onClickAway(event);
|
|
8459
|
+
}
|
|
8460
|
+
});
|
|
8461
|
+
|
|
8462
|
+
// Keep track of mouse/touch events that bubbled up through the portal.
|
|
8463
|
+
const createHandleSynthetic = handlerName => event => {
|
|
8464
|
+
syntheticEventRef.current = true;
|
|
8465
|
+
const childrenPropsHandler = children.props[handlerName];
|
|
8466
|
+
if (childrenPropsHandler) {
|
|
8467
|
+
childrenPropsHandler(event);
|
|
8468
|
+
}
|
|
8469
|
+
};
|
|
8470
|
+
const childrenProps = {
|
|
8471
|
+
ref: handleRef
|
|
8472
|
+
};
|
|
8473
|
+
if (touchEvent !== false) {
|
|
8474
|
+
childrenProps[touchEvent] = createHandleSynthetic(touchEvent);
|
|
8475
|
+
}
|
|
8476
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
8477
|
+
if (touchEvent !== false) {
|
|
8478
|
+
const mappedTouchEvent = mapEventPropToEvent(touchEvent);
|
|
8479
|
+
const doc = (0,_mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_2__["default"])(nodeRef.current);
|
|
8480
|
+
const handleTouchMove = () => {
|
|
8481
|
+
movedRef.current = true;
|
|
8482
|
+
};
|
|
8483
|
+
doc.addEventListener(mappedTouchEvent, handleClickAway);
|
|
8484
|
+
doc.addEventListener('touchmove', handleTouchMove);
|
|
8485
|
+
return () => {
|
|
8486
|
+
doc.removeEventListener(mappedTouchEvent, handleClickAway);
|
|
8487
|
+
doc.removeEventListener('touchmove', handleTouchMove);
|
|
8488
|
+
};
|
|
8489
|
+
}
|
|
8490
|
+
return undefined;
|
|
8491
|
+
}, [handleClickAway, touchEvent]);
|
|
8492
|
+
if (mouseEvent !== false) {
|
|
8493
|
+
childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent);
|
|
8494
|
+
}
|
|
8495
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
8496
|
+
if (mouseEvent !== false) {
|
|
8497
|
+
const mappedMouseEvent = mapEventPropToEvent(mouseEvent);
|
|
8498
|
+
const doc = (0,_mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_2__["default"])(nodeRef.current);
|
|
8499
|
+
doc.addEventListener(mappedMouseEvent, handleClickAway);
|
|
8500
|
+
return () => {
|
|
8501
|
+
doc.removeEventListener(mappedMouseEvent, handleClickAway);
|
|
8502
|
+
};
|
|
8503
|
+
}
|
|
8504
|
+
return undefined;
|
|
8505
|
+
}, [handleClickAway, mouseEvent]);
|
|
8506
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, childrenProps);
|
|
8507
|
+
}
|
|
8508
|
+
true ? ClickAwayListener.propTypes /* remove-proptypes */ = {
|
|
8509
|
+
// ┌────────────────────────────── Warning ──────────────────────────────┐
|
|
8510
|
+
// │ These PropTypes are generated from the TypeScript type definitions. │
|
|
8511
|
+
// │ To update them, edit the TypeScript types and run `pnpm proptypes`. │
|
|
8512
|
+
// └─────────────────────────────────────────────────────────────────────┘
|
|
8513
|
+
/**
|
|
8514
|
+
* The wrapped element.
|
|
8515
|
+
*/
|
|
8516
|
+
children: _mui_utils_elementAcceptingRef__WEBPACK_IMPORTED_MODULE_5__["default"].isRequired,
|
|
8517
|
+
/**
|
|
8518
|
+
* If `true`, the React tree is ignored and only the DOM tree is considered.
|
|
8519
|
+
* This prop changes how portaled elements are handled.
|
|
8520
|
+
* @default false
|
|
8521
|
+
*/
|
|
8522
|
+
disableReactTree: prop_types__WEBPACK_IMPORTED_MODULE_1__.bool,
|
|
8523
|
+
/**
|
|
8524
|
+
* The mouse event to listen to. You can disable the listener by providing `false`.
|
|
8525
|
+
* @default 'onClick'
|
|
8526
|
+
*/
|
|
8527
|
+
mouseEvent: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['onClick', 'onMouseDown', 'onMouseUp', 'onPointerDown', 'onPointerUp', false]),
|
|
8528
|
+
/**
|
|
8529
|
+
* Callback fired when a "click away" event is detected.
|
|
8530
|
+
*/
|
|
8531
|
+
onClickAway: prop_types__WEBPACK_IMPORTED_MODULE_1__.func.isRequired,
|
|
8532
|
+
/**
|
|
8533
|
+
* The touch event to listen to. You can disable the listener by providing `false`.
|
|
8534
|
+
* @default 'onTouchEnd'
|
|
8535
|
+
*/
|
|
8536
|
+
touchEvent: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['onTouchEnd', 'onTouchStart', false])
|
|
8537
|
+
} : 0;
|
|
8538
|
+
if (true) {
|
|
8539
|
+
// eslint-disable-next-line
|
|
8540
|
+
ClickAwayListener['propTypes' + ''] = (0,_mui_utils_exactProp__WEBPACK_IMPORTED_MODULE_6__["default"])(ClickAwayListener.propTypes);
|
|
8541
|
+
}
|
|
8542
|
+
|
|
8543
|
+
|
|
8298
8544
|
/***/ }),
|
|
8299
8545
|
|
|
8300
8546
|
/***/ "./node_modules/@mui/material/esm/Collapse/Collapse.js":
|
|
@@ -13768,6 +14014,243 @@ const inputClasses = {
|
|
|
13768
14014
|
|
|
13769
14015
|
/***/ }),
|
|
13770
14016
|
|
|
14017
|
+
/***/ "./node_modules/@mui/material/esm/InputAdornment/InputAdornment.js":
|
|
14018
|
+
/*!*************************************************************************!*\
|
|
14019
|
+
!*** ./node_modules/@mui/material/esm/InputAdornment/InputAdornment.js ***!
|
|
14020
|
+
\*************************************************************************/
|
|
14021
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
14022
|
+
|
|
14023
|
+
"use strict";
|
|
14024
|
+
__webpack_require__.r(__webpack_exports__);
|
|
14025
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14026
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
14027
|
+
/* harmony export */ });
|
|
14028
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
14029
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
14030
|
+
/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.mjs");
|
|
14031
|
+
/* harmony import */ var _mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils/composeClasses */ "./node_modules/@mui/utils/esm/composeClasses/composeClasses.js");
|
|
14032
|
+
/* harmony import */ var _utils_capitalize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/capitalize.js */ "./node_modules/@mui/material/esm/utils/capitalize.js");
|
|
14033
|
+
/* harmony import */ var _Typography_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Typography/index.js */ "./node_modules/@mui/material/esm/Typography/Typography.js");
|
|
14034
|
+
/* harmony import */ var _FormControl_FormControlContext_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../FormControl/FormControlContext.js */ "./node_modules/@mui/material/esm/FormControl/FormControlContext.js");
|
|
14035
|
+
/* harmony import */ var _FormControl_useFormControl_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FormControl/useFormControl.js */ "./node_modules/@mui/material/esm/FormControl/useFormControl.js");
|
|
14036
|
+
/* harmony import */ var _zero_styled_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../zero-styled/index.js */ "./node_modules/@mui/material/esm/styles/styled.js");
|
|
14037
|
+
/* harmony import */ var _utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/memoTheme.js */ "./node_modules/@mui/material/esm/utils/memoTheme.js");
|
|
14038
|
+
/* harmony import */ var _DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../DefaultPropsProvider/index.js */ "./node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js");
|
|
14039
|
+
/* harmony import */ var _inputAdornmentClasses_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputAdornmentClasses.js */ "./node_modules/@mui/material/esm/InputAdornment/inputAdornmentClasses.js");
|
|
14040
|
+
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
|
|
14041
|
+
'use client';
|
|
14042
|
+
|
|
14043
|
+
var _span;
|
|
14044
|
+
|
|
14045
|
+
|
|
14046
|
+
|
|
14047
|
+
|
|
14048
|
+
|
|
14049
|
+
|
|
14050
|
+
|
|
14051
|
+
|
|
14052
|
+
|
|
14053
|
+
|
|
14054
|
+
|
|
14055
|
+
|
|
14056
|
+
|
|
14057
|
+
const overridesResolver = (props, styles) => {
|
|
14058
|
+
const {
|
|
14059
|
+
ownerState
|
|
14060
|
+
} = props;
|
|
14061
|
+
return [styles.root, styles[`position${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(ownerState.position)}`], ownerState.disablePointerEvents === true && styles.disablePointerEvents, styles[ownerState.variant]];
|
|
14062
|
+
};
|
|
14063
|
+
const useUtilityClasses = ownerState => {
|
|
14064
|
+
const {
|
|
14065
|
+
classes,
|
|
14066
|
+
disablePointerEvents,
|
|
14067
|
+
hiddenLabel,
|
|
14068
|
+
position,
|
|
14069
|
+
size,
|
|
14070
|
+
variant
|
|
14071
|
+
} = ownerState;
|
|
14072
|
+
const slots = {
|
|
14073
|
+
root: ['root', disablePointerEvents && 'disablePointerEvents', position && `position${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(position)}`, variant, hiddenLabel && 'hiddenLabel', size && `size${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(size)}`]
|
|
14074
|
+
};
|
|
14075
|
+
return (0,_mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_3__["default"])(slots, _inputAdornmentClasses_js__WEBPACK_IMPORTED_MODULE_11__.getInputAdornmentUtilityClass, classes);
|
|
14076
|
+
};
|
|
14077
|
+
const InputAdornmentRoot = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_8__["default"])('div', {
|
|
14078
|
+
name: 'MuiInputAdornment',
|
|
14079
|
+
slot: 'Root',
|
|
14080
|
+
overridesResolver
|
|
14081
|
+
})((0,_utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_9__["default"])(({
|
|
14082
|
+
theme
|
|
14083
|
+
}) => ({
|
|
14084
|
+
display: 'flex',
|
|
14085
|
+
maxHeight: '2em',
|
|
14086
|
+
alignItems: 'center',
|
|
14087
|
+
whiteSpace: 'nowrap',
|
|
14088
|
+
color: (theme.vars || theme).palette.action.active,
|
|
14089
|
+
variants: [{
|
|
14090
|
+
props: {
|
|
14091
|
+
variant: 'filled'
|
|
14092
|
+
},
|
|
14093
|
+
style: {
|
|
14094
|
+
[`&.${_inputAdornmentClasses_js__WEBPACK_IMPORTED_MODULE_11__["default"].positionStart}&:not(.${_inputAdornmentClasses_js__WEBPACK_IMPORTED_MODULE_11__["default"].hiddenLabel})`]: {
|
|
14095
|
+
marginTop: 16
|
|
14096
|
+
}
|
|
14097
|
+
}
|
|
14098
|
+
}, {
|
|
14099
|
+
props: {
|
|
14100
|
+
position: 'start'
|
|
14101
|
+
},
|
|
14102
|
+
style: {
|
|
14103
|
+
marginRight: 8
|
|
14104
|
+
}
|
|
14105
|
+
}, {
|
|
14106
|
+
props: {
|
|
14107
|
+
position: 'end'
|
|
14108
|
+
},
|
|
14109
|
+
style: {
|
|
14110
|
+
marginLeft: 8
|
|
14111
|
+
}
|
|
14112
|
+
}, {
|
|
14113
|
+
props: {
|
|
14114
|
+
disablePointerEvents: true
|
|
14115
|
+
},
|
|
14116
|
+
style: {
|
|
14117
|
+
pointerEvents: 'none'
|
|
14118
|
+
}
|
|
14119
|
+
}]
|
|
14120
|
+
})));
|
|
14121
|
+
const InputAdornment = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function InputAdornment(inProps, ref) {
|
|
14122
|
+
const props = (0,_DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_10__.useDefaultProps)({
|
|
14123
|
+
props: inProps,
|
|
14124
|
+
name: 'MuiInputAdornment'
|
|
14125
|
+
});
|
|
14126
|
+
const {
|
|
14127
|
+
children,
|
|
14128
|
+
className,
|
|
14129
|
+
component = 'div',
|
|
14130
|
+
disablePointerEvents = false,
|
|
14131
|
+
disableTypography = false,
|
|
14132
|
+
position,
|
|
14133
|
+
variant: variantProp,
|
|
14134
|
+
...other
|
|
14135
|
+
} = props;
|
|
14136
|
+
const muiFormControl = (0,_FormControl_useFormControl_js__WEBPACK_IMPORTED_MODULE_7__["default"])() || {};
|
|
14137
|
+
let variant = variantProp;
|
|
14138
|
+
if (variantProp && muiFormControl.variant) {
|
|
14139
|
+
if (true) {
|
|
14140
|
+
if (variantProp === muiFormControl.variant) {
|
|
14141
|
+
console.error('MUI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');
|
|
14142
|
+
}
|
|
14143
|
+
}
|
|
14144
|
+
}
|
|
14145
|
+
if (muiFormControl && !variant) {
|
|
14146
|
+
variant = muiFormControl.variant;
|
|
14147
|
+
}
|
|
14148
|
+
const ownerState = {
|
|
14149
|
+
...props,
|
|
14150
|
+
hiddenLabel: muiFormControl.hiddenLabel,
|
|
14151
|
+
size: muiFormControl.size,
|
|
14152
|
+
disablePointerEvents,
|
|
14153
|
+
position,
|
|
14154
|
+
variant
|
|
14155
|
+
};
|
|
14156
|
+
const classes = useUtilityClasses(ownerState);
|
|
14157
|
+
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_FormControl_FormControlContext_js__WEBPACK_IMPORTED_MODULE_6__["default"].Provider, {
|
|
14158
|
+
value: null,
|
|
14159
|
+
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(InputAdornmentRoot, {
|
|
14160
|
+
as: component,
|
|
14161
|
+
ownerState: ownerState,
|
|
14162
|
+
className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__["default"])(classes.root, className),
|
|
14163
|
+
ref: ref,
|
|
14164
|
+
...other,
|
|
14165
|
+
children: typeof children === 'string' && !disableTypography ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_Typography_index_js__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
14166
|
+
color: "textSecondary",
|
|
14167
|
+
children: children
|
|
14168
|
+
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
|
|
14169
|
+
children: [position === 'start' ? (/* notranslate needed while Google Translate will not fix zero-width space issue */_span || (_span = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
|
|
14170
|
+
className: "notranslate",
|
|
14171
|
+
"aria-hidden": true,
|
|
14172
|
+
children: "\u200B"
|
|
14173
|
+
}))) : null, children]
|
|
14174
|
+
})
|
|
14175
|
+
})
|
|
14176
|
+
});
|
|
14177
|
+
});
|
|
14178
|
+
true ? InputAdornment.propTypes /* remove-proptypes */ = {
|
|
14179
|
+
// ┌────────────────────────────── Warning ──────────────────────────────┐
|
|
14180
|
+
// │ These PropTypes are generated from the TypeScript type definitions. │
|
|
14181
|
+
// │ To update them, edit the d.ts file and run `pnpm proptypes`. │
|
|
14182
|
+
// └─────────────────────────────────────────────────────────────────────┘
|
|
14183
|
+
/**
|
|
14184
|
+
* The content of the component, normally an `IconButton` or string.
|
|
14185
|
+
*/
|
|
14186
|
+
children: prop_types__WEBPACK_IMPORTED_MODULE_1__.node,
|
|
14187
|
+
/**
|
|
14188
|
+
* Override or extend the styles applied to the component.
|
|
14189
|
+
*/
|
|
14190
|
+
classes: prop_types__WEBPACK_IMPORTED_MODULE_1__.object,
|
|
14191
|
+
/**
|
|
14192
|
+
* @ignore
|
|
14193
|
+
*/
|
|
14194
|
+
className: prop_types__WEBPACK_IMPORTED_MODULE_1__.string,
|
|
14195
|
+
/**
|
|
14196
|
+
* The component used for the root node.
|
|
14197
|
+
* Either a string to use a HTML element or a component.
|
|
14198
|
+
*/
|
|
14199
|
+
component: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType,
|
|
14200
|
+
/**
|
|
14201
|
+
* Disable pointer events on the root.
|
|
14202
|
+
* This allows for the content of the adornment to focus the `input` on click.
|
|
14203
|
+
* @default false
|
|
14204
|
+
*/
|
|
14205
|
+
disablePointerEvents: prop_types__WEBPACK_IMPORTED_MODULE_1__.bool,
|
|
14206
|
+
/**
|
|
14207
|
+
* If children is a string then disable wrapping in a Typography component.
|
|
14208
|
+
* @default false
|
|
14209
|
+
*/
|
|
14210
|
+
disableTypography: prop_types__WEBPACK_IMPORTED_MODULE_1__.bool,
|
|
14211
|
+
/**
|
|
14212
|
+
* The position this adornment should appear relative to the `Input`.
|
|
14213
|
+
*/
|
|
14214
|
+
position: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['end', 'start']).isRequired,
|
|
14215
|
+
/**
|
|
14216
|
+
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
14217
|
+
*/
|
|
14218
|
+
sx: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object, prop_types__WEBPACK_IMPORTED_MODULE_1__.bool])), prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object]),
|
|
14219
|
+
/**
|
|
14220
|
+
* The variant to use.
|
|
14221
|
+
* Note: If you are using the `TextField` component or the `FormControl` component
|
|
14222
|
+
* you do not have to set this manually.
|
|
14223
|
+
*/
|
|
14224
|
+
variant: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['filled', 'outlined', 'standard'])
|
|
14225
|
+
} : 0;
|
|
14226
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InputAdornment);
|
|
14227
|
+
|
|
14228
|
+
/***/ }),
|
|
14229
|
+
|
|
14230
|
+
/***/ "./node_modules/@mui/material/esm/InputAdornment/inputAdornmentClasses.js":
|
|
14231
|
+
/*!********************************************************************************!*\
|
|
14232
|
+
!*** ./node_modules/@mui/material/esm/InputAdornment/inputAdornmentClasses.js ***!
|
|
14233
|
+
\********************************************************************************/
|
|
14234
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
14235
|
+
|
|
14236
|
+
"use strict";
|
|
14237
|
+
__webpack_require__.r(__webpack_exports__);
|
|
14238
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14239
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
14240
|
+
/* harmony export */ getInputAdornmentUtilityClass: () => (/* binding */ getInputAdornmentUtilityClass)
|
|
14241
|
+
/* harmony export */ });
|
|
14242
|
+
/* harmony import */ var _mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils/generateUtilityClasses */ "./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js");
|
|
14243
|
+
/* harmony import */ var _mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils/generateUtilityClass */ "./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js");
|
|
14244
|
+
|
|
14245
|
+
|
|
14246
|
+
function getInputAdornmentUtilityClass(slot) {
|
|
14247
|
+
return (0,_mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__["default"])('MuiInputAdornment', slot);
|
|
14248
|
+
}
|
|
14249
|
+
const inputAdornmentClasses = (0,_mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__["default"])('MuiInputAdornment', ['root', 'filled', 'standard', 'outlined', 'positionStart', 'positionEnd', 'disablePointerEvents', 'hiddenLabel', 'sizeSmall']);
|
|
14250
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (inputAdornmentClasses);
|
|
14251
|
+
|
|
14252
|
+
/***/ }),
|
|
14253
|
+
|
|
13771
14254
|
/***/ "./node_modules/@mui/material/esm/InputBase/InputBase.js":
|
|
13772
14255
|
/*!***************************************************************!*\
|
|
13773
14256
|
!*** ./node_modules/@mui/material/esm/InputBase/InputBase.js ***!
|
|
@@ -20813,6 +21296,799 @@ const selectClasses = (0,_mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MOD
|
|
|
20813
21296
|
|
|
20814
21297
|
/***/ }),
|
|
20815
21298
|
|
|
21299
|
+
/***/ "./node_modules/@mui/material/esm/Snackbar/Snackbar.js":
|
|
21300
|
+
/*!*************************************************************!*\
|
|
21301
|
+
!*** ./node_modules/@mui/material/esm/Snackbar/Snackbar.js ***!
|
|
21302
|
+
\*************************************************************/
|
|
21303
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
21304
|
+
|
|
21305
|
+
"use strict";
|
|
21306
|
+
__webpack_require__.r(__webpack_exports__);
|
|
21307
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
21308
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
21309
|
+
/* harmony export */ });
|
|
21310
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
21311
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
21312
|
+
/* harmony import */ var _mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils/composeClasses */ "./node_modules/@mui/utils/esm/composeClasses/composeClasses.js");
|
|
21313
|
+
/* harmony import */ var _useSnackbar_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useSnackbar.js */ "./node_modules/@mui/material/esm/Snackbar/useSnackbar.js");
|
|
21314
|
+
/* harmony import */ var _ClickAwayListener_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ClickAwayListener/index.js */ "./node_modules/@mui/material/esm/ClickAwayListener/ClickAwayListener.js");
|
|
21315
|
+
/* harmony import */ var _zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../zero-styled/index.js */ "./node_modules/@mui/material/esm/styles/useTheme.js");
|
|
21316
|
+
/* harmony import */ var _zero_styled_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../zero-styled/index.js */ "./node_modules/@mui/material/esm/styles/styled.js");
|
|
21317
|
+
/* harmony import */ var _utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/memoTheme.js */ "./node_modules/@mui/material/esm/utils/memoTheme.js");
|
|
21318
|
+
/* harmony import */ var _DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../DefaultPropsProvider/index.js */ "./node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js");
|
|
21319
|
+
/* harmony import */ var _utils_capitalize_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/capitalize.js */ "./node_modules/@mui/material/esm/utils/capitalize.js");
|
|
21320
|
+
/* harmony import */ var _Grow_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Grow/index.js */ "./node_modules/@mui/material/esm/Grow/Grow.js");
|
|
21321
|
+
/* harmony import */ var _SnackbarContent_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../SnackbarContent/index.js */ "./node_modules/@mui/material/esm/SnackbarContent/SnackbarContent.js");
|
|
21322
|
+
/* harmony import */ var _snackbarClasses_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./snackbarClasses.js */ "./node_modules/@mui/material/esm/Snackbar/snackbarClasses.js");
|
|
21323
|
+
/* harmony import */ var _utils_useSlot_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/useSlot.js */ "./node_modules/@mui/material/esm/utils/useSlot.js");
|
|
21324
|
+
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
|
|
21325
|
+
'use client';
|
|
21326
|
+
|
|
21327
|
+
|
|
21328
|
+
|
|
21329
|
+
|
|
21330
|
+
|
|
21331
|
+
|
|
21332
|
+
|
|
21333
|
+
|
|
21334
|
+
|
|
21335
|
+
|
|
21336
|
+
|
|
21337
|
+
|
|
21338
|
+
|
|
21339
|
+
|
|
21340
|
+
|
|
21341
|
+
const useUtilityClasses = ownerState => {
|
|
21342
|
+
const {
|
|
21343
|
+
classes,
|
|
21344
|
+
anchorOrigin
|
|
21345
|
+
} = ownerState;
|
|
21346
|
+
const slots = {
|
|
21347
|
+
root: ['root', `anchorOrigin${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_9__["default"])(anchorOrigin.vertical)}${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_9__["default"])(anchorOrigin.horizontal)}`]
|
|
21348
|
+
};
|
|
21349
|
+
return (0,_mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_2__["default"])(slots, _snackbarClasses_js__WEBPACK_IMPORTED_MODULE_12__.getSnackbarUtilityClass, classes);
|
|
21350
|
+
};
|
|
21351
|
+
const SnackbarRoot = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_6__["default"])('div', {
|
|
21352
|
+
name: 'MuiSnackbar',
|
|
21353
|
+
slot: 'Root',
|
|
21354
|
+
overridesResolver: (props, styles) => {
|
|
21355
|
+
const {
|
|
21356
|
+
ownerState
|
|
21357
|
+
} = props;
|
|
21358
|
+
return [styles.root, styles[`anchorOrigin${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_9__["default"])(ownerState.anchorOrigin.vertical)}${(0,_utils_capitalize_js__WEBPACK_IMPORTED_MODULE_9__["default"])(ownerState.anchorOrigin.horizontal)}`]];
|
|
21359
|
+
}
|
|
21360
|
+
})((0,_utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_7__["default"])(({
|
|
21361
|
+
theme
|
|
21362
|
+
}) => ({
|
|
21363
|
+
zIndex: (theme.vars || theme).zIndex.snackbar,
|
|
21364
|
+
position: 'fixed',
|
|
21365
|
+
display: 'flex',
|
|
21366
|
+
left: 8,
|
|
21367
|
+
right: 8,
|
|
21368
|
+
justifyContent: 'center',
|
|
21369
|
+
alignItems: 'center',
|
|
21370
|
+
variants: [{
|
|
21371
|
+
props: ({
|
|
21372
|
+
ownerState
|
|
21373
|
+
}) => ownerState.anchorOrigin.vertical === 'top',
|
|
21374
|
+
style: {
|
|
21375
|
+
top: 8,
|
|
21376
|
+
[theme.breakpoints.up('sm')]: {
|
|
21377
|
+
top: 24
|
|
21378
|
+
}
|
|
21379
|
+
}
|
|
21380
|
+
}, {
|
|
21381
|
+
props: ({
|
|
21382
|
+
ownerState
|
|
21383
|
+
}) => ownerState.anchorOrigin.vertical !== 'top',
|
|
21384
|
+
style: {
|
|
21385
|
+
bottom: 8,
|
|
21386
|
+
[theme.breakpoints.up('sm')]: {
|
|
21387
|
+
bottom: 24
|
|
21388
|
+
}
|
|
21389
|
+
}
|
|
21390
|
+
}, {
|
|
21391
|
+
props: ({
|
|
21392
|
+
ownerState
|
|
21393
|
+
}) => ownerState.anchorOrigin.horizontal === 'left',
|
|
21394
|
+
style: {
|
|
21395
|
+
justifyContent: 'flex-start',
|
|
21396
|
+
[theme.breakpoints.up('sm')]: {
|
|
21397
|
+
left: 24,
|
|
21398
|
+
right: 'auto'
|
|
21399
|
+
}
|
|
21400
|
+
}
|
|
21401
|
+
}, {
|
|
21402
|
+
props: ({
|
|
21403
|
+
ownerState
|
|
21404
|
+
}) => ownerState.anchorOrigin.horizontal === 'right',
|
|
21405
|
+
style: {
|
|
21406
|
+
justifyContent: 'flex-end',
|
|
21407
|
+
[theme.breakpoints.up('sm')]: {
|
|
21408
|
+
right: 24,
|
|
21409
|
+
left: 'auto'
|
|
21410
|
+
}
|
|
21411
|
+
}
|
|
21412
|
+
}, {
|
|
21413
|
+
props: ({
|
|
21414
|
+
ownerState
|
|
21415
|
+
}) => ownerState.anchorOrigin.horizontal === 'center',
|
|
21416
|
+
style: {
|
|
21417
|
+
[theme.breakpoints.up('sm')]: {
|
|
21418
|
+
left: '50%',
|
|
21419
|
+
right: 'auto',
|
|
21420
|
+
transform: 'translateX(-50%)'
|
|
21421
|
+
}
|
|
21422
|
+
}
|
|
21423
|
+
}]
|
|
21424
|
+
})));
|
|
21425
|
+
const Snackbar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function Snackbar(inProps, ref) {
|
|
21426
|
+
const props = (0,_DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_8__.useDefaultProps)({
|
|
21427
|
+
props: inProps,
|
|
21428
|
+
name: 'MuiSnackbar'
|
|
21429
|
+
});
|
|
21430
|
+
const theme = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])();
|
|
21431
|
+
const defaultTransitionDuration = {
|
|
21432
|
+
enter: theme.transitions.duration.enteringScreen,
|
|
21433
|
+
exit: theme.transitions.duration.leavingScreen
|
|
21434
|
+
};
|
|
21435
|
+
const {
|
|
21436
|
+
action,
|
|
21437
|
+
anchorOrigin: {
|
|
21438
|
+
vertical,
|
|
21439
|
+
horizontal
|
|
21440
|
+
} = {
|
|
21441
|
+
vertical: 'bottom',
|
|
21442
|
+
horizontal: 'left'
|
|
21443
|
+
},
|
|
21444
|
+
autoHideDuration = null,
|
|
21445
|
+
children,
|
|
21446
|
+
className,
|
|
21447
|
+
ClickAwayListenerProps: ClickAwayListenerPropsProp,
|
|
21448
|
+
ContentProps: ContentPropsProp,
|
|
21449
|
+
disableWindowBlurListener = false,
|
|
21450
|
+
message,
|
|
21451
|
+
onBlur,
|
|
21452
|
+
onClose,
|
|
21453
|
+
onFocus,
|
|
21454
|
+
onMouseEnter,
|
|
21455
|
+
onMouseLeave,
|
|
21456
|
+
open,
|
|
21457
|
+
resumeHideDuration,
|
|
21458
|
+
slots = {},
|
|
21459
|
+
slotProps = {},
|
|
21460
|
+
TransitionComponent: TransitionComponentProp,
|
|
21461
|
+
transitionDuration = defaultTransitionDuration,
|
|
21462
|
+
TransitionProps: {
|
|
21463
|
+
onEnter,
|
|
21464
|
+
onExited,
|
|
21465
|
+
...TransitionPropsProp
|
|
21466
|
+
} = {},
|
|
21467
|
+
...other
|
|
21468
|
+
} = props;
|
|
21469
|
+
const ownerState = {
|
|
21470
|
+
...props,
|
|
21471
|
+
anchorOrigin: {
|
|
21472
|
+
vertical,
|
|
21473
|
+
horizontal
|
|
21474
|
+
},
|
|
21475
|
+
autoHideDuration,
|
|
21476
|
+
disableWindowBlurListener,
|
|
21477
|
+
TransitionComponent: TransitionComponentProp,
|
|
21478
|
+
transitionDuration
|
|
21479
|
+
};
|
|
21480
|
+
const classes = useUtilityClasses(ownerState);
|
|
21481
|
+
const {
|
|
21482
|
+
getRootProps,
|
|
21483
|
+
onClickAway
|
|
21484
|
+
} = (0,_useSnackbar_js__WEBPACK_IMPORTED_MODULE_3__["default"])({
|
|
21485
|
+
...ownerState
|
|
21486
|
+
});
|
|
21487
|
+
const [exited, setExited] = react__WEBPACK_IMPORTED_MODULE_0__.useState(true);
|
|
21488
|
+
const handleExited = node => {
|
|
21489
|
+
setExited(true);
|
|
21490
|
+
if (onExited) {
|
|
21491
|
+
onExited(node);
|
|
21492
|
+
}
|
|
21493
|
+
};
|
|
21494
|
+
const handleEnter = (node, isAppearing) => {
|
|
21495
|
+
setExited(false);
|
|
21496
|
+
if (onEnter) {
|
|
21497
|
+
onEnter(node, isAppearing);
|
|
21498
|
+
}
|
|
21499
|
+
};
|
|
21500
|
+
const externalForwardedProps = {
|
|
21501
|
+
slots: {
|
|
21502
|
+
transition: TransitionComponentProp,
|
|
21503
|
+
...slots
|
|
21504
|
+
},
|
|
21505
|
+
slotProps: {
|
|
21506
|
+
content: ContentPropsProp,
|
|
21507
|
+
clickAwayListener: ClickAwayListenerPropsProp,
|
|
21508
|
+
transition: TransitionPropsProp,
|
|
21509
|
+
...slotProps
|
|
21510
|
+
}
|
|
21511
|
+
};
|
|
21512
|
+
const [Root, rootProps] = (0,_utils_useSlot_js__WEBPACK_IMPORTED_MODULE_13__["default"])('root', {
|
|
21513
|
+
ref,
|
|
21514
|
+
className: [classes.root, className],
|
|
21515
|
+
elementType: SnackbarRoot,
|
|
21516
|
+
getSlotProps: getRootProps,
|
|
21517
|
+
externalForwardedProps: {
|
|
21518
|
+
...externalForwardedProps,
|
|
21519
|
+
...other
|
|
21520
|
+
},
|
|
21521
|
+
ownerState
|
|
21522
|
+
});
|
|
21523
|
+
const [ClickAwaySlot, {
|
|
21524
|
+
ownerState: clickAwayOwnerStateProp,
|
|
21525
|
+
...clickAwayListenerProps
|
|
21526
|
+
}] = (0,_utils_useSlot_js__WEBPACK_IMPORTED_MODULE_13__["default"])('clickAwayListener', {
|
|
21527
|
+
elementType: _ClickAwayListener_index_js__WEBPACK_IMPORTED_MODULE_4__.ClickAwayListener,
|
|
21528
|
+
externalForwardedProps,
|
|
21529
|
+
getSlotProps: handlers => ({
|
|
21530
|
+
onClickAway: (...params) => {
|
|
21531
|
+
const event = params[0];
|
|
21532
|
+
handlers.onClickAway?.(...params);
|
|
21533
|
+
if (event?.defaultMuiPrevented) {
|
|
21534
|
+
return;
|
|
21535
|
+
}
|
|
21536
|
+
onClickAway(...params);
|
|
21537
|
+
}
|
|
21538
|
+
}),
|
|
21539
|
+
ownerState
|
|
21540
|
+
});
|
|
21541
|
+
const [ContentSlot, contentSlotProps] = (0,_utils_useSlot_js__WEBPACK_IMPORTED_MODULE_13__["default"])('content', {
|
|
21542
|
+
elementType: _SnackbarContent_index_js__WEBPACK_IMPORTED_MODULE_11__["default"],
|
|
21543
|
+
shouldForwardComponentProp: true,
|
|
21544
|
+
externalForwardedProps,
|
|
21545
|
+
additionalProps: {
|
|
21546
|
+
message,
|
|
21547
|
+
action
|
|
21548
|
+
},
|
|
21549
|
+
ownerState
|
|
21550
|
+
});
|
|
21551
|
+
const [TransitionSlot, transitionProps] = (0,_utils_useSlot_js__WEBPACK_IMPORTED_MODULE_13__["default"])('transition', {
|
|
21552
|
+
elementType: _Grow_index_js__WEBPACK_IMPORTED_MODULE_10__["default"],
|
|
21553
|
+
externalForwardedProps,
|
|
21554
|
+
getSlotProps: handlers => ({
|
|
21555
|
+
onEnter: (...params) => {
|
|
21556
|
+
handlers.onEnter?.(...params);
|
|
21557
|
+
handleEnter(...params);
|
|
21558
|
+
},
|
|
21559
|
+
onExited: (...params) => {
|
|
21560
|
+
handlers.onExited?.(...params);
|
|
21561
|
+
handleExited(...params);
|
|
21562
|
+
}
|
|
21563
|
+
}),
|
|
21564
|
+
additionalProps: {
|
|
21565
|
+
appear: true,
|
|
21566
|
+
in: open,
|
|
21567
|
+
timeout: transitionDuration,
|
|
21568
|
+
direction: vertical === 'top' ? 'down' : 'up'
|
|
21569
|
+
},
|
|
21570
|
+
ownerState
|
|
21571
|
+
});
|
|
21572
|
+
|
|
21573
|
+
// So we only render active snackbars.
|
|
21574
|
+
if (!open && exited) {
|
|
21575
|
+
return null;
|
|
21576
|
+
}
|
|
21577
|
+
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(ClickAwaySlot, {
|
|
21578
|
+
...clickAwayListenerProps,
|
|
21579
|
+
...(slots.clickAwayListener && {
|
|
21580
|
+
ownerState: clickAwayOwnerStateProp
|
|
21581
|
+
}),
|
|
21582
|
+
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(Root, {
|
|
21583
|
+
...rootProps,
|
|
21584
|
+
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(TransitionSlot, {
|
|
21585
|
+
...transitionProps,
|
|
21586
|
+
children: children || /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(ContentSlot, {
|
|
21587
|
+
...contentSlotProps
|
|
21588
|
+
})
|
|
21589
|
+
})
|
|
21590
|
+
})
|
|
21591
|
+
});
|
|
21592
|
+
});
|
|
21593
|
+
true ? Snackbar.propTypes /* remove-proptypes */ = {
|
|
21594
|
+
// ┌────────────────────────────── Warning ──────────────────────────────┐
|
|
21595
|
+
// │ These PropTypes are generated from the TypeScript type definitions. │
|
|
21596
|
+
// │ To update them, edit the d.ts file and run `pnpm proptypes`. │
|
|
21597
|
+
// └─────────────────────────────────────────────────────────────────────┘
|
|
21598
|
+
/**
|
|
21599
|
+
* The action to display. It renders after the message, at the end of the snackbar.
|
|
21600
|
+
*/
|
|
21601
|
+
action: prop_types__WEBPACK_IMPORTED_MODULE_1__.node,
|
|
21602
|
+
/**
|
|
21603
|
+
* The anchor of the `Snackbar`.
|
|
21604
|
+
* On smaller screens, the component grows to occupy all the available width,
|
|
21605
|
+
* the horizontal alignment is ignored.
|
|
21606
|
+
* @default { vertical: 'bottom', horizontal: 'left' }
|
|
21607
|
+
*/
|
|
21608
|
+
anchorOrigin: prop_types__WEBPACK_IMPORTED_MODULE_1__.shape({
|
|
21609
|
+
horizontal: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['center', 'left', 'right']).isRequired,
|
|
21610
|
+
vertical: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOf(['bottom', 'top']).isRequired
|
|
21611
|
+
}),
|
|
21612
|
+
/**
|
|
21613
|
+
* The number of milliseconds to wait before automatically calling the
|
|
21614
|
+
* `onClose` function. `onClose` should then set the state of the `open`
|
|
21615
|
+
* prop to hide the Snackbar. This behavior is disabled by default with
|
|
21616
|
+
* the `null` value.
|
|
21617
|
+
* @default null
|
|
21618
|
+
*/
|
|
21619
|
+
autoHideDuration: prop_types__WEBPACK_IMPORTED_MODULE_1__.number,
|
|
21620
|
+
/**
|
|
21621
|
+
* Replace the `SnackbarContent` component.
|
|
21622
|
+
*/
|
|
21623
|
+
children: prop_types__WEBPACK_IMPORTED_MODULE_1__.element,
|
|
21624
|
+
/**
|
|
21625
|
+
* Override or extend the styles applied to the component.
|
|
21626
|
+
*/
|
|
21627
|
+
classes: prop_types__WEBPACK_IMPORTED_MODULE_1__.object,
|
|
21628
|
+
/**
|
|
21629
|
+
* @ignore
|
|
21630
|
+
*/
|
|
21631
|
+
className: prop_types__WEBPACK_IMPORTED_MODULE_1__.string,
|
|
21632
|
+
/**
|
|
21633
|
+
* Props applied to the `ClickAwayListener` element.
|
|
21634
|
+
* @deprecated Use `slotProps.clickAwayListener` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
21635
|
+
*/
|
|
21636
|
+
ClickAwayListenerProps: prop_types__WEBPACK_IMPORTED_MODULE_1__.object,
|
|
21637
|
+
/**
|
|
21638
|
+
* Props applied to the [`SnackbarContent`](https://mui.com/material-ui/api/snackbar-content/) element.
|
|
21639
|
+
* @deprecated Use `slotProps.content` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
21640
|
+
*/
|
|
21641
|
+
ContentProps: prop_types__WEBPACK_IMPORTED_MODULE_1__.object,
|
|
21642
|
+
/**
|
|
21643
|
+
* If `true`, the `autoHideDuration` timer will expire even if the window is not focused.
|
|
21644
|
+
* @default false
|
|
21645
|
+
*/
|
|
21646
|
+
disableWindowBlurListener: prop_types__WEBPACK_IMPORTED_MODULE_1__.bool,
|
|
21647
|
+
/**
|
|
21648
|
+
* When displaying multiple consecutive snackbars using a single parent-rendered
|
|
21649
|
+
* `<Snackbar/>`, add the `key` prop to ensure independent treatment of each message.
|
|
21650
|
+
* For instance, use `<Snackbar key={message} />`. Otherwise, messages might update
|
|
21651
|
+
* in place, and features like `autoHideDuration` could be affected.
|
|
21652
|
+
*/
|
|
21653
|
+
key: () => null,
|
|
21654
|
+
/**
|
|
21655
|
+
* The message to display.
|
|
21656
|
+
*/
|
|
21657
|
+
message: prop_types__WEBPACK_IMPORTED_MODULE_1__.node,
|
|
21658
|
+
/**
|
|
21659
|
+
* @ignore
|
|
21660
|
+
*/
|
|
21661
|
+
onBlur: prop_types__WEBPACK_IMPORTED_MODULE_1__.func,
|
|
21662
|
+
/**
|
|
21663
|
+
* Callback fired when the component requests to be closed.
|
|
21664
|
+
* Typically `onClose` is used to set state in the parent component,
|
|
21665
|
+
* which is used to control the `Snackbar` `open` prop.
|
|
21666
|
+
* The `reason` parameter can optionally be used to control the response to `onClose`,
|
|
21667
|
+
* for example ignoring `clickaway`.
|
|
21668
|
+
*
|
|
21669
|
+
* @param {React.SyntheticEvent<any> | Event} event The event source of the callback.
|
|
21670
|
+
* @param {string} reason Can be: `"timeout"` (`autoHideDuration` expired), `"clickaway"`, or `"escapeKeyDown"`.
|
|
21671
|
+
*/
|
|
21672
|
+
onClose: prop_types__WEBPACK_IMPORTED_MODULE_1__.func,
|
|
21673
|
+
/**
|
|
21674
|
+
* @ignore
|
|
21675
|
+
*/
|
|
21676
|
+
onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1__.func,
|
|
21677
|
+
/**
|
|
21678
|
+
* @ignore
|
|
21679
|
+
*/
|
|
21680
|
+
onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1__.func,
|
|
21681
|
+
/**
|
|
21682
|
+
* @ignore
|
|
21683
|
+
*/
|
|
21684
|
+
onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1__.func,
|
|
21685
|
+
/**
|
|
21686
|
+
* If `true`, the component is shown.
|
|
21687
|
+
*/
|
|
21688
|
+
open: prop_types__WEBPACK_IMPORTED_MODULE_1__.bool,
|
|
21689
|
+
/**
|
|
21690
|
+
* The number of milliseconds to wait before dismissing after user interaction.
|
|
21691
|
+
* If `autoHideDuration` prop isn't specified, it does nothing.
|
|
21692
|
+
* If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,
|
|
21693
|
+
* we default to `autoHideDuration / 2` ms.
|
|
21694
|
+
*/
|
|
21695
|
+
resumeHideDuration: prop_types__WEBPACK_IMPORTED_MODULE_1__.number,
|
|
21696
|
+
/**
|
|
21697
|
+
* The props used for each slot inside.
|
|
21698
|
+
* @default {}
|
|
21699
|
+
*/
|
|
21700
|
+
slotProps: prop_types__WEBPACK_IMPORTED_MODULE_1__.shape({
|
|
21701
|
+
clickAwayListener: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object]),
|
|
21702
|
+
content: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object]),
|
|
21703
|
+
root: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object]),
|
|
21704
|
+
transition: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object])
|
|
21705
|
+
}),
|
|
21706
|
+
/**
|
|
21707
|
+
* The components used for each slot inside.
|
|
21708
|
+
* @default {}
|
|
21709
|
+
*/
|
|
21710
|
+
slots: prop_types__WEBPACK_IMPORTED_MODULE_1__.shape({
|
|
21711
|
+
clickAwayListener: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType,
|
|
21712
|
+
content: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType,
|
|
21713
|
+
root: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType,
|
|
21714
|
+
transition: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType
|
|
21715
|
+
}),
|
|
21716
|
+
/**
|
|
21717
|
+
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
21718
|
+
*/
|
|
21719
|
+
sx: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object, prop_types__WEBPACK_IMPORTED_MODULE_1__.bool])), prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object]),
|
|
21720
|
+
/**
|
|
21721
|
+
* The component used for the transition.
|
|
21722
|
+
* [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
|
|
21723
|
+
* @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
21724
|
+
* @default Grow
|
|
21725
|
+
*/
|
|
21726
|
+
TransitionComponent: prop_types__WEBPACK_IMPORTED_MODULE_1__.elementType,
|
|
21727
|
+
/**
|
|
21728
|
+
* The duration for the transition, in milliseconds.
|
|
21729
|
+
* You may specify a single timeout for all transitions, or individually with an object.
|
|
21730
|
+
* @default {
|
|
21731
|
+
* enter: theme.transitions.duration.enteringScreen,
|
|
21732
|
+
* exit: theme.transitions.duration.leavingScreen,
|
|
21733
|
+
* }
|
|
21734
|
+
*/
|
|
21735
|
+
transitionDuration: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.number, prop_types__WEBPACK_IMPORTED_MODULE_1__.shape({
|
|
21736
|
+
appear: prop_types__WEBPACK_IMPORTED_MODULE_1__.number,
|
|
21737
|
+
enter: prop_types__WEBPACK_IMPORTED_MODULE_1__.number,
|
|
21738
|
+
exit: prop_types__WEBPACK_IMPORTED_MODULE_1__.number
|
|
21739
|
+
})]),
|
|
21740
|
+
/**
|
|
21741
|
+
* Props applied to the transition element.
|
|
21742
|
+
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
21743
|
+
* @deprecated Use `slotProps.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
21744
|
+
* @default {}
|
|
21745
|
+
*/
|
|
21746
|
+
TransitionProps: prop_types__WEBPACK_IMPORTED_MODULE_1__.object
|
|
21747
|
+
} : 0;
|
|
21748
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Snackbar);
|
|
21749
|
+
|
|
21750
|
+
/***/ }),
|
|
21751
|
+
|
|
21752
|
+
/***/ "./node_modules/@mui/material/esm/Snackbar/snackbarClasses.js":
|
|
21753
|
+
/*!********************************************************************!*\
|
|
21754
|
+
!*** ./node_modules/@mui/material/esm/Snackbar/snackbarClasses.js ***!
|
|
21755
|
+
\********************************************************************/
|
|
21756
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
21757
|
+
|
|
21758
|
+
"use strict";
|
|
21759
|
+
__webpack_require__.r(__webpack_exports__);
|
|
21760
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
21761
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
21762
|
+
/* harmony export */ getSnackbarUtilityClass: () => (/* binding */ getSnackbarUtilityClass)
|
|
21763
|
+
/* harmony export */ });
|
|
21764
|
+
/* harmony import */ var _mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils/generateUtilityClasses */ "./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js");
|
|
21765
|
+
/* harmony import */ var _mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils/generateUtilityClass */ "./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js");
|
|
21766
|
+
|
|
21767
|
+
|
|
21768
|
+
function getSnackbarUtilityClass(slot) {
|
|
21769
|
+
return (0,_mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__["default"])('MuiSnackbar', slot);
|
|
21770
|
+
}
|
|
21771
|
+
const snackbarClasses = (0,_mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__["default"])('MuiSnackbar', ['root', 'anchorOriginTopCenter', 'anchorOriginBottomCenter', 'anchorOriginTopRight', 'anchorOriginBottomRight', 'anchorOriginTopLeft', 'anchorOriginBottomLeft']);
|
|
21772
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (snackbarClasses);
|
|
21773
|
+
|
|
21774
|
+
/***/ }),
|
|
21775
|
+
|
|
21776
|
+
/***/ "./node_modules/@mui/material/esm/Snackbar/useSnackbar.js":
|
|
21777
|
+
/*!****************************************************************!*\
|
|
21778
|
+
!*** ./node_modules/@mui/material/esm/Snackbar/useSnackbar.js ***!
|
|
21779
|
+
\****************************************************************/
|
|
21780
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
21781
|
+
|
|
21782
|
+
"use strict";
|
|
21783
|
+
__webpack_require__.r(__webpack_exports__);
|
|
21784
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
21785
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
21786
|
+
/* harmony export */ });
|
|
21787
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
21788
|
+
/* harmony import */ var _mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils/useEventCallback */ "./node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js");
|
|
21789
|
+
/* harmony import */ var _mui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils/useTimeout */ "./node_modules/@mui/utils/esm/useTimeout/useTimeout.js");
|
|
21790
|
+
/* harmony import */ var _mui_utils_extractEventHandlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils/extractEventHandlers */ "./node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js");
|
|
21791
|
+
'use client';
|
|
21792
|
+
|
|
21793
|
+
|
|
21794
|
+
|
|
21795
|
+
|
|
21796
|
+
|
|
21797
|
+
function useSnackbar(parameters = {}) {
|
|
21798
|
+
const {
|
|
21799
|
+
autoHideDuration = null,
|
|
21800
|
+
disableWindowBlurListener = false,
|
|
21801
|
+
onClose,
|
|
21802
|
+
open,
|
|
21803
|
+
resumeHideDuration
|
|
21804
|
+
} = parameters;
|
|
21805
|
+
const timerAutoHide = (0,_mui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_2__["default"])();
|
|
21806
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
21807
|
+
if (!open) {
|
|
21808
|
+
return undefined;
|
|
21809
|
+
}
|
|
21810
|
+
|
|
21811
|
+
/**
|
|
21812
|
+
* @param {KeyboardEvent} nativeEvent
|
|
21813
|
+
*/
|
|
21814
|
+
function handleKeyDown(nativeEvent) {
|
|
21815
|
+
if (!nativeEvent.defaultPrevented) {
|
|
21816
|
+
if (nativeEvent.key === 'Escape') {
|
|
21817
|
+
// not calling `preventDefault` since we don't know if people may ignore this event e.g. a permanently open snackbar
|
|
21818
|
+
onClose?.(nativeEvent, 'escapeKeyDown');
|
|
21819
|
+
}
|
|
21820
|
+
}
|
|
21821
|
+
}
|
|
21822
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
21823
|
+
return () => {
|
|
21824
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
21825
|
+
};
|
|
21826
|
+
}, [open, onClose]);
|
|
21827
|
+
const handleClose = (0,_mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_1__["default"])((event, reason) => {
|
|
21828
|
+
onClose?.(event, reason);
|
|
21829
|
+
});
|
|
21830
|
+
const setAutoHideTimer = (0,_mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_1__["default"])(autoHideDurationParam => {
|
|
21831
|
+
if (!onClose || autoHideDurationParam == null) {
|
|
21832
|
+
return;
|
|
21833
|
+
}
|
|
21834
|
+
timerAutoHide.start(autoHideDurationParam, () => {
|
|
21835
|
+
handleClose(null, 'timeout');
|
|
21836
|
+
});
|
|
21837
|
+
});
|
|
21838
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
21839
|
+
if (open) {
|
|
21840
|
+
setAutoHideTimer(autoHideDuration);
|
|
21841
|
+
}
|
|
21842
|
+
return timerAutoHide.clear;
|
|
21843
|
+
}, [open, autoHideDuration, setAutoHideTimer, timerAutoHide]);
|
|
21844
|
+
const handleClickAway = event => {
|
|
21845
|
+
onClose?.(event, 'clickaway');
|
|
21846
|
+
};
|
|
21847
|
+
|
|
21848
|
+
// Pause the timer when the user is interacting with the Snackbar
|
|
21849
|
+
// or when the user hide the window.
|
|
21850
|
+
const handlePause = timerAutoHide.clear;
|
|
21851
|
+
|
|
21852
|
+
// Restart the timer when the user is no longer interacting with the Snackbar
|
|
21853
|
+
// or when the window is shown back.
|
|
21854
|
+
const handleResume = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => {
|
|
21855
|
+
if (autoHideDuration != null) {
|
|
21856
|
+
setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);
|
|
21857
|
+
}
|
|
21858
|
+
}, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);
|
|
21859
|
+
const createHandleBlur = otherHandlers => event => {
|
|
21860
|
+
const onBlurCallback = otherHandlers.onBlur;
|
|
21861
|
+
onBlurCallback?.(event);
|
|
21862
|
+
handleResume();
|
|
21863
|
+
};
|
|
21864
|
+
const createHandleFocus = otherHandlers => event => {
|
|
21865
|
+
const onFocusCallback = otherHandlers.onFocus;
|
|
21866
|
+
onFocusCallback?.(event);
|
|
21867
|
+
handlePause();
|
|
21868
|
+
};
|
|
21869
|
+
const createMouseEnter = otherHandlers => event => {
|
|
21870
|
+
const onMouseEnterCallback = otherHandlers.onMouseEnter;
|
|
21871
|
+
onMouseEnterCallback?.(event);
|
|
21872
|
+
handlePause();
|
|
21873
|
+
};
|
|
21874
|
+
const createMouseLeave = otherHandlers => event => {
|
|
21875
|
+
const onMouseLeaveCallback = otherHandlers.onMouseLeave;
|
|
21876
|
+
onMouseLeaveCallback?.(event);
|
|
21877
|
+
handleResume();
|
|
21878
|
+
};
|
|
21879
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
21880
|
+
// TODO: window global should be refactored here
|
|
21881
|
+
if (!disableWindowBlurListener && open) {
|
|
21882
|
+
window.addEventListener('focus', handleResume);
|
|
21883
|
+
window.addEventListener('blur', handlePause);
|
|
21884
|
+
return () => {
|
|
21885
|
+
window.removeEventListener('focus', handleResume);
|
|
21886
|
+
window.removeEventListener('blur', handlePause);
|
|
21887
|
+
};
|
|
21888
|
+
}
|
|
21889
|
+
return undefined;
|
|
21890
|
+
}, [disableWindowBlurListener, open, handleResume, handlePause]);
|
|
21891
|
+
const getRootProps = (externalProps = {}) => {
|
|
21892
|
+
const externalEventHandlers = {
|
|
21893
|
+
...(0,_mui_utils_extractEventHandlers__WEBPACK_IMPORTED_MODULE_3__["default"])(parameters),
|
|
21894
|
+
...(0,_mui_utils_extractEventHandlers__WEBPACK_IMPORTED_MODULE_3__["default"])(externalProps)
|
|
21895
|
+
};
|
|
21896
|
+
return {
|
|
21897
|
+
// ClickAwayListener adds an `onClick` prop which results in the alert not being announced.
|
|
21898
|
+
// See https://github.com/mui/material-ui/issues/29080
|
|
21899
|
+
role: 'presentation',
|
|
21900
|
+
...externalProps,
|
|
21901
|
+
...externalEventHandlers,
|
|
21902
|
+
onBlur: createHandleBlur(externalEventHandlers),
|
|
21903
|
+
onFocus: createHandleFocus(externalEventHandlers),
|
|
21904
|
+
onMouseEnter: createMouseEnter(externalEventHandlers),
|
|
21905
|
+
onMouseLeave: createMouseLeave(externalEventHandlers)
|
|
21906
|
+
};
|
|
21907
|
+
};
|
|
21908
|
+
return {
|
|
21909
|
+
getRootProps,
|
|
21910
|
+
onClickAway: handleClickAway
|
|
21911
|
+
};
|
|
21912
|
+
}
|
|
21913
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSnackbar);
|
|
21914
|
+
|
|
21915
|
+
/***/ }),
|
|
21916
|
+
|
|
21917
|
+
/***/ "./node_modules/@mui/material/esm/SnackbarContent/SnackbarContent.js":
|
|
21918
|
+
/*!***************************************************************************!*\
|
|
21919
|
+
!*** ./node_modules/@mui/material/esm/SnackbarContent/SnackbarContent.js ***!
|
|
21920
|
+
\***************************************************************************/
|
|
21921
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
21922
|
+
|
|
21923
|
+
"use strict";
|
|
21924
|
+
__webpack_require__.r(__webpack_exports__);
|
|
21925
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
21926
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
21927
|
+
/* harmony export */ });
|
|
21928
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
21929
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
21930
|
+
/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.mjs");
|
|
21931
|
+
/* harmony import */ var _mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils/composeClasses */ "./node_modules/@mui/utils/esm/composeClasses/composeClasses.js");
|
|
21932
|
+
/* harmony import */ var _mui_system_colorManipulator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/system/colorManipulator */ "./node_modules/@mui/system/esm/colorManipulator/colorManipulator.js");
|
|
21933
|
+
/* harmony import */ var _zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../zero-styled/index.js */ "./node_modules/@mui/material/esm/styles/styled.js");
|
|
21934
|
+
/* harmony import */ var _utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/memoTheme.js */ "./node_modules/@mui/material/esm/utils/memoTheme.js");
|
|
21935
|
+
/* harmony import */ var _DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../DefaultPropsProvider/index.js */ "./node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js");
|
|
21936
|
+
/* harmony import */ var _Paper_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Paper/index.js */ "./node_modules/@mui/material/esm/Paper/Paper.js");
|
|
21937
|
+
/* harmony import */ var _snackbarContentClasses_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./snackbarContentClasses.js */ "./node_modules/@mui/material/esm/SnackbarContent/snackbarContentClasses.js");
|
|
21938
|
+
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
|
|
21939
|
+
'use client';
|
|
21940
|
+
|
|
21941
|
+
|
|
21942
|
+
|
|
21943
|
+
|
|
21944
|
+
|
|
21945
|
+
|
|
21946
|
+
|
|
21947
|
+
|
|
21948
|
+
|
|
21949
|
+
|
|
21950
|
+
|
|
21951
|
+
|
|
21952
|
+
const useUtilityClasses = ownerState => {
|
|
21953
|
+
const {
|
|
21954
|
+
classes
|
|
21955
|
+
} = ownerState;
|
|
21956
|
+
const slots = {
|
|
21957
|
+
root: ['root'],
|
|
21958
|
+
action: ['action'],
|
|
21959
|
+
message: ['message']
|
|
21960
|
+
};
|
|
21961
|
+
return (0,_mui_utils_composeClasses__WEBPACK_IMPORTED_MODULE_3__["default"])(slots, _snackbarContentClasses_js__WEBPACK_IMPORTED_MODULE_9__.getSnackbarContentUtilityClass, classes);
|
|
21962
|
+
};
|
|
21963
|
+
const SnackbarContentRoot = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])(_Paper_index_js__WEBPACK_IMPORTED_MODULE_8__["default"], {
|
|
21964
|
+
name: 'MuiSnackbarContent',
|
|
21965
|
+
slot: 'Root'
|
|
21966
|
+
})((0,_utils_memoTheme_js__WEBPACK_IMPORTED_MODULE_6__["default"])(({
|
|
21967
|
+
theme
|
|
21968
|
+
}) => {
|
|
21969
|
+
const emphasis = theme.palette.mode === 'light' ? 0.8 : 0.98;
|
|
21970
|
+
return {
|
|
21971
|
+
...theme.typography.body2,
|
|
21972
|
+
color: theme.vars ? theme.vars.palette.SnackbarContent.color : theme.palette.getContrastText((0,_mui_system_colorManipulator__WEBPACK_IMPORTED_MODULE_4__.emphasize)(theme.palette.background.default, emphasis)),
|
|
21973
|
+
backgroundColor: theme.vars ? theme.vars.palette.SnackbarContent.bg : (0,_mui_system_colorManipulator__WEBPACK_IMPORTED_MODULE_4__.emphasize)(theme.palette.background.default, emphasis),
|
|
21974
|
+
display: 'flex',
|
|
21975
|
+
alignItems: 'center',
|
|
21976
|
+
flexWrap: 'wrap',
|
|
21977
|
+
padding: '6px 16px',
|
|
21978
|
+
flexGrow: 1,
|
|
21979
|
+
[theme.breakpoints.up('sm')]: {
|
|
21980
|
+
flexGrow: 'initial',
|
|
21981
|
+
minWidth: 288
|
|
21982
|
+
}
|
|
21983
|
+
};
|
|
21984
|
+
}));
|
|
21985
|
+
const SnackbarContentMessage = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])('div', {
|
|
21986
|
+
name: 'MuiSnackbarContent',
|
|
21987
|
+
slot: 'Message'
|
|
21988
|
+
})({
|
|
21989
|
+
padding: '8px 0'
|
|
21990
|
+
});
|
|
21991
|
+
const SnackbarContentAction = (0,_zero_styled_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])('div', {
|
|
21992
|
+
name: 'MuiSnackbarContent',
|
|
21993
|
+
slot: 'Action'
|
|
21994
|
+
})({
|
|
21995
|
+
display: 'flex',
|
|
21996
|
+
alignItems: 'center',
|
|
21997
|
+
marginLeft: 'auto',
|
|
21998
|
+
paddingLeft: 16,
|
|
21999
|
+
marginRight: -8
|
|
22000
|
+
});
|
|
22001
|
+
const SnackbarContent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function SnackbarContent(inProps, ref) {
|
|
22002
|
+
const props = (0,_DefaultPropsProvider_index_js__WEBPACK_IMPORTED_MODULE_7__.useDefaultProps)({
|
|
22003
|
+
props: inProps,
|
|
22004
|
+
name: 'MuiSnackbarContent'
|
|
22005
|
+
});
|
|
22006
|
+
const {
|
|
22007
|
+
action,
|
|
22008
|
+
className,
|
|
22009
|
+
message,
|
|
22010
|
+
role = 'alert',
|
|
22011
|
+
...other
|
|
22012
|
+
} = props;
|
|
22013
|
+
const ownerState = props;
|
|
22014
|
+
const classes = useUtilityClasses(ownerState);
|
|
22015
|
+
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(SnackbarContentRoot, {
|
|
22016
|
+
role: role,
|
|
22017
|
+
elevation: 6,
|
|
22018
|
+
className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__["default"])(classes.root, className),
|
|
22019
|
+
ownerState: ownerState,
|
|
22020
|
+
ref: ref,
|
|
22021
|
+
...other,
|
|
22022
|
+
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(SnackbarContentMessage, {
|
|
22023
|
+
className: classes.message,
|
|
22024
|
+
ownerState: ownerState,
|
|
22025
|
+
children: message
|
|
22026
|
+
}), action ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(SnackbarContentAction, {
|
|
22027
|
+
className: classes.action,
|
|
22028
|
+
ownerState: ownerState,
|
|
22029
|
+
children: action
|
|
22030
|
+
}) : null]
|
|
22031
|
+
});
|
|
22032
|
+
});
|
|
22033
|
+
true ? SnackbarContent.propTypes /* remove-proptypes */ = {
|
|
22034
|
+
// ┌────────────────────────────── Warning ──────────────────────────────┐
|
|
22035
|
+
// │ These PropTypes are generated from the TypeScript type definitions. │
|
|
22036
|
+
// │ To update them, edit the d.ts file and run `pnpm proptypes`. │
|
|
22037
|
+
// └─────────────────────────────────────────────────────────────────────┘
|
|
22038
|
+
/**
|
|
22039
|
+
* The action to display. It renders after the message, at the end of the snackbar.
|
|
22040
|
+
*/
|
|
22041
|
+
action: prop_types__WEBPACK_IMPORTED_MODULE_1__.node,
|
|
22042
|
+
/**
|
|
22043
|
+
* Override or extend the styles applied to the component.
|
|
22044
|
+
*/
|
|
22045
|
+
classes: prop_types__WEBPACK_IMPORTED_MODULE_1__.object,
|
|
22046
|
+
/**
|
|
22047
|
+
* @ignore
|
|
22048
|
+
*/
|
|
22049
|
+
className: prop_types__WEBPACK_IMPORTED_MODULE_1__.string,
|
|
22050
|
+
/**
|
|
22051
|
+
* The message to display.
|
|
22052
|
+
*/
|
|
22053
|
+
message: prop_types__WEBPACK_IMPORTED_MODULE_1__.node,
|
|
22054
|
+
/**
|
|
22055
|
+
* The ARIA role attribute of the element.
|
|
22056
|
+
* @default 'alert'
|
|
22057
|
+
*/
|
|
22058
|
+
role: prop_types__WEBPACK_IMPORTED_MODULE_1__.string,
|
|
22059
|
+
/**
|
|
22060
|
+
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
22061
|
+
*/
|
|
22062
|
+
sx: prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1__.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object, prop_types__WEBPACK_IMPORTED_MODULE_1__.bool])), prop_types__WEBPACK_IMPORTED_MODULE_1__.func, prop_types__WEBPACK_IMPORTED_MODULE_1__.object])
|
|
22063
|
+
} : 0;
|
|
22064
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SnackbarContent);
|
|
22065
|
+
|
|
22066
|
+
/***/ }),
|
|
22067
|
+
|
|
22068
|
+
/***/ "./node_modules/@mui/material/esm/SnackbarContent/snackbarContentClasses.js":
|
|
22069
|
+
/*!**********************************************************************************!*\
|
|
22070
|
+
!*** ./node_modules/@mui/material/esm/SnackbarContent/snackbarContentClasses.js ***!
|
|
22071
|
+
\**********************************************************************************/
|
|
22072
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
22073
|
+
|
|
22074
|
+
"use strict";
|
|
22075
|
+
__webpack_require__.r(__webpack_exports__);
|
|
22076
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
22077
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
22078
|
+
/* harmony export */ getSnackbarContentUtilityClass: () => (/* binding */ getSnackbarContentUtilityClass)
|
|
22079
|
+
/* harmony export */ });
|
|
22080
|
+
/* harmony import */ var _mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils/generateUtilityClasses */ "./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js");
|
|
22081
|
+
/* harmony import */ var _mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils/generateUtilityClass */ "./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js");
|
|
22082
|
+
|
|
22083
|
+
|
|
22084
|
+
function getSnackbarContentUtilityClass(slot) {
|
|
22085
|
+
return (0,_mui_utils_generateUtilityClass__WEBPACK_IMPORTED_MODULE_1__["default"])('MuiSnackbarContent', slot);
|
|
22086
|
+
}
|
|
22087
|
+
const snackbarContentClasses = (0,_mui_utils_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_0__["default"])('MuiSnackbarContent', ['root', 'message', 'action']);
|
|
22088
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (snackbarContentClasses);
|
|
22089
|
+
|
|
22090
|
+
/***/ }),
|
|
22091
|
+
|
|
20816
22092
|
/***/ "./node_modules/@mui/material/esm/Stack/Stack.js":
|
|
20817
22093
|
/*!*******************************************************!*\
|
|
20818
22094
|
!*** ./node_modules/@mui/material/esm/Stack/Stack.js ***!
|
|
@@ -99612,38 +100888,41 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
99612
100888
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/CircularProgress/CircularProgress.js");
|
|
99613
100889
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/FormHelperText/FormHelperText.js");
|
|
99614
100890
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Alert/Alert.js");
|
|
99615
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99616
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99617
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99618
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99619
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99620
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99621
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99622
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99623
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99624
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99625
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
99626
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/styles/
|
|
99627
|
-
/* harmony import */ var
|
|
99628
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99629
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99630
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99631
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99632
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99633
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99634
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99635
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99636
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99637
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99638
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99639
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99640
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99641
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
99642
|
-
/* harmony import */ var
|
|
99643
|
-
/* harmony import */ var
|
|
99644
|
-
/* harmony import */ var
|
|
99645
|
-
/* harmony import */ var
|
|
99646
|
-
/* harmony import */ var
|
|
100891
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/InputAdornment/InputAdornment.js");
|
|
100892
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Tooltip/Tooltip.js");
|
|
100893
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/FormControl/FormControl.js");
|
|
100894
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/InputLabel/InputLabel.js");
|
|
100895
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Select/Select.js");
|
|
100896
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/MenuItem/MenuItem.js");
|
|
100897
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/FormControlLabel/FormControlLabel.js");
|
|
100898
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Checkbox/Checkbox.js");
|
|
100899
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/ToggleButtonGroup/ToggleButtonGroup.js");
|
|
100900
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/ToggleButton/ToggleButton.js");
|
|
100901
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Paper/Paper.js");
|
|
100902
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/styles/createTheme.js");
|
|
100903
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/styles/ThemeProvider.js");
|
|
100904
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/AccountBalance.js");
|
|
100905
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/AttachMoney.js");
|
|
100906
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/AutoAwesome.js");
|
|
100907
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Brightness4.js");
|
|
100908
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Brightness7.js");
|
|
100909
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/CheckCircle.js");
|
|
100910
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/CloudDownload.js");
|
|
100911
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/ContentCopy.js");
|
|
100912
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/DeleteOutline.js");
|
|
100913
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/ExpandMore.js");
|
|
100914
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/InfoOutlined.js");
|
|
100915
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Login.js");
|
|
100916
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Logout.js");
|
|
100917
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/NoteAdd.js");
|
|
100918
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Replay.js");
|
|
100919
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Settings.js");
|
|
100920
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Visibility.js");
|
|
100921
|
+
/* harmony import */ var _PromptManagerDialog__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./PromptManagerDialog */ "./src/PromptManagerDialog.tsx");
|
|
100922
|
+
/* harmony import */ var _promptOverrides__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./promptOverrides */ "./src/promptOverrides.ts");
|
|
100923
|
+
/* harmony import */ var xlsx__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! xlsx */ "./node_modules/xlsx/xlsx.mjs");
|
|
100924
|
+
/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! jszip */ "./node_modules/jszip/dist/jszip.min.js");
|
|
100925
|
+
/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_54___default = /*#__PURE__*/__webpack_require__.n(jszip__WEBPACK_IMPORTED_MODULE_54__);
|
|
99647
100926
|
|
|
99648
100927
|
|
|
99649
100928
|
|
|
@@ -99704,6 +100983,29 @@ const INSTRUCTION_ROW = [
|
|
|
99704
100983
|
"# Обязательно | The URL for the main image of your item. Images must be in a supported format (JPG/GIF/PNG) and at least 500 x 500 pixels.",
|
|
99705
100984
|
"# Обязательно | Фирменное название товара. Не более 100 символов."
|
|
99706
100985
|
];
|
|
100986
|
+
/** Хвост ссылки для каталога: sub/utm и макросы Meta (не URL-encode — подстановка на стороне FB). */
|
|
100987
|
+
const CATALOG_LINK_TRACKING_SUFFIX = 'sub1={{ad.id}}&sub2={{adset.id}}&sub3={{campaign.id}}&sub4={{ad.name}}&sub5={{adset.name}}&sub6={{campaign.name}}&sub7={{placement}}&sub8={{site_source_name}}&utm_source=facebook&utm_medium=paid';
|
|
100988
|
+
/** Добавляет к URL лендинга creative_id и трекинговые параметры для строки каталога. */
|
|
100989
|
+
function appendCreativeIdToCatalogLink(baseUrl, creativeId) {
|
|
100990
|
+
const u = baseUrl.trim();
|
|
100991
|
+
if (!u)
|
|
100992
|
+
return u;
|
|
100993
|
+
const sep = u.includes('?') ? '&' : '?';
|
|
100994
|
+
return `${u}${sep}creative_id=${encodeURIComponent(creativeId)}&${CATALOG_LINK_TRACKING_SUFFIX}`;
|
|
100995
|
+
}
|
|
100996
|
+
/**
|
|
100997
|
+
* Разбор строк «ЗАГОЛОВОК n:» / «ТЕКСТ n:» из ответа модели.
|
|
100998
|
+
* Иногда модель пишет ZAGОЛОВОК (латиница ZAG + кириллица ОЛОВОК) или ZAGOLOVOK — без этого парсер не видит заголовки.
|
|
100999
|
+
*/
|
|
101000
|
+
const PAIRS_TITLE_LINE_RE = /^[\s\uFEFF]*(?:\*{1,2})?\s*(?:ЗАГОЛОВОК|ZAG[ОOо][ЛLl][ОOо][ВBb][ОOо][КKk]|ZAGOLOVOK)\s+(\d+)\s*:\s*(.+)$/iu;
|
|
101001
|
+
const PAIRS_TEXT_LINE_RE = /^[\s\uFEFF]*(?:\*{1,2})?\s*(?:ТЕКСТ|TEKST)\s+(\d+)\s*:\s*(.*)$/iu;
|
|
101002
|
+
/** Число из поля цены для быстрого переключения валюты; если нет — 99 */
|
|
101003
|
+
function extractLeadingPriceNumber(value) {
|
|
101004
|
+
const m = value.trim().match(/(\d+(?:[.,]\d+)?)/);
|
|
101005
|
+
if (m)
|
|
101006
|
+
return m[1].replace(',', '.');
|
|
101007
|
+
return '99';
|
|
101008
|
+
}
|
|
99707
101009
|
function App() {
|
|
99708
101010
|
const [clientId, setClientId] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
99709
101011
|
const [clientSecret, setClientSecret] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
@@ -99946,9 +101248,11 @@ function App() {
|
|
|
99946
101248
|
const [uploadedLink, setUploadedLink] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
99947
101249
|
const [testLoading, setTestLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
99948
101250
|
const [linkCopied, setLinkCopied] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
101251
|
+
const [pairsJsonCopied, setPairsJsonCopied] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
99949
101252
|
const [openRouterKeyCopied, setOpenRouterKeyCopied] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
99950
101253
|
const [loadingContentFromDrive, setLoadingContentFromDrive] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
99951
101254
|
const [driveFilesFound, setDriveFilesFound] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ content: false });
|
|
101255
|
+
const syncDriveAfterPromptSaveRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(() => { });
|
|
99952
101256
|
// Theme state
|
|
99953
101257
|
const [darkMode, setDarkMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(() => {
|
|
99954
101258
|
const saved = localStorage.getItem('themeMode');
|
|
@@ -99995,7 +101299,7 @@ function App() {
|
|
|
99995
101299
|
}
|
|
99996
101300
|
};
|
|
99997
101301
|
// Create theme based on mode
|
|
99998
|
-
const theme = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => (0,
|
|
101302
|
+
const theme = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => (0,_mui_material__WEBPACK_IMPORTED_MODULE_32__["default"])({
|
|
99999
101303
|
palette: {
|
|
100000
101304
|
mode: darkMode ? 'dark' : 'light',
|
|
100001
101305
|
...(darkMode
|
|
@@ -100087,7 +101391,7 @@ function App() {
|
|
|
100087
101391
|
};
|
|
100088
101392
|
loadKey();
|
|
100089
101393
|
// Load prompt overrides from Electron config
|
|
100090
|
-
(0,
|
|
101394
|
+
(0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.loadOverridesFromElectron)();
|
|
100091
101395
|
}, []);
|
|
100092
101396
|
// Save form fields to localStorage whenever they change
|
|
100093
101397
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
@@ -100143,6 +101447,7 @@ function App() {
|
|
|
100143
101447
|
setTitles('');
|
|
100144
101448
|
setTexts(['']);
|
|
100145
101449
|
setLink('');
|
|
101450
|
+
setUploadedLink('');
|
|
100146
101451
|
return;
|
|
100147
101452
|
}
|
|
100148
101453
|
const folderId = extractFolderId(driveFolderUrl);
|
|
@@ -100157,6 +101462,7 @@ function App() {
|
|
|
100157
101462
|
setTitles('');
|
|
100158
101463
|
setTexts(['']);
|
|
100159
101464
|
setLink('');
|
|
101465
|
+
setUploadedLink('');
|
|
100160
101466
|
return;
|
|
100161
101467
|
}
|
|
100162
101468
|
logToTerminal('log', '[Load] driveFolderUrl changed, clearing old data and loading from folderId:', folderId);
|
|
@@ -100167,6 +101473,7 @@ function App() {
|
|
|
100167
101473
|
setTitles('');
|
|
100168
101474
|
setTexts(['']);
|
|
100169
101475
|
setLink('');
|
|
101476
|
+
setUploadedLink('');
|
|
100170
101477
|
setLoadingContentFromDrive(true);
|
|
100171
101478
|
setDriveFilesFound({ content: false });
|
|
100172
101479
|
// Load content from Google Drive
|
|
@@ -100437,11 +101744,11 @@ function App() {
|
|
|
100437
101744
|
const data = await response.json();
|
|
100438
101745
|
const hasProduct = data.files.some((f) => {
|
|
100439
101746
|
const name = f.name?.toLowerCase() || '';
|
|
100440
|
-
return name === 'product.png' || name === 'product.jpg';
|
|
101747
|
+
return name === 'product.png' || name === 'product.jpg' || name === 'product.webp';
|
|
100441
101748
|
});
|
|
100442
101749
|
const hasCreativeImages = data.files.some((f) => {
|
|
100443
101750
|
const name = f.name?.toLowerCase() || '';
|
|
100444
|
-
return name !== 'product.png' && name !== 'product.jpg';
|
|
101751
|
+
return name !== 'product.png' && name !== 'product.jpg' && name !== 'product.webp';
|
|
100445
101752
|
});
|
|
100446
101753
|
if (!cancelled) {
|
|
100447
101754
|
setFolderFilesInfo({ hasProduct, hasCreativeImages });
|
|
@@ -101416,7 +102723,7 @@ function App() {
|
|
|
101416
102723
|
for (let li = 0; li < lines.length; li++) {
|
|
101417
102724
|
// Trim for matching (handles leading spaces, tabs, zero-width chars from model)
|
|
101418
102725
|
const trimmed = lines[li].trim();
|
|
101419
|
-
const titleMatch = trimmed.match(
|
|
102726
|
+
const titleMatch = trimmed.match(PAIRS_TITLE_LINE_RE);
|
|
101420
102727
|
if (titleMatch) {
|
|
101421
102728
|
// flush pending text
|
|
101422
102729
|
if (currentTextNum > 0) {
|
|
@@ -101427,7 +102734,7 @@ function App() {
|
|
|
101427
102734
|
titleMap[parseInt(titleMatch[1])] = titleMatch[2].trim();
|
|
101428
102735
|
continue;
|
|
101429
102736
|
}
|
|
101430
|
-
const textMatch = trimmed.match(
|
|
102737
|
+
const textMatch = trimmed.match(PAIRS_TEXT_LINE_RE);
|
|
101431
102738
|
if (textMatch) {
|
|
101432
102739
|
// flush previous text if any
|
|
101433
102740
|
if (currentTextNum > 0) {
|
|
@@ -101516,6 +102823,41 @@ function App() {
|
|
|
101516
102823
|
setTranslatingPairs(false);
|
|
101517
102824
|
}
|
|
101518
102825
|
};
|
|
102826
|
+
/** Удалить одну сгенерированную пару (заголовок + текст) и сдвинуть индексы. */
|
|
102827
|
+
const handleDeleteGeneratedPair = (pairIndex) => {
|
|
102828
|
+
if (!window.confirm(`Удалить пару ${pairIndex + 1}?`))
|
|
102829
|
+
return;
|
|
102830
|
+
setGeneratedTitlesData(prev => {
|
|
102831
|
+
const next = prev.filter((_, idx) => idx !== pairIndex).map((t, idx) => ({ ...t, index: idx + 1 }));
|
|
102832
|
+
setTitles(next.map(t => t.title).filter(Boolean).join('\n'));
|
|
102833
|
+
return next;
|
|
102834
|
+
});
|
|
102835
|
+
setGeneratedTextsData(prev => {
|
|
102836
|
+
const next = prev.filter((_, idx) => idx !== pairIndex).map((t, idx) => ({ ...t, index: idx + 1 }));
|
|
102837
|
+
setTexts(next.length ? next.map(t => t.text) : ['']);
|
|
102838
|
+
return next;
|
|
102839
|
+
});
|
|
102840
|
+
setLastUsedApproachIndices(prev => prev.filter((_, idx) => idx !== pairIndex));
|
|
102841
|
+
setPairTranslations(prev => {
|
|
102842
|
+
const next = {};
|
|
102843
|
+
Object.entries(prev).forEach(([k, v]) => {
|
|
102844
|
+
const n = Number(k);
|
|
102845
|
+
if (Number.isNaN(n))
|
|
102846
|
+
return;
|
|
102847
|
+
if (n < pairIndex)
|
|
102848
|
+
next[n] = v;
|
|
102849
|
+
else if (n > pairIndex)
|
|
102850
|
+
next[n - 1] = v;
|
|
102851
|
+
});
|
|
102852
|
+
return next;
|
|
102853
|
+
});
|
|
102854
|
+
};
|
|
102855
|
+
/** Удалить один сгенерированный креатив и перенумеровать слоты. */
|
|
102856
|
+
const handleDeleteGeneratedImage = (imageIndex) => {
|
|
102857
|
+
if (!window.confirm(`Удалить креатив ${imageIndex}?`))
|
|
102858
|
+
return;
|
|
102859
|
+
setGeneratedImagesData(prev => prev.filter(img => img.index !== imageIndex).map((img, idx) => ({ ...img, index: idx + 1 })));
|
|
102860
|
+
};
|
|
101519
102861
|
const handleGenerateContent = async () => {
|
|
101520
102862
|
if (!generateProduct.trim() || !generateGeo.trim()) {
|
|
101521
102863
|
alert('Please fill in Product and Geo fields');
|
|
@@ -101531,7 +102873,7 @@ function App() {
|
|
|
101531
102873
|
setTexts(['']);
|
|
101532
102874
|
setPairTranslations({});
|
|
101533
102875
|
// Read pairs count from settings (3–10, default 3)
|
|
101534
|
-
const pairsCountInit = (0,
|
|
102876
|
+
const pairsCountInit = (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.getPairsCount)();
|
|
101535
102877
|
// Initialize placeholders
|
|
101536
102878
|
const initialTitles = Array.from({ length: pairsCountInit }, (_, index) => ({
|
|
101537
102879
|
index: index + 1,
|
|
@@ -101560,7 +102902,7 @@ function App() {
|
|
|
101560
102902
|
}
|
|
101561
102903
|
// Generate all pairs (title + text) in a single request
|
|
101562
102904
|
addLog(formatLogMessage('log', '📋 Generating title+text pairs in a single request...'));
|
|
101563
|
-
const selectedIndices = (0,
|
|
102905
|
+
const selectedIndices = (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.getSelectedPairApproaches)();
|
|
101564
102906
|
setLastUsedApproachIndices(selectedIndices);
|
|
101565
102907
|
const pairsCount = selectedIndices.length;
|
|
101566
102908
|
addLog(formatLogMessage('log', `⚙️ Generating ${pairsCount} pairs (approaches: ${selectedIndices.join(', ')})`));
|
|
@@ -102194,8 +103536,8 @@ function App() {
|
|
|
102194
103536
|
return;
|
|
102195
103537
|
e.target.value = '';
|
|
102196
103538
|
const ext = file.name.toLowerCase().split('.').pop();
|
|
102197
|
-
if (ext !== 'png' && ext !== 'jpg' && ext !== 'jpeg') {
|
|
102198
|
-
alert('Выберите изображение PNG или
|
|
103539
|
+
if (ext !== 'png' && ext !== 'jpg' && ext !== 'jpeg' && ext !== 'webp') {
|
|
103540
|
+
alert('Выберите изображение PNG, JPG или WebP');
|
|
102199
103541
|
return;
|
|
102200
103542
|
}
|
|
102201
103543
|
setUploadingProduct(true);
|
|
@@ -102219,12 +103561,12 @@ function App() {
|
|
|
102219
103561
|
reader.onerror = reject;
|
|
102220
103562
|
reader.readAsDataURL(file);
|
|
102221
103563
|
});
|
|
102222
|
-
const filename = ext === 'png' ? 'product.png' : 'product.jpg';
|
|
102223
|
-
logToTerminal('log',
|
|
103564
|
+
const filename = ext === 'png' ? 'product.png' : ext === 'webp' ? 'product.webp' : 'product.jpg';
|
|
103565
|
+
logToTerminal('log', `📤 Загрузка ${filename}...`);
|
|
102224
103566
|
await uploadImageToDrive(dataUrl, filename, folderId, addLog);
|
|
102225
|
-
logToTerminal('log',
|
|
103567
|
+
logToTerminal('log', `✅ ${filename} загружен`);
|
|
102226
103568
|
setFolderFilesInfo(prev => prev ? { ...prev, hasProduct: true } : { hasProduct: true });
|
|
102227
|
-
alert(
|
|
103569
|
+
alert(`${filename} успешно загружен в папку!`);
|
|
102228
103570
|
}
|
|
102229
103571
|
catch (err) {
|
|
102230
103572
|
const errorMsg = 'Ошибка загрузки: ' + err.message;
|
|
@@ -102465,17 +103807,19 @@ function App() {
|
|
|
102465
103807
|
fetchOpenRouterBalance();
|
|
102466
103808
|
return html;
|
|
102467
103809
|
};
|
|
102468
|
-
const createZipArchive = async (htmlContent, productImageBlob, addLog) => {
|
|
103810
|
+
const createZipArchive = async (htmlContent, productImageBlob, productImageName, addLog) => {
|
|
102469
103811
|
const logMsg = (level, ...args) => {
|
|
102470
103812
|
logToTerminal(level, ...args);
|
|
102471
103813
|
if (addLog)
|
|
102472
103814
|
addLog(formatLogMessage(level, ...args));
|
|
102473
103815
|
};
|
|
102474
103816
|
logMsg('log', '📦 Creating ZIP archive with HTML and product image...');
|
|
102475
|
-
const zip = new (
|
|
102476
|
-
|
|
102477
|
-
|
|
102478
|
-
|
|
103817
|
+
const zip = new (jszip__WEBPACK_IMPORTED_MODULE_54___default())();
|
|
103818
|
+
// Replace product image path in HTML to match actual filename (png/jpg/webp)
|
|
103819
|
+
const htmlWithProductPath = htmlContent.replace(/src=["']product\.(png|jpe?g|webp)["']/gi, `src="${productImageName}"`);
|
|
103820
|
+
zip.file('index.html', htmlWithProductPath);
|
|
103821
|
+
zip.file(productImageName, productImageBlob);
|
|
103822
|
+
logMsg('log', `✅ Files added to archive: index.html, ${productImageName}`);
|
|
102479
103823
|
return await zip.generateAsync({ type: 'blob' });
|
|
102480
103824
|
};
|
|
102481
103825
|
const uploadZipToDrive = async (zipBlob, filename, folderId, addLog) => {
|
|
@@ -102612,7 +103956,7 @@ function App() {
|
|
|
102612
103956
|
};
|
|
102613
103957
|
const handleCreateLanding = async () => {
|
|
102614
103958
|
if (!folderFilesInfo?.hasProduct || !driveFolderUrl.trim()) {
|
|
102615
|
-
alert('product.png/jpg не найден в папке. Сначала сгенерируйте его с помощью кнопки "Generate Product from Banka"');
|
|
103959
|
+
alert('product.png/jpg/webp не найден в папке. Сначала сгенерируйте его с помощью кнопки "Generate Product from Banka"');
|
|
102616
103960
|
return;
|
|
102617
103961
|
}
|
|
102618
103962
|
if (!openaiApiKey) {
|
|
@@ -102642,11 +103986,11 @@ function App() {
|
|
|
102642
103986
|
logToTerminal('log', '🔍 Получение изображения продукта...');
|
|
102643
103987
|
const productImage = await fetchProductImage(folderId);
|
|
102644
103988
|
if (!productImage) {
|
|
102645
|
-
throw new Error('product.png/jpg not found in the folder');
|
|
103989
|
+
throw new Error('product.png/jpg/webp not found in the folder');
|
|
102646
103990
|
}
|
|
102647
103991
|
// Download product image as blob
|
|
102648
|
-
addLog(formatLogMessage('log', '📥 Скачивание
|
|
102649
|
-
logToTerminal('log', '📥 Скачивание
|
|
103992
|
+
addLog(formatLogMessage('log', '📥 Скачивание изображения продукта...'));
|
|
103993
|
+
logToTerminal('log', '📥 Скачивание изображения продукта...');
|
|
102650
103994
|
let token = await getValidAccessToken();
|
|
102651
103995
|
if (!token) {
|
|
102652
103996
|
throw new Error('Not logged in to Google Drive');
|
|
@@ -102702,7 +104046,7 @@ function App() {
|
|
|
102702
104046
|
reader.readAsDataURL(productImageBlob);
|
|
102703
104047
|
});
|
|
102704
104048
|
// Replace relative image path with base64 data URL in HTML
|
|
102705
|
-
const htmlWithImage = htmlContent.replace(/src=["']product\.(png|jpe?g)["']/gi, `src="${imageBase64}"`);
|
|
104049
|
+
const htmlWithImage = htmlContent.replace(/src=["']product\.(png|jpe?g|webp)["']/gi, `src="${imageBase64}"`);
|
|
102706
104050
|
// Create blob URL and open in new window
|
|
102707
104051
|
const blob = new Blob([htmlWithImage], { type: 'text/html' });
|
|
102708
104052
|
const url = URL.createObjectURL(blob);
|
|
@@ -102721,7 +104065,7 @@ function App() {
|
|
|
102721
104065
|
// Create ZIP archive with HTML and product image
|
|
102722
104066
|
addLog(formatLogMessage('log', '📦 Создание ZIP архива с HTML и изображением...'));
|
|
102723
104067
|
logToTerminal('log', '📦 Создание ZIP архива...');
|
|
102724
|
-
const zipBlob = await createZipArchive(htmlContent, productImageBlob, addLog);
|
|
104068
|
+
const zipBlob = await createZipArchive(htmlContent, productImageBlob, productImage.name, addLog);
|
|
102725
104069
|
addLog(formatLogMessage('log', '✅ ZIP архив создан'));
|
|
102726
104070
|
// Upload ZIP to Google Drive
|
|
102727
104071
|
const zipFilename = `landing_${Date.now()}.zip`;
|
|
@@ -102792,15 +104136,15 @@ function App() {
|
|
|
102792
104136
|
throw new Error(errorMsg);
|
|
102793
104137
|
}
|
|
102794
104138
|
addLog(formatLogMessage('log', '✅ Folder ID extracted:', folderId));
|
|
102795
|
-
// Check for product
|
|
102796
|
-
addLog(formatLogMessage('log', '🔍 Checking for product
|
|
104139
|
+
// Check for product image (png/jpg/webp)
|
|
104140
|
+
addLog(formatLogMessage('log', '🔍 Checking for product image...'));
|
|
102797
104141
|
const productImage = await fetchProductImage(folderId);
|
|
102798
104142
|
if (!productImage) {
|
|
102799
|
-
const errorMsg = 'product.png/jpg not found in the folder. Please generate it first using "Generate Product from Banka" button.';
|
|
104143
|
+
const errorMsg = 'product.png/jpg/webp not found in the folder. Please generate it first using "Generate Product from Banka" button.';
|
|
102800
104144
|
addLog(formatLogMessage('error', errorMsg));
|
|
102801
104145
|
throw new Error(errorMsg);
|
|
102802
104146
|
}
|
|
102803
|
-
addLog(formatLogMessage('log', '✅
|
|
104147
|
+
addLog(formatLogMessage('log', '✅ Product image found'));
|
|
102804
104148
|
// Generate images with different approaches (количество по каждому подходу)
|
|
102805
104149
|
const approaches = (0,_prompts__WEBPACK_IMPORTED_MODULE_1__.getCreoApproaches)();
|
|
102806
104150
|
if (approaches.length === 0) {
|
|
@@ -103112,8 +104456,7 @@ function App() {
|
|
|
103112
104456
|
...img,
|
|
103113
104457
|
regenerating: true,
|
|
103114
104458
|
regenerateStartTime: Date.now(),
|
|
103115
|
-
checkStatus: 'pending'
|
|
103116
|
-
imageUrl: undefined // Clear old image URL to force re-render with new one
|
|
104459
|
+
checkStatus: 'pending'
|
|
103117
104460
|
}
|
|
103118
104461
|
: img));
|
|
103119
104462
|
addLog(formatLogMessage('log', `🔄 Переделка изображения ${imageData.index} (${imageData.approach})...`));
|
|
@@ -103339,8 +104682,7 @@ ${imageData.originalPrompt}
|
|
|
103339
104682
|
checkResult: undefined,
|
|
103340
104683
|
checkErrors: undefined,
|
|
103341
104684
|
// Explicitly ignore any previous comments
|
|
103342
|
-
customRegeneratePrompt: ''
|
|
103343
|
-
imageUrl: undefined // Clear old image URL to force re-render with new one
|
|
104685
|
+
customRegeneratePrompt: ''
|
|
103344
104686
|
}
|
|
103345
104687
|
: img));
|
|
103346
104688
|
addLog(formatLogMessage('log', `🔁 Переделка заново (с нуля) изображения ${imageData.index} (${imageData.approach})...`));
|
|
@@ -103657,10 +104999,10 @@ ${imageData.originalPrompt}
|
|
|
103657
104999
|
throw new Error(err.error?.message || 'Failed to fetch Drive files');
|
|
103658
105000
|
}
|
|
103659
105001
|
const data = await response.json();
|
|
103660
|
-
// Filter out product.png/jpg (used for product reference, not creative images)
|
|
105002
|
+
// Filter out product.png/jpg/webp (used for product reference, not creative images)
|
|
103661
105003
|
const filteredFiles = data.files.filter((f) => {
|
|
103662
105004
|
const name = f.name?.toLowerCase() || '';
|
|
103663
|
-
return name !== 'product.png' && name !== 'product.jpg';
|
|
105005
|
+
return name !== 'product.png' && name !== 'product.jpg' && name !== 'product.webp';
|
|
103664
105006
|
});
|
|
103665
105007
|
return filteredFiles.map((f) => f.id ? `https://drive.google.com/file/d/${f.id}/view?usp=sharing` : '');
|
|
103666
105008
|
};
|
|
@@ -103668,7 +105010,7 @@ ${imageData.originalPrompt}
|
|
|
103668
105010
|
const validToken = await getValidAccessToken();
|
|
103669
105011
|
if (!validToken)
|
|
103670
105012
|
throw new Error('Not logged in');
|
|
103671
|
-
const q = `'${folderId}' in parents and trashed = false and (name = 'product.png' or name = 'product.jpg')`;
|
|
105013
|
+
const q = `'${folderId}' in parents and trashed = false and (name = 'product.png' or name = 'product.jpg' or name = 'product.webp')`;
|
|
103672
105014
|
const fields = 'files(id, name)';
|
|
103673
105015
|
const url = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(q)}&fields=${encodeURIComponent(fields)}`;
|
|
103674
105016
|
const response = await fetch(url, {
|
|
@@ -103682,9 +105024,10 @@ ${imageData.originalPrompt}
|
|
|
103682
105024
|
}
|
|
103683
105025
|
const data = await response.json();
|
|
103684
105026
|
if (data.files && data.files.length > 0) {
|
|
103685
|
-
// Prefer product.png
|
|
105027
|
+
// Prefer product.png > product.webp > product.jpg if multiple exist
|
|
103686
105028
|
const pngFile = data.files.find((f) => f.name?.toLowerCase() === 'product.png');
|
|
103687
|
-
const
|
|
105029
|
+
const webpFile = data.files.find((f) => f.name?.toLowerCase() === 'product.webp');
|
|
105030
|
+
const file = pngFile || webpFile || data.files[0];
|
|
103688
105031
|
return {
|
|
103689
105032
|
id: file.id,
|
|
103690
105033
|
name: file.name,
|
|
@@ -103693,104 +105036,61 @@ ${imageData.originalPrompt}
|
|
|
103693
105036
|
}
|
|
103694
105037
|
return null;
|
|
103695
105038
|
};
|
|
103696
|
-
|
|
103697
|
-
|
|
103698
|
-
|
|
103699
|
-
|
|
103700
|
-
|
|
103701
|
-
const existingPromise = envFolderCreationPromises.get(parentFolderId);
|
|
103702
|
-
if (existingPromise) {
|
|
103703
|
-
logToTerminal('log', '[Env Folder] Waiting for ongoing creation for parent folder:', parentFolderId);
|
|
103704
|
-
return existingPromise;
|
|
103705
|
-
}
|
|
103706
|
-
// Create a new promise for this folder creation
|
|
103707
|
-
const creationPromise = (async () => {
|
|
103708
|
-
try {
|
|
103709
|
-
return await getOrCreateEnvFolderImpl(parentFolderId);
|
|
103710
|
-
}
|
|
103711
|
-
finally {
|
|
103712
|
-
// Remove from map when done (success or failure)
|
|
103713
|
-
envFolderCreationPromises.delete(parentFolderId);
|
|
103714
|
-
}
|
|
103715
|
-
})();
|
|
103716
|
-
envFolderCreationPromises.set(parentFolderId, creationPromise);
|
|
103717
|
-
return creationPromise;
|
|
103718
|
-
};
|
|
103719
|
-
// Implementation of getOrCreateEnvFolder
|
|
103720
|
-
const getOrCreateEnvFolderImpl = async (parentFolderId) => {
|
|
105039
|
+
const PROJECT_SETTINGS_FILENAME = 'project-settings.json';
|
|
105040
|
+
/** Старое имя файла — всё ещё ищем при загрузке; при сохранении переименуем в project-settings.json. */
|
|
105041
|
+
const LEGACY_PROJECT_SETTINGS_FILENAME = 'temp-generated-content.json';
|
|
105042
|
+
/** Папки `env` внутри проекта (только поиск, без создания) — для обратной совместимости и удаления после миграции. */
|
|
105043
|
+
const findEnvFolderIds = async (parentFolderId) => {
|
|
103721
105044
|
const validToken = await getValidAccessToken();
|
|
103722
|
-
if (!validToken)
|
|
103723
|
-
|
|
103724
|
-
}
|
|
103725
|
-
// Check if 'env' folder exists
|
|
105045
|
+
if (!validToken)
|
|
105046
|
+
return [];
|
|
103726
105047
|
const q = `'${parentFolderId}' in parents and trashed = false and name = 'env' and mimeType = 'application/vnd.google-apps.folder'`;
|
|
103727
105048
|
const fields = 'files(id, name)';
|
|
103728
105049
|
const searchUrl = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(q)}&fields=${encodeURIComponent(fields)}`;
|
|
103729
105050
|
const searchResponse = await fetch(searchUrl, {
|
|
103730
|
-
headers: {
|
|
103731
|
-
'Authorization': `Bearer ${validToken}`
|
|
103732
|
-
}
|
|
105051
|
+
headers: { 'Authorization': `Bearer ${validToken}` }
|
|
103733
105052
|
});
|
|
103734
|
-
if (searchResponse.ok)
|
|
105053
|
+
if (!searchResponse.ok)
|
|
105054
|
+
return [];
|
|
105055
|
+
const searchData = await searchResponse.json();
|
|
105056
|
+
return (searchData.files || []).map((f) => f.id).filter(Boolean);
|
|
105057
|
+
};
|
|
105058
|
+
/** Ищет JSON настроек в папке: сначала project-settings.json, иначе legacy temp-generated-content.json. */
|
|
105059
|
+
const findSettingsFileInFolder = async (parentFolderId) => {
|
|
105060
|
+
const validToken = await getValidAccessToken();
|
|
105061
|
+
if (!validToken)
|
|
105062
|
+
return null;
|
|
105063
|
+
const fields = 'files(id, name)';
|
|
105064
|
+
for (const fileName of [PROJECT_SETTINGS_FILENAME, LEGACY_PROJECT_SETTINGS_FILENAME]) {
|
|
105065
|
+
const q = `'${parentFolderId}' in parents and trashed = false and name = '${fileName}' and mimeType != 'application/vnd.google-apps.folder'`;
|
|
105066
|
+
const searchUrl = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(q)}&fields=${encodeURIComponent(fields)}`;
|
|
105067
|
+
const searchResponse = await fetch(searchUrl, {
|
|
105068
|
+
headers: { 'Authorization': `Bearer ${validToken}` }
|
|
105069
|
+
});
|
|
105070
|
+
if (!searchResponse.ok)
|
|
105071
|
+
continue;
|
|
103735
105072
|
const searchData = await searchResponse.json();
|
|
103736
105073
|
if (searchData.files && searchData.files.length > 0) {
|
|
103737
|
-
// If multiple folders found, use the first one (shouldn't happen, but handle it)
|
|
103738
|
-
const envFolderId = searchData.files[0].id;
|
|
103739
|
-
logToTerminal('log', '[Env Folder] Found existing env folder, id:', envFolderId);
|
|
103740
105074
|
if (searchData.files.length > 1) {
|
|
103741
|
-
logToTerminal('warn', '[
|
|
105075
|
+
logToTerminal('warn', '[Drive Settings] Multiple JSON with same name, using first:', fileName);
|
|
103742
105076
|
}
|
|
103743
|
-
return
|
|
105077
|
+
return searchData.files[0].id;
|
|
103744
105078
|
}
|
|
103745
105079
|
}
|
|
103746
|
-
|
|
103747
|
-
|
|
103748
|
-
|
|
103749
|
-
|
|
103750
|
-
|
|
103751
|
-
|
|
103752
|
-
|
|
103753
|
-
|
|
103754
|
-
|
|
103755
|
-
mimeType: 'application/vnd.google-apps.folder',
|
|
103756
|
-
parents: [parentFolderId]
|
|
103757
|
-
};
|
|
103758
|
-
const createResponse = await fetch('https://www.googleapis.com/drive/v3/files', {
|
|
103759
|
-
method: 'POST',
|
|
103760
|
-
headers: {
|
|
103761
|
-
'Authorization': `Bearer ${validToken}`,
|
|
103762
|
-
'Content-Type': 'application/json'
|
|
103763
|
-
},
|
|
103764
|
-
body: JSON.stringify(createMetadata)
|
|
105080
|
+
return null;
|
|
105081
|
+
};
|
|
105082
|
+
const trashDriveFile = async (fileId) => {
|
|
105083
|
+
const validToken = await getValidAccessToken();
|
|
105084
|
+
if (!validToken)
|
|
105085
|
+
return;
|
|
105086
|
+
const res = await fetch(`https://www.googleapis.com/drive/v3/files/${fileId}`, {
|
|
105087
|
+
method: 'DELETE',
|
|
105088
|
+
headers: { 'Authorization': `Bearer ${validToken}` }
|
|
103765
105089
|
});
|
|
103766
|
-
if (!
|
|
103767
|
-
const
|
|
103768
|
-
|
|
103769
|
-
// If folder already exists (race condition), try to find it again
|
|
103770
|
-
if (errorMessage.includes('already exists') || errorMessage.includes('duplicate') || createResponse.status === 409) {
|
|
103771
|
-
logToTerminal('log', '[Env Folder] Folder creation failed (likely already exists), searching again...');
|
|
103772
|
-
// Retry search after a short delay to allow for eventual consistency
|
|
103773
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
103774
|
-
const retrySearchResponse = await fetch(searchUrl, {
|
|
103775
|
-
headers: {
|
|
103776
|
-
'Authorization': `Bearer ${validToken}`
|
|
103777
|
-
}
|
|
103778
|
-
});
|
|
103779
|
-
if (retrySearchResponse.ok) {
|
|
103780
|
-
const retrySearchData = await retrySearchResponse.json();
|
|
103781
|
-
if (retrySearchData.files && retrySearchData.files.length > 0) {
|
|
103782
|
-
const envFolderId = retrySearchData.files[0].id;
|
|
103783
|
-
logToTerminal('log', '[Env Folder] Found existing env folder after retry, id:', envFolderId);
|
|
103784
|
-
return envFolderId;
|
|
103785
|
-
}
|
|
103786
|
-
}
|
|
103787
|
-
}
|
|
103788
|
-
logToTerminal('error', '[Env Folder] Failed to create env folder:', JSON.stringify(err));
|
|
103789
|
-
throw new Error(errorMessage || 'Failed to create env folder in Google Drive');
|
|
105090
|
+
if (!res.ok) {
|
|
105091
|
+
const t = await res.text();
|
|
105092
|
+
logToTerminal('warn', '[Drive Settings] Failed to trash/delete file:', fileId, res.status, t);
|
|
103790
105093
|
}
|
|
103791
|
-
const result = await createResponse.json();
|
|
103792
|
-
logToTerminal('log', '[Env Folder] Successfully created env folder, id:', result.id);
|
|
103793
|
-
return result.id;
|
|
103794
105094
|
};
|
|
103795
105095
|
const sanitizeGeneratedTitlesData = (titlesData) => {
|
|
103796
105096
|
if (!Array.isArray(titlesData))
|
|
@@ -103828,8 +105128,6 @@ ${imageData.originalPrompt}
|
|
|
103828
105128
|
logToTerminal('error', '[Save Content] No valid token');
|
|
103829
105129
|
throw new Error('Not logged in to Google Drive');
|
|
103830
105130
|
}
|
|
103831
|
-
// Get or create 'env' folder
|
|
103832
|
-
const envFolderId = await getOrCreateEnvFolder(folderId);
|
|
103833
105131
|
const dataToSave = {
|
|
103834
105132
|
aiGenerationSettings: aiSettings || {
|
|
103835
105133
|
generateProduct: generateProduct || '',
|
|
@@ -103839,35 +105137,20 @@ ${imageData.originalPrompt}
|
|
|
103839
105137
|
},
|
|
103840
105138
|
brand: brandValue !== undefined ? brandValue : brand || '',
|
|
103841
105139
|
link: linkValue !== undefined ? linkValue : link || '',
|
|
105140
|
+
selectedPairApproaches: (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.getSelectedPairApproaches)(),
|
|
105141
|
+
imageApproachCounts: (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.getImageApproachCounts)(),
|
|
103842
105142
|
savedAt: new Date().toISOString()
|
|
103843
105143
|
};
|
|
103844
105144
|
const jsonContent = JSON.stringify(dataToSave, null, 2);
|
|
103845
|
-
const filename =
|
|
103846
|
-
logToTerminal('log', '[Save Content] Filename:', filename, 'content length:', jsonContent.length);
|
|
103847
|
-
//
|
|
103848
|
-
|
|
103849
|
-
|
|
103850
|
-
|
|
103851
|
-
const searchResponse = await fetch(searchUrl, {
|
|
103852
|
-
headers: {
|
|
103853
|
-
'Authorization': `Bearer ${validToken}`
|
|
103854
|
-
}
|
|
103855
|
-
});
|
|
103856
|
-
let fileId = null;
|
|
103857
|
-
if (searchResponse.ok) {
|
|
103858
|
-
const searchData = await searchResponse.json();
|
|
103859
|
-
logToTerminal('log', '[Save Content] Search response, files found:', searchData.files?.length || 0);
|
|
103860
|
-
if (searchData.files && searchData.files.length > 0) {
|
|
103861
|
-
fileId = searchData.files[0].id;
|
|
103862
|
-
logToTerminal('log', '[Save Content] File exists, will update, fileId:', fileId);
|
|
103863
|
-
}
|
|
103864
|
-
else {
|
|
103865
|
-
logToTerminal('log', '[Save Content] File does not exist, will create new');
|
|
103866
|
-
}
|
|
105145
|
+
const filename = PROJECT_SETTINGS_FILENAME;
|
|
105146
|
+
logToTerminal('log', '[Save Content] Filename (project root):', filename, 'content length:', jsonContent.length);
|
|
105147
|
+
// Файл в корне папки проекта (не в env)
|
|
105148
|
+
let fileId = await findSettingsFileInFolder(folderId);
|
|
105149
|
+
if (fileId) {
|
|
105150
|
+
logToTerminal('log', '[Save Content] File exists in folder root, will update, fileId:', fileId);
|
|
103867
105151
|
}
|
|
103868
105152
|
else {
|
|
103869
|
-
|
|
103870
|
-
logToTerminal('warn', '[Save Content] Search failed, status:', searchResponse.status);
|
|
105153
|
+
logToTerminal('log', '[Save Content] No file in root yet, will create new at project root');
|
|
103871
105154
|
}
|
|
103872
105155
|
if (fileId) {
|
|
103873
105156
|
// Update existing file - don't include parents in metadata for updates
|
|
@@ -103895,12 +105178,11 @@ ${imageData.originalPrompt}
|
|
|
103895
105178
|
logToTerminal('log', '[Save Content] Successfully updated file');
|
|
103896
105179
|
}
|
|
103897
105180
|
else {
|
|
103898
|
-
|
|
103899
|
-
logToTerminal('log', '[Save Content] Creating new file in env folder');
|
|
105181
|
+
logToTerminal('log', '[Save Content] Creating new file in project folder root');
|
|
103900
105182
|
const createMetadata = {
|
|
103901
105183
|
name: filename,
|
|
103902
105184
|
mimeType: 'application/json',
|
|
103903
|
-
parents: [
|
|
105185
|
+
parents: [folderId]
|
|
103904
105186
|
};
|
|
103905
105187
|
const createForm = new FormData();
|
|
103906
105188
|
createForm.append('metadata', new Blob([JSON.stringify(createMetadata)], { type: 'application/json' }));
|
|
@@ -103921,6 +105203,12 @@ ${imageData.originalPrompt}
|
|
|
103921
105203
|
const result = await createResponse.json();
|
|
103922
105204
|
logToTerminal('log', '[Save Content] Successfully created file, id:', result.id);
|
|
103923
105205
|
}
|
|
105206
|
+
// После успешного сохранения в корень — убираем устаревшую папку env (и дубликаты, если были)
|
|
105207
|
+
const envIds = await findEnvFolderIds(folderId);
|
|
105208
|
+
for (const envId of envIds) {
|
|
105209
|
+
logToTerminal('log', '[Save Content] Removing legacy env folder:', envId);
|
|
105210
|
+
await trashDriveFile(envId);
|
|
105211
|
+
}
|
|
103924
105212
|
};
|
|
103925
105213
|
// Load generated content from Google Drive
|
|
103926
105214
|
const loadGeneratedContentFromDrive = async (folderId) => {
|
|
@@ -103931,40 +105219,28 @@ ${imageData.originalPrompt}
|
|
|
103931
105219
|
setDriveFilesFound(prev => ({ ...prev, content: false }));
|
|
103932
105220
|
return { found: false };
|
|
103933
105221
|
}
|
|
103934
|
-
//
|
|
103935
|
-
let
|
|
103936
|
-
|
|
103937
|
-
|
|
103938
|
-
}
|
|
103939
|
-
catch (err) {
|
|
103940
|
-
logToTerminal('warn', '[Load Content] Failed to get env folder:', err.message || 'Unknown error');
|
|
103941
|
-
return { found: false };
|
|
105222
|
+
// 1) Корень папки проекта; 2) иначе legacy: папка env (без создания env)
|
|
105223
|
+
let fileId = await findSettingsFileInFolder(folderId);
|
|
105224
|
+
if (fileId) {
|
|
105225
|
+
logToTerminal('log', '[Load Content] Found settings in project root');
|
|
103942
105226
|
}
|
|
103943
|
-
|
|
103944
|
-
|
|
103945
|
-
|
|
103946
|
-
|
|
103947
|
-
|
|
103948
|
-
|
|
103949
|
-
|
|
103950
|
-
|
|
105227
|
+
else {
|
|
105228
|
+
const envIds = await findEnvFolderIds(folderId);
|
|
105229
|
+
for (const envFolderId of envIds) {
|
|
105230
|
+
const id = await findSettingsFileInFolder(envFolderId);
|
|
105231
|
+
if (id) {
|
|
105232
|
+
fileId = id;
|
|
105233
|
+
logToTerminal('log', '[Load Content] Found settings in legacy env folder:', envFolderId);
|
|
105234
|
+
break;
|
|
105235
|
+
}
|
|
103951
105236
|
}
|
|
103952
|
-
});
|
|
103953
|
-
if (!response.ok) {
|
|
103954
|
-
const errorText = await response.text();
|
|
103955
|
-
logToTerminal('warn', '[Load Content] Search failed, status:', response.status, 'error:', errorText);
|
|
103956
|
-
setDriveFilesFound(prev => ({ ...prev, content: false }));
|
|
103957
|
-
return { found: false };
|
|
103958
105237
|
}
|
|
103959
|
-
|
|
103960
|
-
|
|
103961
|
-
if (!data.files || data.files.length === 0) {
|
|
103962
|
-
logToTerminal('log', '[Load Content] File not found - no temp-generated-content.json in folder');
|
|
105238
|
+
if (!fileId) {
|
|
105239
|
+
logToTerminal('log', `[Load Content] No settings file (${PROJECT_SETTINGS_FILENAME} or ${LEGACY_PROJECT_SETTINGS_FILENAME}) in root or env`);
|
|
103963
105240
|
setDriveFilesFound(prev => ({ ...prev, content: false }));
|
|
103964
105241
|
return { found: false };
|
|
103965
105242
|
}
|
|
103966
105243
|
setDriveFilesFound(prev => ({ ...prev, content: true }));
|
|
103967
|
-
const fileId = data.files[0].id;
|
|
103968
105244
|
logToTerminal('log', '[Load Content] File found, id:', fileId);
|
|
103969
105245
|
// Download file content
|
|
103970
105246
|
const downloadUrl = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media`;
|
|
@@ -104011,6 +105287,10 @@ ${imageData.originalPrompt}
|
|
|
104011
105287
|
setLink(loadedData.link || '');
|
|
104012
105288
|
logToTerminal('log', '[Load Content] Loaded link:', loadedData.link || '(empty)');
|
|
104013
105289
|
}
|
|
105290
|
+
const mergedApproaches = (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.mergePromptApproachesFromDriveFile)(loadedData);
|
|
105291
|
+
if (mergedApproaches) {
|
|
105292
|
+
logToTerminal('log', '[Load Content] Applied text + image approach settings from Drive JSON');
|
|
105293
|
+
}
|
|
104014
105294
|
logToTerminal('log', '[Load Content] Successfully loaded content');
|
|
104015
105295
|
setDriveFilesFound(prev => ({ ...prev, content: false }));
|
|
104016
105296
|
return { found: true };
|
|
@@ -104021,6 +105301,27 @@ ${imageData.originalPrompt}
|
|
|
104021
105301
|
return { found: false };
|
|
104022
105302
|
}
|
|
104023
105303
|
};
|
|
105304
|
+
syncDriveAfterPromptSaveRef.current = () => {
|
|
105305
|
+
if (!driveFolderUrl || loadingContentFromDrive)
|
|
105306
|
+
return;
|
|
105307
|
+
const folderId = extractFolderId(driveFolderUrl);
|
|
105308
|
+
if (!folderId)
|
|
105309
|
+
return;
|
|
105310
|
+
logToTerminal('log', '[Drive Sync] Prompt overrides saved locally — updating JSON on Drive');
|
|
105311
|
+
void saveGeneratedContentToDrive(folderId, {
|
|
105312
|
+
generateProduct,
|
|
105313
|
+
generateGeo,
|
|
105314
|
+
generateAdditionalInfo,
|
|
105315
|
+
generatePriceWithCurrency
|
|
105316
|
+
}, brand, link).catch((err) => {
|
|
105317
|
+
logToTerminal('warn', '[Drive Sync] Failed to update Drive after prompt save:', err?.message || err);
|
|
105318
|
+
});
|
|
105319
|
+
};
|
|
105320
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
105321
|
+
const listener = () => syncDriveAfterPromptSaveRef.current();
|
|
105322
|
+
window.addEventListener(_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.PROMPT_OVERRIDES_SAVED_EVENT, listener);
|
|
105323
|
+
return () => window.removeEventListener(_promptOverrides__WEBPACK_IMPORTED_MODULE_52__.PROMPT_OVERRIDES_SAVED_EVENT, listener);
|
|
105324
|
+
}, []);
|
|
104024
105325
|
const handleGenerate = async () => {
|
|
104025
105326
|
if (!driveFolderUrl || !brand || !link) {
|
|
104026
105327
|
alert('Please fill all required fields');
|
|
@@ -104076,6 +105377,7 @@ ${imageData.originalPrompt}
|
|
|
104076
105377
|
const text = textList[i];
|
|
104077
105378
|
for (const image of images) {
|
|
104078
105379
|
const id = `${brand}${idCounter++}`;
|
|
105380
|
+
const rowLink = appendCreativeIdToCatalogLink(link, id);
|
|
104079
105381
|
rows.push([
|
|
104080
105382
|
id,
|
|
104081
105383
|
title,
|
|
@@ -104083,7 +105385,7 @@ ${imageData.originalPrompt}
|
|
|
104083
105385
|
'in stock',
|
|
104084
105386
|
'new',
|
|
104085
105387
|
'10,00 USD',
|
|
104086
|
-
|
|
105388
|
+
rowLink,
|
|
104087
105389
|
image,
|
|
104088
105390
|
brand
|
|
104089
105391
|
]);
|
|
@@ -104091,8 +105393,8 @@ ${imageData.originalPrompt}
|
|
|
104091
105393
|
}
|
|
104092
105394
|
setGeneratedData(rows);
|
|
104093
105395
|
// Create workbook
|
|
104094
|
-
const wb =
|
|
104095
|
-
const ws =
|
|
105396
|
+
const wb = xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.book_new();
|
|
105397
|
+
const ws = xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.aoa_to_sheet(rows);
|
|
104096
105398
|
// Set column widths (approximate pixel width / 7)
|
|
104097
105399
|
ws['!cols'] = [
|
|
104098
105400
|
{ wch: 20 }, // id
|
|
@@ -104105,9 +105407,9 @@ ${imageData.originalPrompt}
|
|
|
104105
105407
|
{ wch: 40 }, // image_link
|
|
104106
105408
|
{ wch: 20 } // brand
|
|
104107
105409
|
];
|
|
104108
|
-
|
|
105410
|
+
xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.book_append_sheet(wb, ws, "Products");
|
|
104109
105411
|
// Generate buffer
|
|
104110
|
-
const wbout =
|
|
105412
|
+
const wbout = xlsx__WEBPACK_IMPORTED_MODULE_53__.write(wb, { bookType: 'xlsx', type: 'array' });
|
|
104111
105413
|
// Upload to Drive (имя файла по бренду)
|
|
104112
105414
|
const dateStr = new Date().toISOString().split('T')[0];
|
|
104113
105415
|
const fileName = `${brand}-${dateStr}.xlsx`;
|
|
@@ -104229,13 +105531,13 @@ ${imageData.originalPrompt}
|
|
|
104229
105531
|
setTestLoading(true);
|
|
104230
105532
|
try {
|
|
104231
105533
|
// Create simple test workbook with structure
|
|
104232
|
-
const wb =
|
|
105534
|
+
const wb = xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.book_new();
|
|
104233
105535
|
const rows = [
|
|
104234
105536
|
INSTRUCTION_ROW,
|
|
104235
105537
|
['id', 'title', 'description', 'availability', 'condition', 'price', 'link', 'image_link', 'brand'],
|
|
104236
105538
|
['test1', 'Test Title', 'Test Description', 'in stock', 'new', '10.00 USD', 'http://test.com', 'http://test.com/img.jpg', 'TestBrand']
|
|
104237
105539
|
];
|
|
104238
|
-
const ws =
|
|
105540
|
+
const ws = xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.aoa_to_sheet(rows);
|
|
104239
105541
|
// Set column widths
|
|
104240
105542
|
ws['!cols'] = [
|
|
104241
105543
|
{ wch: 20 }, // id
|
|
@@ -104248,8 +105550,8 @@ ${imageData.originalPrompt}
|
|
|
104248
105550
|
{ wch: 40 }, // image_link
|
|
104249
105551
|
{ wch: 20 } // brand
|
|
104250
105552
|
];
|
|
104251
|
-
|
|
104252
|
-
const wbout =
|
|
105553
|
+
xlsx__WEBPACK_IMPORTED_MODULE_53__.utils.book_append_sheet(wb, ws, "Test");
|
|
105554
|
+
const wbout = xlsx__WEBPACK_IMPORTED_MODULE_53__.write(wb, { bookType: 'xlsx', type: 'array' });
|
|
104253
105555
|
// Try to extract folder ID if available, otherwise upload to root
|
|
104254
105556
|
const folderId = driveFolderUrl ? extractFolderId(driveFolderUrl) : undefined;
|
|
104255
105557
|
const result = await uploadFileToDrive(wbout, 'test_table.xlsx', folderId || undefined);
|
|
@@ -104281,9 +105583,27 @@ ${imageData.originalPrompt}
|
|
|
104281
105583
|
alert('Failed to copy link');
|
|
104282
105584
|
}
|
|
104283
105585
|
};
|
|
105586
|
+
const copyGeneratedPairsAsJson = async () => {
|
|
105587
|
+
const n = Math.max(generatedTitlesData.length, generatedTextsData.length);
|
|
105588
|
+
if (n === 0)
|
|
105589
|
+
return;
|
|
105590
|
+
const pairs = Array.from({ length: n }, (_, i) => ({
|
|
105591
|
+
title: generatedTitlesData[i]?.title ?? '',
|
|
105592
|
+
text: generatedTextsData[i]?.text ?? '',
|
|
105593
|
+
}));
|
|
105594
|
+
const json = JSON.stringify(pairs, null, 2);
|
|
105595
|
+
try {
|
|
105596
|
+
await navigator.clipboard.writeText(json);
|
|
105597
|
+
setPairsJsonCopied(true);
|
|
105598
|
+
setTimeout(() => setPairsJsonCopied(false), 2000);
|
|
105599
|
+
}
|
|
105600
|
+
catch {
|
|
105601
|
+
alert('Не удалось скопировать в буфер обмена');
|
|
105602
|
+
}
|
|
105603
|
+
};
|
|
104284
105604
|
// Show lock screen if not unlocked
|
|
104285
105605
|
if (!unlocked) {
|
|
104286
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105606
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__["default"], { theme: theme },
|
|
104287
105607
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], null),
|
|
104288
105608
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { onClick: handleSecretClick, sx: {
|
|
104289
105609
|
width: '100vw',
|
|
@@ -104323,24 +105643,24 @@ ${imageData.originalPrompt}
|
|
|
104323
105643
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null),
|
|
104324
105644
|
"Please contact system administrator"))));
|
|
104325
105645
|
}
|
|
104326
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105646
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__["default"], { theme: theme },
|
|
104327
105647
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], null),
|
|
104328
105648
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { maxWidth: "lg", sx: { py: 4 } },
|
|
104329
105649
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 } },
|
|
104330
105650
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "h4", component: "h1", sx: { fontWeight: 'bold', color: 'primary.main' } }, "Docs Combiner"),
|
|
104331
105651
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], null,
|
|
104332
105652
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { onClick: () => setPromptManagerOpen(true), color: "inherit", "aria-label": "manage prompts", sx: { mr: 1 } },
|
|
104333
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104334
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { onClick: toggleTheme, color: "inherit", "aria-label": "toggle theme" }, darkMode ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105653
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_49__["default"], null)),
|
|
105654
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { onClick: toggleTheme, color: "inherit", "aria-label": "toggle theme" }, darkMode ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_38__["default"], null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_37__["default"], null)))),
|
|
104335
105655
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], { variant: "outlined", sx: { mb: 4 } },
|
|
104336
105656
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], null,
|
|
104337
105657
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { spacing: 3 },
|
|
104338
105658
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], null,
|
|
104339
105659
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "h6", gutterBottom: true }, "Google Drive Authentication"),
|
|
104340
105660
|
accessToken ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], null,
|
|
104341
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__["default"], { expandIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105661
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__["default"], { expandIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_43__["default"], null) },
|
|
104342
105662
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { sx: { display: 'flex', alignItems: 'center', color: 'success.main' } },
|
|
104343
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105663
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_39__["default"], { sx: { mr: 1 } }),
|
|
104344
105664
|
" Logged In (Credentials Hidden)")),
|
|
104345
105665
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__["default"], null,
|
|
104346
105666
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { spacing: 2 },
|
|
@@ -104351,7 +105671,7 @@ ${imageData.originalPrompt}
|
|
|
104351
105671
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "Client ID", variant: "outlined", fullWidth: true, value: clientId, onChange: (e) => handleClientIdChange(e.target.value), helperText: "From Google Cloud Console (OAuth 2.0 Client ID)" }),
|
|
104352
105672
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "Client Secret", variant: "outlined", fullWidth: true, value: clientSecret, onChange: (e) => handleClientSecretChange(e.target.value) }))),
|
|
104353
105673
|
openaiApiKey && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 2, mt: 2 } },
|
|
104354
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105674
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_34__["default"], { color: openRouterAccountBalance !== null ? 'primary' : 'disabled' }),
|
|
104355
105675
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", color: openRouterAccountBalance !== null ? 'text.primary' : 'text.secondary' },
|
|
104356
105676
|
"\u0411\u0430\u043B\u0430\u043D\u0441: ",
|
|
104357
105677
|
openRouterBalanceLoading ? 'Loading...' : (openRouterAccountBalance !== null ? `$${openRouterAccountBalance.toFixed(2)}` : 'N/A')),
|
|
@@ -104360,8 +105680,8 @@ ${imageData.originalPrompt}
|
|
|
104360
105680
|
"\u041B\u0438\u043C\u0438\u0442 \u043A\u043B\u044E\u0447\u0430: ",
|
|
104361
105681
|
openRouterBalanceLoading ? 'Loading...' : (openRouterBalance === -1 ? 'Без лимита' : (openRouterBalance !== null ? `${openRouterBalance.toFixed(4)}` : 'N/A'))))),
|
|
104362
105682
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 2, alignItems: "center", sx: { mt: 2 } },
|
|
104363
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: accessToken ? "success" : "primary", onClick: handleLogin, disabled: authLoading || !clientId || !clientSecret, startIcon: authLoading ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : (accessToken ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104364
|
-
accessToken && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "outlined", color: "error", onClick: handleLogout, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105683
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: accessToken ? "success" : "primary", onClick: handleLogin, disabled: authLoading || !clientId || !clientSecret, startIcon: authLoading ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : (accessToken ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_39__["default"], null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_45__["default"], null)), sx: { flexGrow: 1 } }, authLoading ? 'Logging in...' : (accessToken ? 'Logged In' : 'Login with Google')),
|
|
105684
|
+
accessToken && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "outlined", color: "error", onClick: handleLogout, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_46__["default"], null) }, "Logout")))),
|
|
104365
105685
|
!accessToken && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
104366
105686
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__["default"], null),
|
|
104367
105687
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], null,
|
|
@@ -104377,7 +105697,7 @@ ${imageData.originalPrompt}
|
|
|
104377
105697
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 14 }),
|
|
104378
105698
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0444\u0430\u0439\u043B\u043E\u0432...")))),
|
|
104379
105699
|
!checkingFolderFiles && folderFilesInfo && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__["default"], null,
|
|
104380
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { component: "span", sx: { display: 'block' } }, folderFilesInfo.hasProduct ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { component: "span", sx: { color: 'success.main' } }, "\u2713 product.png/jpg \u043D\u0430\u0439\u0434\u0435\u043D")) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { component: "span", sx: { color: 'info.main' } }, "\u2139 product.png/jpg \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043A\u043D\u043E\u043F\u043A\u0443 \u043D\u0438\u0436\u0435"))))),
|
|
105700
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { component: "span", sx: { display: 'block' } }, folderFilesInfo.hasProduct ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { component: "span", sx: { color: 'success.main' } }, "\u2713 product.png/jpg/webp \u043D\u0430\u0439\u0434\u0435\u043D")) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { component: "span", sx: { color: 'info.main' } }, "\u2139 product.png/jpg/webp \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043A\u043D\u043E\u043F\u043A\u0443 \u043D\u0438\u0436\u0435"))))),
|
|
104381
105701
|
!checkingFolderFiles && !folderFilesInfo && driveFolderUrl.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__["default"], null, "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u0443\u044E \u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430 \u043F\u0430\u043F\u043A\u0443 Google Drive"))))),
|
|
104382
105702
|
!driveFolderUrl.trim() ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "info", sx: { mt: 2 } },
|
|
104383
105703
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body1", sx: { fontWeight: 'bold', mb: 1 } }, "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0430\u043F\u043A\u0443 Google Drive \u0434\u043B\u044F \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u044F"),
|
|
@@ -104409,39 +105729,58 @@ ${imageData.originalPrompt}
|
|
|
104409
105729
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "\u0422\u043E\u0432\u0430\u0440", variant: "outlined", fullWidth: true, value: generateProduct, onChange: (e) => setGenerateProduct(e.target.value), placeholder: "\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u043F\u043B\u0438 \u043E\u0442 \u043F\u0430\u0440\u0430\u0437\u0438\u0442\u043E\u0432 Detoxil Water", sx: { mb: 2 } })),
|
|
104410
105730
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 2, sx: { mb: 2 } },
|
|
104411
105731
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "\u0413\u0435\u043E", variant: "outlined", fullWidth: true, value: generateGeo, onChange: (e) => setGenerateGeo(e.target.value), placeholder: "\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: \u0420\u0443\u043C\u044B\u043D\u0438\u044F" }),
|
|
104412
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "\u0426\u0435\u043D\u0430 \u0438 \u0432\u0430\u043B\u044E\u0442\u0430", variant: "outlined", fullWidth: true, value: generatePriceWithCurrency, onChange: (e) => setGeneratePriceWithCurrency(e.target.value), placeholder: "\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: 29 euro, 11400 HUF, 149 RON \u0438\u043B\u0438 \u043B\u044E\u0431\u043E\u0439 \u0434\u0440\u0443\u0433\u043E\u0439 \u0444\u043E\u0440\u043C\u0430\u0442", helperText: "\u041B\u044E\u0431\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u043F\u0440\u043E\u043C\u043F\u0442\u0435 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439
|
|
105732
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "\u0426\u0435\u043D\u0430 \u0438 \u0432\u0430\u043B\u044E\u0442\u0430", variant: "outlined", fullWidth: true, value: generatePriceWithCurrency, onChange: (e) => setGeneratePriceWithCurrency(e.target.value), placeholder: "\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: 29 euro, 11400 HUF, 149 RON \u0438\u043B\u0438 \u043B\u044E\u0431\u043E\u0439 \u0434\u0440\u0443\u0433\u043E\u0439 \u0444\u043E\u0440\u043C\u0430\u0442", helperText: "\u041B\u044E\u0431\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u043F\u0440\u043E\u043C\u043F\u0442\u0435 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. \u041A\u043D\u043E\u043F\u043A\u0438 \u0441\u043F\u0440\u0430\u0432\u0430 \u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442 \u0441\u0438\u043C\u0432\u043E\u043B \u0432\u0430\u043B\u044E\u0442\u044B, \u0446\u0438\u0444\u0440\u0443 \u0431\u0435\u0440\u0443\u0442 \u0438\u0437 \u043F\u043E\u043B\u044F (\u0438\u043B\u0438 99).", InputProps: {
|
|
105733
|
+
endAdornment: (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__["default"], { position: "end" },
|
|
105734
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 0.25, mr: -0.5 } },
|
|
105735
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: "\u041F\u043E\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044C $ (\u0446\u0438\u0444\u0440\u0430 \u0438\u0437 \u043F\u043E\u043B\u044F \u0438\u043B\u0438 99)" },
|
|
105736
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", "aria-label": "\u0411\u044B\u0441\u0442\u0440\u043E \u0434\u043E\u043B\u043B\u0430\u0440", onClick: () => {
|
|
105737
|
+
const n = extractLeadingPriceNumber(generatePriceWithCurrency);
|
|
105738
|
+
setGeneratePriceWithCurrency(`$${n}`);
|
|
105739
|
+
}, edge: "end" },
|
|
105740
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_35__["default"], { sx: { fontSize: 20 } }))),
|
|
105741
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: "\u041F\u043E\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u20AC (\u0446\u0438\u0444\u0440\u0430 \u0438\u0437 \u043F\u043E\u043B\u044F \u0438\u043B\u0438 99)" },
|
|
105742
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", "aria-label": "\u0411\u044B\u0441\u0442\u0440\u043E \u0435\u0432\u0440\u043E", onClick: () => {
|
|
105743
|
+
const n = extractLeadingPriceNumber(generatePriceWithCurrency);
|
|
105744
|
+
setGeneratePriceWithCurrency(`€${n}`);
|
|
105745
|
+
}, edge: "end", sx: { minWidth: 34, fontSize: '1rem', fontWeight: 700 } }, "\u20AC")),
|
|
105746
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: "\u041F\u043E\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044C z\u0142 (\u0446\u0438\u0444\u0440\u0430 \u0438\u0437 \u043F\u043E\u043B\u044F \u0438\u043B\u0438 99)" },
|
|
105747
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", "aria-label": "\u0411\u044B\u0441\u0442\u0440\u043E \u0437\u043B\u043E\u0442\u044B\u0435", onClick: () => {
|
|
105748
|
+
const n = extractLeadingPriceNumber(generatePriceWithCurrency);
|
|
105749
|
+
setGeneratePriceWithCurrency(`${n} zł`);
|
|
105750
|
+
}, edge: "end", sx: { minWidth: 36, fontSize: '0.8rem', fontWeight: 700, letterSpacing: -0.3 } }, "z\u0142"))))),
|
|
105751
|
+
} })),
|
|
104413
105752
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], null,
|
|
104414
105753
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F (\u043D\u0435 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)", variant: "outlined", fullWidth: true, multiline: true, minRows: 3, value: generateAdditionalInfo, onChange: (e) => setGenerateAdditionalInfo(e.target.value), placeholder: "\u0418\u043D\u0433\u0440\u0435\u0434\u0438\u0435\u043D\u0442\u044B, \u0443\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u044F \u043A \u043F\u0440\u043E\u043C\u043F\u0442\u0443 \u0438 \u0442.\u0434.", sx: { mb: 2 } })),
|
|
104415
105754
|
openaiApiKey && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 2, sx: { mb: 2 } },
|
|
104416
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104417
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104418
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105755
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__["default"], { fullWidth: true, variant: "outlined" },
|
|
105756
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__["default"], null, "\u041C\u043E\u0434\u0435\u043B\u044C \u0434\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439"),
|
|
105757
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__["default"], { value: selectedImageModel, onChange: (e) => handleImageModelChange(e.target.value), label: "\u041C\u043E\u0434\u0435\u043B\u044C \u0434\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", disabled: loadingImageModels || imageModels.length === 0 }, loadingImageModels ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { disabled: true },
|
|
104419
105758
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1 } },
|
|
104420
105759
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16 }),
|
|
104421
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439...")))) : imageModels.length === 0 ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105760
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439...")))) : imageModels.length === 0 ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { disabled: true }, "\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439")) : (imageModels.map((model) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { key: model.id, value: model.id }, model.name))))),
|
|
104422
105761
|
!loadingImageModels && imageModels.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__["default"], null, selectedImageModel === _models__WEBPACK_IMPORTED_MODULE_2__.MODELS.imageGeneration
|
|
104423
105762
|
? 'Используется модель по умолчанию'
|
|
104424
105763
|
: 'Выбрана модель: ' + (imageModels.find(m => m.id === selectedImageModel)?.name || selectedImageModel)))),
|
|
104425
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104426
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104427
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105764
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__["default"], { fullWidth: true, variant: "outlined" },
|
|
105765
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__["default"], null, "\u041C\u043E\u0434\u0435\u043B\u044C \u0434\u043B\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043A\u0440\u0435\u0430\u0442\u0438\u0432\u043E\u0432"),
|
|
105766
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__["default"], { value: selectedValidationModel, onChange: (e) => handleValidationModelChange(e.target.value), label: "\u041C\u043E\u0434\u0435\u043B\u044C \u0434\u043B\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043A\u0440\u0435\u0430\u0442\u0438\u0432\u043E\u0432", disabled: loadingValidationModels || validationModels.length === 0 }, loadingValidationModels ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { disabled: true },
|
|
104428
105767
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1 } },
|
|
104429
105768
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16 }),
|
|
104430
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439...")))) : validationModels.length === 0 ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105769
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439...")))) : validationModels.length === 0 ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { disabled: true }, "\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439")) : (validationModels.map((model) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__["default"], { key: model.id, value: model.id }, model.name))))),
|
|
104431
105770
|
!loadingValidationModels && validationModels.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__["default"], null, selectedValidationModel === _models__WEBPACK_IMPORTED_MODULE_2__.MODELS.creativeValidation
|
|
104432
105771
|
? 'Используется модель по умолчанию'
|
|
104433
105772
|
: 'Выбрана модель: ' + (validationModels.find(m => m.id === selectedValidationModel)?.name || selectedValidationModel))),
|
|
104434
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105773
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__["default"], { control: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__["default"], { checked: validationDisabled, onChange: (e) => handleValidationDisabledChange(e.target.checked), color: "primary" }), label: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443", sx: { mt: 1 } })))),
|
|
104435
105774
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 2, sx: { mb: 2 } },
|
|
104436
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "primary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105775
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "primary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_36__["default"], null), onClick: handleGenerateContent, disabled: generating || loadingContentFromDrive || !openaiApiKey || !generateProduct.trim() || !generateGeo.trim(), sx: { flexGrow: 1 }, size: "large" }, generating ? 'Generating...' : 'Generate Titles & Descriptions'),
|
|
104437
105776
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 1, alignItems: "center", sx: { flexGrow: 1 } },
|
|
104438
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105777
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: imageAspectRatio === '1:1'
|
|
104439
105778
|
? '1:1 — квадрат (1024×1024 px)'
|
|
104440
105779
|
: imageAspectRatio === '2:3'
|
|
104441
105780
|
? '2:3 — портрет (1024×1536 px)'
|
|
104442
105781
|
: 'Оба — квадрат и портрет на каждый подход', placement: "top" },
|
|
104443
105782
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null,
|
|
104444
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105783
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__["default"], { value: imageAspectRatio, exclusive: true, onChange: (_e, val) => {
|
|
104445
105784
|
if (val && val !== imageAspectRatio) {
|
|
104446
105785
|
if (generatedImagesData.length > 0) {
|
|
104447
105786
|
const label = val === 'both' ? 'оба (1:1 + 2:3)' : val;
|
|
@@ -104457,10 +105796,10 @@ ${imageData.originalPrompt}
|
|
|
104457
105796
|
}
|
|
104458
105797
|
}
|
|
104459
105798
|
}, size: "small", disabled: generatingImages, sx: { height: 42 } },
|
|
104460
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104461
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104462
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104463
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "secondary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105799
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__["default"], { value: "1:1", sx: { px: 1.5, fontWeight: 600, fontSize: '0.8rem' } }, "1:1"),
|
|
105800
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__["default"], { value: "2:3", sx: { px: 1.5, fontWeight: 600, fontSize: '0.8rem' } }, "2:3"),
|
|
105801
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__["default"], { value: "both", sx: { px: 1.5, fontWeight: 600, fontSize: '0.8rem' } }, "\u041E\u0431\u0430")))),
|
|
105802
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "secondary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_36__["default"], null), onClick: handleGenerateImages, disabled: generatingImages ||
|
|
104464
105803
|
!openaiApiKey ||
|
|
104465
105804
|
(!accessToken && !refreshToken) ||
|
|
104466
105805
|
!generateProduct.trim() ||
|
|
@@ -104478,9 +105817,9 @@ ${imageData.originalPrompt}
|
|
|
104478
105817
|
: !driveFolderUrl.trim()
|
|
104479
105818
|
? 'Заполните URL папки Google Drive'
|
|
104480
105819
|
: undefined }, generatingImages ? 'Generating Images...' : 'Generate Images')),
|
|
104481
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "success", size: "large", onClick: handleGenerate, disabled: loading, startIcon: loading ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105820
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "success", size: "large", onClick: handleGenerate, disabled: loading, startIcon: loading ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_40__["default"], null), sx: { py: 1.5, fontSize: '1.1rem', flexGrow: 1 } }, loading ? 'Generating...' : 'Generate Catalog'),
|
|
104482
105821
|
uploadedLink && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "success", sx: { flexGrow: 1, minWidth: 0 }, action: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { "aria-label": "copy link", color: "inherit", size: "small", onClick: handleCopyLink, sx: { ml: 1 } },
|
|
104483
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105822
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_41__["default"], { fontSize: "small" })) },
|
|
104484
105823
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' } },
|
|
104485
105824
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null,
|
|
104486
105825
|
"\u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D!",
|
|
@@ -104490,22 +105829,22 @@ ${imageData.originalPrompt}
|
|
|
104490
105829
|
getElectronAPI().openExternal(uploadedLink);
|
|
104491
105830
|
}, style: { cursor: 'pointer', textDecoration: 'underline', color: 'inherit' } }, "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 Google Drive")),
|
|
104492
105831
|
linkCopied && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'success.dark', fontWeight: 'bold' } }, "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E!"))))),
|
|
104493
|
-
folderFilesInfo !== null && !folderFilesInfo.hasProduct && driveFolderUrl.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "warning", sx: { mt: 1 } }, "\u0414\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F product.png/jpg. \u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043D\u043E\u043F\u043A\u0438 \"Generate Product from Banka\".")),
|
|
105832
|
+
folderFilesInfo !== null && !folderFilesInfo.hasProduct && driveFolderUrl.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "warning", sx: { mt: 1 } }, "\u0414\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F product.png/jpg/webp. \u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043D\u043E\u043F\u043A\u0438 \"Generate Product from Banka\".")),
|
|
104494
105833
|
!generatingImages && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
104495
105834
|
!openaiApiKey && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "error", sx: { mt: 1 } }, "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 OpenRouter API Key")),
|
|
104496
105835
|
openaiApiKey && (!accessToken && !refreshToken) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "error", sx: { mt: 1 } }, "\u0412\u043E\u0439\u0434\u0438\u0442\u0435 \u0432 Google Drive")),
|
|
104497
105836
|
openaiApiKey && (accessToken || refreshToken) && !generateProduct.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "error", sx: { mt: 1 } }, "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043F\u043E\u043B\u0435 \u0422\u043E\u0432\u0430\u0440")),
|
|
104498
105837
|
openaiApiKey && (accessToken || refreshToken) && generateProduct.trim() && !generateGeo.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "error", sx: { mt: 1 } }, "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043F\u043E\u043B\u0435 \u0413\u0435\u043E")),
|
|
104499
105838
|
openaiApiKey && (accessToken || refreshToken) && generateProduct.trim() && generateGeo.trim() && !driveFolderUrl.trim() && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { severity: "error", sx: { mt: 1 } }, "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 URL \u043F\u0430\u043F\u043A\u0438 Google Drive"))))),
|
|
104500
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "file", ref: productFileInputRef, accept: "image/png,image/jpeg,image/jpg", style: { display: 'none' }, onChange: handleProductFileSelected }),
|
|
105839
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "file", ref: productFileInputRef, accept: "image/png,image/jpeg,image/jpg,image/webp", style: { display: 'none' }, onChange: handleProductFileSelected }),
|
|
104501
105840
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 2, sx: { mb: 2 } },
|
|
104502
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "success", startIcon: uploadingProduct ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104503
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "info", startIcon: generatingLanding ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105841
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "success", startIcon: uploadingProduct ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_40__["default"], null), onClick: handleUploadProductFile, disabled: uploadingProduct || !accessToken || !driveFolderUrl.trim(), sx: { flexGrow: 1 }, size: "large" }, uploadingProduct ? 'Загрузка...' : 'Загрузить product.png/jpg/webp'),
|
|
105842
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "info", startIcon: generatingLanding ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20, color: "inherit" }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_47__["default"], null), onClick: handleCreateLanding, disabled: generatingLanding ||
|
|
104504
105843
|
!openaiApiKey ||
|
|
104505
105844
|
!accessToken ||
|
|
104506
105845
|
!driveFolderUrl.trim() ||
|
|
104507
105846
|
(folderFilesInfo !== null && !folderFilesInfo.hasProduct), sx: { flexGrow: 1 }, size: "large", title: folderFilesInfo !== null && !folderFilesInfo.hasProduct
|
|
104508
|
-
? 'product.png/jpg не найден в папке. Загрузите его с помощью кнопки «Загрузить product
|
|
105847
|
+
? 'product.png/jpg/webp не найден в папке. Загрузите его с помощью кнопки «Загрузить product»'
|
|
104509
105848
|
: undefined }, generatingLanding ? 'Creating Landing...' : 'Создать лендинг')),
|
|
104510
105849
|
generatedImagesData.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { mb: 2, mt: 3 } },
|
|
104511
105850
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "h6", gutterBottom: true, sx: { fontWeight: 'bold' } },
|
|
@@ -104517,6 +105856,8 @@ ${imageData.originalPrompt}
|
|
|
104517
105856
|
checkingImages && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 } },
|
|
104518
105857
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16 }),
|
|
104519
105858
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'text.secondary' } }, "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0430..."))),
|
|
105859
|
+
generatedImagesData.length > 0 && generatedImagesData.some(img => !img.uploaded && img.imageUrl) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { mb: 2 } },
|
|
105860
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "primary", onClick: handleUploadAllImages, disabled: uploadingImages || generatingImages || !driveFolderUrl.trim(), startIcon: uploadingImages ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20 }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_40__["default"], null), fullWidth: true }, uploadingImages ? 'Загрузка...' : `Загрузить все (${generatedImagesData.filter(img => !img.uploaded && img.imageUrl).length})`))),
|
|
104520
105861
|
generatedImagesData.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: {
|
|
104521
105862
|
display: 'grid',
|
|
104522
105863
|
gridTemplateColumns: { xs: '1fr', sm: 'repeat(2, 1fr)', md: 'repeat(3, 1fr)' },
|
|
@@ -104526,6 +105867,34 @@ ${imageData.originalPrompt}
|
|
|
104526
105867
|
const imgRatio = imageData.aspectRatio ?? (imageAspectRatio === 'both' ? '1:1' : imageAspectRatio);
|
|
104527
105868
|
const aspectRatioCss = imgRatio === '2:3' ? '2 / 3' : '1 / 1';
|
|
104528
105869
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { key: imageData.index, sx: { position: 'relative' } },
|
|
105870
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u0440\u0435\u0430\u0442\u0438\u0432" },
|
|
105871
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null,
|
|
105872
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", "aria-label": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u0440\u0435\u0430\u0442\u0438\u0432", sx: {
|
|
105873
|
+
position: 'absolute',
|
|
105874
|
+
top: 6,
|
|
105875
|
+
right: 6,
|
|
105876
|
+
zIndex: 3,
|
|
105877
|
+
bgcolor: 'rgba(32, 32, 32, 0.92)',
|
|
105878
|
+
color: '#fff',
|
|
105879
|
+
border: '2px solid rgba(255, 255, 255, 0.95)',
|
|
105880
|
+
boxShadow: '0 2px 12px rgba(0, 0, 0, 0.45)',
|
|
105881
|
+
width: 36,
|
|
105882
|
+
height: 36,
|
|
105883
|
+
'&:hover': {
|
|
105884
|
+
bgcolor: 'error.main',
|
|
105885
|
+
borderColor: 'rgba(255, 255, 255, 1)',
|
|
105886
|
+
color: '#fff',
|
|
105887
|
+
},
|
|
105888
|
+
'&.Mui-disabled': {
|
|
105889
|
+
bgcolor: 'rgba(32, 32, 32, 0.45)',
|
|
105890
|
+
borderColor: 'rgba(255, 255, 255, 0.4)',
|
|
105891
|
+
color: 'rgba(255, 255, 255, 0.5)',
|
|
105892
|
+
},
|
|
105893
|
+
}, onClick: () => handleDeleteGeneratedImage(imageData.index), disabled: generatingImages ||
|
|
105894
|
+
imageData.generating ||
|
|
105895
|
+
!!imageData.regenerating ||
|
|
105896
|
+
!!imageData.uploading },
|
|
105897
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_42__["default"], { fontSize: "small" })))),
|
|
104529
105898
|
imageData.generating ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: {
|
|
104530
105899
|
width: '100%',
|
|
104531
105900
|
aspectRatio: aspectRatioCss,
|
|
@@ -104546,7 +105915,24 @@ ${imageData.originalPrompt}
|
|
|
104546
105915
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'text.secondary', textAlign: 'center' } }, imageData.approach),
|
|
104547
105916
|
generatingImages && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'text.secondary', textAlign: 'center' } },
|
|
104548
105917
|
"\u23F1\uFE0F \u041F\u0440\u043E\u0448\u043B\u043E: ",
|
|
104549
|
-
formatElapsedTime(elapsedTime.images))))) : imageData.imageUrl ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105918
|
+
formatElapsedTime(elapsedTime.images))))) : imageData.regenerating && !imageData.imageUrl ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: {
|
|
105919
|
+
width: '100%',
|
|
105920
|
+
aspectRatio: aspectRatioCss,
|
|
105921
|
+
border: (theme) => `2px dashed ${theme.palette.primary.main}`,
|
|
105922
|
+
borderRadius: 1,
|
|
105923
|
+
backgroundColor: (theme) => theme.palette.mode === 'dark'
|
|
105924
|
+
? 'rgba(25, 118, 210, 0.1)'
|
|
105925
|
+
: 'rgba(25, 118, 210, 0.05)',
|
|
105926
|
+
display: 'flex',
|
|
105927
|
+
flexDirection: 'column',
|
|
105928
|
+
alignItems: 'center',
|
|
105929
|
+
justifyContent: 'center',
|
|
105930
|
+
gap: 2,
|
|
105931
|
+
p: 3
|
|
105932
|
+
} },
|
|
105933
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 40, sx: { color: 'primary.main' } }),
|
|
105934
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", sx: { color: 'text.secondary', textAlign: 'center', fontWeight: 'bold' } }, "\u041F\u0435\u0440\u0435\u0434\u0435\u043B\u043A\u0430..."),
|
|
105935
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'text.secondary', textAlign: 'center' } }, imageData.approach))) : imageData.imageUrl ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
104550
105936
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { component: "img", src: imageData.imageUrl, alt: `Generated Image ${imageData.index}`, sx: {
|
|
104551
105937
|
width: '100%',
|
|
104552
105938
|
height: 'auto',
|
|
@@ -104641,7 +106027,7 @@ ${imageData.originalPrompt}
|
|
|
104641
106027
|
"+",
|
|
104642
106028
|
imageData.checkErrors.length - 2,
|
|
104643
106029
|
" \u0435\u0449\u0451")))),
|
|
104644
|
-
imageData.checkFailed && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", color: "warning", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106030
|
+
imageData.checkFailed && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", color: "warning", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_48__["default"], null), onClick: () => handleRetryCheck(imageData), disabled: imageData.checking, sx: { mt: 0.5, fontSize: '0.7rem', py: 0.25, px: 1 } }, "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443")))),
|
|
104645
106031
|
imageData.checkStatus === 'checking' && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'warning.main', display: 'block' } }, "\uD83D\uDD0D \u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442\u0441\u044F...")),
|
|
104646
106032
|
imageData.checkStatus === 'pending' && !imageData.failed && !imageData.generating && imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'text.secondary', display: 'block' } }, "\u23F3 \u041E\u0436\u0438\u0434\u0430\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438")),
|
|
104647
106033
|
imageData.failed && !imageData.generating && !imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { color: 'error.main', display: 'block', fontWeight: 'bold' } }, "\u274C \u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u043D\u0435 \u0443\u0434\u0430\u043B\u0430\u0441\u044C")),
|
|
@@ -104664,7 +106050,7 @@ ${imageData.originalPrompt}
|
|
|
104664
106050
|
: 'transparent'
|
|
104665
106051
|
}
|
|
104666
106052
|
} }),
|
|
104667
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "contained", color: imageData.failed ? 'error' : imageData.checkStatus === 'needs_rebuild' ? 'warning' : 'primary', startIcon: imageData.regenerating ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16 }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106053
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "contained", color: imageData.failed ? 'error' : imageData.checkStatus === 'needs_rebuild' ? 'warning' : 'primary', startIcon: imageData.regenerating ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16 }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_36__["default"], null), onClick: () => handleRegenerateImage(imageData), disabled: imageData.regenerating ||
|
|
104668
106054
|
imageData.uploading ||
|
|
104669
106055
|
imageData.checkStatus === 'checking' ||
|
|
104670
106056
|
!imageData.originalPrompt ||
|
|
@@ -104674,12 +106060,12 @@ ${imageData.originalPrompt}
|
|
|
104674
106060
|
: ((generatingImages && !imageData.imageUrl && !imageData.failed && !imageData.generating)
|
|
104675
106061
|
? 'В очереди'
|
|
104676
106062
|
: (!imageData.imageUrl ? 'Сгенерировать' : 'Переделать'))),
|
|
104677
|
-
imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", color: "secondary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106063
|
+
imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", color: "secondary", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_48__["default"], null), onClick: () => handleRegenerateImageFresh(imageData), disabled: imageData.regenerating ||
|
|
104678
106064
|
imageData.uploading ||
|
|
104679
106065
|
imageData.checkStatus === 'checking' ||
|
|
104680
106066
|
!imageData.originalPrompt ||
|
|
104681
106067
|
!imageData.productImageUrl, fullWidth: true }, "\u041F\u0435\u0440\u0435\u0434\u0435\u043B\u0430\u0442\u044C \u0437\u0430\u043D\u043E\u0432\u043E")),
|
|
104682
|
-
!imageData.uploaded && imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106068
|
+
!imageData.uploaded && imageData.imageUrl && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { size: "small", variant: "outlined", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_40__["default"], null), onClick: () => {
|
|
104683
106069
|
const folderId = extractFolderId(driveFolderUrl);
|
|
104684
106070
|
if (folderId) {
|
|
104685
106071
|
handleUploadImage(imageData, folderId);
|
|
@@ -104687,15 +106073,24 @@ ${imageData.originalPrompt}
|
|
|
104687
106073
|
}, disabled: imageData.uploading || imageData.regenerating || !driveFolderUrl.trim(), fullWidth: true }, imageData.uploading ? 'Загрузка...' : 'Загрузить'))))));
|
|
104688
106074
|
}))),
|
|
104689
106075
|
generatedImagesData.length > 0 && generatedImagesData.some(img => !img.uploaded && img.imageUrl) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { mt: 2 } },
|
|
104690
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "primary", onClick: handleUploadAllImages, disabled: uploadingImages || generatingImages || !driveFolderUrl.trim(), startIcon: uploadingImages ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20 }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106076
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "contained", color: "primary", onClick: handleUploadAllImages, disabled: uploadingImages || generatingImages || !driveFolderUrl.trim(), startIcon: uploadingImages ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20 }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_40__["default"], null), fullWidth: true }, uploadingImages ? 'Загрузка...' : `Загрузить все (${generatedImagesData.filter(img => !img.uploaded && img.imageUrl).length})`))))),
|
|
104691
106077
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__["default"], { sx: { my: 2 } }),
|
|
104692
106078
|
(generatedTitlesData.length > 0 || generatedTextsData.length > 0 || loadingContentFromDrive) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { mb: 2 } },
|
|
104693
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104694
|
-
"
|
|
104695
|
-
|
|
104696
|
-
|
|
104697
|
-
|
|
104698
|
-
|
|
106079
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 1, mb: 1 } },
|
|
106080
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "h6", sx: { fontWeight: 'bold' }, component: "div" },
|
|
106081
|
+
"\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u043F\u0430\u0440\u044B (",
|
|
106082
|
+
Math.min(generatedTitlesData.filter(t => t.title).length, generatedTextsData.filter(t => t.text).length),
|
|
106083
|
+
"/",
|
|
106084
|
+
Math.max(generatedTitlesData.length, generatedTextsData.length),
|
|
106085
|
+
")"),
|
|
106086
|
+
(generatedTitlesData.length > 0 || generatedTextsData.length > 0) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: pairsJsonCopied ? 'Скопировано' : 'Скопировать все пары как JSON-массив' },
|
|
106087
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", "aria-label": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u0440\u044B \u043A\u0430\u043A JSON", onClick: () => void copyGeneratedPairsAsJson(), disabled: generating, sx: {
|
|
106088
|
+
opacity: 0.28,
|
|
106089
|
+
p: 0.35,
|
|
106090
|
+
color: 'text.secondary',
|
|
106091
|
+
'&:hover': { opacity: 0.75, color: 'text.primary' },
|
|
106092
|
+
} },
|
|
106093
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_41__["default"], { sx: { fontSize: 16 } }))))),
|
|
104699
106094
|
loadingContentFromDrive && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: {
|
|
104700
106095
|
display: 'flex',
|
|
104701
106096
|
flexDirection: 'column',
|
|
@@ -104722,7 +106117,7 @@ ${imageData.originalPrompt}
|
|
|
104722
106117
|
const pairLabel = pairApproach ? pairApproach.name : `пара ${i + 1}`;
|
|
104723
106118
|
const pairGenerating = (titleData?.generating || textData?.generating);
|
|
104724
106119
|
const pairFailed = (!pairGenerating && titleData?.failed && textData?.failed);
|
|
104725
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106120
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__["default"], { key: i, variant: "outlined", sx: {
|
|
104726
106121
|
p: 2,
|
|
104727
106122
|
borderColor: pairFailed
|
|
104728
106123
|
? 'error.main'
|
|
@@ -104734,7 +106129,7 @@ ${imageData.originalPrompt}
|
|
|
104734
106129
|
? (theme.palette.mode === 'dark' ? 'rgba(25,118,210,0.05)' : 'rgba(25,118,210,0.02)')
|
|
104735
106130
|
: 'transparent',
|
|
104736
106131
|
} },
|
|
104737
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 1, alignItems: "center", sx: { mb: 1.5 } },
|
|
106132
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { direction: "row", spacing: 1, alignItems: "center", sx: { mb: 1.5, flexWrap: 'wrap' } },
|
|
104738
106133
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: {
|
|
104739
106134
|
fontWeight: 700,
|
|
104740
106135
|
px: 1,
|
|
@@ -104750,7 +106145,12 @@ ${imageData.originalPrompt}
|
|
|
104750
106145
|
"\u041F\u0430\u0440\u0430 ",
|
|
104751
106146
|
i + 1),
|
|
104752
106147
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", color: "text.secondary" }, pairLabel),
|
|
104753
|
-
|
|
106148
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { flexGrow: 1, minWidth: 8 } }),
|
|
106149
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0430\u0440\u0443" },
|
|
106150
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null,
|
|
106151
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", color: "error", "aria-label": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0430\u0440\u0443", onClick: () => handleDeleteGeneratedPair(i), disabled: pairGenerating || generating },
|
|
106152
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_42__["default"], { fontSize: "small" })))),
|
|
106153
|
+
translatingPairs && !pairTranslations[i] ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 13, sx: { color: 'text.disabled', ml: 0.5 } })) : pairTranslations[i] ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], { title: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], null,
|
|
104754
106154
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { fontWeight: 700, display: 'block', mb: 0.5 } }, "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A:"),
|
|
104755
106155
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { display: 'block', mb: 1 } }, pairTranslations[i].titleRu),
|
|
104756
106156
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "caption", sx: { fontWeight: 700, display: 'block', mb: 0.5 } }, "\u0422\u0435\u043A\u0441\u0442:"),
|
|
@@ -104758,13 +106158,26 @@ ${imageData.originalPrompt}
|
|
|
104758
106158
|
tooltip: { sx: { maxWidth: 360, fontSize: 12, lineHeight: 1.6, p: '10px 14px' } },
|
|
104759
106159
|
} },
|
|
104760
106160
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { size: "small", sx: { p: 0.25, color: 'text.disabled', '&:hover': { color: 'primary.main' } } },
|
|
104761
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106161
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_44__["default"], { sx: { fontSize: 14 } })))) : null),
|
|
104762
106162
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { spacing: 1.5 },
|
|
104763
106163
|
titleData && (titleData.generating ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1 } },
|
|
104764
106164
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16, sx: { color: 'primary.main' } }),
|
|
104765
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", color: "text.secondary" }, "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u2026"))) : titleData.failed ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104766
|
-
|
|
104767
|
-
|
|
106165
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", color: "text.secondary" }, "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u2026"))) : titleData.failed ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: `Заголовок ${i + 1}`, variant: "outlined", fullWidth: true, size: "small", value: titleData.title, placeholder: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0432\u0440\u0443\u0447\u043D\u0443\u044E", helperText: titleData.errorMessage ? `Не сгенерирован: ${titleData.errorMessage}` : 'Можно ввести или исправить заголовок вручную', error: !!titleData.errorMessage, onChange: (e) => {
|
|
106166
|
+
const newValue = e.target.value;
|
|
106167
|
+
setGeneratedTitlesData(prev => {
|
|
106168
|
+
const updated = prev.map(t => t.index === titleData.index
|
|
106169
|
+
? { ...t, title: newValue, failed: false, errorMessage: undefined }
|
|
106170
|
+
: t);
|
|
106171
|
+
setTitles(updated.map(t => t.title).filter(Boolean).join('\n'));
|
|
106172
|
+
return updated;
|
|
106173
|
+
});
|
|
106174
|
+
}, sx: {
|
|
106175
|
+
'& .MuiInputBase-root': {
|
|
106176
|
+
backgroundColor: (theme) => theme.palette.mode === 'dark'
|
|
106177
|
+
? 'rgba(244,67,54,0.08)'
|
|
106178
|
+
: 'rgba(244,67,54,0.04)'
|
|
106179
|
+
}
|
|
106180
|
+
} })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: `Заголовок ${i + 1}`, variant: "outlined", fullWidth: true, size: "small", value: titleData.title, onChange: (e) => {
|
|
104768
106181
|
const newValue = e.target.value;
|
|
104769
106182
|
setGeneratedTitlesData(prev => {
|
|
104770
106183
|
const updated = prev.map(t => t.index === titleData.index ? { ...t, title: newValue } : t);
|
|
@@ -104780,9 +106193,22 @@ ${imageData.originalPrompt}
|
|
|
104780
106193
|
} }))),
|
|
104781
106194
|
textData && (textData.generating ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1 } },
|
|
104782
106195
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 16, sx: { color: 'primary.main' } }),
|
|
104783
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", color: "text.secondary" }, "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0442\u0435\u043A\u0441\u0442\u0430\u2026"))) : textData.failed ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104784
|
-
|
|
104785
|
-
|
|
106196
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", color: "text.secondary" }, "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0442\u0435\u043A\u0441\u0442\u0430\u2026"))) : textData.failed ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: `Текст ${i + 1}`, variant: "outlined", fullWidth: true, multiline: true, minRows: 3, value: textData.text, placeholder: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442 \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E", helperText: textData.errorMessage ? `Не сгенерирован: ${textData.errorMessage}` : 'Можно ввести или исправить текст вручную', error: !!textData.errorMessage, onChange: (e) => {
|
|
106197
|
+
const newValue = e.target.value;
|
|
106198
|
+
setGeneratedTextsData(prev => {
|
|
106199
|
+
const updated = prev.map(t => t.index === textData.index
|
|
106200
|
+
? { ...t, text: newValue, failed: false, errorMessage: undefined }
|
|
106201
|
+
: t);
|
|
106202
|
+
setTexts(updated.map(t => t.text));
|
|
106203
|
+
return updated;
|
|
106204
|
+
});
|
|
106205
|
+
}, sx: {
|
|
106206
|
+
'& .MuiInputBase-root': {
|
|
106207
|
+
backgroundColor: (theme) => theme.palette.mode === 'dark'
|
|
106208
|
+
? 'rgba(244,67,54,0.08)'
|
|
106209
|
+
: 'rgba(244,67,54,0.04)'
|
|
106210
|
+
}
|
|
106211
|
+
} })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], { label: `Текст ${i + 1}`, variant: "outlined", fullWidth: true, multiline: true, minRows: 3, value: textData.text, onChange: (e) => {
|
|
104786
106212
|
const newValue = e.target.value;
|
|
104787
106213
|
setGeneratedTextsData(prev => {
|
|
104788
106214
|
const updated = prev.map(t => t.index === textData.index ? { ...t, text: newValue } : t);
|
|
@@ -104799,7 +106225,7 @@ ${imageData.originalPrompt}
|
|
|
104799
106225
|
}))))),
|
|
104800
106226
|
(landingGenerationLogs.length > 0 || generatingLanding) && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { mb: 2 } },
|
|
104801
106227
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "h6", gutterBottom: true, sx: { fontWeight: 'bold' } }, "\u041F\u0440\u043E\u0446\u0435\u0441\u0441 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043B\u0435\u043D\u0434\u0438\u043D\u0433\u0430"),
|
|
104802
|
-
landingGenerationLogs.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106228
|
+
landingGenerationLogs.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__["default"], { sx: {
|
|
104803
106229
|
p: 2,
|
|
104804
106230
|
backgroundColor: (theme) => theme.palette.mode === 'dark'
|
|
104805
106231
|
? 'rgba(25, 118, 210, 0.1)'
|
|
@@ -104825,8 +106251,8 @@ ${imageData.originalPrompt}
|
|
|
104825
106251
|
generatingLanding && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 2 } },
|
|
104826
106252
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { size: 20 }),
|
|
104827
106253
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { variant: "body2", sx: { color: 'text.secondary' } }, formatElapsedTime(elapsedTime.landing)))),
|
|
104828
|
-
!generatingLanding && generatedLandingHTML && generatedLandingImageBlob && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "outlined", color: "primary", onClick: handlePreviewLanding, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
104829
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106254
|
+
!generatingLanding && generatedLandingHTML && generatedLandingImageBlob && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], { variant: "outlined", color: "primary", onClick: handlePreviewLanding, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_50__["default"], null), fullWidth: true }, "\u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u043B\u0435\u043D\u0434\u0438\u043D\u0433\u0430"))))))))),
|
|
106255
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PromptManagerDialog__WEBPACK_IMPORTED_MODULE_51__["default"], { open: promptManagerOpen, onClose: () => setPromptManagerOpen(false) }))));
|
|
104830
106256
|
}
|
|
104831
106257
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (App);
|
|
104832
106258
|
|
|
@@ -104847,8 +106273,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
104847
106273
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
104848
106274
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
104849
106275
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Box/Box.js");
|
|
104850
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104851
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
106276
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Typography/Typography.js");
|
|
106277
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Paper/Paper.js");
|
|
104852
106278
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/IconButton/IconButton.js");
|
|
104853
106279
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/TextField/TextField.js");
|
|
104854
106280
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Stack/Stack.js");
|
|
@@ -104863,25 +106289,27 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
104863
106289
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/DialogContent/DialogContent.js");
|
|
104864
106290
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Tabs/Tabs.js");
|
|
104865
106291
|
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Tab/Tab.js");
|
|
104866
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104867
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104868
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104869
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104870
|
-
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/
|
|
104871
|
-
/* harmony import */ var
|
|
104872
|
-
/* harmony import */ var
|
|
104873
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104874
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104875
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104876
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104877
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104878
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104879
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104880
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104881
|
-
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/
|
|
104882
|
-
/* harmony import */ var
|
|
104883
|
-
/* harmony import */ var
|
|
104884
|
-
/* harmony import */ var
|
|
106292
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Tooltip/Tooltip.js");
|
|
106293
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Checkbox/Checkbox.js");
|
|
106294
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Accordion/Accordion.js");
|
|
106295
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/AccordionSummary/AccordionSummary.js");
|
|
106296
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/AccordionDetails/AccordionDetails.js");
|
|
106297
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/DialogActions/DialogActions.js");
|
|
106298
|
+
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/esm/Snackbar/Snackbar.js");
|
|
106299
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Cancel.js");
|
|
106300
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Close.js");
|
|
106301
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/CompareArrows.js");
|
|
106302
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Edit.js");
|
|
106303
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/ExpandMore.js");
|
|
106304
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/KeyboardArrowDown.js");
|
|
106305
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/KeyboardArrowUp.js");
|
|
106306
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/RestartAlt.js");
|
|
106307
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Save.js");
|
|
106308
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Search.js");
|
|
106309
|
+
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Settings.js");
|
|
106310
|
+
/* harmony import */ var _prompts__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./prompts */ "./src/prompts.ts");
|
|
106311
|
+
/* harmony import */ var _landingPrompts__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./landingPrompts */ "./src/landingPrompts.ts");
|
|
106312
|
+
/* harmony import */ var _promptOverrides__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./promptOverrides */ "./src/promptOverrides.ts");
|
|
104885
106313
|
|
|
104886
106314
|
|
|
104887
106315
|
|
|
@@ -104892,6 +106320,36 @@ function TabPanel(props) {
|
|
|
104892
106320
|
const { children, value, index, ...other } = props;
|
|
104893
106321
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { role: "tabpanel", hidden: value !== index, id: `prompt-tabpanel-${index}`, "aria-labelledby": `prompt-tab-${index}`, ...other }, value === index && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { p: 3 } }, children)));
|
|
104894
106322
|
}
|
|
106323
|
+
/** Подсказка для кнопки типа товара: списки подходов для текстов и картинок (номера как в таблицах). */
|
|
106324
|
+
function productTypePresetTooltip(label) {
|
|
106325
|
+
const textNums = _promptOverrides__WEBPACK_IMPORTED_MODULE_38__.PRODUCT_TYPE_TEXT_PAIR_PRESETS[label];
|
|
106326
|
+
if (!textNums)
|
|
106327
|
+
return label;
|
|
106328
|
+
const sortedText = [...textNums].sort((a, b) => a - b);
|
|
106329
|
+
const imgPreset = _promptOverrides__WEBPACK_IMPORTED_MODULE_38__.PRODUCT_TYPE_IMAGE_PRESETS[label];
|
|
106330
|
+
const sortedImg = imgPreset ? [...imgPreset].sort((a, b) => a - b) : null;
|
|
106331
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { py: 0.25, maxWidth: 380, color: 'common.white', fontSize: '0.75rem' } },
|
|
106332
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", component: "div", sx: { fontWeight: 700, mb: 0.75, display: 'block', color: 'inherit' } },
|
|
106333
|
+
"\u0422\u0435\u043A\u0441\u0442\u044B \u2014 ",
|
|
106334
|
+
sortedText.length,
|
|
106335
|
+
" \u043F\u0430\u0440:"),
|
|
106336
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { component: "ul", sx: { m: 0, pl: 2.25, mb: 1.25, listStyleType: 'disc', color: 'inherit' } }, sortedText.map((n) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { key: `t-${n}`, variant: "caption", component: "li", sx: { display: 'list-item', lineHeight: 1.5, mb: 0.25, color: 'inherit' } },
|
|
106337
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null,
|
|
106338
|
+
n,
|
|
106339
|
+
"."),
|
|
106340
|
+
" ",
|
|
106341
|
+
_prompts__WEBPACK_IMPORTED_MODULE_36__.PAIR_APPROACH_POOL[n - 1]?.name ?? '—')))),
|
|
106342
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", component: "div", sx: { fontWeight: 700, mb: 0.75, display: 'block', color: 'inherit' } },
|
|
106343
|
+
"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",
|
|
106344
|
+
sortedImg ? ` — ${sortedImg.length} подходов` : '',
|
|
106345
|
+
":"),
|
|
106346
|
+
sortedImg ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { component: "ul", sx: { m: 0, pl: 2.25, listStyleType: 'disc', color: 'inherit' } }, sortedImg.map((n) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { key: `i-${n}`, variant: "caption", component: "li", sx: { display: 'list-item', lineHeight: 1.5, mb: 0.25, color: 'inherit' } },
|
|
106347
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null,
|
|
106348
|
+
n,
|
|
106349
|
+
"."),
|
|
106350
|
+
" ",
|
|
106351
|
+
_prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES[n - 1]?.name ?? '—'))))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", sx: { display: 'block', lineHeight: 1.5, opacity: 0.85, color: 'inherit' } }, "\u0412\u0441\u0435 10 \u043F\u043E\u0434\u0445\u043E\u0434\u043E\u0432 \u043F\u043E 1 \u043A\u0440\u0435\u043E (\u043D\u0435\u0442 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u0435\u0441\u0435\u0442\u0430)"))));
|
|
106352
|
+
}
|
|
104895
106353
|
function SearchableTextField({ value, onChange, disabled, rows = 15, placeholder, helperText, fullWidth = true, multiline = true }) {
|
|
104896
106354
|
const [searchOpen, setSearchOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
104897
106355
|
const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
@@ -104961,7 +106419,7 @@ function SearchableTextField({ value, onChange, disabled, rows = 15, placeholder
|
|
|
104961
106419
|
}
|
|
104962
106420
|
};
|
|
104963
106421
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { position: 'relative' } },
|
|
104964
|
-
searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106422
|
+
searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__["default"], { elevation: 3, sx: {
|
|
104965
106423
|
position: 'absolute',
|
|
104966
106424
|
top: 4,
|
|
104967
106425
|
right: 4,
|
|
@@ -104975,7 +106433,7 @@ function SearchableTextField({ value, onChange, disabled, rows = 15, placeholder
|
|
|
104975
106433
|
border: '1px solid',
|
|
104976
106434
|
borderColor: 'divider',
|
|
104977
106435
|
} },
|
|
104978
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106436
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_34__["default"], { sx: { fontSize: 18, color: 'text.secondary' } }),
|
|
104979
106437
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { ref: searchInputRef, value: searchQuery, onChange: (e) => { setSearchQuery(e.target.value); setCurrentMatch(0); }, onKeyDown: handleKeyDown, placeholder: "\u041F\u043E\u0438\u0441\u043A...", style: {
|
|
104980
106438
|
border: 'none',
|
|
104981
106439
|
outline: 'none',
|
|
@@ -104986,13 +106444,13 @@ function SearchableTextField({ value, onChange, disabled, rows = 15, placeholder
|
|
|
104986
106444
|
color: 'inherit',
|
|
104987
106445
|
fontFamily: 'inherit',
|
|
104988
106446
|
}, autoFocus: true }),
|
|
104989
|
-
searchQuery && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106447
|
+
searchQuery && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", sx: { color: 'text.secondary', whiteSpace: 'nowrap', minWidth: 50, textAlign: 'center' } }, matches.length > 0 ? `${currentMatch + 1} / ${matches.length}` : 'нет')),
|
|
104990
106448
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => navigateToMatch(currentMatch - 1), disabled: matches.length === 0, sx: { p: 0.3 } },
|
|
104991
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106449
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_31__["default"], { sx: { fontSize: 18 } })),
|
|
104992
106450
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => navigateToMatch(currentMatch + 1), disabled: matches.length === 0, sx: { p: 0.3 } },
|
|
104993
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106451
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_30__["default"], { sx: { fontSize: 18 } })),
|
|
104994
106452
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => { setSearchOpen(false); setSearchQuery(''); }, sx: { p: 0.3 } },
|
|
104995
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106453
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_26__["default"], { sx: { fontSize: 18 } })))),
|
|
104996
106454
|
!searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => { setSearchOpen(true); setTimeout(() => searchInputRef.current?.focus(), 50); }, sx: {
|
|
104997
106455
|
position: 'absolute',
|
|
104998
106456
|
top: 8,
|
|
@@ -105003,7 +106461,7 @@ function SearchableTextField({ value, onChange, disabled, rows = 15, placeholder
|
|
|
105003
106461
|
bgcolor: 'background.paper',
|
|
105004
106462
|
boxShadow: 1,
|
|
105005
106463
|
} },
|
|
105006
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106464
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_34__["default"], { sx: { fontSize: 16 } }))),
|
|
105007
106465
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { inputRef: textareaRef, fullWidth: fullWidth, multiline: multiline, rows: rows, value: value, onChange: onChange, disabled: disabled, placeholder: placeholder, helperText: helperText, onKeyDown: handleTextareaKeyDown, sx: {
|
|
105008
106466
|
'& .MuiInputBase-input': {
|
|
105009
106467
|
fontFamily: '"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace',
|
|
@@ -105151,7 +106609,7 @@ function DiffViewer({ oldText, newText }) {
|
|
|
105151
106609
|
}
|
|
105152
106610
|
};
|
|
105153
106611
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { position: 'relative' } },
|
|
105154
|
-
searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106612
|
+
searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__["default"], { elevation: 3, sx: {
|
|
105155
106613
|
position: 'absolute',
|
|
105156
106614
|
top: 4,
|
|
105157
106615
|
right: 4,
|
|
@@ -105165,7 +106623,7 @@ function DiffViewer({ oldText, newText }) {
|
|
|
105165
106623
|
border: '1px solid',
|
|
105166
106624
|
borderColor: 'divider',
|
|
105167
106625
|
} },
|
|
105168
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106626
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_34__["default"], { sx: { fontSize: 18, color: 'text.secondary' } }),
|
|
105169
106627
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { ref: searchInputRef, value: searchQuery, onChange: (e) => { setSearchQuery(e.target.value); setCurrentMatch(0); }, onKeyDown: handleSearchKeyDown, placeholder: "\u041F\u043E\u0438\u0441\u043A...", style: {
|
|
105170
106628
|
border: 'none',
|
|
105171
106629
|
outline: 'none',
|
|
@@ -105176,13 +106634,13 @@ function DiffViewer({ oldText, newText }) {
|
|
|
105176
106634
|
color: 'inherit',
|
|
105177
106635
|
fontFamily: 'inherit',
|
|
105178
106636
|
}, autoFocus: true }),
|
|
105179
|
-
searchQuery && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106637
|
+
searchQuery && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", sx: { color: 'text.secondary', whiteSpace: 'nowrap', minWidth: 50, textAlign: 'center' } }, totalMatches > 0 ? `${currentMatch + 1} / ${totalMatches}` : 'нет')),
|
|
105180
106638
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => navigateMatch(-1), disabled: totalMatches === 0, sx: { p: 0.3 } },
|
|
105181
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106639
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_31__["default"], { sx: { fontSize: 18 } })),
|
|
105182
106640
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => navigateMatch(1), disabled: totalMatches === 0, sx: { p: 0.3 } },
|
|
105183
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106641
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_30__["default"], { sx: { fontSize: 18 } })),
|
|
105184
106642
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => { setSearchOpen(false); setSearchQuery(''); }, sx: { p: 0.3 } },
|
|
105185
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106643
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_26__["default"], { sx: { fontSize: 18 } })))),
|
|
105186
106644
|
!searchOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { size: "small", onClick: () => { setSearchOpen(true); setTimeout(() => searchInputRef.current?.focus(), 50); }, sx: {
|
|
105187
106645
|
position: 'absolute',
|
|
105188
106646
|
top: 28,
|
|
@@ -105193,11 +106651,11 @@ function DiffViewer({ oldText, newText }) {
|
|
|
105193
106651
|
bgcolor: 'background.paper',
|
|
105194
106652
|
boxShadow: 1,
|
|
105195
106653
|
} },
|
|
105196
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106654
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_34__["default"], { sx: { fontSize: 16 } }))),
|
|
105197
106655
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 1, sx: { mb: 1 }, alignItems: "center" },
|
|
105198
106656
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: `+${stats.added}`, size: "small", sx: { bgcolor: '#e6ffec', color: '#1a7f37', fontWeight: 'bold', fontFamily: 'monospace' } }),
|
|
105199
106657
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: `−${stats.removed}`, size: "small", sx: { bgcolor: '#ffebe9', color: '#cf222e', fontWeight: 'bold', fontFamily: 'monospace' } })),
|
|
105200
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106658
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__["default"], { ref: tableRef, variant: "outlined", sx: {
|
|
105201
106659
|
overflow: 'auto',
|
|
105202
106660
|
maxHeight: 500,
|
|
105203
106661
|
fontFamily: '"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace',
|
|
@@ -105262,20 +106720,33 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105262
106720
|
// selectedApproaches: array of indices from PAIR_APPROACH_POOL, ordered
|
|
105263
106721
|
const [selectedApproaches, setSelectedApproaches] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([0, 1, 2]);
|
|
105264
106722
|
// imageApproachCounts: по одному на каждый подход (CREO_APPROACHES), каждый 0–4
|
|
105265
|
-
const [imageApproachCounts, setImageApproachCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(() => Array(
|
|
106723
|
+
const [imageApproachCounts, setImageApproachCounts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(() => Array(_prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES.length).fill(1));
|
|
106724
|
+
const [creoToastOpen, setCreoToastOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
106725
|
+
const [creoToastMessage, setCreoToastMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
106726
|
+
const creoToastDebounceRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null);
|
|
105266
106727
|
// Загрузить оверрайды при открытии
|
|
105267
106728
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
105268
106729
|
if (open) {
|
|
105269
|
-
const loaded = (0,
|
|
106730
|
+
const loaded = (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.loadPromptOverrides)();
|
|
105270
106731
|
setOverrides(loaded);
|
|
105271
|
-
setSelectedApproaches((0,
|
|
105272
|
-
setImageApproachCounts((0,
|
|
106732
|
+
setSelectedApproaches((0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.getSelectedPairApproaches)());
|
|
106733
|
+
setImageApproachCounts((0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.getImageApproachCounts)());
|
|
105273
106734
|
setHasChanges(false);
|
|
105274
106735
|
}
|
|
105275
106736
|
}, [open]);
|
|
105276
106737
|
const handleTabChange = (_event, newValue) => {
|
|
105277
106738
|
setTabValue(newValue);
|
|
105278
106739
|
};
|
|
106740
|
+
const showCreoTotalToast = (pairsCount, imageCount) => {
|
|
106741
|
+
const imageAspectRatio = localStorage.getItem('imageAspectRatio') || '1:1';
|
|
106742
|
+
const bothMultiplier = imageAspectRatio === 'both' ? 2 : 1;
|
|
106743
|
+
const total = pairsCount * imageCount * bothMultiplier;
|
|
106744
|
+
const formula = bothMultiplier === 2
|
|
106745
|
+
? `${pairsCount} × ${imageCount} × 2 = ${total}`
|
|
106746
|
+
: `${pairsCount} × ${imageCount} = ${total}`;
|
|
106747
|
+
setCreoToastMessage(`Всего креативов: ${formula}`);
|
|
106748
|
+
setCreoToastOpen(true);
|
|
106749
|
+
};
|
|
105279
106750
|
const handlePairApproachToggle = (idx) => {
|
|
105280
106751
|
setSelectedApproaches(prev => {
|
|
105281
106752
|
let next;
|
|
@@ -105286,11 +106757,13 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105286
106757
|
next = prev.filter(i => i !== idx);
|
|
105287
106758
|
}
|
|
105288
106759
|
else {
|
|
105289
|
-
// Select —
|
|
106760
|
+
// Select — сортировка по индексу подхода (порядок пар задаёт промпт по номерам 1…N)
|
|
105290
106761
|
next = [...prev, idx].sort((a, b) => a - b);
|
|
105291
106762
|
}
|
|
105292
106763
|
setOverrides(o => ({ ...o, selectedPairApproaches: next }));
|
|
105293
106764
|
setHasChanges(true);
|
|
106765
|
+
const imageCount = imageApproachCounts.reduce((a, b) => a + b, 0);
|
|
106766
|
+
setTimeout(() => showCreoTotalToast(next.length, imageCount), 0);
|
|
105294
106767
|
return next;
|
|
105295
106768
|
});
|
|
105296
106769
|
};
|
|
@@ -105302,9 +106775,27 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105302
106775
|
next[idx] = clamped;
|
|
105303
106776
|
setOverrides(o => ({ ...o, imageApproachCounts: next }));
|
|
105304
106777
|
setHasChanges(true);
|
|
106778
|
+
// Debounced toast — показываем через 500ms после последнего изменения (стрелки/ввод)
|
|
106779
|
+
if (creoToastDebounceRef.current)
|
|
106780
|
+
clearTimeout(creoToastDebounceRef.current);
|
|
106781
|
+
creoToastDebounceRef.current = setTimeout(() => {
|
|
106782
|
+
creoToastDebounceRef.current = null;
|
|
106783
|
+
const pairsCount = selectedApproaches.length;
|
|
106784
|
+
const imageCount = next.reduce((a, b) => a + b, 0);
|
|
106785
|
+
showCreoTotalToast(pairsCount, imageCount);
|
|
106786
|
+
}, 500);
|
|
105305
106787
|
return next;
|
|
105306
106788
|
});
|
|
105307
106789
|
};
|
|
106790
|
+
const handleImageCountBlur = () => {
|
|
106791
|
+
if (creoToastDebounceRef.current) {
|
|
106792
|
+
clearTimeout(creoToastDebounceRef.current);
|
|
106793
|
+
creoToastDebounceRef.current = null;
|
|
106794
|
+
}
|
|
106795
|
+
const pairsCount = selectedApproaches.length;
|
|
106796
|
+
const imageCount = imageApproachCounts.reduce((a, b) => a + b, 0);
|
|
106797
|
+
showCreoTotalToast(pairsCount, imageCount);
|
|
106798
|
+
};
|
|
105308
106799
|
const handleToggleOverride = (promptName, enabled) => {
|
|
105309
106800
|
setOverrides(prev => {
|
|
105310
106801
|
const prevOverride = prev[promptName];
|
|
@@ -105355,14 +106846,15 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105355
106846
|
else {
|
|
105356
106847
|
console.log(debugMsg, overrides);
|
|
105357
106848
|
}
|
|
105358
|
-
(0,
|
|
106849
|
+
(0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.savePromptOverrides)(overrides);
|
|
106850
|
+
window.dispatchEvent(new Event(_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.PROMPT_OVERRIDES_SAVED_EVENT));
|
|
105359
106851
|
setHasChanges(false);
|
|
105360
106852
|
onClose();
|
|
105361
106853
|
};
|
|
105362
106854
|
const handleCancel = () => {
|
|
105363
106855
|
if (hasChanges) {
|
|
105364
106856
|
if (window.confirm('Есть несохраненные изменения. Закрыть без сохранения?')) {
|
|
105365
|
-
setOverrides((0,
|
|
106857
|
+
setOverrides((0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.loadPromptOverrides)());
|
|
105366
106858
|
setHasChanges(false);
|
|
105367
106859
|
onClose();
|
|
105368
106860
|
}
|
|
@@ -105376,25 +106868,25 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105376
106868
|
const getOriginalPrompt = (promptName) => {
|
|
105377
106869
|
switch (promptName) {
|
|
105378
106870
|
case 'getPairsSystemPrompt':
|
|
105379
|
-
return (0,
|
|
106871
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getPairsSystemPrompt)('${geo}', true, selectedApproaches.length, selectedApproaches);
|
|
105380
106872
|
case 'getPairsUserPrompt':
|
|
105381
|
-
return (0,
|
|
106873
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getPairsUserPrompt)('${product}', '${geo}', '${additionalInfo}', true, selectedApproaches.length, selectedApproaches);
|
|
105382
106874
|
case 'getTitlesSystemPrompt':
|
|
105383
|
-
return (0,
|
|
106875
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getTitlesSystemPrompt)('${geo}', true, selectedApproaches.length);
|
|
105384
106876
|
case 'getTextsSystemPrompt':
|
|
105385
|
-
return (0,
|
|
106877
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getTextsSystemPrompt)('${geo}', true, selectedApproaches.length);
|
|
105386
106878
|
case 'getUserPrompt':
|
|
105387
|
-
return (0,
|
|
106879
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getUserPrompt)('${product}', '${geo}', '${additionalInfo}', 'titles', true, selectedApproaches.length);
|
|
105388
106880
|
case 'getImageCheckPrompt':
|
|
105389
|
-
return (0,
|
|
106881
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getImageCheckPrompt)('${product}', '${geo}', true);
|
|
105390
106882
|
case 'getValidationPrompt':
|
|
105391
|
-
return (0,
|
|
106883
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getValidationPrompt)('${product}', '${geo}', ['keyword1', 'keyword2'], '${approachName}', true);
|
|
105392
106884
|
case 'getImageGenerationBasePrompt':
|
|
105393
|
-
return (0,
|
|
106885
|
+
return (0,_prompts__WEBPACK_IMPORTED_MODULE_36__.getImageGenerationBasePrompt)('${generateGeo}', '${generatePrice}', '${generateCurrency}', true);
|
|
105394
106886
|
case 'getLandingPageSystemPrompt':
|
|
105395
|
-
return (0,
|
|
106887
|
+
return (0,_landingPrompts__WEBPACK_IMPORTED_MODULE_37__.getLandingPageSystemPrompt)(true);
|
|
105396
106888
|
case 'getLandingPageUserPrompt':
|
|
105397
|
-
return (0,
|
|
106889
|
+
return (0,_landingPrompts__WEBPACK_IMPORTED_MODULE_37__.getLandingPageUserPrompt)('${product}', '${geo}', true);
|
|
105398
106890
|
default:
|
|
105399
106891
|
return '';
|
|
105400
106892
|
}
|
|
@@ -105416,18 +106908,18 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105416
106908
|
enabled && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
105417
106909
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], { size: "small", value: viewMode, exclusive: true, onChange: (_, val) => val && setViewModes(prev => ({ ...prev, [viewModeKey]: val })) },
|
|
105418
106910
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { value: "edit" },
|
|
105419
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106911
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_28__["default"], { sx: { fontSize: 16, mr: 0.5 } }),
|
|
105420
106912
|
" \u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440"),
|
|
105421
106913
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { value: "diff" },
|
|
105422
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106914
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_27__["default"], { sx: { fontSize: 16, mr: 0.5 } }),
|
|
105423
106915
|
" Diff")),
|
|
105424
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { size: "small", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105425
|
-
description && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106916
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { size: "small", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_32__["default"], null), onClick: () => handleResetPrompt(promptName) }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C")))),
|
|
106917
|
+
description && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "body2", color: "text.secondary", sx: { mb: 1 } }, description)),
|
|
105426
106918
|
enabled && viewMode === 'diff' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DiffViewer, { oldText: originalPrompt, newText: customPrompt })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SearchableTextField, { rows: 15, value: displayPrompt, onChange: (e) => handlePromptChange(promptName, e.target.value), disabled: !enabled, placeholder: enabled ? 'Введите кастомный промпт' : 'Включите переключатель для редактирования', helperText: !enabled ? 'Это оригинальный промпт. Включите переключатель выше для редактирования.' : undefined }))));
|
|
105427
106919
|
};
|
|
105428
106920
|
// Управление подходами для изображений
|
|
105429
106921
|
const handleApproachToggle = (approachName, enabled) => {
|
|
105430
|
-
const originalApproach =
|
|
106922
|
+
const originalApproach = _prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES.find(a => a.name === approachName);
|
|
105431
106923
|
if (!originalApproach)
|
|
105432
106924
|
return;
|
|
105433
106925
|
setOverrides(prev => {
|
|
@@ -105477,8 +106969,8 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105477
106969
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__["default"], { open: open, onClose: handleCancel, maxWidth: "lg", fullWidth: true },
|
|
105478
106970
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__["default"], null,
|
|
105479
106971
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 2, alignItems: "center" },
|
|
105480
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105481
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106972
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_35__["default"], null),
|
|
106973
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "h6" }, "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u0430\u043C\u0438"),
|
|
105482
106974
|
hasChanges && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: "\u0415\u0441\u0442\u044C \u043D\u0435\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F", color: "warning", size: "small" })))),
|
|
105483
106975
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__["default"], null,
|
|
105484
106976
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__["default"], { value: tabValue, onChange: handleTabChange, sx: { borderBottom: 1, borderColor: 'divider' } },
|
|
@@ -105489,9 +106981,41 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105489
106981
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TabPanel, { value: tabValue, index: 0 },
|
|
105490
106982
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { mb: 3, p: 2, border: '1px solid', borderColor: 'divider', borderRadius: 1 } },
|
|
105491
106983
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 2, alignItems: "center", sx: { mb: 1.5 } },
|
|
105492
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106984
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle1", sx: { fontWeight: 600 } }, "\u041F\u043E\u0434\u0445\u043E\u0434\u044B \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u043E\u0432 (\u043F\u0430\u0440\u044B \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A + \u0442\u0435\u043A\u0441\u0442)"),
|
|
105493
106985
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: `Выбрано: ${selectedApproaches.length}`, color: "primary", size: "small" }),
|
|
105494
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
106986
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", color: "text.secondary" }, "(\u043C\u0438\u043D\u0438\u043C\u0443\u043C 2, \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C 10)")),
|
|
106987
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", color: "text.secondary", sx: { display: 'block', mb: 0.75 } }, "\u0422\u0438\u043F \u0442\u043E\u0432\u0430\u0440\u0430 \u2014 \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u043D\u0430\u0431\u043E\u0440 \u043F\u0430\u0440 \u0442\u0435\u043A\u0441\u0442\u043E\u0432 \u0438 \u043F\u043E\u0434\u0445\u043E\u0434\u043E\u0432 \u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C (1\u201310 = \u2116 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043A\u0430\u0436\u0434\u043E\u0439 \u0442\u0430\u0431\u043B\u0438\u0446\u0435):"),
|
|
106988
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", flexWrap: "wrap", gap: 0.75, sx: { mb: 1.5 } }, Object.entries(_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.PRODUCT_TYPE_TEXT_PAIR_PRESETS).map(([label, nums]) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__["default"], { key: label, title: productTypePresetTooltip(label), placement: "top", arrow: true, enterDelay: 200, componentsProps: {
|
|
106989
|
+
tooltip: {
|
|
106990
|
+
sx: {
|
|
106991
|
+
maxWidth: 420,
|
|
106992
|
+
bgcolor: 'grey.900',
|
|
106993
|
+
color: 'common.white',
|
|
106994
|
+
border: '1px solid',
|
|
106995
|
+
borderColor: 'grey.700',
|
|
106996
|
+
'& .MuiTooltip-arrow': { color: 'grey.900' },
|
|
106997
|
+
},
|
|
106998
|
+
},
|
|
106999
|
+
} },
|
|
107000
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { size: "small", variant: "outlined", color: "inherit", sx: { textTransform: 'none', fontSize: '0.8rem' }, onClick: () => {
|
|
107001
|
+
const next = (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.productPresetNumbersToIndices)(nums);
|
|
107002
|
+
if (next.length < 2)
|
|
107003
|
+
return;
|
|
107004
|
+
const imgNums = _promptOverrides__WEBPACK_IMPORTED_MODULE_38__.PRODUCT_TYPE_IMAGE_PRESETS[label];
|
|
107005
|
+
const nextImageCounts = imgNums
|
|
107006
|
+
? (0,_promptOverrides__WEBPACK_IMPORTED_MODULE_38__.productPresetNumbersToImageCounts)(imgNums)
|
|
107007
|
+
: Array(_prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES.length).fill(1);
|
|
107008
|
+
setSelectedApproaches(next);
|
|
107009
|
+
setImageApproachCounts(nextImageCounts);
|
|
107010
|
+
setOverrides(o => ({
|
|
107011
|
+
...o,
|
|
107012
|
+
selectedPairApproaches: next,
|
|
107013
|
+
imageApproachCounts: nextImageCounts,
|
|
107014
|
+
}));
|
|
107015
|
+
setHasChanges(true);
|
|
107016
|
+
const imageCount = nextImageCounts.reduce((a, b) => a + b, 0);
|
|
107017
|
+
setTimeout(() => showCreoTotalToast(next.length, imageCount), 0);
|
|
107018
|
+
} }, label))))),
|
|
105495
107019
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { overflowX: 'auto' } },
|
|
105496
107020
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("table", { style: { width: '100%', borderCollapse: 'collapse', fontSize: 12 } },
|
|
105497
107021
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("thead", null,
|
|
@@ -105500,7 +107024,7 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105500
107024
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'left', padding: '4px 8px', borderBottom: '1px solid #ccc', whiteSpace: 'nowrap', width: 140 } }, "\u0423\u0433\u043E\u043B"),
|
|
105501
107025
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'left', padding: '4px 8px', borderBottom: '1px solid #ccc' } }, "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A"),
|
|
105502
107026
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'left', padding: '4px 8px', borderBottom: '1px solid #ccc' } }, "\u0422\u0435\u043A\u0441\u0442"))),
|
|
105503
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tbody", null,
|
|
107027
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tbody", null, _prompts__WEBPACK_IMPORTED_MODULE_36__.PAIR_APPROACH_POOL.map((p, i) => {
|
|
105504
107028
|
const checked = selectedApproaches.includes(i);
|
|
105505
107029
|
const isLast = checked && selectedApproaches.length <= 2;
|
|
105506
107030
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tr", { key: i, onClick: () => handlePairApproachToggle(i), style: {
|
|
@@ -105512,16 +107036,16 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105512
107036
|
transition: 'opacity 0.15s, background-color 0.15s',
|
|
105513
107037
|
} },
|
|
105514
107038
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { textAlign: 'center', padding: '2px 8px' } },
|
|
105515
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107039
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__["default"], { checked: checked, disabled: isLast, size: "small", onClick: e => e.stopPropagation(), onChange: () => handlePairApproachToggle(i), sx: { p: 0.5 } })),
|
|
105516
107040
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { padding: '4px 8px', fontWeight: 500, whiteSpace: 'nowrap' } }, p.name),
|
|
105517
107041
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { padding: '4px 8px', color: '#777' } }, p.titleApproach),
|
|
105518
107042
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { padding: '4px 8px', color: '#777' } }, p.textApproach.split('\n')[0])));
|
|
105519
107043
|
}))))),
|
|
105520
107044
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { mb: 3, p: 2, border: '1px solid', borderColor: 'divider', borderRadius: 1 } },
|
|
105521
107045
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 2, alignItems: "center", sx: { mb: 1.5 } },
|
|
105522
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107046
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle1", sx: { fontWeight: 600 } }, "\u041F\u043E\u0434\u0445\u043E\u0434\u044B \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439"),
|
|
105523
107047
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: `Всего: ${imageApproachCounts.reduce((a, b) => a + b, 0)}`, color: "primary", size: "small" }),
|
|
105524
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107048
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "caption", color: "text.secondary" }, "(0\u20134 \u043D\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u043F\u043E\u0434\u0445\u043E\u0434)")),
|
|
105525
107049
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { overflowX: 'auto' } },
|
|
105526
107050
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("table", { style: { width: '100%', borderCollapse: 'collapse', fontSize: 12 } },
|
|
105527
107051
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("thead", null,
|
|
@@ -105529,14 +107053,14 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105529
107053
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'center', padding: '4px 8px', borderBottom: '1px solid #ccc', width: 70 } }, "\u041A\u043E\u043B-\u0432\u043E"),
|
|
105530
107054
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'left', padding: '4px 8px', borderBottom: '1px solid #ccc', whiteSpace: 'nowrap', width: 180 } }, "\u041F\u043E\u0434\u0445\u043E\u0434"),
|
|
105531
107055
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", { style: { textAlign: 'left', padding: '4px 8px', borderBottom: '1px solid #ccc' } }, "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435"))),
|
|
105532
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tbody", null,
|
|
107056
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tbody", null, _prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES.map((approach, i) => {
|
|
105533
107057
|
const count = imageApproachCounts[i] ?? 0;
|
|
105534
107058
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tr", { key: i, style: { opacity: count > 0 ? 1 : 0.6 } },
|
|
105535
107059
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { textAlign: 'center', padding: '2px 8px', verticalAlign: 'middle' } },
|
|
105536
107060
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { type: "number", size: "small", value: count, onChange: (e) => {
|
|
105537
107061
|
const v = parseInt(e.target.value, 10);
|
|
105538
107062
|
handleImageApproachCountChange(i, isNaN(v) ? 0 : v);
|
|
105539
|
-
}, inputProps: { min: 0, max: 4, step: 1 }, sx: { width: 56, '& .MuiInputBase-input': { textAlign: 'center', py: 0.5 } } })),
|
|
107063
|
+
}, onBlur: handleImageCountBlur, inputProps: { min: 0, max: 4, step: 1 }, sx: { width: 56, '& .MuiInputBase-input': { textAlign: 'center', py: 0.5 } } })),
|
|
105540
107064
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { padding: '4px 8px', fontWeight: 500, whiteSpace: 'nowrap' } }, approach.name),
|
|
105541
107065
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", { style: { padding: '4px 8px', color: '#777' } }, approach.prompt.split('\n')[0])));
|
|
105542
107066
|
}))))),
|
|
@@ -105544,46 +107068,46 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105544
107068
|
renderPromptEditor('getPairsUserPrompt', 'Пользовательский промпт (пары)', 'Пользовательский промпт для генерации пар. Переменные: ${product}, ${geo}, ${additionalInfo}, ${count}, ${n}')),
|
|
105545
107069
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TabPanel, { value: tabValue, index: 1 },
|
|
105546
107070
|
renderPromptEditor('getImageGenerationBasePrompt', 'Базовый промпт для изображений', 'Базовый промпт, используемый для всех подходов'),
|
|
105547
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105548
|
-
|
|
107071
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "h6", sx: { mt: 3, mb: 2 } }, "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u043E\u0432 \u0434\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u043A\u0440\u0435\u0430\u0442\u0438\u0432\u043E\u0432"),
|
|
107072
|
+
_prompts__WEBPACK_IMPORTED_MODULE_36__.CREO_APPROACHES.map((approach) => {
|
|
105549
107073
|
const override = overrides.creoApproaches?.[approach.name];
|
|
105550
107074
|
const enabled = override?.enabled || false;
|
|
105551
107075
|
const approachViewKey = `approach_${approach.name}`;
|
|
105552
107076
|
const approachViewMode = viewModes[approachViewKey] || 'edit';
|
|
105553
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105554
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107077
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__["default"], { key: approach.name, sx: { mb: 2 } },
|
|
107078
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__["default"], { expandIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_29__["default"], null) },
|
|
105555
107079
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 2, alignItems: "center", sx: { width: '100%', mr: 2 } },
|
|
105556
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107080
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle1" }, approach.name),
|
|
105557
107081
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], { label: enabled ? 'Кастомный' : 'Оригинал', color: enabled ? 'primary' : 'default', size: "small" }),
|
|
105558
|
-
enabled && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { size: "small", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107082
|
+
enabled && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { size: "small", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_32__["default"], null), onClick: (e) => {
|
|
105559
107083
|
e.stopPropagation();
|
|
105560
107084
|
handleResetApproach(approach.name);
|
|
105561
107085
|
} }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C")))),
|
|
105562
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107086
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__["default"], null,
|
|
105563
107087
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { direction: "row", spacing: 2, alignItems: "center", sx: { mb: 2 } },
|
|
105564
107088
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { control: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], { checked: enabled, onChange: (e) => handleApproachToggle(approach.name, e.target.checked) }), label: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0439 \u043F\u043E\u0434\u0445\u043E\u0434" }),
|
|
105565
107089
|
enabled && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], { size: "small", value: approachViewMode, exclusive: true, onChange: (_, val) => val && setViewModes(prev => ({ ...prev, [approachViewKey]: val })) },
|
|
105566
107090
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { value: "edit" },
|
|
105567
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107091
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_28__["default"], { sx: { fontSize: 16, mr: 0.5 } }),
|
|
105568
107092
|
" \u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440"),
|
|
105569
107093
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], { value: "diff" },
|
|
105570
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107094
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_27__["default"], { sx: { fontSize: 16, mr: 0.5 } }),
|
|
105571
107095
|
" Diff")))),
|
|
105572
107096
|
enabled && approachViewMode === 'diff' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], null,
|
|
105573
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107097
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", sx: { mb: 1 } }, "\u041F\u0440\u043E\u043C\u043F\u0442 \u043F\u043E\u0434\u0445\u043E\u0434\u0430"),
|
|
105574
107098
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DiffViewer, { oldText: approach.prompt, newText: override?.customPrompt || approach.prompt }),
|
|
105575
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107099
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", sx: { mt: 2, mb: 1 } }, "\u0423\u0433\u043E\u043B \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430"),
|
|
105576
107100
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DiffViewer, { oldText: approach.headlineAngle, newText: override?.customHeadlineAngle || approach.headlineAngle }),
|
|
105577
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107101
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", sx: { mt: 2, mb: 1 } }, "\u0424\u043E\u043A\u0443\u0441 \u043D\u0430 \u0431\u0443\u043B\u043B\u0435\u0442\u0430\u0445"),
|
|
105578
107102
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DiffViewer, { oldText: approach.bulletsFocus, newText: override?.customBulletsFocus || approach.bulletsFocus }))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
105579
107103
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { mb: 2 } },
|
|
105580
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107104
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", gutterBottom: true }, "\u041F\u0440\u043E\u043C\u043F\u0442 \u043F\u043E\u0434\u0445\u043E\u0434\u0430"),
|
|
105581
107105
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SearchableTextField, { rows: 4, value: override?.customPrompt || approach.prompt, onChange: (e) => handleApproachFieldChange(approach.name, 'customPrompt', e.target.value), disabled: !enabled })),
|
|
105582
107106
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], { sx: { mb: 2 } },
|
|
105583
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107107
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", gutterBottom: true }, "\u0423\u0433\u043E\u043B \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430"),
|
|
105584
107108
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SearchableTextField, { rows: 2, value: override?.customHeadlineAngle || approach.headlineAngle, onChange: (e) => handleApproachFieldChange(approach.name, 'customHeadlineAngle', e.target.value), disabled: !enabled })),
|
|
105585
107109
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__["default"], null,
|
|
105586
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107110
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__["default"], { variant: "subtitle2", gutterBottom: true }, "\u0424\u043E\u043A\u0443\u0441 \u043D\u0430 \u0431\u0443\u043B\u043B\u0435\u0442\u0430\u0445"),
|
|
105587
107111
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SearchableTextField, { rows: 2, value: override?.customBulletsFocus || approach.bulletsFocus, onChange: (e) => handleApproachFieldChange(approach.name, 'customBulletsFocus', e.target.value), disabled: !enabled })))))));
|
|
105588
107112
|
})),
|
|
105589
107113
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TabPanel, { value: tabValue, index: 2 },
|
|
@@ -105592,9 +107116,10 @@ function PromptManagerDialog({ open, onClose }) {
|
|
|
105592
107116
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TabPanel, { value: tabValue, index: 3 },
|
|
105593
107117
|
renderPromptEditor('getLandingPageSystemPrompt', 'Промпт лендинга (System)', 'Системный промпт для генерации лендинг-страниц'),
|
|
105594
107118
|
renderPromptEditor('getLandingPageUserPrompt', 'Промпт лендинга (User)', 'Пользовательский промпт для генерации лендинг-страниц'))),
|
|
105595
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105596
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: handleCancel, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
105597
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: handleSave, variant: "contained", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
107119
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__["default"], null,
|
|
107120
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: handleCancel, startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_25__["default"], null) }, "\u041E\u0442\u043C\u0435\u043D\u0430"),
|
|
107121
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: handleSave, variant: "contained", startIcon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_33__["default"], null), disabled: !hasChanges }, "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C")),
|
|
107122
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__["default"], { open: creoToastOpen, autoHideDuration: 3000, onClose: () => setCreoToastOpen(false), message: creoToastMessage, anchorOrigin: { vertical: 'bottom', horizontal: 'center' } })));
|
|
105598
107123
|
}
|
|
105599
107124
|
|
|
105600
107125
|
|
|
@@ -105813,6 +107338,9 @@ const MODELS = {
|
|
|
105813
107338
|
"use strict";
|
|
105814
107339
|
__webpack_require__.r(__webpack_exports__);
|
|
105815
107340
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
107341
|
+
/* harmony export */ PRODUCT_TYPE_IMAGE_PRESETS: () => (/* binding */ PRODUCT_TYPE_IMAGE_PRESETS),
|
|
107342
|
+
/* harmony export */ PRODUCT_TYPE_TEXT_PAIR_PRESETS: () => (/* binding */ PRODUCT_TYPE_TEXT_PAIR_PRESETS),
|
|
107343
|
+
/* harmony export */ PROMPT_OVERRIDES_SAVED_EVENT: () => (/* binding */ PROMPT_OVERRIDES_SAVED_EVENT),
|
|
105816
107344
|
/* harmony export */ getCreoApproachOverride: () => (/* binding */ getCreoApproachOverride),
|
|
105817
107345
|
/* harmony export */ getImageApproachCounts: () => (/* binding */ getImageApproachCounts),
|
|
105818
107346
|
/* harmony export */ getPairsCount: () => (/* binding */ getPairsCount),
|
|
@@ -105820,6 +107348,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
105820
107348
|
/* harmony export */ getSelectedPairApproaches: () => (/* binding */ getSelectedPairApproaches),
|
|
105821
107349
|
/* harmony export */ loadOverridesFromElectron: () => (/* binding */ loadOverridesFromElectron),
|
|
105822
107350
|
/* harmony export */ loadPromptOverrides: () => (/* binding */ loadPromptOverrides),
|
|
107351
|
+
/* harmony export */ mergePromptApproachesFromDriveFile: () => (/* binding */ mergePromptApproachesFromDriveFile),
|
|
107352
|
+
/* harmony export */ normalizeImageApproachCountsFromDrive: () => (/* binding */ normalizeImageApproachCountsFromDrive),
|
|
107353
|
+
/* harmony export */ normalizeSelectedPairApproachesFromDrive: () => (/* binding */ normalizeSelectedPairApproachesFromDrive),
|
|
107354
|
+
/* harmony export */ productPresetNumbersToImageCounts: () => (/* binding */ productPresetNumbersToImageCounts),
|
|
107355
|
+
/* harmony export */ productPresetNumbersToIndices: () => (/* binding */ productPresetNumbersToIndices),
|
|
105823
107356
|
/* harmony export */ resetAllOverrides: () => (/* binding */ resetAllOverrides),
|
|
105824
107357
|
/* harmony export */ resetCreoApproachOverride: () => (/* binding */ resetCreoApproachOverride),
|
|
105825
107358
|
/* harmony export */ resetPromptOverride: () => (/* binding */ resetPromptOverride),
|
|
@@ -105831,6 +107364,50 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
105831
107364
|
* Утилиты для работы с оверрайдами промптов
|
|
105832
107365
|
*/
|
|
105833
107366
|
const STORAGE_KEY = 'promptOverrides';
|
|
107367
|
+
/** Номера 1–10 = строка в таблице подходов (PAIR_APPROACH_POOL[i] → номер i + 1). Порядок в массиве не важен — при применении сортируется по номеру строки. */
|
|
107368
|
+
const PRODUCT_TYPE_TEXT_PAIR_PRESETS = {
|
|
107369
|
+
похудалки: [1, 2, 3, 6, 10],
|
|
107370
|
+
простатит: [1, 6, 8, 10, 7],
|
|
107371
|
+
потенция: [6, 10, 8, 7, 1],
|
|
107372
|
+
диабет: [8, 1, 7, 6, 10],
|
|
107373
|
+
паразиты: [6, 1, 8, 5, 7],
|
|
107374
|
+
суставы: [1, 3, 8, 2, 7],
|
|
107375
|
+
};
|
|
107376
|
+
/** Номера 1–10 = строка в таблице подходов к изображениям (CREO_APPROACHES[i] → номер i + 1). Порядок в массиве не важен. */
|
|
107377
|
+
const PRODUCT_TYPE_IMAGE_PRESETS = {
|
|
107378
|
+
похудалки: [2, 3, 6, 8, 10],
|
|
107379
|
+
простатит: [1, 4, 5, 6, 7, 8, 9],
|
|
107380
|
+
потенция: [1, 4, 5, 6, 7, 8, 9],
|
|
107381
|
+
диабет: [1, 4, 6, 9],
|
|
107382
|
+
паразиты: [4, 5, 7, 8],
|
|
107383
|
+
суставы: [3, 4, 5, 6, 9],
|
|
107384
|
+
};
|
|
107385
|
+
/** Индексы PAIR_APPROACH_POOL (0-based), по возрастанию. */
|
|
107386
|
+
function productPresetNumbersToIndices(oneBased) {
|
|
107387
|
+
const poolLen = 10;
|
|
107388
|
+
const seen = new Set();
|
|
107389
|
+
for (const n of oneBased) {
|
|
107390
|
+
const i = n - 1;
|
|
107391
|
+
if (i >= 0 && i < poolLen)
|
|
107392
|
+
seen.add(i);
|
|
107393
|
+
}
|
|
107394
|
+
return [...seen].sort((a, b) => a - b);
|
|
107395
|
+
}
|
|
107396
|
+
/**
|
|
107397
|
+
* Пресет типа товара → массив длиной IMAGE_APPROACH_COUNT: у выбранных подходов кол-во 1, у остальных 0.
|
|
107398
|
+
*/
|
|
107399
|
+
function productPresetNumbersToImageCounts(oneBased) {
|
|
107400
|
+
const counts = Array(IMAGE_APPROACH_COUNT).fill(0);
|
|
107401
|
+
const seen = new Set();
|
|
107402
|
+
for (const n of oneBased) {
|
|
107403
|
+
const i = n - 1;
|
|
107404
|
+
if (i >= 0 && i < IMAGE_APPROACH_COUNT && !seen.has(i)) {
|
|
107405
|
+
seen.add(i);
|
|
107406
|
+
counts[i] = 1;
|
|
107407
|
+
}
|
|
107408
|
+
}
|
|
107409
|
+
return counts;
|
|
107410
|
+
}
|
|
105834
107411
|
// Debug logging — пишет в терминал Electron (или в console как fallback)
|
|
105835
107412
|
function _debugLog(...args) {
|
|
105836
107413
|
const api = typeof window !== 'undefined' ? window.electronAPI : null;
|
|
@@ -105864,6 +107441,34 @@ function getPairsCount() {
|
|
|
105864
107441
|
}
|
|
105865
107442
|
/** Количество подходов для изображений. Должно совпадать с CREO_APPROACHES.length в prompts.ts */
|
|
105866
107443
|
const IMAGE_APPROACH_COUNT = 10;
|
|
107444
|
+
const PAIR_APPROACH_POOL_LEN = 10;
|
|
107445
|
+
/** Нормализация индексов пар из JSON с диска (0-based, уникальные, отсортированные, минимум 2). */
|
|
107446
|
+
function normalizeSelectedPairApproachesFromDrive(raw) {
|
|
107447
|
+
if (!Array.isArray(raw))
|
|
107448
|
+
return null;
|
|
107449
|
+
const seen = new Set();
|
|
107450
|
+
for (const x of raw) {
|
|
107451
|
+
const n = typeof x === 'number' && Number.isInteger(x) ? x : parseInt(String(x), 10);
|
|
107452
|
+
if (Number.isInteger(n) && n >= 0 && n < PAIR_APPROACH_POOL_LEN)
|
|
107453
|
+
seen.add(n);
|
|
107454
|
+
}
|
|
107455
|
+
const out = [...seen].sort((a, b) => a - b);
|
|
107456
|
+
return out.length >= 2 ? out : null;
|
|
107457
|
+
}
|
|
107458
|
+
/** Нормализация количеств крео из JSON с диска (длина 10, 0–4; хотя бы один подход > 0). */
|
|
107459
|
+
function normalizeImageApproachCountsFromDrive(raw) {
|
|
107460
|
+
if (!Array.isArray(raw))
|
|
107461
|
+
return null;
|
|
107462
|
+
const out = [];
|
|
107463
|
+
for (let i = 0; i < IMAGE_APPROACH_COUNT; i++) {
|
|
107464
|
+
const v = raw[i];
|
|
107465
|
+
const n = typeof v === 'number' && Number.isFinite(v) ? v : parseInt(String(v), 10);
|
|
107466
|
+
out.push(Number.isFinite(n) ? Math.max(0, Math.min(4, Math.round(n))) : 0);
|
|
107467
|
+
}
|
|
107468
|
+
if (out.every(c => c === 0))
|
|
107469
|
+
return null;
|
|
107470
|
+
return out;
|
|
107471
|
+
}
|
|
105867
107472
|
/**
|
|
105868
107473
|
* Получить количество изображений по каждому подходу (N элементов, 0–4).
|
|
105869
107474
|
* По умолчанию — по 1 на каждый подход.
|
|
@@ -105929,6 +107534,32 @@ function savePromptOverrides(overrides) {
|
|
|
105929
107534
|
console.error('Failed to save prompt overrides:', err);
|
|
105930
107535
|
}
|
|
105931
107536
|
}
|
|
107537
|
+
/** Имя события после сохранения подходов в менеджере промптов — чтобы синхронизировать JSON на Drive. */
|
|
107538
|
+
const PROMPT_OVERRIDES_SAVED_EVENT = 'docs-combiner-prompt-overrides-saved';
|
|
107539
|
+
/**
|
|
107540
|
+
* Подмешать в localStorage выбранные подходы из project-settings.json на Drive (если поля валидны).
|
|
107541
|
+
*/
|
|
107542
|
+
function mergePromptApproachesFromDriveFile(loadedData) {
|
|
107543
|
+
const pairs = normalizeSelectedPairApproachesFromDrive(loadedData.selectedPairApproaches);
|
|
107544
|
+
const counts = normalizeImageApproachCountsFromDrive(loadedData.imageApproachCounts);
|
|
107545
|
+
if (!pairs && !counts)
|
|
107546
|
+
return false;
|
|
107547
|
+
const overrides = loadPromptOverrides();
|
|
107548
|
+
let dirty = false;
|
|
107549
|
+
if (pairs) {
|
|
107550
|
+
overrides.selectedPairApproaches = pairs;
|
|
107551
|
+
dirty = true;
|
|
107552
|
+
}
|
|
107553
|
+
if (counts) {
|
|
107554
|
+
overrides.imageApproachCounts = counts;
|
|
107555
|
+
dirty = true;
|
|
107556
|
+
}
|
|
107557
|
+
if (dirty) {
|
|
107558
|
+
savePromptOverrides(overrides);
|
|
107559
|
+
return true;
|
|
107560
|
+
}
|
|
107561
|
+
return false;
|
|
107562
|
+
}
|
|
105932
107563
|
/**
|
|
105933
107564
|
* Получить оверрайд для простого промпта
|
|
105934
107565
|
*/
|
|
@@ -106123,58 +107754,57 @@ function _debugLog(...args) {
|
|
|
106123
107754
|
const PAIR_APPROACH_POOL = [
|
|
106124
107755
|
{
|
|
106125
107756
|
name: 'болевая точка',
|
|
106126
|
-
titleApproach: '
|
|
106127
|
-
textApproach: '
|
|
107757
|
+
titleApproach: 'одна ясная боль (не две проблемы в одном заголовке). Усиливай через несправедливость / ощущение «так несправедливо» (устал бороться, снова срыв, тело не слушается) — не только сухое перечисление симптомов. ЗАГОЛОВОК = КОНСТАТАЦИЯ, не вопрос: ЗАПРЕЩЕНО заканчивать на «почему?», «perché?», «why?» и подобное — боль называешь фактом, не спрашиваешь',
|
|
107758
|
+
textApproach: 'Одна центральная проблема за текст — не распыляйся на несколько болей. ЗАПРЕЩЕНО перечислять ингредиенты, состав, matcha/MCT/«формулу» — это территория «авторитет/экспертиза», не болевой точки. Опиши дискомфорт и как продукт снимает именно эту боль; без каталога компонентов.',
|
|
106128
107759
|
},
|
|
106129
107760
|
{
|
|
106130
107761
|
name: 'трансформация до/после',
|
|
106131
|
-
titleApproach: 'контраст
|
|
106132
|
-
textApproach: '
|
|
107762
|
+
titleApproach: 'контраст СОСТОЯНИЙ и ощущений до/после (вздутие/усталость → лёгкость, тяжесть → контроль, «не узнаю себя в зеркале» → спокойствие) с якорем во времени во фразе, но БЕЗ цифр на весах. ЗАПРЕЩЕНО в заголовке: −X kg, «persi N kg», весы, любой явный минус килограммов — это только у testimonial',
|
|
107763
|
+
textApproach: 'СТРОГО от первого лица («Я / Io / Yo…»). Это не отзыв с именем — это МОЙ контраст «как было плохо / как стало лучше» по телу и эмоциям. ЗАПРЕЩЕНО копировать формат отзыва: не начинай как реклама «я попробовала продукт и минус X кг» подряд; сначала ощущения и жизнь до/после, продукт — связка, а не пересказ цифр с весов (цифры веса допустимы в тексте лишь второстепенно, если уместно; акцент — на смене состояния). ЗАПРЕЩЕНО соцдоказательство («многие отмечают», «molte persone»).',
|
|
106133
107764
|
},
|
|
106134
107765
|
{
|
|
106135
107766
|
name: 'testimonial',
|
|
106136
107767
|
isTestimonial: true,
|
|
106137
|
-
titleApproach: '
|
|
106138
|
-
textApproach:
|
|
106139
|
-
*
|
|
106140
|
-
*
|
|
106141
|
-
*
|
|
106142
|
-
* Конкретный результат с таймингом (7–14 дней; примеры: «Po 7 dniach...», «Después de 2 semanas...»)
|
|
107768
|
+
titleApproach: 'короткая «живая» фраза с конкретикой результата на весах/сроке («−2,8 kg in 10 giorni… incredibile 😅») — здесь УМЕСТНЫ −кг и срок; это отличает testimonial от «трансформации». НЕ используй «Имя, возраст:» в заголовке — только в тексте',
|
|
107769
|
+
textApproach: `Это единственный подход-ОТЗЫВ: читатель должен поверить в реального человека.
|
|
107770
|
+
* Обязательно начало текста с «Имя, возраст:» («Giulia, 49 anni:», «Kasia, 41 lat:»)
|
|
107771
|
+
* История только от первого лица после имени
|
|
107772
|
+
* Конкретный результат с таймингом (7–14 дней), можно килограммы и детали быта
|
|
106143
107773
|
* Заканчивается приглашением попробовать + CTA`,
|
|
106144
107774
|
},
|
|
106145
107775
|
{
|
|
106146
107776
|
name: 'срочность/дефицит',
|
|
106147
|
-
titleApproach: '
|
|
107777
|
+
titleApproach: 'ТОЛЬКО дефицит оффера: время до конкретного дедлайна, остаток штук, «до полуночи», «осталось N упаковок» — ЗАПРЕЩЕНО в заголовке проблема, тело, продукт, «лишние кг», категория товара. Не баннер магазина — конкретная граница (день, час, число мест)',
|
|
106148
107778
|
textApproach: 'Начни с конкретного сигнала ограниченности — времени или количества («Tylko dziś», «Últimas unidades», «Осталось 12 упаковок», «Акция до конца дня»). Весь текст строится ИСКЛЮЧИТЕЛЬНО вокруг дефицита или дедлайна: осталось мало, время заканчивается, потом будет дороже или не будет вообще. ЗАПРЕЩЕНО упоминать состав, ингредиенты, свойства или пользу продукта — только ограниченность оффера. CTA максимально срочный.',
|
|
106149
107779
|
},
|
|
106150
107780
|
{
|
|
106151
107781
|
name: 'социальное доказательство',
|
|
106152
|
-
titleApproach: '
|
|
107782
|
+
titleApproach: 'одна ЧИТАЕМАЯ фраза с крупной цифрой (например «50.000 italiane hanno già scelto … 🔥») — грамматика и смысл на языке GEO должны сходиться; читатель понимает фразу с первого раза. ЗАПРЕЩЕНО несвязные склейки («9 su 10 scelgono controllo 🔥 fame») и обрывки, где цифра + существительные не составляют нормального высказывания',
|
|
106153
107783
|
textApproach: 'Начни с цифры или массового факта («Уже 50 000 клиентов», «9 din 10 femei observă diferența»). Акцент на том, что проблему уже решили тысячи — и ты тоже можешь.',
|
|
106154
107784
|
},
|
|
106155
107785
|
{
|
|
106156
107786
|
name: 'любопытство/интрига',
|
|
106157
|
-
titleApproach: '
|
|
107787
|
+
titleApproach: 'провокационный вопрос или утверждение, которое ломает сразу ДВА привычных решения (диета И спорт / dieta e palestra…), — но ОДНОЙ ЦЕЛЬНОЙ фразой: связный синтаксис, без рубки на обрывки через запятую и эмодзи посередине. Пример уровня: «Dieta e palestra ma la pancia resta? 🤔» — а не три оторванных куска',
|
|
106158
107788
|
textApproach: 'Начни с провокационного вопроса или неожиданного инсайта («Знаете, почему обычные средства не помогают?», «¿Sabías que…?»). Раскрой неочевидный факт о проблеме или механизме решения и выведи к продукту.',
|
|
106159
107789
|
},
|
|
106160
107790
|
{
|
|
106161
107791
|
name: 'авторитет/экспертиза',
|
|
106162
|
-
titleApproach: '
|
|
107792
|
+
titleApproach: 'information gap: в заголовке ЗАПРЕЩЕНО называть ингредиенты и раскрывать метод/механизм напрямую — никаких matcha, MCT, tè verde, «formula con…», «metodo naturale per…», «accelerare il metabolismo», «supporta il metabolismo» и т.п.; иначе ответ уже в заголовке и клик не нужен. Подай состав или подход как тайну / открытие / «что скрывают» / «почему это не то же самое, что обычные средства» — без конкретики, ответ только в основном тексте. ЗАПРЕЩЕНЫ эмодзи-подсказки по составу (например 🍵, если по смыслу выдаёт чай), если они заменяют то, что должен открыть текст. Не закрывай интригу формулировками уровня «Perché X e Y supportano…»',
|
|
106163
107793
|
textApproach: 'Начни с ФАКТА/утверждения об экспертизе («Włoska receptura», «Hecho en Italia», «3 składniki naturalne», «Разработано фармацевтами»). Акцент на составе, происхождении или механизме действия. Почему это работает — объясни просто и убедительно.',
|
|
106164
107794
|
},
|
|
106165
107795
|
{
|
|
106166
107796
|
name: 'страх бездействия',
|
|
106167
|
-
titleApproach: '
|
|
106168
|
-
textApproach: 'Начни с описания негативного сценария бездействия («С каждым днём становится хуже…», «Если не взять под контроль сейчас…»). Покажи, что проблема прогрессирует. CTA —
|
|
107797
|
+
titleApproach: 'узнаваемый паттерн промедления — ОДНА СВЯЗНАЯ фраза (допустимы многоточие, союз «но», тире), а не перечень обрывков через запятую. Пример уровня: «Rimandi a lunedì… ma la fame non aspetta 😣» — смысл течёт от начала к концу',
|
|
107798
|
+
textApproach: 'Начни с описания негативного сценария бездействия («С каждым днём становится хуже…», «Если не взять под контроль сейчас…»). Покажи, что проблема прогрессирует. Финальный CTA — ТОЛЬКО про заботу о себе / начать сейчас / не откладывать (на языке GEO). ЗАПРЕЩЕНЫ прямые призывы к заказу в финале: «ordina ora», «закажи», «купи сейчас», «clicca e acquista» — вместо них: взять под контроль, сделать первый шаг, начать сегодня и т.п.',
|
|
106169
107799
|
},
|
|
106170
107800
|
{
|
|
106171
107801
|
name: 'прямой оффер/выгода',
|
|
106172
|
-
titleApproach: 'конкретная числовая выгода в заголовке — сколько экономишь или что получаешь (например «-50%», «Вторая упаковка бесплатно», «Цена как раньше»). НЕ просто «скидка есть» — а ЧТО именно и
|
|
107802
|
+
titleApproach: 'конкретная числовая выгода в заголовке — сколько экономишь или что получаешь (например «-50%», «Вторая упаковка бесплатно», «Цена как раньше»). НЕ просто «скидка есть» — а ЧТО именно и сколько. ОБЯЗАТЕЛЬНО минимум один эмодзи в заголовке (💸 🔥 ✨ 🎁 ⏳ 📦 и т.п.) — как у остальных подходов в наборе, без эмодзи заголовок считается ошибкой',
|
|
106173
107803
|
textApproach: 'Аудитория уже думает о покупке — текст снимает последнее сомнение, а не убеждает в проблеме. Начни с оффера числом: скидка -50%, конкретная цена, что получаешь за эти деньги. Ответь на вопрос «почему взять сейчас, а не завтра» — цена вырастет, акция закончится, запас ограничен. ЗАПРЕЩЕНО объяснять пользу продукта или описывать проблему — читатель уже всё знает. Только сделка, только экономика, только CTA с акцентом на выгоде прямо сейчас.',
|
|
106174
107804
|
},
|
|
106175
107805
|
{
|
|
106176
107806
|
name: 'ситуационный/узнаваемый момент',
|
|
106177
|
-
titleApproach: '
|
|
107807
|
+
titleApproach: 'одна яркая узнаваемая сцена в 1–2 коротких связных сегментах (лучше одна картинка), без перечня симптомов через запятую. Пример уровня: «Dopo pranzo i pantaloni tirano 😩» — сразу видно момент и боль; ЗАПРЕЩЕНО нагромождать «после обеда 😩 джинсы, живот, тесно» отдельными ярлыками',
|
|
106178
107808
|
textApproach: 'Начни с конкретной жизненной сцены, где проблема ощущается («[ключевой симптом категории продукта]…», «Вечером перед сном не можешь уснуть из-за дискомфорта…» — адаптируй под категорию). Создай узнаваемую ситуацию — читатель должен сказать «это про меня» — и предложи решение.',
|
|
106179
107809
|
},
|
|
106180
107810
|
];
|
|
@@ -106379,6 +108009,12 @@ function getPairsSystemPrompt(geo, noOverride, count = 3, selectedIndices) {
|
|
|
106379
108009
|
const distributionLines = pairs
|
|
106380
108010
|
.map((p, i) => `Пара ${i + 1} → [${p.name}]:\n Заголовок: ${p.titleApproach}\n Текст: ${p.textApproach}`)
|
|
106381
108011
|
.join('\n');
|
|
108012
|
+
const hasUrgencyScarcity = pairs.some(p => p.name === 'срочность/дефицит');
|
|
108013
|
+
const hasFearInaction = pairs.some(p => p.name === 'страх бездействия');
|
|
108014
|
+
const hasSocialProof = pairs.some(p => p.name === 'социальное доказательство');
|
|
108015
|
+
const hasAuthorityExpertise = pairs.some(p => p.name === 'авторитет/экспертиза');
|
|
108016
|
+
const hasDirectOffer = pairs.some(p => p.name === 'прямой оффер/выгода');
|
|
108017
|
+
const hasTransformAndTestimonial = pairs.some(p => p.name === 'трансформация до/после') && pairs.some(p => p.isTestimonial);
|
|
106382
108018
|
const deadlineNote = n >= 2
|
|
106383
108019
|
? `- В Тексте 1 ИЛИ Тексте 2 ОБЯЗАТЕЛЬНО укажи ожидаемый срок результата 7–14 дней (на языке ${geo}).`
|
|
106384
108020
|
: `- В Тексте 1 ОБЯЗАТЕЛЬНО укажи ожидаемый срок результата 7–14 дней (на языке ${geo}).`;
|
|
@@ -106393,6 +108029,11 @@ function getPairsSystemPrompt(geo, noOverride, count = 3, selectedIndices) {
|
|
|
106393
108029
|
|
|
106394
108030
|
... и так для всех ${n} пар. Каждая пара отделена пустой строкой.
|
|
106395
108031
|
|
|
108032
|
+
КРИТИЧНО ДЛЯ РАЗБОРА:
|
|
108033
|
+
- Служебные метки в начале строки пиши РОВНО как в примере: слово «ЗАГОЛОВОК» целиком кириллицей (не ZAG, не смесь латиницы и кириллицы), слово «ТЕКСТ» целиком кириллицей.
|
|
108034
|
+
- Не вставляй строки «ЗАГОЛОВОК N:» внутрь текста объявления; каждый заголовок — отдельная строка перед своим «ТЕКСТ N:».
|
|
108035
|
+
- Контент объявления (заголовок и текст) — на языке ${geo}; только метки ЗАГОЛОВОК/ТЕКСТ остаются кириллицей как шаблон.
|
|
108036
|
+
|
|
106396
108037
|
РАСПРЕДЕЛЕНИЕ ПОДХОДОВ ПО ПАРАМ:
|
|
106397
108038
|
${distributionLines}
|
|
106398
108039
|
|
|
@@ -106400,20 +108041,24 @@ ${distributionLines}
|
|
|
106400
108041
|
- Заголовок — короткий крючок (боль или триггер)
|
|
106401
108042
|
- Текст — раскрывает тот же угол глубже, добавляет детали, заканчивается CTA
|
|
106402
108043
|
- Текст НЕ повторяет заголовок дословно, но развивает его смысл
|
|
108044
|
+
- Не подмешивай чужие углы: например в «трансформация до/после» не используй формулировки соцдоказательства («многие отмечают», «клиенты говорят»)
|
|
108045
|
+
${hasTransformAndTestimonial ? '\n- РАЗВЕДЕНИЕ «трансформация до/после» и «testimonial» в одном ответе: у трансформации заголовок = контраст ощущений/состояния (без −кг и без «минус X kg за N дней»); у testimonial заголовок может содержать −кг, весы, срок — как убедительный отзыв. Не делай два заголовка в одном формате «цифра + срок на весах».' : ''}
|
|
106403
108046
|
|
|
106404
108047
|
ТРЕБОВАНИЯ К ЗАГОЛОВКУ:
|
|
106405
108048
|
- До 55–60 символов, максимум 6–7 слов
|
|
108049
|
+
- Цельность: заголовок читается как одно высказывание (или один связный вопрос целиком). ЗАПРЕЩЕНО склеивать несвязные ярлыки запятыми ради ключевых слов; эмодзи не должно разрывать грамматику так, что фраза перестаёт быть человеческой
|
|
106406
108050
|
- ЗАПРЕЩЕНО двоеточие (:) — используй тире (—) или переформулируй
|
|
106407
|
-
- 1–2 эмодзи естественно
|
|
106408
|
-
- Хотя бы одно ключевое слово проблемы, релевантное
|
|
106409
|
-
- НЕ упоминай название продукта — заголовок = боль +
|
|
108051
|
+
- 1–2 эмодзи естественно (часто в конце фразы или после целого смыслового блока); избегай ⚠️ и 🚨${hasDirectOffer ? '\n- Для пары «прямой оффер/выгода» эмодзи в заголовке ОБЯЗАТЕЛЕН (минимум один) — визуально вровень с остальными парами набора' : ''}
|
|
108052
|
+
- Хотя бы одно ключевое слово проблемы, релевантное продукту${hasUrgencyScarcity ? '\n- ИСКЛЮЧЕНИЕ: для пары с подходом «срочность/дефицит» в заголовке ЗАПРЕЩЕНЫ симптомы, проблема, тело, продукт — только лимит оффера (время, количество, дедлайн)' : ''}${hasAuthorityExpertise ? '\n- Пара «авторитет/экспертиза»: заголовок держит information gap — без ингредиентов и без прямого названия механизма; состав и «как это работает» — только в тексте пары' : ''}
|
|
108053
|
+
- НЕ упоминай название продукта — заголовок = боль + триггер${hasUrgencyScarcity ? ' (кроме пары «срочность/дефицит»: там заголовок = только дефицит/дедлайн, без продукта и без боли)' : ''}${hasSocialProof ? '\n- Исключение: в паре «социальное доказательство» название продукта в заголовке допустимо, если оно входит в цельную фразу про массовый выбор (например «N persone hanno già scelto [продукт]»)' : ''}
|
|
106410
108054
|
- Звучит как живая рекламная фраза, а не строка ключевых слов
|
|
106411
108055
|
|
|
106412
108056
|
ТРЕБОВАНИЯ К ТЕКСТУ:
|
|
106413
108057
|
- 150–280 символов (testimonial — до 300)
|
|
106414
|
-
- Хотя бы одно ключевое слово проблемы
|
|
106415
|
-
- Сильный явный CTA в конце («кликни», «попробуй сейчас», «закажи», «не жди»)
|
|
108058
|
+
- Хотя бы одно ключевое слово проблемы (для «срочность/дефицит» в тексте допустимо слабее, если весь фокус — на лимите оффера)
|
|
108059
|
+
- Сильный явный CTA в конце («кликни», «попробуй сейчас», «закажи», «не жди»)${hasFearInaction ? '\n- ИСКЛЮЧЕНИЕ: для пары «страх бездействия» финальная фраза — не заказ, а забота о себе / начать сейчас; без «ordina ora», «закажи», «купи», «clicca e acquista» в конце' : ''}
|
|
106416
108060
|
- Короткие рубленые фразы, императивы, FOMO допустим${hasTestimonial ? '\n- Testimonial: строго от первого лица, начинается с «Имя, возраст:», конкретный результат с таймингом' : ''}
|
|
108061
|
+
- Ингредиенты и состав из доп. информации — только в углах «авторитет/экспертиза» (и сходных); в «болевой точке» и чисто эмоциональных углах состав не перечислять
|
|
106417
108062
|
${deadlineNote}
|
|
106418
108063
|
|
|
106419
108064
|
ОБЩИЕ ТРЕБОВАНИЯ:
|