@gravity-ui/page-constructor 6.3.2-alpha.3 → 6.3.2-alpha.5
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/build/cjs/editor-v2/components/DynamicForm/FieldBase/FieldBase.css +8 -6
- package/build/cjs/editor-v2/components/DynamicForm/FieldBase/FieldBase.js +7 -3
- package/build/cjs/editor-v2/components/DynamicForm/FieldBase/FieldBase.js.map +1 -1
- package/build/cjs/editor-v2/containers/BlockConfigForm/BlockConfigForm.css +2 -2
- package/build/cjs/editor-v2/containers/Editor/Editor.d.ts +1 -0
- package/build/cjs/editor-v2/containers/Editor/Editor.js +2 -2
- package/build/cjs/editor-v2/containers/Editor/Editor.js.map +1 -1
- package/build/cjs/editor-v2/containers/MiddleScreen/MiddleScreen.css +10 -1
- package/build/cjs/editor-v2/containers/MiddleScreen/MiddleScreen.js +4 -3
- package/build/cjs/editor-v2/containers/MiddleScreen/MiddleScreen.js.map +1 -1
- package/build/cjs/editor-v2/containers/Overlay/Overlay.css +12 -9
- package/build/cjs/editor-v2/containers/Overlay/Overlay.js +1 -1
- package/build/cjs/editor-v2/containers/Overlay/Overlay.js.map +1 -1
- package/build/cjs/editor-v2/hooks/useMainEditorInitialize.d.ts +2 -1
- package/build/cjs/editor-v2/hooks/useMainEditorInitialize.js +12 -2
- package/build/cjs/editor-v2/hooks/useMainEditorInitialize.js.map +1 -1
- package/build/cjs/editor-v2/styles/root.css +3 -3
- package/build/esm/editor-v2/components/DynamicForm/FieldBase/FieldBase.css +8 -6
- package/build/esm/editor-v2/components/DynamicForm/FieldBase/FieldBase.js +8 -4
- package/build/esm/editor-v2/components/DynamicForm/FieldBase/FieldBase.js.map +1 -1
- package/build/esm/editor-v2/containers/BlockConfigForm/BlockConfigForm.css +2 -2
- package/build/esm/editor-v2/containers/Editor/Editor.d.ts +1 -0
- package/build/esm/editor-v2/containers/Editor/Editor.js +2 -2
- package/build/esm/editor-v2/containers/Editor/Editor.js.map +1 -1
- package/build/esm/editor-v2/containers/MiddleScreen/MiddleScreen.css +10 -1
- package/build/esm/editor-v2/containers/MiddleScreen/MiddleScreen.js +4 -3
- package/build/esm/editor-v2/containers/MiddleScreen/MiddleScreen.js.map +1 -1
- package/build/esm/editor-v2/containers/Overlay/Overlay.css +12 -9
- package/build/esm/editor-v2/containers/Overlay/Overlay.js +1 -1
- package/build/esm/editor-v2/containers/Overlay/Overlay.js.map +1 -1
- package/build/esm/editor-v2/hooks/useMainEditorInitialize.d.ts +2 -1
- package/build/esm/editor-v2/hooks/useMainEditorInitialize.js +11 -2
- package/build/esm/editor-v2/hooks/useMainEditorInitialize.js.map +1 -1
- package/build/esm/editor-v2/styles/root.css +3 -3
- package/package.json +1 -1
- package/widget/index.js +1 -1
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
.pceditor-field-base {
|
|
2
|
-
padding: 16px 12px;
|
|
2
|
+
padding: 16px 12px 16px 0;
|
|
3
3
|
border-bottom: 1px solid var(--g-color-line-generic);
|
|
4
4
|
position: relative;
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-direction: row;
|
|
7
7
|
align-items: flex-start;
|
|
8
|
-
gap: 8px;
|
|
9
8
|
}
|
|
10
|
-
.pceditor-field-base:hover > .pceditor-field-base__top > .pceditor-field-base__button {
|
|
9
|
+
.pceditor-field-base:hover > .pceditor-field-base__top .pceditor-field-base__title > .pceditor-field-base__button {
|
|
11
10
|
opacity: 1;
|
|
12
11
|
}
|
|
13
12
|
.pceditor-field-base_expandable {
|
|
@@ -25,11 +24,12 @@
|
|
|
25
24
|
display: flex;
|
|
26
25
|
align-items: center;
|
|
27
26
|
gap: 4px;
|
|
28
|
-
flex: 0 0
|
|
29
|
-
word-break: break-
|
|
27
|
+
flex: 0 0 84px;
|
|
28
|
+
word-break: break-word;
|
|
30
29
|
}
|
|
31
30
|
.pceditor-field-base__children {
|
|
32
31
|
flex: 2 1 auto;
|
|
32
|
+
margin-left: 12px;
|
|
33
33
|
}
|
|
34
34
|
.pceditor-field-base__foldable {
|
|
35
35
|
width: 100%;
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
font-weight: var(--g-text-body-font-weight);
|
|
52
52
|
font-size: var(--g-text-body-2-font-size);
|
|
53
53
|
line-height: var(--g-text-body-2-line-height);
|
|
54
|
-
margin: 5px 0;
|
|
54
|
+
margin: 5px 16px 5px 0;
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-direction: row;
|
|
55
57
|
}
|
|
56
58
|
.pceditor-field-base__title_size_s {
|
|
57
59
|
font-family: var(--g-text-body-font-family);
|
|
@@ -3,15 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
6
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
6
7
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
7
8
|
const React = tslib_1.__importStar(require("react"));
|
|
8
9
|
const cn_1 = require("../../../utils/cn.js");
|
|
9
10
|
const b = (0, cn_1.editorCn)('field-base');
|
|
10
|
-
const FieldBase = ({ className, title, textSize = 's', children, expandable = false, }) => {
|
|
11
|
+
const FieldBase = ({ className, title, textSize = 's', children, expandable = false, onRefresh, }) => {
|
|
11
12
|
const [showChildren, setShowChildren] = React.useState(!expandable);
|
|
12
13
|
const titleComponent = React.useMemo(() => {
|
|
13
14
|
if (title) {
|
|
14
|
-
const defaultTitle = ((0, jsx_runtime_1.
|
|
15
|
+
const defaultTitle = ((0, jsx_runtime_1.jsxs)("div", { className: b('title', { size: textSize }), children: [onRefresh && ((0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('button'), onClick: (e) => {
|
|
16
|
+
e.stopPropagation();
|
|
17
|
+
onRefresh(undefined);
|
|
18
|
+
}, view: 'flat', size: 'xs', children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ArrowRotateLeft, size: 14 }) })), (0, jsx_runtime_1.jsx)("span", { children: lodash_1.default.capitalize(title) })] }));
|
|
15
19
|
if (expandable) {
|
|
16
20
|
return (
|
|
17
21
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
|
|
@@ -20,7 +24,7 @@ const FieldBase = ({ className, title, textSize = 's', children, expandable = fa
|
|
|
20
24
|
return (0, jsx_runtime_1.jsx)("div", { className: b('non-foldable'), children: defaultTitle });
|
|
21
25
|
}
|
|
22
26
|
return null;
|
|
23
|
-
}, [expandable, showChildren, textSize, title]);
|
|
27
|
+
}, [expandable, showChildren, textSize, title, onRefresh]);
|
|
24
28
|
return ((0, jsx_runtime_1.jsxs)("div", { className: b({ expandable }, className), children: [title && (0, jsx_runtime_1.jsx)("div", { className: b('top'), children: titleComponent }), (!title || showChildren) && (0, jsx_runtime_1.jsx)("div", { className: b('children'), children: children })] }));
|
|
25
29
|
};
|
|
26
30
|
exports.default = FieldBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBase.js","sourceRoot":"../../../../../../src","sources":["editor-v2/components/DynamicForm/FieldBase/FieldBase.tsx"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"FieldBase.js","sourceRoot":"../../../../../../src","sources":["editor-v2/components/DynamicForm/FieldBase/FieldBase.tsx"],"names":[],"mappings":";;;;AAAA,6CAA4D;AAC5D,6CAAkD;AAClD,4DAAuB;AACvB,qDAA+B;AAE/B,6CAA2C;AAI3C,MAAM,CAAC,GAAG,IAAA,aAAQ,EAAC,YAAY,CAAC,CAAC;AAajC,MAAM,SAAS,GAA6B,CAAC,EACzC,SAAS,EACT,KAAK,EACL,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;IAEpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,YAAY,GAAG,CACjB,iCAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,aACvC,SAAS,IAAI,CACV,uBAAC,cAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,OAAO,EAAE,CAAC,CAAsC,EAAE,EAAE;4BAChD,CAAC,CAAC,eAAe,EAAE,CAAC;4BACpB,SAAS,CAAC,SAAS,CAAC,CAAC;wBACzB,CAAC,EACD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,YAEV,uBAAC,YAAI,IAAC,IAAI,EAAE,uBAAe,EAAE,IAAI,EAAE,EAAE,GAAI,GACpC,CACZ,EACD,2CAAO,gBAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAQ,IAChC,CACT,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO;gBACH,yGAAyG;gBACzG,iCAAK,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,aACvE,YAAY,EACb,uBAAC,mBAAW,IACR,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAC5C,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,GAC9B,IACA,CACT,CAAC;YACN,CAAC;YAED,OAAO,gCAAK,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,YAAG,YAAY,GAAO,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3D,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,UAAU,EAAC,EAAE,SAAS,CAAC,aACrC,KAAK,IAAI,gCAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAG,cAAc,GAAO,EACzD,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,gCAAK,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,YAAG,QAAQ,GAAO,IAC1E,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC","sourcesContent":["import {ArrowToggle, Button, Icon} from '@gravity-ui/uikit';\nimport {ArrowRotateLeft} from '@gravity-ui/icons';\nimport _ from 'lodash';\nimport * as React from 'react';\n\nimport {editorCn} from '../../../utils/cn';\n\nimport './FieldBase.scss';\n\nconst b = editorCn('field-base');\n\nexport interface FieldBaseParams {\n title?: string;\n textSize?: 's' | 'm' | 'l';\n onRefresh?: (value: undefined) => void;\n expandable?: boolean;\n}\n\nexport interface FieldBaseProps extends React.PropsWithChildren, FieldBaseParams {\n className?: string;\n}\n\nconst FieldBase: React.FC<FieldBaseProps> = ({\n className,\n title,\n textSize = 's',\n children,\n expandable = false,\n onRefresh,\n}) => {\n const [showChildren, setShowChildren] = React.useState(!expandable);\n\n const titleComponent = React.useMemo(() => {\n if (title) {\n const defaultTitle = (\n <div className={b('title', {size: textSize})}>\n {onRefresh && (\n <Button\n className={b('button')}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onRefresh(undefined);\n }}\n view={'flat'}\n size={'xs'}\n >\n <Icon data={ArrowRotateLeft} size={14} />\n </Button>\n )}\n <span>{_.capitalize(title)}</span>\n </div>\n );\n\n if (expandable) {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div className={b('foldable')} onClick={() => setShowChildren(!showChildren)}>\n {defaultTitle}\n <ArrowToggle\n direction={showChildren ? 'bottom' : 'right'}\n className={b('arrow-toggle')}\n />\n </div>\n );\n }\n\n return <div className={b('non-foldable')}>{defaultTitle}</div>;\n }\n\n return null;\n }, [expandable, showChildren, textSize, title, onRefresh]);\n\n return (\n <div className={b({expandable}, className)}>\n {title && <div className={b('top')}>{titleComponent}</div>}\n {(!title || showChildren) && <div className={b('children')}>{children}</div>}\n </div>\n );\n};\n\nexport default FieldBase;\n"]}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
font-weight: var(--g-text-subheader-font-weight);
|
|
4
4
|
font-size: var(--g-text-subheader-3-font-size);
|
|
5
5
|
line-height: var(--g-text-subheader-3-line-height);
|
|
6
|
-
padding: 12px
|
|
6
|
+
padding: 12px;
|
|
7
7
|
border-bottom: 1px solid var(--g-color-line-generic);
|
|
8
8
|
}
|
|
9
9
|
.pceditor-block-config-form__form {
|
|
10
10
|
padding: 12px 0;
|
|
11
11
|
}
|
|
12
12
|
.pceditor-block-config-form__empty {
|
|
13
|
-
padding: 12px
|
|
13
|
+
padding: 12px;
|
|
14
14
|
display: flex;
|
|
15
15
|
justify-content: center;
|
|
16
16
|
align-items: center;
|
|
@@ -8,6 +8,7 @@ interface SidebarTabComponent {
|
|
|
8
8
|
interface EditorViewProps {
|
|
9
9
|
onUpdate?: (pageContent: PageContentWithNavigation) => void;
|
|
10
10
|
initialUrl: string;
|
|
11
|
+
initialContent?: PageContentWithNavigation;
|
|
11
12
|
disableUrlField?: boolean;
|
|
12
13
|
componentsConfig?: {
|
|
13
14
|
middleTop?: React.ElementType;
|
|
@@ -17,10 +17,10 @@ const cn_1 = require("../../utils/cn.js");
|
|
|
17
17
|
const Source_1 = tslib_1.__importDefault(require("../Source/Source.js"));
|
|
18
18
|
const ViewSwitches_1 = tslib_1.__importDefault(require("../ViewSwitches/ViewSwitches.js"));
|
|
19
19
|
const b = (0, cn_1.editorCn)('editor');
|
|
20
|
-
const EditorView = ({ componentsConfig = {} }) => {
|
|
20
|
+
const EditorView = ({ componentsConfig = {}, initialContent }) => {
|
|
21
21
|
const store = (0, useMainEditorStore_1.useMainEditorStore)();
|
|
22
22
|
const { manipulateOverlayMode, disableMode } = store;
|
|
23
|
-
(0, useMainEditorInitialize_1.default)();
|
|
23
|
+
(0, useMainEditorInitialize_1.default)(initialContent);
|
|
24
24
|
// Disable insert mode on any MouseUp event
|
|
25
25
|
// Maybe should be attached to body
|
|
26
26
|
const onMouseUp = React.useCallback((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Editor/Editor.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAG/B,8DAAsD;AACtD,iEAAyD;AACzD,qFAAgE;AAChE,2FAAsE;AACtE,oEAAkE;AAClE,wEAA2D;AAC3D,gEAAwD;AACxD,6GAA0E;AAC1E,0EAAkE;AAClE,0CAAwC;AACxC,yEAAsC;AACtC,2FAAwD;AAIxD,MAAM,CAAC,GAAG,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Editor/Editor.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAG/B,8DAAsD;AACtD,iEAAyD;AACzD,qFAAgE;AAChE,2FAAsE;AACtE,oEAAkE;AAClE,wEAA2D;AAC3D,gEAAwD;AACxD,6GAA0E;AAC1E,0EAAkE;AAClE,0CAAwC;AACxC,yEAAsC;AACtC,2FAAwD;AAIxD,MAAM,CAAC,GAAG,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC;AAqB7B,MAAM,UAAU,GAAG,CAAC,EAAC,gBAAgB,GAAG,EAAE,EAAE,cAAc,EAAkB,EAAE,EAAE;IAC5E,MAAM,KAAK,GAAG,IAAA,uCAAkB,GAAE,CAAC;IACnC,MAAM,EAAC,qBAAqB,EAAE,WAAW,EAAC,GAAG,KAAK,CAAC;IAEnD,IAAA,iCAAuB,EAAC,cAAc,CAAC,CAAC;IAExC,2CAA2C;IAC3C,mCAAmC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAC/B,CAAC,CAAmB,EAAE,EAAE;QACpB,IAAI,qBAAqB,EAAE,CAAC;YACxB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;QAClB,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,qBAAqB,CAAC,CACvC,CAAC;IACF,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,IAAA,6BAAa,EAAC,gBAAgB,CAAC,CAAC;IAEtD,OAAO;IACH,mEAAmE;IACnE,iCAAK,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,aACrC,gCAAK,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,YACrB,uBAAC,eAAM,IACH,IAAI,EAAE,uBAAC,iBAAO,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,OAAO,GAAI,EAC5D,KAAK,EACD,uBAAC,iBAAO,IACJ,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,gBAAM,EAAE,sBAAY,CAAC,EACjE,UAAU,EAAC,cAAc,GAC3B,EAEN,MAAM,EAAE,uBAAC,sBAAY,IAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,GAAI,GACjE,GACA,EACN,uBAAC,oBAAU,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,IACrC,CACT,CAAC;AACN,CAAC,CAAC;AAEK,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAE,EAAE;IAC7C,OAAO,CACH,uBAAC,8BAAc,IAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,YAChF,uBAAC,qCAAuB,cACpB,uBAAC,UAAU,OAAK,KAAK,GAAI,GACH,GACb,CACpB,CAAC;AACN,CAAC,CAAC;AARW,QAAA,MAAM,UAQjB","sourcesContent":["import * as React from 'react';\n\nimport {PageContentWithNavigation} from '../../../models';\nimport {Panels} from '../../components/Panels/Panels';\nimport {Sidebar} from '../../components/Sidebar/Sidebar';\nimport BigOverlay from '../../containers/BigOverlay/BigOverlay';\nimport MiddleScreen from '../../containers/MiddleScreen/MiddleScreen';\nimport {MainEditorStoreProvider} from '../../context/editorStore';\nimport {IframeProvider} from '../../context/iframeContext';\nimport {useEditorTabs} from '../../hooks/useEditorTabs';\nimport useMainEditorInitialize from '../../hooks/useMainEditorInitialize';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\nimport Source from '../Source/Source';\nimport ViewSwitches from '../ViewSwitches/ViewSwitches';\n\nimport './Editor.scss';\n\nconst b = editorCn('editor');\n\ninterface SidebarTabComponent {\n id: string;\n title: string;\n component: React.ElementType;\n}\ninterface EditorViewProps {\n onUpdate?: (pageContent: PageContentWithNavigation) => void;\n initialUrl: string;\n initialContent?: PageContentWithNavigation;\n disableUrlField?: boolean;\n componentsConfig?: {\n middleTop?: React.ElementType;\n leftTop?: React.ElementType[];\n rightTop?: React.ElementType[];\n leftTabs?: SidebarTabComponent[];\n rightTabs?: SidebarTabComponent[];\n };\n}\n\nconst EditorView = ({componentsConfig = {}, initialContent}: EditorViewProps) => {\n const store = useMainEditorStore();\n const {manipulateOverlayMode, disableMode} = store;\n\n useMainEditorInitialize(initialContent);\n\n // Disable insert mode on any MouseUp event\n // Maybe should be attached to body\n const onMouseUp = React.useCallback(\n (e: React.MouseEvent) => {\n if (manipulateOverlayMode) {\n e.preventDefault();\n disableMode();\n }\n },\n [disableMode, manipulateOverlayMode],\n );\n const {left, right} = useEditorTabs(componentsConfig);\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div className={b()} onMouseUp={onMouseUp}>\n <div className={b('body')}>\n <Panels\n left={<Sidebar tabs={left} top={componentsConfig.leftTop} />}\n right={\n <Sidebar\n tabs={right}\n top={[...(componentsConfig.rightTop || []), Source, ViewSwitches]}\n defaultTab=\"block-config\"\n />\n }\n middle={<MiddleScreen CustomTop={componentsConfig.middleTop} />}\n />\n </div>\n <BigOverlay className={b('overlay')} />\n </div>\n );\n};\n\nexport const Editor = (props: EditorViewProps) => {\n return (\n <IframeProvider initialUrl={props.initialUrl} disableUrlField={props.disableUrlField}>\n <MainEditorStoreProvider>\n <EditorView {...props} />\n </MainEditorStoreProvider>\n </IframeProvider>\n );\n};\n"]}
|
|
@@ -16,12 +16,21 @@
|
|
|
16
16
|
width: 100%;
|
|
17
17
|
height: 100%;
|
|
18
18
|
margin: auto;
|
|
19
|
+
display: flex;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
overflow: hidden;
|
|
19
23
|
}
|
|
20
24
|
.pceditor-middle-screen__canvas {
|
|
21
|
-
transform-origin:
|
|
25
|
+
transform-origin: center top;
|
|
22
26
|
overflow-y: scroll;
|
|
23
27
|
position: relative;
|
|
24
28
|
height: 100%;
|
|
29
|
+
max-width: 100%;
|
|
30
|
+
}
|
|
31
|
+
.pceditor-middle-screen__iframe {
|
|
32
|
+
display: block;
|
|
33
|
+
margin: 0 auto;
|
|
25
34
|
}
|
|
26
35
|
.pceditor-middle-screen__overlay {
|
|
27
36
|
position: absolute;
|
|
@@ -24,11 +24,12 @@ const MiddleScreen = ({ className, CustomTop }) => {
|
|
|
24
24
|
(0, postMessage_1.usePostMessageAPIListener)('ON_INIT', ({ height: newHeight }) => {
|
|
25
25
|
onResize(newHeight);
|
|
26
26
|
});
|
|
27
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: b(null, className), children: [CustomTop ? ((0, jsx_runtime_1.jsx)("div", { className: b('topbar'), children: (0, jsx_runtime_1.jsx)(CustomTop, {}) })) : null, (0, jsx_runtime_1.jsx)("div", { className: b('content'), children: (0, jsx_runtime_1.jsx)("div", { className: b('wrapper'),
|
|
27
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: b(null, className), children: [CustomTop ? ((0, jsx_runtime_1.jsx)("div", { className: b('topbar'), children: (0, jsx_runtime_1.jsx)(CustomTop, {}) })) : null, (0, jsx_runtime_1.jsx)("div", { className: b('content'), children: (0, jsx_runtime_1.jsx)("div", { className: b('wrapper'), children: (0, jsx_runtime_1.jsxs)("div", { ref: setCanvasRef, className: b('canvas', { hidden: !initialized }), style: {
|
|
28
28
|
transform: `scale(${zoom}%)`,
|
|
29
29
|
height: `${(100 / zoom) * 100}%`,
|
|
30
|
-
width:
|
|
31
|
-
|
|
30
|
+
width: deviceWidth,
|
|
31
|
+
maxWidth: `${(100 / zoom) * 100}%`,
|
|
32
|
+
}, children: [(0, jsx_runtime_1.jsx)("iframe", { ref: (instance) => instance && setIframeElement(instance), className: b('iframe'), src: url, height: `${height}px`, width: deviceWidth, frameBorder: "0", title: "Page Constructor Iframe" }), (0, jsx_runtime_1.jsx)(Overlay_1.default, { className: b('overlay'), canvasElement: canvasRef }), !initialized && ((0, jsx_runtime_1.jsx)("div", { className: b('loading'), children: (0, jsx_runtime_1.jsx)(uikit_1.Loader, { size: 'l' }) }))] }) }) })] }));
|
|
32
33
|
};
|
|
33
34
|
exports.default = MiddleScreen;
|
|
34
35
|
//# sourceMappingURL=MiddleScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MiddleScreen.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/MiddleScreen/MiddleScreen.tsx"],"names":[],"mappings":";;;;AAAA,6CAAyC;AACzC,qDAA+B;AAE/B,gEAAsE;AACtE,wEAA0D;AAC1D,0EAAkE;AAClE,0CAAwC;AACxC,4EAAyC;AAIzC,MAAM,CAAC,GAAG,IAAA,aAAQ,EAAC,eAAe,CAAC,CAAC;AAOpC,MAAM,YAAY,GAAG,CAAC,EAAC,SAAS,EAAE,SAAS,EAAoB,EAAE,EAAE;IAC/D,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAC9D,MAAM,EAAC,GAAG,EAAE,gBAAgB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,SAAiB,EAAE,EAAE;QAClB,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,IAAA,uCAAyB,EAAC,WAAW,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QAC3D,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAA,uCAAyB,EAAC,SAAS,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QACzD,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aAC7B,SAAS,CAAC,CAAC,CAAC,CACT,gCAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YACvB,uBAAC,SAAS,KAAG,GACX,CACT,CAAC,CAAC,CAAC,IAAI,EACR,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"MiddleScreen.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/MiddleScreen/MiddleScreen.tsx"],"names":[],"mappings":";;;;AAAA,6CAAyC;AACzC,qDAA+B;AAE/B,gEAAsE;AACtE,wEAA0D;AAC1D,0EAAkE;AAClE,0CAAwC;AACxC,4EAAyC;AAIzC,MAAM,CAAC,GAAG,IAAA,aAAQ,EAAC,eAAe,CAAC,CAAC;AAOpC,MAAM,YAAY,GAAG,CAAC,EAAC,SAAS,EAAE,SAAS,EAAoB,EAAE,EAAE;IAC/D,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAC9D,MAAM,EAAC,GAAG,EAAE,gBAAgB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,SAAiB,EAAE,EAAE;QAClB,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,IAAA,uCAAyB,EAAC,WAAW,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QAC3D,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAA,uCAAyB,EAAC,SAAS,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QACzD,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aAC7B,SAAS,CAAC,CAAC,CAAC,CACT,gCAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YACvB,uBAAC,SAAS,KAAG,GACX,CACT,CAAC,CAAC,CAAC,IAAI,EACR,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,iCACI,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,CAAC,WAAW,EAAC,CAAC,EAC9C,KAAK,EAAE;4BACH,SAAS,EAAE,SAAS,IAAI,IAAI;4BAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG;4BAChC,KAAK,EAAE,WAAW;4BAClB,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG;yBACrC,aAED,mCACI,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EACzD,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,MAAM,IAAI,EACrB,KAAK,EAAE,WAAW,EAClB,WAAW,EAAC,GAAG,EACf,KAAK,EAAC,yBAAyB,GACjC,EACF,uBAAC,iBAAO,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,GAAI,EAC7D,CAAC,WAAW,IAAI,CACb,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,uBAAC,cAAM,IAAC,IAAI,EAAE,GAAG,GAAI,GACnB,CACT,IACC,GACJ,GACJ,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,YAAY,CAAC","sourcesContent":["import {Loader} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {IframeContext} from '../../context/iframeContext';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\nimport Overlay from '../Overlay/Overlay';\n\nimport './MiddleScreen.scss';\n\nconst b = editorCn('middle-screen');\n\ninterface MiddleScreenProps {\n className?: string;\n CustomTop?: React.ElementType;\n}\n\nconst MiddleScreen = ({className, CustomTop}: MiddleScreenProps) => {\n const {zoom, initialized, deviceWidth} = useMainEditorStore();\n const {url, setIframeElement} = React.useContext(IframeContext);\n const [canvasRef, setCanvasRef] = React.useState<HTMLDivElement | null>(null);\n const [height, setHeight] = React.useState(0);\n\n const onResize = React.useCallback(\n (newHeight: number) => {\n setHeight(newHeight + 500);\n },\n [setHeight],\n );\n\n usePostMessageAPIListener('ON_RESIZE', ({height: newHeight}) => {\n onResize(newHeight);\n });\n\n usePostMessageAPIListener('ON_INIT', ({height: newHeight}) => {\n onResize(newHeight);\n });\n\n return (\n <div className={b(null, className)}>\n {CustomTop ? (\n <div className={b('topbar')}>\n <CustomTop />\n </div>\n ) : null}\n <div className={b('content')}>\n <div className={b('wrapper')}>\n <div\n ref={setCanvasRef}\n className={b('canvas', {hidden: !initialized})}\n style={{\n transform: `scale(${zoom}%)`,\n height: `${(100 / zoom) * 100}%`,\n width: deviceWidth,\n maxWidth: `${(100 / zoom) * 100}%`,\n }}\n >\n <iframe\n ref={(instance) => instance && setIframeElement(instance)}\n className={b('iframe')}\n src={url}\n height={`${height}px`}\n width={deviceWidth}\n frameBorder=\"0\"\n title=\"Page Constructor Iframe\"\n />\n <Overlay className={b('overlay')} canvasElement={canvasRef} />\n {!initialized && (\n <div className={b('loading')}>\n <Loader size={'l'} />\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default MiddleScreen;\n"]}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
}
|
|
9
9
|
.pceditor-overlay__border {
|
|
10
10
|
position: absolute;
|
|
11
|
-
border: 3px var(--g-color-
|
|
11
|
+
border: 3px var(--g-color-base-brand) solid;
|
|
12
12
|
border-radius: 24px;
|
|
13
13
|
box-sizing: border-box;
|
|
14
14
|
box-shadow: 4px 4px 8px 0 var(--g-color-sfx-shadow);
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
z-index: 10;
|
|
26
26
|
}
|
|
27
27
|
.pceditor-overlay__line_position_top {
|
|
28
|
-
border-top: 5px var(--g-color-
|
|
29
|
-
border-left: 5px var(--g-color-
|
|
28
|
+
border-top: 5px var(--g-color-base-brand) solid;
|
|
29
|
+
border-left: 5px var(--g-color-base-brand) solid;
|
|
30
30
|
}
|
|
31
31
|
.pceditor-overlay__line_position_bottom {
|
|
32
|
-
border-right: 5px var(--g-color-
|
|
33
|
-
border-bottom: 5px var(--g-color-
|
|
32
|
+
border-right: 5px var(--g-color-base-brand) solid;
|
|
33
|
+
border-bottom: 5px var(--g-color-base-brand) solid;
|
|
34
34
|
}
|
|
35
35
|
.pceditor-overlay__line_position_left {
|
|
36
|
-
border-top: 5px var(--g-color-
|
|
37
|
-
border-left: 5px var(--g-color-
|
|
36
|
+
border-top: 5px var(--g-color-base-brand) solid;
|
|
37
|
+
border-left: 5px var(--g-color-base-brand) solid;
|
|
38
38
|
}
|
|
39
39
|
.pceditor-overlay__line_position_right {
|
|
40
|
-
border-right: 5px var(--g-color-
|
|
41
|
-
border-bottom: 5px var(--g-color-
|
|
40
|
+
border-right: 5px var(--g-color-base-brand) solid;
|
|
41
|
+
border-bottom: 5px var(--g-color-base-brand) solid;
|
|
42
42
|
}
|
|
43
43
|
.pceditor-overlay__actions {
|
|
44
44
|
pointer-events: auto;
|
|
@@ -61,4 +61,7 @@
|
|
|
61
61
|
}
|
|
62
62
|
.pceditor-overlay__actions-box_reorder {
|
|
63
63
|
padding: 3px 4px;
|
|
64
|
+
}
|
|
65
|
+
.pceditor-overlay__reorder-icon {
|
|
66
|
+
color: var(--g-color-base-brand);
|
|
64
67
|
}
|
|
@@ -72,7 +72,7 @@ const Overlay = ({ className, canvasElement }) => {
|
|
|
72
72
|
left: blockBorders.left - margin,
|
|
73
73
|
width: blockBorders.width + margin * 2,
|
|
74
74
|
height: blockBorders.height + margin * 2,
|
|
75
|
-
}, children: (0, jsx_runtime_1.jsxs)("div", { className: b('actions'), children: [(0, jsx_runtime_1.jsx)("div", { className: b('actions-box', { reorder: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat", size: 'm', onClick: handleMoveUp, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronUp, size: 18 }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: b('actions-box', { main: true }), children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && duplicateBlock(selectedBlock), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Copy, size: 18 }) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && deleteBlock(selectedBlock), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.TrashBin, size: 18 }) })] }), (0, jsx_runtime_1.jsx)("div", { className: b('actions-box', { reorder: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat", size: 'm', onClick: handleMoveDown, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronDown, size: 18 }) }) })] }) })) : null, hoverBorders ? ((0, jsx_runtime_1.jsx)("div", { className: b('border', { hover: true }), style: {
|
|
75
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { className: b('actions'), children: [(0, jsx_runtime_1.jsx)("div", { className: b('actions-box', { reorder: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat", size: 'm', onClick: handleMoveUp, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { className: b('reorder-icon'), data: icons_1.ChevronUp, size: 18 }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: b('actions-box', { main: true }), children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && duplicateBlock(selectedBlock), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Copy, size: 18 }) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && deleteBlock(selectedBlock), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.TrashBin, size: 18 }) })] }), (0, jsx_runtime_1.jsx)("div", { className: b('actions-box', { reorder: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat", size: 'm', onClick: handleMoveDown, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { className: b('reorder-icon'), data: icons_1.ChevronDown, size: 18 }) }) })] }) })) : null, hoverBorders ? ((0, jsx_runtime_1.jsx)("div", { className: b('border', { hover: true }), style: {
|
|
76
76
|
top: hoverBorders.top - margin,
|
|
77
77
|
left: hoverBorders.left - margin,
|
|
78
78
|
width: hoverBorders.width + margin * 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Overlay.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import {ChevronDown, ChevronUp, Copy, TrashBin} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\n\nimport './Overlay.scss';\n\nconst b = editorCn('overlay');\n\ninterface OverlayProps {\n className?: string;\n canvasElement?: HTMLDivElement | null;\n}\ninterface InsertLineProps {\n top: number;\n left: number;\n height: number;\n width: number;\n position: string;\n}\n\nconst Overlay = ({className, canvasElement}: OverlayProps) => {\n const {\n height,\n selectedBlock,\n setSelectedBlock,\n deleteBlock,\n duplicateBlock,\n manipulateOverlayMode,\n reorderBlock,\n } = useMainEditorStore();\n const [insertLineBox, setInsertLineBox] = React.useState<InsertLineProps | undefined>(\n undefined,\n );\n const [hoverBorders, setHoverBorders] = React.useState<DOMRect | null>(null);\n const [blockBorders, setBlockBorders] = React.useState<DOMRect | null>(null);\n\n // Listen for updates to the selected block's position\n usePostMessageAPIListener('ON_UPDATE_BLOCK_SELECTION', ({rect}) => {\n setBlockBorders(rect || null);\n });\n\n // Update blockBorders when selectedBlock changes\n React.useEffect(() => {\n if (!selectedBlock) {\n setBlockBorders(null);\n }\n }, [selectedBlock]);\n\n // Auto scroll to the selected block when blockBorders changes\n React.useEffect(() => {\n if (blockBorders && canvasElement) {\n // Calculate the scroll position to center the block in the viewport\n const canvasHeight = canvasElement.clientHeight;\n const scrollPosition = blockBorders.top - canvasHeight / 2 + blockBorders.height / 2;\n\n // Scroll the canvas element to the calculated position with smooth behavior\n canvasElement.scrollTo({\n top: Math.max(0, scrollPosition),\n behavior: 'smooth',\n });\n }\n }, [blockBorders, canvasElement]);\n\n const margin = 0;\n\n usePostMessageAPIListener('ON_HOVER_BLOCK', ({rect, position}) => {\n setHoverBorders(rect || null);\n if (rect && position) {\n setInsertLineBox({\n left: rect.x,\n top: rect.y,\n height: rect.height,\n width: rect.width,\n position: position,\n });\n }\n });\n\n usePostMessageAPIListener('ON_CLICK_BLOCK', ({path}) => {\n setSelectedBlock(path);\n });\n\n const handleMoveUp = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] - 1;\n reorderBlock(selectedBlock, destination, 'prepend');\n };\n\n const handleMoveDown = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] + 1;\n reorderBlock(selectedBlock, destination, 'append');\n };\n\n return (\n <div className={b(null, className)} style={{height: `${height}px`}}>\n {blockBorders ? (\n <div\n className={b('border')}\n style={{\n top: blockBorders.top - margin,\n left: blockBorders.left - margin,\n width: blockBorders.width + margin * 2,\n height: blockBorders.height + margin * 2,\n }}\n >\n <div className={b('actions')}>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveUp}>\n <Icon data={ChevronUp} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {main: true})}>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && duplicateBlock(selectedBlock)}\n >\n <Icon data={Copy} size={18} />\n </Button>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && deleteBlock(selectedBlock)}\n >\n <Icon data={TrashBin} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveDown}>\n <Icon data={ChevronDown} size={18} />\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n {hoverBorders ? (\n <div\n className={b('border', {hover: true})}\n style={{\n top: hoverBorders.top - margin,\n left: hoverBorders.left - margin,\n width: hoverBorders.width + margin * 2,\n height: hoverBorders.height + margin * 2,\n }}\n ></div>\n ) : null}\n {manipulateOverlayMode && hoverBorders && insertLineBox ? (\n <div\n className={b('line', {\n position: insertLineBox.position,\n })}\n style={{\n top: hoverBorders.top,\n left: hoverBorders.left,\n width: hoverBorders.width,\n height: hoverBorders.height,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Overlay;\n"]}
|
|
1
|
+
{"version":3,"file":"Overlay.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import {ChevronDown, ChevronUp, Copy, TrashBin} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\n\nimport './Overlay.scss';\n\nconst b = editorCn('overlay');\n\ninterface OverlayProps {\n className?: string;\n canvasElement?: HTMLDivElement | null;\n}\ninterface InsertLineProps {\n top: number;\n left: number;\n height: number;\n width: number;\n position: string;\n}\n\nconst Overlay = ({className, canvasElement}: OverlayProps) => {\n const {\n height,\n selectedBlock,\n setSelectedBlock,\n deleteBlock,\n duplicateBlock,\n manipulateOverlayMode,\n reorderBlock,\n } = useMainEditorStore();\n const [insertLineBox, setInsertLineBox] = React.useState<InsertLineProps | undefined>(\n undefined,\n );\n const [hoverBorders, setHoverBorders] = React.useState<DOMRect | null>(null);\n const [blockBorders, setBlockBorders] = React.useState<DOMRect | null>(null);\n\n // Listen for updates to the selected block's position\n usePostMessageAPIListener('ON_UPDATE_BLOCK_SELECTION', ({rect}) => {\n setBlockBorders(rect || null);\n });\n\n // Update blockBorders when selectedBlock changes\n React.useEffect(() => {\n if (!selectedBlock) {\n setBlockBorders(null);\n }\n }, [selectedBlock]);\n\n // Auto scroll to the selected block when blockBorders changes\n React.useEffect(() => {\n if (blockBorders && canvasElement) {\n // Calculate the scroll position to center the block in the viewport\n const canvasHeight = canvasElement.clientHeight;\n const scrollPosition = blockBorders.top - canvasHeight / 2 + blockBorders.height / 2;\n\n // Scroll the canvas element to the calculated position with smooth behavior\n canvasElement.scrollTo({\n top: Math.max(0, scrollPosition),\n behavior: 'smooth',\n });\n }\n }, [blockBorders, canvasElement]);\n\n const margin = 0;\n\n usePostMessageAPIListener('ON_HOVER_BLOCK', ({rect, position}) => {\n setHoverBorders(rect || null);\n if (rect && position) {\n setInsertLineBox({\n left: rect.x,\n top: rect.y,\n height: rect.height,\n width: rect.width,\n position: position,\n });\n }\n });\n\n usePostMessageAPIListener('ON_CLICK_BLOCK', ({path}) => {\n setSelectedBlock(path);\n });\n\n const handleMoveUp = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] - 1;\n reorderBlock(selectedBlock, destination, 'prepend');\n };\n\n const handleMoveDown = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] + 1;\n reorderBlock(selectedBlock, destination, 'append');\n };\n\n return (\n <div className={b(null, className)} style={{height: `${height}px`}}>\n {blockBorders ? (\n <div\n className={b('border')}\n style={{\n top: blockBorders.top - margin,\n left: blockBorders.left - margin,\n width: blockBorders.width + margin * 2,\n height: blockBorders.height + margin * 2,\n }}\n >\n <div className={b('actions')}>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveUp}>\n <Icon className={b('reorder-icon')} data={ChevronUp} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {main: true})}>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && duplicateBlock(selectedBlock)}\n >\n <Icon data={Copy} size={18} />\n </Button>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && deleteBlock(selectedBlock)}\n >\n <Icon data={TrashBin} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveDown}>\n <Icon className={b('reorder-icon')} data={ChevronDown} size={18} />\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n {hoverBorders ? (\n <div\n className={b('border', {hover: true})}\n style={{\n top: hoverBorders.top - margin,\n left: hoverBorders.left - margin,\n width: hoverBorders.width + margin * 2,\n height: hoverBorders.height + margin * 2,\n }}\n ></div>\n ) : null}\n {manipulateOverlayMode && hoverBorders && insertLineBox ? (\n <div\n className={b('line', {\n position: insertLineBox.position,\n })}\n style={{\n top: hoverBorders.top,\n left: hoverBorders.left,\n width: hoverBorders.width,\n height: hoverBorders.height,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Overlay;\n"]}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const React = tslib_1.__importStar(require("react"));
|
|
3
5
|
const postMessage_1 = require("../../common/postMessage.js");
|
|
4
6
|
const useMainEditorStore_1 = require("./useMainEditorStore.js");
|
|
5
7
|
const usePostMessageEvents_1 = require("./usePostMessageEvents.js");
|
|
6
|
-
const useMainEditorInitialize = () => {
|
|
8
|
+
const useMainEditorInitialize = (initialContent) => {
|
|
7
9
|
const { requestPostMessage } = (0, usePostMessageEvents_1.usePostMessageEvents)();
|
|
8
10
|
const { initialize, setConfig, setContent, manipulateOverlayMode, disableMode, insertBlock, reorderBlock, preInsertBlockType, preReorderBlockPath, } = (0, useMainEditorStore_1.useMainEditorStore)();
|
|
9
11
|
(0, postMessage_1.usePostMessageAPIListener)('ON_INIT', () => {
|
|
10
12
|
initialize();
|
|
11
13
|
requestPostMessage('GET_SUPPORTED_BLOCKS', {});
|
|
12
|
-
|
|
14
|
+
if (!initialContent) {
|
|
15
|
+
requestPostMessage('GET_INITIAL_CONTENT', {});
|
|
16
|
+
}
|
|
13
17
|
}, [requestPostMessage]);
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
if (initialContent) {
|
|
20
|
+
setContent(initialContent);
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
+
}, [initialContent]);
|
|
14
24
|
(0, postMessage_1.usePostMessageAPIListener)('ON_INITIAL_CONTENT', (data) => {
|
|
15
25
|
setContent(data);
|
|
16
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMainEditorInitialize.js","sourceRoot":"../../../../src","sources":["editor-v2/hooks/useMainEditorInitialize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useMainEditorInitialize.js","sourceRoot":"../../../../src","sources":["editor-v2/hooks/useMainEditorInitialize.ts"],"names":[],"mappings":";;;AAAA,qDAA+B;AAC/B,6DAAmE;AAGnE,gEAAwD;AACxD,oEAA4D;AAE5D,MAAM,uBAAuB,GAAG,CAAC,cAA0C,EAAE,EAAE;IAC3E,MAAM,EAAC,kBAAkB,EAAC,GAAG,IAAA,2CAAoB,GAAE,CAAC;IACpD,MAAM,EACF,UAAU,EACV,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GACtB,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAEzB,IAAA,uCAAyB,EACrB,SAAS,EACT,GAAG,EAAE;QACD,UAAU,EAAE,CAAC;QACb,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,kBAAkB,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,EACD,CAAC,kBAAkB,CAAC,CACvB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,cAAc,EAAE,CAAC;YACjB,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QACD,uDAAuD;IAC3D,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,IAAA,uCAAyB,EAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;QACrD,UAAU,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAA,uCAAyB,EAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;QACtD,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAA,uCAAyB,EACrB,aAAa,EACb,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAE,EAAE;QACjB,IAAI,qBAAqB,KAAK,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC/E,WAAW,CACP,IAAI,EACJ,kBAAkB,EAClB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAC5D,CAAC;QACN,CAAC;QACD,IAAI,qBAAqB,KAAK,SAAS,IAAI,IAAI,IAAI,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YACjF,YAAY,CACR,mBAAmB,EACnB,IAAI,EACJ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAC5D,CAAC;QACN,CAAC;QACD,WAAW,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAC5C,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,uBAAuB,CAAC","sourcesContent":["import * as React from 'react';\nimport {usePostMessageAPIListener} from '../../common/postMessage';\nimport {PageContentWithNavigation} from '../../models';\n\nimport {useMainEditorStore} from './useMainEditorStore';\nimport {usePostMessageEvents} from './usePostMessageEvents';\n\nconst useMainEditorInitialize = (initialContent?: PageContentWithNavigation) => {\n const {requestPostMessage} = usePostMessageEvents();\n const {\n initialize,\n setConfig,\n setContent,\n manipulateOverlayMode,\n disableMode,\n insertBlock,\n reorderBlock,\n preInsertBlockType,\n preReorderBlockPath,\n } = useMainEditorStore();\n\n usePostMessageAPIListener(\n 'ON_INIT',\n () => {\n initialize();\n requestPostMessage('GET_SUPPORTED_BLOCKS', {});\n\n if (!initialContent) {\n requestPostMessage('GET_INITIAL_CONTENT', {});\n }\n },\n [requestPostMessage],\n );\n\n React.useEffect(() => {\n if (initialContent) {\n setContent(initialContent);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialContent]);\n\n usePostMessageAPIListener('ON_INITIAL_CONTENT', (data) => {\n setContent(data);\n });\n\n usePostMessageAPIListener('ON_SUPPORTED_BLOCKS', (data) => {\n setConfig(data);\n });\n\n usePostMessageAPIListener(\n 'ON_MOUSE_UP',\n ({path, position}) => {\n if (manipulateOverlayMode === 'insert' && path && position && preInsertBlockType) {\n insertBlock(\n path,\n preInsertBlockType,\n ['left', 'top'].includes(position) ? 'prepend' : 'append',\n );\n }\n if (manipulateOverlayMode === 'reorder' && path && position && preReorderBlockPath) {\n reorderBlock(\n preReorderBlockPath,\n path,\n ['left', 'top'].includes(position) ? 'prepend' : 'append',\n );\n }\n disableMode();\n },\n [preInsertBlockType, preReorderBlockPath],\n );\n};\n\nexport default useMainEditorInitialize;\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
.g-root {
|
|
2
2
|
--g-color-base-selection: var(--g-color-private-black-200);
|
|
3
3
|
--g-color-base-selection-hover: var(--g-color-private-black-300);
|
|
4
|
-
--g-color-base-brand:
|
|
5
|
-
--g-color-base-brand-hover:
|
|
4
|
+
--g-color-base-brand: rgb(38, 38, 38);
|
|
5
|
+
--g-color-base-brand-hover: rgb(76, 76, 76);
|
|
6
6
|
--g-color-text-brand-contrast: var(--g-color-text-light-primary);
|
|
7
|
-
--g-color-text-brand-heavy:
|
|
7
|
+
--g-color-text-brand-heavy: rgb(76, 76, 76);
|
|
8
8
|
--g-color-line-brand: var(--g-color-text-primary);
|
|
9
9
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
.pceditor-field-base {
|
|
2
|
-
padding: 16px 12px;
|
|
2
|
+
padding: 16px 12px 16px 0;
|
|
3
3
|
border-bottom: 1px solid var(--g-color-line-generic);
|
|
4
4
|
position: relative;
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-direction: row;
|
|
7
7
|
align-items: flex-start;
|
|
8
|
-
gap: 8px;
|
|
9
8
|
}
|
|
10
|
-
.pceditor-field-base:hover > .pceditor-field-base__top > .pceditor-field-base__button {
|
|
9
|
+
.pceditor-field-base:hover > .pceditor-field-base__top .pceditor-field-base__title > .pceditor-field-base__button {
|
|
11
10
|
opacity: 1;
|
|
12
11
|
}
|
|
13
12
|
.pceditor-field-base_expandable {
|
|
@@ -25,11 +24,12 @@
|
|
|
25
24
|
display: flex;
|
|
26
25
|
align-items: center;
|
|
27
26
|
gap: 4px;
|
|
28
|
-
flex: 0 0
|
|
29
|
-
word-break: break-
|
|
27
|
+
flex: 0 0 84px;
|
|
28
|
+
word-break: break-word;
|
|
30
29
|
}
|
|
31
30
|
.pceditor-field-base__children {
|
|
32
31
|
flex: 2 1 auto;
|
|
32
|
+
margin-left: 12px;
|
|
33
33
|
}
|
|
34
34
|
.pceditor-field-base__foldable {
|
|
35
35
|
width: 100%;
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
font-weight: var(--g-text-body-font-weight);
|
|
52
52
|
font-size: var(--g-text-body-2-font-size);
|
|
53
53
|
line-height: var(--g-text-body-2-line-height);
|
|
54
|
-
margin: 5px 0;
|
|
54
|
+
margin: 5px 16px 5px 0;
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-direction: row;
|
|
55
57
|
}
|
|
56
58
|
.pceditor-field-base__title_size_s {
|
|
57
59
|
font-family: var(--g-text-body-font-family);
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ArrowToggle } from '@gravity-ui/uikit';
|
|
2
|
+
import { ArrowToggle, Button, Icon } from '@gravity-ui/uikit';
|
|
3
|
+
import { ArrowRotateLeft } from '@gravity-ui/icons';
|
|
3
4
|
import _ from 'lodash';
|
|
4
5
|
import * as React from 'react';
|
|
5
6
|
import { editorCn } from "../../../utils/cn.js";
|
|
6
7
|
import './FieldBase.css';
|
|
7
8
|
const b = editorCn('field-base');
|
|
8
|
-
const FieldBase = ({ className, title, textSize = 's', children, expandable = false, }) => {
|
|
9
|
+
const FieldBase = ({ className, title, textSize = 's', children, expandable = false, onRefresh, }) => {
|
|
9
10
|
const [showChildren, setShowChildren] = React.useState(!expandable);
|
|
10
11
|
const titleComponent = React.useMemo(() => {
|
|
11
12
|
if (title) {
|
|
12
|
-
const defaultTitle = (
|
|
13
|
+
const defaultTitle = (_jsxs("div", { className: b('title', { size: textSize }), children: [onRefresh && (_jsx(Button, { className: b('button'), onClick: (e) => {
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
onRefresh(undefined);
|
|
16
|
+
}, view: 'flat', size: 'xs', children: _jsx(Icon, { data: ArrowRotateLeft, size: 14 }) })), _jsx("span", { children: _.capitalize(title) })] }));
|
|
13
17
|
if (expandable) {
|
|
14
18
|
return (
|
|
15
19
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
|
|
@@ -18,7 +22,7 @@ const FieldBase = ({ className, title, textSize = 's', children, expandable = fa
|
|
|
18
22
|
return _jsx("div", { className: b('non-foldable'), children: defaultTitle });
|
|
19
23
|
}
|
|
20
24
|
return null;
|
|
21
|
-
}, [expandable, showChildren, textSize, title]);
|
|
25
|
+
}, [expandable, showChildren, textSize, title, onRefresh]);
|
|
22
26
|
return (_jsxs("div", { className: b({ expandable }, className), children: [title && _jsx("div", { className: b('top'), children: titleComponent }), (!title || showChildren) && _jsx("div", { className: b('children'), children: children })] }));
|
|
23
27
|
};
|
|
24
28
|
export default FieldBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBase.js","sourceRoot":"../../../../../../src","sources":["editor-v2/components/DynamicForm/FieldBase/FieldBase.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"FieldBase.js","sourceRoot":"../../../../../../src","sources":["editor-v2/components/DynamicForm/FieldBase/FieldBase.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,QAAQ,EAAC,6BAA0B;AAE3C,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AAajC,MAAM,SAAS,GAA6B,CAAC,EACzC,SAAS,EACT,KAAK,EACL,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;IAEpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,YAAY,GAAG,CACjB,eAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,aACvC,SAAS,IAAI,CACV,KAAC,MAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,OAAO,EAAE,CAAC,CAAsC,EAAE,EAAE;4BAChD,CAAC,CAAC,eAAe,EAAE,CAAC;4BACpB,SAAS,CAAC,SAAS,CAAC,CAAC;wBACzB,CAAC,EACD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,YAEV,KAAC,IAAI,IAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAI,GACpC,CACZ,EACD,yBAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAQ,IAChC,CACT,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO;gBACH,yGAAyG;gBACzG,eAAK,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,aACvE,YAAY,EACb,KAAC,WAAW,IACR,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAC5C,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,GAC9B,IACA,CACT,CAAC;YACN,CAAC;YAED,OAAO,cAAK,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,YAAG,YAAY,GAAO,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3D,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,UAAU,EAAC,EAAE,SAAS,CAAC,aACrC,KAAK,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,YAAG,cAAc,GAAO,EACzD,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,YAAG,QAAQ,GAAO,IAC1E,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import {ArrowToggle, Button, Icon} from '@gravity-ui/uikit';\nimport {ArrowRotateLeft} from '@gravity-ui/icons';\nimport _ from 'lodash';\nimport * as React from 'react';\n\nimport {editorCn} from '../../../utils/cn';\n\nimport './FieldBase.scss';\n\nconst b = editorCn('field-base');\n\nexport interface FieldBaseParams {\n title?: string;\n textSize?: 's' | 'm' | 'l';\n onRefresh?: (value: undefined) => void;\n expandable?: boolean;\n}\n\nexport interface FieldBaseProps extends React.PropsWithChildren, FieldBaseParams {\n className?: string;\n}\n\nconst FieldBase: React.FC<FieldBaseProps> = ({\n className,\n title,\n textSize = 's',\n children,\n expandable = false,\n onRefresh,\n}) => {\n const [showChildren, setShowChildren] = React.useState(!expandable);\n\n const titleComponent = React.useMemo(() => {\n if (title) {\n const defaultTitle = (\n <div className={b('title', {size: textSize})}>\n {onRefresh && (\n <Button\n className={b('button')}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onRefresh(undefined);\n }}\n view={'flat'}\n size={'xs'}\n >\n <Icon data={ArrowRotateLeft} size={14} />\n </Button>\n )}\n <span>{_.capitalize(title)}</span>\n </div>\n );\n\n if (expandable) {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div className={b('foldable')} onClick={() => setShowChildren(!showChildren)}>\n {defaultTitle}\n <ArrowToggle\n direction={showChildren ? 'bottom' : 'right'}\n className={b('arrow-toggle')}\n />\n </div>\n );\n }\n\n return <div className={b('non-foldable')}>{defaultTitle}</div>;\n }\n\n return null;\n }, [expandable, showChildren, textSize, title, onRefresh]);\n\n return (\n <div className={b({expandable}, className)}>\n {title && <div className={b('top')}>{titleComponent}</div>}\n {(!title || showChildren) && <div className={b('children')}>{children}</div>}\n </div>\n );\n};\n\nexport default FieldBase;\n"]}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
font-weight: var(--g-text-subheader-font-weight);
|
|
4
4
|
font-size: var(--g-text-subheader-3-font-size);
|
|
5
5
|
line-height: var(--g-text-subheader-3-line-height);
|
|
6
|
-
padding: 12px
|
|
6
|
+
padding: 12px;
|
|
7
7
|
border-bottom: 1px solid var(--g-color-line-generic);
|
|
8
8
|
}
|
|
9
9
|
.pceditor-block-config-form__form {
|
|
10
10
|
padding: 12px 0;
|
|
11
11
|
}
|
|
12
12
|
.pceditor-block-config-form__empty {
|
|
13
|
-
padding: 12px
|
|
13
|
+
padding: 12px;
|
|
14
14
|
display: flex;
|
|
15
15
|
justify-content: center;
|
|
16
16
|
align-items: center;
|
|
@@ -9,6 +9,7 @@ interface SidebarTabComponent {
|
|
|
9
9
|
interface EditorViewProps {
|
|
10
10
|
onUpdate?: (pageContent: PageContentWithNavigation) => void;
|
|
11
11
|
initialUrl: string;
|
|
12
|
+
initialContent?: PageContentWithNavigation;
|
|
12
13
|
disableUrlField?: boolean;
|
|
13
14
|
componentsConfig?: {
|
|
14
15
|
middleTop?: React.ElementType;
|
|
@@ -14,10 +14,10 @@ import Source from "../Source/Source.js";
|
|
|
14
14
|
import ViewSwitches from "../ViewSwitches/ViewSwitches.js";
|
|
15
15
|
import './Editor.css';
|
|
16
16
|
const b = editorCn('editor');
|
|
17
|
-
const EditorView = ({ componentsConfig = {} }) => {
|
|
17
|
+
const EditorView = ({ componentsConfig = {}, initialContent }) => {
|
|
18
18
|
const store = useMainEditorStore();
|
|
19
19
|
const { manipulateOverlayMode, disableMode } = store;
|
|
20
|
-
useMainEditorInitialize();
|
|
20
|
+
useMainEditorInitialize(initialContent);
|
|
21
21
|
// Disable insert mode on any MouseUp event
|
|
22
22
|
// Maybe should be attached to body
|
|
23
23
|
const onMouseUp = React.useCallback((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Editor/Editor.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,MAAM,EAAC,0CAAuC;AACtD,OAAO,EAAC,OAAO,EAAC,4CAAyC;AACzD,OAAO,UAAU,oCAA+C;AAChE,OAAO,YAAY,wCAAmD;AACtE,OAAO,EAAC,uBAAuB,EAAC,2CAAkC;AAClE,OAAO,EAAC,cAAc,EAAC,6CAAoC;AAC3D,OAAO,EAAC,aAAa,EAAC,qCAAkC;AACxD,OAAO,uBAAuB,+CAA4C;AAC1E,OAAO,EAAC,kBAAkB,EAAC,0CAAuC;AAClE,OAAO,EAAC,QAAQ,EAAC,0BAAuB;AACxC,OAAO,MAAM,4BAAyB;AACtC,OAAO,YAAY,wCAAqC;AAExD,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Editor/Editor.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,MAAM,EAAC,0CAAuC;AACtD,OAAO,EAAC,OAAO,EAAC,4CAAyC;AACzD,OAAO,UAAU,oCAA+C;AAChE,OAAO,YAAY,wCAAmD;AACtE,OAAO,EAAC,uBAAuB,EAAC,2CAAkC;AAClE,OAAO,EAAC,cAAc,EAAC,6CAAoC;AAC3D,OAAO,EAAC,aAAa,EAAC,qCAAkC;AACxD,OAAO,uBAAuB,+CAA4C;AAC1E,OAAO,EAAC,kBAAkB,EAAC,0CAAuC;AAClE,OAAO,EAAC,QAAQ,EAAC,0BAAuB;AACxC,OAAO,MAAM,4BAAyB;AACtC,OAAO,YAAY,wCAAqC;AAExD,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAqB7B,MAAM,UAAU,GAAG,CAAC,EAAC,gBAAgB,GAAG,EAAE,EAAE,cAAc,EAAkB,EAAE,EAAE;IAC5E,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,MAAM,EAAC,qBAAqB,EAAE,WAAW,EAAC,GAAG,KAAK,CAAC;IAEnD,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAExC,2CAA2C;IAC3C,mCAAmC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAC/B,CAAC,CAAmB,EAAE,EAAE;QACpB,IAAI,qBAAqB,EAAE,CAAC;YACxB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;QAClB,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,qBAAqB,CAAC,CACvC,CAAC;IACF,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAEtD,OAAO;IACH,mEAAmE;IACnE,eAAK,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,aACrC,cAAK,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,YACrB,KAAC,MAAM,IACH,IAAI,EAAE,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,OAAO,GAAI,EAC5D,KAAK,EACD,KAAC,OAAO,IACJ,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EACjE,UAAU,EAAC,cAAc,GAC3B,EAEN,MAAM,EAAE,KAAC,YAAY,IAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,GAAI,GACjE,GACA,EACN,KAAC,UAAU,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,IACrC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAE,EAAE;IAC7C,OAAO,CACH,KAAC,cAAc,IAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,YAChF,KAAC,uBAAuB,cACpB,KAAC,UAAU,OAAK,KAAK,GAAI,GACH,GACb,CACpB,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {PageContentWithNavigation} from '../../../models';\nimport {Panels} from '../../components/Panels/Panels';\nimport {Sidebar} from '../../components/Sidebar/Sidebar';\nimport BigOverlay from '../../containers/BigOverlay/BigOverlay';\nimport MiddleScreen from '../../containers/MiddleScreen/MiddleScreen';\nimport {MainEditorStoreProvider} from '../../context/editorStore';\nimport {IframeProvider} from '../../context/iframeContext';\nimport {useEditorTabs} from '../../hooks/useEditorTabs';\nimport useMainEditorInitialize from '../../hooks/useMainEditorInitialize';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\nimport Source from '../Source/Source';\nimport ViewSwitches from '../ViewSwitches/ViewSwitches';\n\nimport './Editor.scss';\n\nconst b = editorCn('editor');\n\ninterface SidebarTabComponent {\n id: string;\n title: string;\n component: React.ElementType;\n}\ninterface EditorViewProps {\n onUpdate?: (pageContent: PageContentWithNavigation) => void;\n initialUrl: string;\n initialContent?: PageContentWithNavigation;\n disableUrlField?: boolean;\n componentsConfig?: {\n middleTop?: React.ElementType;\n leftTop?: React.ElementType[];\n rightTop?: React.ElementType[];\n leftTabs?: SidebarTabComponent[];\n rightTabs?: SidebarTabComponent[];\n };\n}\n\nconst EditorView = ({componentsConfig = {}, initialContent}: EditorViewProps) => {\n const store = useMainEditorStore();\n const {manipulateOverlayMode, disableMode} = store;\n\n useMainEditorInitialize(initialContent);\n\n // Disable insert mode on any MouseUp event\n // Maybe should be attached to body\n const onMouseUp = React.useCallback(\n (e: React.MouseEvent) => {\n if (manipulateOverlayMode) {\n e.preventDefault();\n disableMode();\n }\n },\n [disableMode, manipulateOverlayMode],\n );\n const {left, right} = useEditorTabs(componentsConfig);\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div className={b()} onMouseUp={onMouseUp}>\n <div className={b('body')}>\n <Panels\n left={<Sidebar tabs={left} top={componentsConfig.leftTop} />}\n right={\n <Sidebar\n tabs={right}\n top={[...(componentsConfig.rightTop || []), Source, ViewSwitches]}\n defaultTab=\"block-config\"\n />\n }\n middle={<MiddleScreen CustomTop={componentsConfig.middleTop} />}\n />\n </div>\n <BigOverlay className={b('overlay')} />\n </div>\n );\n};\n\nexport const Editor = (props: EditorViewProps) => {\n return (\n <IframeProvider initialUrl={props.initialUrl} disableUrlField={props.disableUrlField}>\n <MainEditorStoreProvider>\n <EditorView {...props} />\n </MainEditorStoreProvider>\n </IframeProvider>\n );\n};\n"]}
|
|
@@ -16,12 +16,21 @@
|
|
|
16
16
|
width: 100%;
|
|
17
17
|
height: 100%;
|
|
18
18
|
margin: auto;
|
|
19
|
+
display: flex;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
overflow: hidden;
|
|
19
23
|
}
|
|
20
24
|
.pceditor-middle-screen__canvas {
|
|
21
|
-
transform-origin:
|
|
25
|
+
transform-origin: center top;
|
|
22
26
|
overflow-y: scroll;
|
|
23
27
|
position: relative;
|
|
24
28
|
height: 100%;
|
|
29
|
+
max-width: 100%;
|
|
30
|
+
}
|
|
31
|
+
.pceditor-middle-screen__iframe {
|
|
32
|
+
display: block;
|
|
33
|
+
margin: 0 auto;
|
|
25
34
|
}
|
|
26
35
|
.pceditor-middle-screen__overlay {
|
|
27
36
|
position: absolute;
|
|
@@ -22,11 +22,12 @@ const MiddleScreen = ({ className, CustomTop }) => {
|
|
|
22
22
|
usePostMessageAPIListener('ON_INIT', ({ height: newHeight }) => {
|
|
23
23
|
onResize(newHeight);
|
|
24
24
|
});
|
|
25
|
-
return (_jsxs("div", { className: b(null, className), children: [CustomTop ? (_jsx("div", { className: b('topbar'), children: _jsx(CustomTop, {}) })) : null, _jsx("div", { className: b('content'), children: _jsx("div", { className: b('wrapper'),
|
|
25
|
+
return (_jsxs("div", { className: b(null, className), children: [CustomTop ? (_jsx("div", { className: b('topbar'), children: _jsx(CustomTop, {}) })) : null, _jsx("div", { className: b('content'), children: _jsx("div", { className: b('wrapper'), children: _jsxs("div", { ref: setCanvasRef, className: b('canvas', { hidden: !initialized }), style: {
|
|
26
26
|
transform: `scale(${zoom}%)`,
|
|
27
27
|
height: `${(100 / zoom) * 100}%`,
|
|
28
|
-
width:
|
|
29
|
-
|
|
28
|
+
width: deviceWidth,
|
|
29
|
+
maxWidth: `${(100 / zoom) * 100}%`,
|
|
30
|
+
}, children: [_jsx("iframe", { ref: (instance) => instance && setIframeElement(instance), className: b('iframe'), src: url, height: `${height}px`, width: deviceWidth, frameBorder: "0", title: "Page Constructor Iframe" }), _jsx(Overlay, { className: b('overlay'), canvasElement: canvasRef }), !initialized && (_jsx("div", { className: b('loading'), children: _jsx(Loader, { size: 'l' }) }))] }) }) })] }));
|
|
30
31
|
};
|
|
31
32
|
export default MiddleScreen;
|
|
32
33
|
//# sourceMappingURL=MiddleScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MiddleScreen.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/MiddleScreen/MiddleScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,yBAAyB,EAAC,uCAAoC;AACtE,OAAO,EAAC,aAAa,EAAC,6CAAoC;AAC1D,OAAO,EAAC,kBAAkB,EAAC,0CAAuC;AAClE,OAAO,EAAC,QAAQ,EAAC,0BAAuB;AACxC,OAAO,OAAO,8BAA2B;AAEzC,OAAO,oBAAoB,CAAC;AAE5B,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAOpC,MAAM,YAAY,GAAG,CAAC,EAAC,SAAS,EAAE,SAAS,EAAoB,EAAE,EAAE;IAC/D,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,kBAAkB,EAAE,CAAC;IAC9D,MAAM,EAAC,GAAG,EAAE,gBAAgB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,SAAiB,EAAE,EAAE;QAClB,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,yBAAyB,CAAC,WAAW,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QAC3D,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,yBAAyB,CAAC,SAAS,EAAE,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,EAAE;QACzD,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aAC7B,SAAS,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YACvB,KAAC,SAAS,KAAG,GACX,CACT,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"MiddleScreen.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/MiddleScreen/MiddleScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Loader} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {IframeContext} from '../../context/iframeContext';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\nimport Overlay from '../Overlay/Overlay';\n\nimport './MiddleScreen.scss';\n\nconst b = editorCn('middle-screen');\n\ninterface MiddleScreenProps {\n className?: string;\n CustomTop?: React.ElementType;\n}\n\nconst MiddleScreen = ({className, CustomTop}: MiddleScreenProps) => {\n const {zoom, initialized, deviceWidth} = useMainEditorStore();\n const {url, setIframeElement} = React.useContext(IframeContext);\n const [canvasRef, setCanvasRef] = React.useState<HTMLDivElement | null>(null);\n const [height, setHeight] = React.useState(0);\n\n const onResize = React.useCallback(\n (newHeight: number) => {\n setHeight(newHeight + 500);\n },\n [setHeight],\n );\n\n usePostMessageAPIListener('ON_RESIZE', ({height: newHeight}) => {\n onResize(newHeight);\n });\n\n usePostMessageAPIListener('ON_INIT', ({height: newHeight}) => {\n onResize(newHeight);\n });\n\n return (\n <div className={b(null, className)}>\n {CustomTop ? (\n <div className={b('topbar')}>\n <CustomTop />\n </div>\n ) : null}\n <div className={b('content')}>\n <div className={b('wrapper')}>\n <div\n ref={setCanvasRef}\n className={b('canvas', {hidden: !initialized})}\n style={{\n transform: `scale(${zoom}%)`,\n height: `${(100 / zoom) * 100}%`,\n width: deviceWidth,\n maxWidth: `${(100 / zoom) * 100}%`,\n }}\n >\n <iframe\n ref={(instance) => instance && setIframeElement(instance)}\n className={b('iframe')}\n src={url}\n height={`${height}px`}\n width={deviceWidth}\n frameBorder=\"0\"\n title=\"Page Constructor Iframe\"\n />\n <Overlay className={b('overlay')} canvasElement={canvasRef} />\n {!initialized && (\n <div className={b('loading')}>\n <Loader size={'l'} />\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default MiddleScreen;\n"]}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
}
|
|
9
9
|
.pceditor-overlay__border {
|
|
10
10
|
position: absolute;
|
|
11
|
-
border: 3px var(--g-color-
|
|
11
|
+
border: 3px var(--g-color-base-brand) solid;
|
|
12
12
|
border-radius: 24px;
|
|
13
13
|
box-sizing: border-box;
|
|
14
14
|
box-shadow: 4px 4px 8px 0 var(--g-color-sfx-shadow);
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
z-index: 10;
|
|
26
26
|
}
|
|
27
27
|
.pceditor-overlay__line_position_top {
|
|
28
|
-
border-top: 5px var(--g-color-
|
|
29
|
-
border-left: 5px var(--g-color-
|
|
28
|
+
border-top: 5px var(--g-color-base-brand) solid;
|
|
29
|
+
border-left: 5px var(--g-color-base-brand) solid;
|
|
30
30
|
}
|
|
31
31
|
.pceditor-overlay__line_position_bottom {
|
|
32
|
-
border-right: 5px var(--g-color-
|
|
33
|
-
border-bottom: 5px var(--g-color-
|
|
32
|
+
border-right: 5px var(--g-color-base-brand) solid;
|
|
33
|
+
border-bottom: 5px var(--g-color-base-brand) solid;
|
|
34
34
|
}
|
|
35
35
|
.pceditor-overlay__line_position_left {
|
|
36
|
-
border-top: 5px var(--g-color-
|
|
37
|
-
border-left: 5px var(--g-color-
|
|
36
|
+
border-top: 5px var(--g-color-base-brand) solid;
|
|
37
|
+
border-left: 5px var(--g-color-base-brand) solid;
|
|
38
38
|
}
|
|
39
39
|
.pceditor-overlay__line_position_right {
|
|
40
|
-
border-right: 5px var(--g-color-
|
|
41
|
-
border-bottom: 5px var(--g-color-
|
|
40
|
+
border-right: 5px var(--g-color-base-brand) solid;
|
|
41
|
+
border-bottom: 5px var(--g-color-base-brand) solid;
|
|
42
42
|
}
|
|
43
43
|
.pceditor-overlay__actions {
|
|
44
44
|
pointer-events: auto;
|
|
@@ -61,4 +61,7 @@
|
|
|
61
61
|
}
|
|
62
62
|
.pceditor-overlay__actions-box_reorder {
|
|
63
63
|
padding: 3px 4px;
|
|
64
|
+
}
|
|
65
|
+
.pceditor-overlay__reorder-icon {
|
|
66
|
+
color: var(--g-color-base-brand);
|
|
64
67
|
}
|
|
@@ -70,7 +70,7 @@ const Overlay = ({ className, canvasElement }) => {
|
|
|
70
70
|
left: blockBorders.left - margin,
|
|
71
71
|
width: blockBorders.width + margin * 2,
|
|
72
72
|
height: blockBorders.height + margin * 2,
|
|
73
|
-
}, children: _jsxs("div", { className: b('actions'), children: [_jsx("div", { className: b('actions-box', { reorder: true }), children: _jsx(Button, { view: "flat", size: 'm', onClick: handleMoveUp, children: _jsx(Icon, { data: ChevronUp, size: 18 }) }) }), _jsxs("div", { className: b('actions-box', { main: true }), children: [_jsx(Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && duplicateBlock(selectedBlock), children: _jsx(Icon, { data: Copy, size: 18 }) }), _jsx(Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && deleteBlock(selectedBlock), children: _jsx(Icon, { data: TrashBin, size: 18 }) })] }), _jsx("div", { className: b('actions-box', { reorder: true }), children: _jsx(Button, { view: "flat", size: 'm', onClick: handleMoveDown, children: _jsx(Icon, { data: ChevronDown, size: 18 }) }) })] }) })) : null, hoverBorders ? (_jsx("div", { className: b('border', { hover: true }), style: {
|
|
73
|
+
}, children: _jsxs("div", { className: b('actions'), children: [_jsx("div", { className: b('actions-box', { reorder: true }), children: _jsx(Button, { view: "flat", size: 'm', onClick: handleMoveUp, children: _jsx(Icon, { className: b('reorder-icon'), data: ChevronUp, size: 18 }) }) }), _jsxs("div", { className: b('actions-box', { main: true }), children: [_jsx(Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && duplicateBlock(selectedBlock), children: _jsx(Icon, { data: Copy, size: 18 }) }), _jsx(Button, { className: b('action-button'), size: 'm', view: 'action', onClick: () => selectedBlock && deleteBlock(selectedBlock), children: _jsx(Icon, { data: TrashBin, size: 18 }) })] }), _jsx("div", { className: b('actions-box', { reorder: true }), children: _jsx(Button, { view: "flat", size: 'm', onClick: handleMoveDown, children: _jsx(Icon, { className: b('reorder-icon'), data: ChevronDown, size: 18 }) }) })] }) })) : null, hoverBorders ? (_jsx("div", { className: b('border', { hover: true }), style: {
|
|
74
74
|
top: hoverBorders.top - margin,
|
|
75
75
|
left: hoverBorders.left - margin,
|
|
76
76
|
width: hoverBorders.width + margin * 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Overlay.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import {ChevronDown, ChevronUp, Copy, TrashBin} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\n\nimport './Overlay.scss';\n\nconst b = editorCn('overlay');\n\ninterface OverlayProps {\n className?: string;\n canvasElement?: HTMLDivElement | null;\n}\ninterface InsertLineProps {\n top: number;\n left: number;\n height: number;\n width: number;\n position: string;\n}\n\nconst Overlay = ({className, canvasElement}: OverlayProps) => {\n const {\n height,\n selectedBlock,\n setSelectedBlock,\n deleteBlock,\n duplicateBlock,\n manipulateOverlayMode,\n reorderBlock,\n } = useMainEditorStore();\n const [insertLineBox, setInsertLineBox] = React.useState<InsertLineProps | undefined>(\n undefined,\n );\n const [hoverBorders, setHoverBorders] = React.useState<DOMRect | null>(null);\n const [blockBorders, setBlockBorders] = React.useState<DOMRect | null>(null);\n\n // Listen for updates to the selected block's position\n usePostMessageAPIListener('ON_UPDATE_BLOCK_SELECTION', ({rect}) => {\n setBlockBorders(rect || null);\n });\n\n // Update blockBorders when selectedBlock changes\n React.useEffect(() => {\n if (!selectedBlock) {\n setBlockBorders(null);\n }\n }, [selectedBlock]);\n\n // Auto scroll to the selected block when blockBorders changes\n React.useEffect(() => {\n if (blockBorders && canvasElement) {\n // Calculate the scroll position to center the block in the viewport\n const canvasHeight = canvasElement.clientHeight;\n const scrollPosition = blockBorders.top - canvasHeight / 2 + blockBorders.height / 2;\n\n // Scroll the canvas element to the calculated position with smooth behavior\n canvasElement.scrollTo({\n top: Math.max(0, scrollPosition),\n behavior: 'smooth',\n });\n }\n }, [blockBorders, canvasElement]);\n\n const margin = 0;\n\n usePostMessageAPIListener('ON_HOVER_BLOCK', ({rect, position}) => {\n setHoverBorders(rect || null);\n if (rect && position) {\n setInsertLineBox({\n left: rect.x,\n top: rect.y,\n height: rect.height,\n width: rect.width,\n position: position,\n });\n }\n });\n\n usePostMessageAPIListener('ON_CLICK_BLOCK', ({path}) => {\n setSelectedBlock(path);\n });\n\n const handleMoveUp = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] - 1;\n reorderBlock(selectedBlock, destination, 'prepend');\n };\n\n const handleMoveDown = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] + 1;\n reorderBlock(selectedBlock, destination, 'append');\n };\n\n return (\n <div className={b(null, className)} style={{height: `${height}px`}}>\n {blockBorders ? (\n <div\n className={b('border')}\n style={{\n top: blockBorders.top - margin,\n left: blockBorders.left - margin,\n width: blockBorders.width + margin * 2,\n height: blockBorders.height + margin * 2,\n }}\n >\n <div className={b('actions')}>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveUp}>\n <Icon data={ChevronUp} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {main: true})}>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && duplicateBlock(selectedBlock)}\n >\n <Icon data={Copy} size={18} />\n </Button>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && deleteBlock(selectedBlock)}\n >\n <Icon data={TrashBin} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveDown}>\n <Icon data={ChevronDown} size={18} />\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n {hoverBorders ? (\n <div\n className={b('border', {hover: true})}\n style={{\n top: hoverBorders.top - margin,\n left: hoverBorders.left - margin,\n width: hoverBorders.width + margin * 2,\n height: hoverBorders.height + margin * 2,\n }}\n ></div>\n ) : null}\n {manipulateOverlayMode && hoverBorders && insertLineBox ? (\n <div\n className={b('line', {\n position: insertLineBox.position,\n })}\n style={{\n top: hoverBorders.top,\n left: hoverBorders.left,\n width: hoverBorders.width,\n height: hoverBorders.height,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Overlay;\n"]}
|
|
1
|
+
{"version":3,"file":"Overlay.js","sourceRoot":"../../../../../src","sources":["editor-v2/containers/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import {ChevronDown, ChevronUp, Copy, TrashBin} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport * as React from 'react';\n\nimport {usePostMessageAPIListener} from '../../../common/postMessage';\nimport {useMainEditorStore} from '../../hooks/useMainEditorStore';\nimport {editorCn} from '../../utils/cn';\n\nimport './Overlay.scss';\n\nconst b = editorCn('overlay');\n\ninterface OverlayProps {\n className?: string;\n canvasElement?: HTMLDivElement | null;\n}\ninterface InsertLineProps {\n top: number;\n left: number;\n height: number;\n width: number;\n position: string;\n}\n\nconst Overlay = ({className, canvasElement}: OverlayProps) => {\n const {\n height,\n selectedBlock,\n setSelectedBlock,\n deleteBlock,\n duplicateBlock,\n manipulateOverlayMode,\n reorderBlock,\n } = useMainEditorStore();\n const [insertLineBox, setInsertLineBox] = React.useState<InsertLineProps | undefined>(\n undefined,\n );\n const [hoverBorders, setHoverBorders] = React.useState<DOMRect | null>(null);\n const [blockBorders, setBlockBorders] = React.useState<DOMRect | null>(null);\n\n // Listen for updates to the selected block's position\n usePostMessageAPIListener('ON_UPDATE_BLOCK_SELECTION', ({rect}) => {\n setBlockBorders(rect || null);\n });\n\n // Update blockBorders when selectedBlock changes\n React.useEffect(() => {\n if (!selectedBlock) {\n setBlockBorders(null);\n }\n }, [selectedBlock]);\n\n // Auto scroll to the selected block when blockBorders changes\n React.useEffect(() => {\n if (blockBorders && canvasElement) {\n // Calculate the scroll position to center the block in the viewport\n const canvasHeight = canvasElement.clientHeight;\n const scrollPosition = blockBorders.top - canvasHeight / 2 + blockBorders.height / 2;\n\n // Scroll the canvas element to the calculated position with smooth behavior\n canvasElement.scrollTo({\n top: Math.max(0, scrollPosition),\n behavior: 'smooth',\n });\n }\n }, [blockBorders, canvasElement]);\n\n const margin = 0;\n\n usePostMessageAPIListener('ON_HOVER_BLOCK', ({rect, position}) => {\n setHoverBorders(rect || null);\n if (rect && position) {\n setInsertLineBox({\n left: rect.x,\n top: rect.y,\n height: rect.height,\n width: rect.width,\n position: position,\n });\n }\n });\n\n usePostMessageAPIListener('ON_CLICK_BLOCK', ({path}) => {\n setSelectedBlock(path);\n });\n\n const handleMoveUp = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] - 1;\n reorderBlock(selectedBlock, destination, 'prepend');\n };\n\n const handleMoveDown = () => {\n if (!selectedBlock) return;\n const destination = [...selectedBlock];\n destination[destination.length - 1] = destination[destination.length - 1] + 1;\n reorderBlock(selectedBlock, destination, 'append');\n };\n\n return (\n <div className={b(null, className)} style={{height: `${height}px`}}>\n {blockBorders ? (\n <div\n className={b('border')}\n style={{\n top: blockBorders.top - margin,\n left: blockBorders.left - margin,\n width: blockBorders.width + margin * 2,\n height: blockBorders.height + margin * 2,\n }}\n >\n <div className={b('actions')}>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveUp}>\n <Icon className={b('reorder-icon')} data={ChevronUp} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {main: true})}>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && duplicateBlock(selectedBlock)}\n >\n <Icon data={Copy} size={18} />\n </Button>\n <Button\n className={b('action-button')}\n size={'m'}\n view={'action'}\n onClick={() => selectedBlock && deleteBlock(selectedBlock)}\n >\n <Icon data={TrashBin} size={18} />\n </Button>\n </div>\n <div className={b('actions-box', {reorder: true})}>\n <Button view=\"flat\" size={'m'} onClick={handleMoveDown}>\n <Icon className={b('reorder-icon')} data={ChevronDown} size={18} />\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n {hoverBorders ? (\n <div\n className={b('border', {hover: true})}\n style={{\n top: hoverBorders.top - margin,\n left: hoverBorders.left - margin,\n width: hoverBorders.width + margin * 2,\n height: hoverBorders.height + margin * 2,\n }}\n ></div>\n ) : null}\n {manipulateOverlayMode && hoverBorders && insertLineBox ? (\n <div\n className={b('line', {\n position: insertLineBox.position,\n })}\n style={{\n top: hoverBorders.top,\n left: hoverBorders.left,\n width: hoverBorders.width,\n height: hoverBorders.height,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Overlay;\n"]}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
1
2
|
import { usePostMessageAPIListener } from "../../common/postMessage.js";
|
|
2
3
|
import { useMainEditorStore } from "./useMainEditorStore.js";
|
|
3
4
|
import { usePostMessageEvents } from "./usePostMessageEvents.js";
|
|
4
|
-
const useMainEditorInitialize = () => {
|
|
5
|
+
const useMainEditorInitialize = (initialContent) => {
|
|
5
6
|
const { requestPostMessage } = usePostMessageEvents();
|
|
6
7
|
const { initialize, setConfig, setContent, manipulateOverlayMode, disableMode, insertBlock, reorderBlock, preInsertBlockType, preReorderBlockPath, } = useMainEditorStore();
|
|
7
8
|
usePostMessageAPIListener('ON_INIT', () => {
|
|
8
9
|
initialize();
|
|
9
10
|
requestPostMessage('GET_SUPPORTED_BLOCKS', {});
|
|
10
|
-
|
|
11
|
+
if (!initialContent) {
|
|
12
|
+
requestPostMessage('GET_INITIAL_CONTENT', {});
|
|
13
|
+
}
|
|
11
14
|
}, [requestPostMessage]);
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
if (initialContent) {
|
|
17
|
+
setContent(initialContent);
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
20
|
+
}, [initialContent]);
|
|
12
21
|
usePostMessageAPIListener('ON_INITIAL_CONTENT', (data) => {
|
|
13
22
|
setContent(data);
|
|
14
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMainEditorInitialize.js","sourceRoot":"../../../../src","sources":["editor-v2/hooks/useMainEditorInitialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,oCAAiC;
|
|
1
|
+
{"version":3,"file":"useMainEditorInitialize.js","sourceRoot":"../../../../src","sources":["editor-v2/hooks/useMainEditorInitialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,yBAAyB,EAAC,oCAAiC;AAGnE,OAAO,EAAC,kBAAkB,EAAC,gCAA6B;AACxD,OAAO,EAAC,oBAAoB,EAAC,kCAA+B;AAE5D,MAAM,uBAAuB,GAAG,CAAC,cAA0C,EAAE,EAAE;IAC3E,MAAM,EAAC,kBAAkB,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACpD,MAAM,EACF,UAAU,EACV,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GACtB,GAAG,kBAAkB,EAAE,CAAC;IAEzB,yBAAyB,CACrB,SAAS,EACT,GAAG,EAAE;QACD,UAAU,EAAE,CAAC;QACb,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,kBAAkB,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,EACD,CAAC,kBAAkB,CAAC,CACvB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,cAAc,EAAE,CAAC;YACjB,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QACD,uDAAuD;IAC3D,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,yBAAyB,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;QACrD,UAAU,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,yBAAyB,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;QACtD,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,yBAAyB,CACrB,aAAa,EACb,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAE,EAAE;QACjB,IAAI,qBAAqB,KAAK,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC/E,WAAW,CACP,IAAI,EACJ,kBAAkB,EAClB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAC5D,CAAC;QACN,CAAC;QACD,IAAI,qBAAqB,KAAK,SAAS,IAAI,IAAI,IAAI,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YACjF,YAAY,CACR,mBAAmB,EACnB,IAAI,EACJ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAC5D,CAAC;QACN,CAAC;QACD,WAAW,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAC5C,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,uBAAuB,CAAC","sourcesContent":["import * as React from 'react';\nimport {usePostMessageAPIListener} from '../../common/postMessage';\nimport {PageContentWithNavigation} from '../../models';\n\nimport {useMainEditorStore} from './useMainEditorStore';\nimport {usePostMessageEvents} from './usePostMessageEvents';\n\nconst useMainEditorInitialize = (initialContent?: PageContentWithNavigation) => {\n const {requestPostMessage} = usePostMessageEvents();\n const {\n initialize,\n setConfig,\n setContent,\n manipulateOverlayMode,\n disableMode,\n insertBlock,\n reorderBlock,\n preInsertBlockType,\n preReorderBlockPath,\n } = useMainEditorStore();\n\n usePostMessageAPIListener(\n 'ON_INIT',\n () => {\n initialize();\n requestPostMessage('GET_SUPPORTED_BLOCKS', {});\n\n if (!initialContent) {\n requestPostMessage('GET_INITIAL_CONTENT', {});\n }\n },\n [requestPostMessage],\n );\n\n React.useEffect(() => {\n if (initialContent) {\n setContent(initialContent);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialContent]);\n\n usePostMessageAPIListener('ON_INITIAL_CONTENT', (data) => {\n setContent(data);\n });\n\n usePostMessageAPIListener('ON_SUPPORTED_BLOCKS', (data) => {\n setConfig(data);\n });\n\n usePostMessageAPIListener(\n 'ON_MOUSE_UP',\n ({path, position}) => {\n if (manipulateOverlayMode === 'insert' && path && position && preInsertBlockType) {\n insertBlock(\n path,\n preInsertBlockType,\n ['left', 'top'].includes(position) ? 'prepend' : 'append',\n );\n }\n if (manipulateOverlayMode === 'reorder' && path && position && preReorderBlockPath) {\n reorderBlock(\n preReorderBlockPath,\n path,\n ['left', 'top'].includes(position) ? 'prepend' : 'append',\n );\n }\n disableMode();\n },\n [preInsertBlockType, preReorderBlockPath],\n );\n};\n\nexport default useMainEditorInitialize;\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
.g-root {
|
|
2
2
|
--g-color-base-selection: var(--g-color-private-black-200);
|
|
3
3
|
--g-color-base-selection-hover: var(--g-color-private-black-300);
|
|
4
|
-
--g-color-base-brand:
|
|
5
|
-
--g-color-base-brand-hover:
|
|
4
|
+
--g-color-base-brand: rgb(38, 38, 38);
|
|
5
|
+
--g-color-base-brand-hover: rgb(76, 76, 76);
|
|
6
6
|
--g-color-text-brand-contrast: var(--g-color-text-light-primary);
|
|
7
|
-
--g-color-text-brand-heavy:
|
|
7
|
+
--g-color-text-brand-heavy: rgb(76, 76, 76);
|
|
8
8
|
--g-color-line-brand: var(--g-color-text-primary);
|
|
9
9
|
}
|
package/package.json
CHANGED
package/widget/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default "(self.webpackChunk_gravity_ui_page_constructor=self.webpackChunk_gravity_ui_page_constructor||[]).push([[
|
|
1
|
+
export default "(self.webpackChunk_gravity_ui_page_constructor=self.webpackChunk_gravity_ui_page_constructor||[]).push([[7486],{7486:function(_,t,e){_.exports=function(_){\"use strict\";function t(_){return _&&\"object\"==typeof _&&\"default\"in _?_:{default:_}}var e=t(_),s={name:\"uz\",weekdays:\"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба\".split(\"_\"),months:\"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр\".split(\"_\"),weekStart:1,weekdaysShort:\"Якш_Душ_Сеш_Чор_Пай_Жум_Шан\".split(\"_\"),monthsShort:\"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек\".split(\"_\"),weekdaysMin:\"Як_Ду_Се_Чо_Па_Жу_Ша\".split(\"_\"),ordinal:function(_){return _},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},relativeTime:{future:\"Якин %s ичида\",past:\"%s олдин\",s:\"фурсат\",m:\"бир дакика\",mm:\"%d дакика\",h:\"бир соат\",hh:\"%d соат\",d:\"бир кун\",dd:\"%d кун\",M:\"бир ой\",MM:\"%d ой\",y:\"бир йил\",yy:\"%d йил\"}};return e.default.locale(s,null,!0),s}(e(27484))}}]);";
|