@gravity-ui/page-constructor 3.5.0-alpha.0 → 3.6.0
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/CHANGELOG.md +46 -0
- package/README.md +2 -0
- package/build/cjs/blocks/Banner/schema.d.ts +63 -21
- package/build/cjs/blocks/CardLayout/schema.d.ts +10 -4
- package/build/cjs/blocks/Companies/schema.d.ts +5 -2
- package/build/cjs/blocks/ContentLayout/ContentLayout.js +3 -2
- package/build/cjs/blocks/ContentLayout/schema.d.ts +107 -61
- package/build/cjs/blocks/ContentLayout/schema.js +23 -18
- package/build/cjs/blocks/ExtendedFeatures/schema.d.ts +31 -4
- package/build/cjs/blocks/ExtendedFeatures/schema.js +2 -3
- package/build/cjs/blocks/FilterBlock/schema.d.ts +13 -5
- package/build/cjs/blocks/FilterBlock/schema.js +13 -2
- package/build/cjs/blocks/Header/Header.css +6 -7
- package/build/cjs/blocks/Header/schema.d.ts +92 -36
- package/build/cjs/blocks/Header/schema.js +1 -0
- package/build/cjs/blocks/HeaderSlider/schema.d.ts +48 -53
- package/build/cjs/blocks/HeaderSlider/schema.js +3 -1
- package/build/cjs/blocks/Icons/schema.d.ts +3 -1
- package/build/cjs/blocks/Icons/schema.js +2 -1
- package/build/cjs/blocks/Info/schema.d.ts +19 -8
- package/build/cjs/blocks/Map/schema.d.ts +17 -6
- package/build/cjs/blocks/Media/schema.d.ts +204 -152
- package/build/cjs/blocks/Media/schema.js +1 -1
- package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
- package/build/cjs/blocks/PromoFeaturesBlock/schema.js +1 -0
- package/build/cjs/blocks/Questions/schema.d.ts +7 -3
- package/build/cjs/blocks/Slider/schema.d.ts +13 -18
- package/build/cjs/blocks/Slider/schema.js +4 -5
- package/build/cjs/blocks/Table/schema.d.ts +5 -2
- package/build/cjs/blocks/Table/schema.js +12 -2
- package/build/cjs/blocks/Tabs/schema.d.ts +43 -16
- package/build/cjs/components/BlockBase/BlockBase.js +2 -2
- package/build/cjs/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
- package/build/cjs/components/Image/schema.d.ts +1 -0
- package/build/cjs/components/Image/schema.js +3 -2
- package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
- package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
- package/build/cjs/customization/BlockDecoration.d.ts +1 -1
- package/build/cjs/customization/BlockDecoration.js +5 -6
- package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.css +1 -1
- package/build/cjs/editor/components/AddBlock/AddBlock.d.ts +7 -0
- package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
- package/build/cjs/editor/components/BlockForm/BlockForm.d.ts +12 -0
- package/build/cjs/editor/components/BlockForm/BlockForm.js +33 -0
- package/build/cjs/editor/components/ControlPanel/ControlPanel.css +26 -0
- package/build/cjs/editor/components/ControlPanel/ControlPanel.d.ts +8 -0
- package/build/cjs/editor/components/ControlPanel/ControlPanel.js +25 -0
- package/build/cjs/editor/components/ControlPanel/i18n/en.json +3 -0
- package/build/cjs/editor/components/ControlPanel/i18n/index.d.ts +2 -0
- package/build/cjs/editor/components/ControlPanel/i18n/index.js +8 -0
- package/build/cjs/editor/components/ControlPanel/i18n/ru.json +3 -0
- package/build/cjs/editor/components/EditBlock/EditBlock.d.ts +13 -0
- package/build/cjs/editor/components/EditBlock/EditBlock.js +44 -0
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.d.ts +13 -0
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.js +35 -0
- package/build/cjs/editor/components/ErrorBoundary/i18n/en.json +4 -0
- package/build/cjs/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
- package/build/cjs/editor/components/ErrorBoundary/i18n/index.js +8 -0
- package/build/cjs/editor/components/ErrorBoundary/i18n/ru.json +4 -0
- package/build/cjs/editor/components/Layout/Layout.css +39 -0
- package/build/cjs/editor/components/Layout/Layout.d.ts +16 -0
- package/build/cjs/editor/components/Layout/Layout.js +34 -0
- package/build/cjs/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
- package/build/cjs/editor/components/PagePropsForm/PagePropsForm.js +17 -0
- package/build/cjs/editor/containers/Editor/Editor.d.ts +2 -0
- package/build/cjs/editor/containers/Editor/Editor.js +40 -0
- package/build/cjs/editor/containers/Form/Form.css +94 -0
- package/build/cjs/editor/containers/Form/Form.d.ts +11 -0
- package/build/cjs/editor/containers/Form/Form.js +47 -0
- package/build/cjs/editor/containers/Form/dynamic-form-custom.css +0 -0
- package/build/cjs/editor/data/templates/banner-block.json +25 -0
- package/build/cjs/editor/data/templates/card-layout-block.json +39 -0
- package/build/cjs/editor/data/templates/companies-block.json +20 -0
- package/build/cjs/editor/data/templates/content-layout-block.json +56 -0
- package/build/cjs/editor/data/templates/extended-features-block.json +56 -0
- package/build/cjs/editor/data/templates/filter-block.json +62 -0
- package/build/cjs/editor/data/templates/header-block.json +19 -0
- package/build/cjs/editor/data/templates/header-slider-block.json +69 -0
- package/build/cjs/editor/data/templates/icons-block.json +32 -0
- package/build/cjs/editor/data/templates/info-block.json +40 -0
- package/build/cjs/editor/data/templates/link-table-block.json +10 -0
- package/build/cjs/editor/data/templates/map-block.json +48 -0
- package/build/cjs/editor/data/templates/media-block.json +15 -0
- package/build/cjs/editor/data/templates/preview-block.json +38 -0
- package/build/cjs/editor/data/templates/promo-features-block.json +52 -0
- package/build/cjs/editor/data/templates/questions-block.json +105 -0
- package/build/cjs/editor/data/templates/security-block.json +36 -0
- package/build/cjs/editor/data/templates/share-block.json +6 -0
- package/build/cjs/editor/data/templates/simple-block.json +7 -0
- package/build/cjs/editor/data/templates/slider-block.json +46 -0
- package/build/cjs/editor/data/templates/table-block.json +18 -0
- package/build/cjs/editor/data/templates/tabs-block.json +90 -0
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +19 -0
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +72 -0
- package/build/cjs/editor/dynamic-forms-custom/config.d.ts +2 -0
- package/build/cjs/editor/dynamic-forms-custom/config.js +13 -0
- package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
- package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.js +75 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/detect.js +36 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/index.js +188 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/types.js +2 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
- package/build/cjs/editor/dynamic-forms-custom/parser/views.js +46 -0
- package/build/cjs/editor/hooks/useFormSpec.d.ts +2 -0
- package/build/cjs/editor/hooks/useFormSpec.js +13 -0
- package/build/cjs/editor/hooks/usePreviousValue.d.ts +1 -0
- package/build/cjs/editor/hooks/usePreviousValue.js +11 -0
- package/build/cjs/editor/index.d.ts +1 -1
- package/build/cjs/editor/index.js +1 -1
- package/build/cjs/editor/store/index.d.ts +10 -11
- package/build/cjs/editor/store/index.js +66 -15
- package/build/cjs/editor/store/reducer.d.ts +24 -9
- package/build/cjs/editor/store/reducer.js +17 -31
- package/build/cjs/editor/store/utils.d.ts +1 -0
- package/build/cjs/editor/store/utils.js +3 -1
- package/build/cjs/editor/styles/root.css +5 -0
- package/build/cjs/editor/types/index.d.ts +15 -9
- package/build/cjs/editor/types/index.js +6 -0
- package/build/cjs/editor/utils/index.d.ts +4 -3
- package/build/cjs/editor/utils/index.js +6 -4
- package/build/cjs/grid/Col/Col.d.ts +1 -1
- package/build/cjs/models/constructor-items/blocks.d.ts +13 -8
- package/build/cjs/models/constructor.d.ts +2 -2
- package/build/cjs/models/customization.d.ts +3 -8
- package/build/cjs/models/navigation.d.ts +1 -0
- package/build/cjs/navigation/components/Header/Header.css +2 -0
- package/build/cjs/navigation/components/Header/Header.js +15 -4
- package/build/cjs/navigation/schema.d.ts +1 -0
- package/build/cjs/schema/constants.d.ts +908 -0
- package/build/cjs/schema/constants.js +42 -0
- package/build/cjs/schema/index.d.ts +9 -228
- package/build/cjs/schema/index.js +8 -46
- package/build/cjs/schema/validators/common.d.ts +71 -27
- package/build/cjs/schema/validators/common.js +50 -17
- package/build/cjs/sub-blocks/BackgroundCard/schema.d.ts +12 -5
- package/build/cjs/sub-blocks/BasicCard/schema.d.ts +8 -3
- package/build/cjs/sub-blocks/Content/schema.d.ts +14 -6
- package/build/cjs/sub-blocks/Content/schema.js +9 -1
- package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +23 -9
- package/build/cjs/sub-blocks/MediaCard/schema.d.ts +16 -6
- package/build/cjs/sub-blocks/PriceDetailed/schema.d.ts +1 -0
- package/build/cjs/sub-blocks/PriceDetailed/schema.js +5 -1
- package/build/cjs/sub-blocks/Quote/schema.d.ts +6 -2
- package/build/esm/blocks/Banner/schema.d.ts +63 -21
- package/build/esm/blocks/CardLayout/schema.d.ts +10 -4
- package/build/esm/blocks/Companies/schema.d.ts +5 -2
- package/build/esm/blocks/ContentLayout/ContentLayout.js +3 -2
- package/build/esm/blocks/ContentLayout/schema.d.ts +107 -61
- package/build/esm/blocks/ContentLayout/schema.js +23 -18
- package/build/esm/blocks/ExtendedFeatures/schema.d.ts +31 -4
- package/build/esm/blocks/ExtendedFeatures/schema.js +3 -4
- package/build/esm/blocks/FilterBlock/schema.d.ts +13 -5
- package/build/esm/blocks/FilterBlock/schema.js +13 -2
- package/build/esm/blocks/Header/Header.css +6 -7
- package/build/esm/blocks/Header/schema.d.ts +92 -36
- package/build/esm/blocks/Header/schema.js +1 -0
- package/build/esm/blocks/HeaderSlider/schema.d.ts +48 -53
- package/build/esm/blocks/HeaderSlider/schema.js +2 -1
- package/build/esm/blocks/Icons/schema.d.ts +3 -1
- package/build/esm/blocks/Icons/schema.js +2 -1
- package/build/esm/blocks/Info/schema.d.ts +19 -8
- package/build/esm/blocks/Map/schema.d.ts +17 -6
- package/build/esm/blocks/Media/schema.d.ts +204 -152
- package/build/esm/blocks/Media/schema.js +2 -2
- package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
- package/build/esm/blocks/PromoFeaturesBlock/schema.js +1 -0
- package/build/esm/blocks/Questions/schema.d.ts +7 -3
- package/build/esm/blocks/Slider/schema.d.ts +13 -18
- package/build/esm/blocks/Slider/schema.js +4 -5
- package/build/esm/blocks/Table/schema.d.ts +5 -2
- package/build/esm/blocks/Table/schema.js +12 -2
- package/build/esm/blocks/Tabs/schema.d.ts +43 -16
- package/build/esm/components/BlockBase/BlockBase.js +2 -2
- package/build/esm/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
- package/build/esm/components/Image/schema.d.ts +1 -0
- package/build/esm/components/Image/schema.js +3 -2
- package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
- package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
- package/build/esm/customization/BlockDecoration.d.ts +1 -1
- package/build/esm/customization/BlockDecoration.js +6 -6
- package/build/esm/editor/{Components → components}/AddBlock/AddBlock.css +1 -1
- package/build/esm/editor/components/AddBlock/AddBlock.d.ts +8 -0
- package/build/esm/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
- package/build/esm/editor/components/BlockForm/BlockForm.d.ts +12 -0
- package/build/esm/editor/components/BlockForm/BlockForm.js +30 -0
- package/build/esm/editor/components/ControlPanel/ControlPanel.css +26 -0
- package/build/esm/editor/components/ControlPanel/ControlPanel.d.ts +9 -0
- package/build/esm/editor/components/ControlPanel/ControlPanel.js +23 -0
- package/build/esm/editor/components/ControlPanel/i18n/en.json +3 -0
- package/build/esm/editor/components/ControlPanel/i18n/index.d.ts +2 -0
- package/build/esm/editor/components/ControlPanel/i18n/index.js +5 -0
- package/build/esm/editor/components/ControlPanel/i18n/ru.json +3 -0
- package/build/esm/editor/components/EditBlock/EditBlock.d.ts +14 -0
- package/build/esm/editor/components/EditBlock/EditBlock.js +41 -0
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.d.ts +14 -0
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.js +31 -0
- package/build/esm/editor/components/ErrorBoundary/i18n/en.json +4 -0
- package/build/esm/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
- package/build/esm/editor/components/ErrorBoundary/i18n/index.js +5 -0
- package/build/esm/editor/components/ErrorBoundary/i18n/ru.json +4 -0
- package/build/esm/editor/components/Layout/Layout.css +39 -0
- package/build/esm/editor/components/Layout/Layout.d.ts +17 -0
- package/build/esm/editor/components/Layout/Layout.js +32 -0
- package/build/esm/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
- package/build/esm/editor/components/PagePropsForm/PagePropsForm.js +13 -0
- package/build/esm/editor/containers/Editor/Editor.d.ts +2 -0
- package/build/esm/editor/containers/Editor/Editor.js +36 -0
- package/build/esm/editor/containers/Form/Form.css +94 -0
- package/build/esm/editor/containers/Form/Form.d.ts +12 -0
- package/build/esm/editor/containers/Form/Form.js +45 -0
- package/build/esm/editor/containers/Form/dynamic-form-custom.css +0 -0
- package/build/esm/editor/data/templates/banner-block.json +25 -0
- package/build/esm/editor/data/templates/card-layout-block.json +39 -0
- package/build/esm/editor/data/templates/companies-block.json +20 -0
- package/build/esm/editor/data/templates/content-layout-block.json +56 -0
- package/build/esm/editor/data/templates/extended-features-block.json +56 -0
- package/build/esm/editor/data/templates/filter-block.json +62 -0
- package/build/esm/editor/data/templates/header-block.json +19 -0
- package/build/esm/editor/data/templates/header-slider-block.json +69 -0
- package/build/esm/editor/data/templates/icons-block.json +32 -0
- package/build/esm/editor/data/templates/info-block.json +40 -0
- package/build/esm/editor/data/templates/link-table-block.json +10 -0
- package/build/esm/editor/data/templates/map-block.json +48 -0
- package/build/esm/editor/data/templates/media-block.json +15 -0
- package/build/esm/editor/data/templates/preview-block.json +38 -0
- package/build/esm/editor/data/templates/promo-features-block.json +52 -0
- package/build/esm/editor/data/templates/questions-block.json +105 -0
- package/build/esm/editor/data/templates/security-block.json +36 -0
- package/build/esm/editor/data/templates/share-block.json +6 -0
- package/build/esm/editor/data/templates/simple-block.json +7 -0
- package/build/esm/editor/data/templates/slider-block.json +46 -0
- package/build/esm/editor/data/templates/table-block.json +18 -0
- package/build/esm/editor/data/templates/tabs-block.json +90 -0
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +20 -0
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +68 -0
- package/build/esm/editor/dynamic-forms-custom/config.d.ts +2 -0
- package/build/esm/editor/dynamic-forms-custom/config.js +9 -0
- package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
- package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.js +69 -0
- package/build/esm/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
- package/build/esm/editor/dynamic-forms-custom/parser/detect.js +32 -0
- package/build/esm/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
- package/build/esm/editor/dynamic-forms-custom/parser/index.js +186 -0
- package/build/esm/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
- package/build/esm/editor/dynamic-forms-custom/parser/types.js +1 -0
- package/build/esm/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
- package/build/esm/editor/dynamic-forms-custom/parser/views.js +39 -0
- package/build/esm/editor/hooks/useFormSpec.d.ts +2 -0
- package/build/esm/editor/hooks/useFormSpec.js +9 -0
- package/build/esm/editor/hooks/usePreviousValue.d.ts +1 -0
- package/build/esm/editor/hooks/usePreviousValue.js +8 -0
- package/build/esm/editor/index.d.ts +1 -1
- package/build/esm/editor/index.js +1 -1
- package/build/esm/editor/store/index.d.ts +10 -11
- package/build/esm/editor/store/index.js +68 -17
- package/build/esm/editor/store/reducer.d.ts +24 -9
- package/build/esm/editor/store/reducer.js +15 -29
- package/build/esm/editor/store/utils.d.ts +1 -0
- package/build/esm/editor/store/utils.js +1 -0
- package/build/esm/editor/styles/root.css +5 -0
- package/build/esm/editor/types/index.d.ts +15 -9
- package/build/esm/editor/types/index.js +5 -1
- package/build/esm/editor/utils/index.d.ts +4 -3
- package/build/esm/editor/utils/index.js +4 -3
- package/build/esm/grid/Col/Col.d.ts +1 -1
- package/build/esm/models/constructor-items/blocks.d.ts +13 -8
- package/build/esm/models/constructor.d.ts +2 -2
- package/build/esm/models/customization.d.ts +3 -8
- package/build/esm/models/navigation.d.ts +1 -0
- package/build/esm/navigation/components/Header/Header.css +2 -0
- package/build/esm/navigation/components/Header/Header.js +16 -5
- package/build/esm/navigation/schema.d.ts +1 -0
- package/build/esm/schema/constants.d.ts +908 -0
- package/build/esm/schema/constants.js +39 -0
- package/build/esm/schema/index.d.ts +9 -228
- package/build/esm/schema/index.js +4 -42
- package/build/esm/schema/validators/common.d.ts +71 -27
- package/build/esm/schema/validators/common.js +49 -16
- package/build/esm/sub-blocks/BackgroundCard/schema.d.ts +12 -5
- package/build/esm/sub-blocks/BasicCard/schema.d.ts +8 -3
- package/build/esm/sub-blocks/Content/schema.d.ts +14 -6
- package/build/esm/sub-blocks/Content/schema.js +9 -1
- package/build/esm/sub-blocks/LayoutItem/schema.d.ts +23 -9
- package/build/esm/sub-blocks/MediaCard/schema.d.ts +16 -6
- package/build/esm/sub-blocks/PriceDetailed/schema.d.ts +1 -0
- package/build/esm/sub-blocks/PriceDetailed/schema.js +5 -1
- package/build/esm/sub-blocks/Quote/schema.d.ts +6 -2
- package/package.json +39 -7
- package/server/models/constructor-items/blocks.d.ts +13 -8
- package/server/models/constructor.d.ts +2 -2
- package/server/models/customization.d.ts +3 -8
- package/server/models/navigation.d.ts +1 -0
- package/build/cjs/editor/Components/AddBlock/AddBlock.d.ts +0 -7
- package/build/cjs/editor/Components/EditBlock/EditBlock.d.ts +0 -4
- package/build/cjs/editor/Components/EditBlock/EditBlock.js +0 -32
- package/build/cjs/editor/Containers/Editor.d.ts +0 -2
- package/build/cjs/editor/Containers/Editor.js +0 -24
- package/build/esm/editor/Components/AddBlock/AddBlock.d.ts +0 -8
- package/build/esm/editor/Components/EditBlock/EditBlock.d.ts +0 -5
- package/build/esm/editor/Components/EditBlock/EditBlock.js +0 -30
- package/build/esm/editor/Containers/Editor.d.ts +0 -2
- package/build/esm/editor/Containers/Editor.js +0 -20
- /package/build/cjs/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
- /package/build/esm/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Block } from '../../../models';
|
|
3
|
+
import { CustomSpec } from '../../dynamic-forms-custom/parser/types';
|
|
4
|
+
interface BlockFormProps {
|
|
5
|
+
data: Block;
|
|
6
|
+
spec: CustomSpec;
|
|
7
|
+
onChange: (data: Block) => void;
|
|
8
|
+
onSelect: () => void;
|
|
9
|
+
active?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const BlockForm: React.MemoExoticComponent<({ data: { type, ...content }, onChange, onSelect, active, spec: specRaw }: BlockFormProps) => JSX.Element>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BlockForm = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
7
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
8
|
+
const react_final_form_1 = require("react-final-form");
|
|
9
|
+
const config_1 = require("../../dynamic-forms-custom/config");
|
|
10
|
+
const usePreviousValue_1 = tslib_1.__importDefault(require("../../hooks/usePreviousValue"));
|
|
11
|
+
exports.BlockForm = (0, react_1.memo)((_a) => {
|
|
12
|
+
var _b = _a.data, { type } = _b, content = tslib_1.__rest(_b, ["type"]), { onChange, onSelect, active, spec: specRaw } = _a;
|
|
13
|
+
// get initial values only at first render, then the form manages data
|
|
14
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
15
|
+
const initialValues = (0, react_1.useMemo)(() => ({ content }), []);
|
|
16
|
+
const prevContent = (0, usePreviousValue_1.default)(content);
|
|
17
|
+
const spec = (0, react_1.useMemo)(() => (Object.assign(Object.assign({}, specRaw), { viewSpec: Object.assign(Object.assign({}, specRaw.viewSpec), { layoutOpen: active }) })), [specRaw, active]);
|
|
18
|
+
return (react_1.default.createElement(react_final_form_1.Form, { initialValues: initialValues, onSubmit: lodash_1.default.noop }, () => (react_1.default.createElement("div", { onClick: () => {
|
|
19
|
+
if (!active) {
|
|
20
|
+
onSelect();
|
|
21
|
+
}
|
|
22
|
+
} },
|
|
23
|
+
react_1.default.createElement(react_final_form_1.FormSpy, { onChange: ({ values }) => {
|
|
24
|
+
// fix for FormSpy onChange called twice without content changes
|
|
25
|
+
if (!lodash_1.default.isEqual(values.content, prevContent)) {
|
|
26
|
+
onChange(Object.assign({ type }, values.content));
|
|
27
|
+
}
|
|
28
|
+
}, subscription: { values: true } }),
|
|
29
|
+
react_1.default.createElement(dynamic_forms_1.DynamicField, { name: "content",
|
|
30
|
+
// there is no way other way to manage with form open/close state now
|
|
31
|
+
key: String(active), spec: spec, config: config_1.dynamicConfig })))));
|
|
32
|
+
});
|
|
33
|
+
exports.BlockForm.displayName = 'BlockForm';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-control-panel {
|
|
4
|
+
display: flex;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
width: 100%;
|
|
7
|
+
height: var(--editor-header-height);
|
|
8
|
+
padding: 8px 20px;
|
|
9
|
+
background-color: var(--yc-color-base-background);
|
|
10
|
+
border-bottom: 1px solid var(--yc-color-line-generic);
|
|
11
|
+
}
|
|
12
|
+
.pc-control-panel__icon {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
}
|
|
16
|
+
.pc-control-panel__radio-button {
|
|
17
|
+
margin-left: 12px;
|
|
18
|
+
}
|
|
19
|
+
.pc-control-panel__radio-button .yc-radio-button__option {
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
}
|
|
23
|
+
.pc-control-panel__mode-switch {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ClassNameProps } from '../../../models';
|
|
2
|
+
import { ViewModeItem } from '../../types';
|
|
3
|
+
export interface ControlPanelProps extends ClassNameProps {
|
|
4
|
+
viewMode?: ViewModeItem;
|
|
5
|
+
onViewModeChange: (viewMode: ViewModeItem) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const ControlPanel: ({ viewMode, onViewModeChange, className, }: ControlPanelProps) => JSX.Element;
|
|
8
|
+
export default ControlPanel;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
7
|
+
const utils_1 = require("../../../utils");
|
|
8
|
+
const types_1 = require("../../types");
|
|
9
|
+
const i18n_1 = tslib_1.__importDefault(require("./i18n"));
|
|
10
|
+
const ICON_SIZE = 14;
|
|
11
|
+
const b = (0, utils_1.block)('control-panel');
|
|
12
|
+
const ControlPanelViewModeIcons = {
|
|
13
|
+
[types_1.ViewModeItem.Edititng]: icons_1.Pencil,
|
|
14
|
+
[types_1.ViewModeItem.View]: icons_1.Display,
|
|
15
|
+
};
|
|
16
|
+
const ControlPanel = ({ viewMode = types_1.ViewModeItem.Edititng, onViewModeChange, className, }) => (react_1.default.createElement("div", { className: b(null, className) },
|
|
17
|
+
react_1.default.createElement("div", { className: b('mode-switch') },
|
|
18
|
+
react_1.default.createElement("span", null, (0, i18n_1.default)('mode')),
|
|
19
|
+
react_1.default.createElement(uikit_1.RadioButton, { className: b('radio-button'), value: viewMode, onUpdate: (value) => onViewModeChange(value) }, Object.values(types_1.ViewModeItem).map((item) => {
|
|
20
|
+
const Icon = ControlPanelViewModeIcons[item];
|
|
21
|
+
return (react_1.default.createElement(uikit_1.RadioButton.Option, { key: item, value: item },
|
|
22
|
+
react_1.default.createElement("span", { className: b('icon') },
|
|
23
|
+
react_1.default.createElement(Icon, { width: ICON_SIZE, height: ICON_SIZE }))));
|
|
24
|
+
})))));
|
|
25
|
+
exports.default = ControlPanel;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const registerKeyset_1 = require("../../../../utils/registerKeyset");
|
|
5
|
+
const en_json_1 = tslib_1.__importDefault(require("./en.json"));
|
|
6
|
+
const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
|
|
7
|
+
const COMPONENT = 'ControlPanel';
|
|
8
|
+
exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { EditBlockProps } from '../../types';
|
|
3
|
+
export declare enum EditBlockControls {
|
|
4
|
+
Up = "up",
|
|
5
|
+
Down = "down",
|
|
6
|
+
Copy = "copy",
|
|
7
|
+
Delete = "delete"
|
|
8
|
+
}
|
|
9
|
+
export type EditBlockActions = {
|
|
10
|
+
[key in EditBlockControls]?: () => void;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: React.MemoExoticComponent<({ actions, isActive, onSelect, isHeader, children }: EditBlockProps) => JSX.Element>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditBlockControls = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
7
|
+
const utils_1 = require("../../../utils");
|
|
8
|
+
const b = (0, utils_1.block)('edit-block');
|
|
9
|
+
var EditBlockControls;
|
|
10
|
+
(function (EditBlockControls) {
|
|
11
|
+
EditBlockControls["Up"] = "up";
|
|
12
|
+
EditBlockControls["Down"] = "down";
|
|
13
|
+
EditBlockControls["Copy"] = "copy";
|
|
14
|
+
EditBlockControls["Delete"] = "delete";
|
|
15
|
+
})(EditBlockControls = exports.EditBlockControls || (exports.EditBlockControls = {}));
|
|
16
|
+
const actionsOrder = [
|
|
17
|
+
EditBlockControls.Up,
|
|
18
|
+
EditBlockControls.Down,
|
|
19
|
+
EditBlockControls.Copy,
|
|
20
|
+
EditBlockControls.Delete,
|
|
21
|
+
];
|
|
22
|
+
const editBlockControlsIcons = {
|
|
23
|
+
[EditBlockControls.Up]: icons_1.ChevronUp,
|
|
24
|
+
[EditBlockControls.Down]: icons_1.ChevronDown,
|
|
25
|
+
[EditBlockControls.Copy]: icons_1.Copy,
|
|
26
|
+
[EditBlockControls.Delete]: icons_1.TrashBin,
|
|
27
|
+
};
|
|
28
|
+
const EditBlock = ({ actions, isActive, onSelect, isHeader, children }) => {
|
|
29
|
+
const ref = (0, react_1.useRef)(null);
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
if (isActive && ref.current) {
|
|
32
|
+
//TODO: add behavior 'smooth' after addiiton of dynamic form layout open/close managing support
|
|
33
|
+
ref.current.scrollIntoView({ block: 'center' });
|
|
34
|
+
}
|
|
35
|
+
}, [isActive]);
|
|
36
|
+
return (react_1.default.createElement("div", { className: b(), onClick: onSelect, ref: ref },
|
|
37
|
+
react_1.default.createElement("div", { className: b('controls', { active: isActive, isHeader }) }, isActive && (react_1.default.createElement("div", { className: b('controls-content'), onClick: (e) => e.stopPropagation() }, actionsOrder.map((action) => {
|
|
38
|
+
const Icon = editBlockControlsIcons[action];
|
|
39
|
+
return actions[action] ? (react_1.default.createElement("div", { key: action, className: b('control'), onClick: actions[action] },
|
|
40
|
+
react_1.default.createElement(Icon, null))) : null;
|
|
41
|
+
})))),
|
|
42
|
+
children));
|
|
43
|
+
};
|
|
44
|
+
exports.default = react_1.default.memo(EditBlock);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-error-boundary__container {
|
|
4
|
+
display: flex;
|
|
5
|
+
width: 100%;
|
|
6
|
+
padding: 32px;
|
|
7
|
+
background-color: var(--yc-color-base-background);
|
|
8
|
+
border-radius: var(--pc-border-radius);
|
|
9
|
+
box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.06), 0px 4px 24px rgba(0, 0, 0, 0.06);
|
|
10
|
+
}
|
|
11
|
+
.pc-error-boundary__header {
|
|
12
|
+
margin-top: 0;
|
|
13
|
+
}
|
|
14
|
+
.pc-error-boundary__error {
|
|
15
|
+
display: block;
|
|
16
|
+
color: var(--yc-color-text-danger);
|
|
17
|
+
max-height: 160px;
|
|
18
|
+
overflow: auto;
|
|
19
|
+
}
|
|
20
|
+
.pc-error-boundary__image {
|
|
21
|
+
flex: 0 0 auto;
|
|
22
|
+
width: 200px;
|
|
23
|
+
height: 200px;
|
|
24
|
+
background-repeat: no-repeat;
|
|
25
|
+
background-size: contain;
|
|
26
|
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48c3R5bGU+LnN0MHtmaWxsOiNlY2YyZjl9LnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMyZWU1YzA7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwfS5zdDJ7ZmlsbDojMDA3Y2U5fS5zdDN7ZmlsbDojMDAyMzZifS5zdDR7ZmlsbDojMDBlNmM1fS5zdDExe2ZpbGw6I2ZmNDY0NX0uc3QxNXtmaWxsOm5vbmU7c3Ryb2tlOiMyZWU1YzA7c3Ryb2tlLXdpZHRoOjMuNzI1MjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTB9LnN0MTUsLnN0MTZ7c3Ryb2tlLWxpbmVjYXA6cm91bmR9LnN0MTYsLnN0MTd7ZmlsbDpub25lO3N0cm9rZTojMDA3Y2U5O3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMH0uc3QxOHtmaWxsOiNmYzB9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTMxLjcgMjkzLjdoMjM1LjJWMTc5LjRjMC05LjEtNy40LTE2LjUtMTYuNS0xNi41SDEzMS43djEzMC44eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xODguMyAyOTUuNEg3MS43VjU1LjJjMC0xMi41IDEwLjEtMTcuNyAyMi42LTE3LjdoOTR2MjU3Ljl6TTIzMS4zIDI0Ny4zaDg5Ljh2LTIyMGMwLTEwLjQtOC41LTE0LjgtMTguOS0xNC44aC03MC45djIzNC44eiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0yODQuNiAxNDkuOWgxMi43YzYuOSAwIDEyLjQgNi4yIDEyLjQgMTMuN3Y1OS41TTI4NC42IDE5Ni45aDYuNGMzLjUgMCA2LjMgMi4yIDYuMyA5Ljd2NjMuNSIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0yODQuNiAxMTYuN0gzMDVjOS40IDAgMTcgNy42IDE3IDE3djkwLjEiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjg0LjYgODcuNmgyNi42YzEyLjYgMCAyMi44IDEwLjIgMjIuOCAyMi44djEyMy4xTTE3Ni40IDY2LjRoMTA3Ljl2MTA3LjlIMTc2LjR6TTE3Ni40IDE3NC4zaDEwNy45djEwNy45SDE3Ni40eiIvPjxwYXRoIGNsYXNzPSJzdDE1IiBkPSJNMjIxLjkgNzkuMWg0OS40TTIyMS45IDg3LjZoMzAuOE0yMjEuOSA5Ni4yaDQ5LjQiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSI3OS4xIiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9Ijc5LjEiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iNzkuMSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iODcuNiIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTk4LjYiIGN5PSI4Ny42IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9Ijg3LjYiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9Ijk2LjIiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iOTYuMiIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMjA3LjIiIGN5PSI5Ni4yIiByPSIyLjEiLz48cGF0aCBjbGFzcz0ic3QxNSIgZD0iTTIyMS45IDExMS4zaDQ5LjRNMjIxLjkgMTE5LjloNDkuNE0yMjEuOSAxMjguNWg0MS40Ii8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iMTExLjMiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMTExLjMiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iMTExLjMiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9IjExOS45IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9IjExOS45IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjExOS45IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSIxMjguNSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTk4LjYiIGN5PSIxMjguNSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMjA3LjIiIGN5PSIxMjguNSIgcj0iMi4xIi8+PHBhdGggY2xhc3M9InN0MTUiIGQ9Ik0yMjEuOSAxNDMuNWg0OS40TTIyMS45IDE1Mi4xaDQ5LjRNMjIxLjkgMTYwLjdoNDkuNCIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9IjE0My41IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9IjE0My41IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjE0My41IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSIxNTIuMSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTk4LjYiIGN5PSIxNTIuMSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMjA3LjIiIGN5PSIxNTIuMSIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iMTYwLjciIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMTYwLjciIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iMTYwLjciIHI9IjIuMSIvPjxnPjxwYXRoIGNsYXNzPSJzdDE1IiBkPSJNMjIxLjkgMTg3LjRoNDkuNE0yMjEuOSAxOTUuOWgzMC44TTIyMS45IDIwNC41aDQ5LjQiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSIxODcuNCIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTk4LjYiIGN5PSIxODcuNCIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMjA3LjIiIGN5PSIxODcuNCIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iMTk1LjkiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMTk1LjkiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iMTk1LjkiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9IjIwNC41IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9IjIwNC41IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjIwNC41IiByPSIyLjEiLz48cGF0aCBjbGFzcz0ic3QxNSIgZD0iTTIyMS45IDIxOS42aDQ5LjRNMjIxLjkgMjI4LjJoNDkuNE0yMjEuOSAyMzYuOGg0MS40Ii8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iMjE5LjYiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMjE5LjYiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iMjE5LjYiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9IjIyOC4yIiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9IjIyOC4yIiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjIyOC4yIiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSIyMzYuOCIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTk4LjYiIGN5PSIyMzYuOCIgcj0iMi4xIi8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMjA3LjIiIGN5PSIyMzYuOCIgcj0iMi4xIi8+PHBhdGggY2xhc3M9InN0MTUiIGQ9Ik0yMjEuOSAyNTEuOGg0OS40TTIyMS45IDI2MC40aDQ5LjRNMjIxLjkgMjY5aDE0Ii8+PGNpcmNsZSBjbGFzcz0ic3Q0IiBjeD0iMTkwIiBjeT0iMjUxLjgiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMjUxLjgiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjIwNy4yIiBjeT0iMjUxLjgiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5MCIgY3k9IjI2MC40IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTguNiIgY3k9IjI2MC40IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjI2MC40IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIxOTAiIGN5PSIyNjkiIHI9IjIuMSIvPjxjaXJjbGUgY2xhc3M9InN0NCIgY3g9IjE5OC42IiBjeT0iMjY5IiByPSIyLjEiLz48Y2lyY2xlIGNsYXNzPSJzdDQiIGN4PSIyMDcuMiIgY3k9IjI2OSIgcj0iMi4xIi8+PC9nPjxnPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03Mi44IDE3My4xYy03LjMgMi45LTI3LjkgMTQuNC0yNy45IDI3LjUgMCAzLjcgMi4yIDguMSAxNyA2LjIgMjcuMS0zLjUgNzcuOS0xLjggNzcuOS0xLjhsNTcuOS00LjYtMTI0LjktMjcuM3oiLz48cGF0aCBjbGFzcz0ic3QyIiBkPSJNNDcuMiAyMDQuNWw1NS4xLTcuN2MxLjQtLjIgMi42LTIuNSAyLjYtNVY3NC4zYzAtMi41LTIuNy0zLjUtNC4yLTMuMWwtNTMuNSAxOGMtMS4yLjQtMi4yIDIuNi0yLjIgNXYxMDYuNWMtLjEgMi4zLjkgNCAyLjIgMy44eiIvPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xOTcuOCAyMDAuM2wtOTUuNS0zLjdjLTIuNS0uMS00LjUtMi4yLTQuNS00LjZWNzVjMC0yLjUgMi00LjIgNC41LTMuOUwxOTcuOCA4M2MyLjEuMyAzLjkgMi4zIDMuOSA0LjZ2MTA4LjhjMCAyLjItMS43IDQtMy45IDMuOXoiLz48cGF0aCBjbGFzcz0ic3QxNyIgZD0iTTk3LjkgMTEyLjZsMTAzLjggMTAuNSIvPjxwYXRoIGNsYXNzPSJzdDE2IiBkPSJNMTEzLjMgODUuNmw3NS45IDkuMU0xMTMuMyAxMzAuNWw3NS45IDcuMU0xMTMuMyAxNzIuN2w3NS45IDQuMiIvPjxwYXRoIGNsYXNzPSJzdDE3IiBkPSJNOTYuMSAxNTUuNmwxMDUuNiA3LjJNOTYuMSAxOTUuM2wxMDUuNiAzLjYiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MiIgZD0iTTQ3LjIgMzI0LjZsNTUuNCA2LjFjMS40LjEgMi42LTEuOSAyLjYtNC40VjIwNS41YzAtMi41LTEuMi00LjUtMi42LTQuNGwtNTUuNCA3LjRjLTEuMi4xLTIuMyAyLjEtMi4zIDQuNHYxMDcuMmMwIDIuNCAxIDQuNCAyLjMgNC41eiIvPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xOTguOCAzMjYuNWwtOTYuMSA0LjJjLTIuNS4xLTQuNS0xLjktNC41LTQuNFYyMDUuNWMwLTIuNSAyLTQuNSA0LjUtNC40bDk2LjEgNC4yYzIuMi4xIDMuOSAyLjEgMy45IDQuNFYzMjJjLjEgMi40LTEuNyA0LjQtMy45IDQuNXoiLz48cGF0aCBjbGFzcz0ic3QxNyIgZD0iTTk4LjIgMjQ0LjNsMTA0LjYgMi4xTTk2LjQgMjg4LjlsMTA2LjQtMS41Ii8+PHBhdGggY2xhc3M9InN0MTYiIGQ9Ik0xMTMuMyAyMTQuN2w3Ni4xIDNNMTEzLjMgMjU5LjZsNzYuMS45TTExMy4zIDMwMS43bDc2LjEtMiIvPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QyIiBkPSJNMTUxIDMzNi40bDcwIDcuN2MxLjguMSAzLjMtMi40IDMuMy01LjZWMTg2YzAtMy4yLTEuNS01LjctMy4zLTUuNmwtNzAgOS4zYy0xLjYuMS0yLjggMi42LTIuOCA1LjZ2MTM1LjRjMCAzLjEgMS4zIDUuNiAyLjggNS43eiIvPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNDIuNSAzMzguOGwtMTIxLjMgNS4zYy0zLjEuMS01LjctMi40LTUuNy01LjZWMTg2YzAtMy4yIDIuNS01LjcgNS43LTUuNmwxMjEuMyA1LjNjMi43LjEgNC45IDIuNiA0LjkgNS42djE0MS44YzAgMy4xLTIuMiA1LjYtNC45IDUuN3oiLz48cGF0aCBjbGFzcz0ic3QxNyIgZD0iTTIxNS41IDIzNS4xbDEzMS45IDIuNk0yMTMuMiAyOTEuM2wxMzQuMi0xLjgiLz48cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTIzNC4zIDE5OC40YzAgMS44LTEuMyAzLjMtMyAzLjItMS43LS4xLTMtMS43LTMtMy41czEuNC0zLjMgMy0zLjJjMS42LjEgMyAxLjcgMyAzLjV6Ii8+PHBhdGggY2xhc3M9InN0MTgiIGQ9Ik0yNDggMTk5LjJjMCAxLjgtMS4zIDMuMi0zIDMuMi0xLjYtLjEtMy0xLjYtMy0zLjVzMS4zLTMuMyAzLTMuMmMxLjcuMSAzIDEuNiAzIDMuNXpNMjYxLjQgMTk5LjljMCAxLjgtMS4zIDMuMi0yLjkgMy4xLTEuNi0uMS0yLjktMS42LTIuOS0zLjQgMC0xLjggMS4zLTMuMiAyLjktMy4xIDEuNi4xIDIuOSAxLjYgMi45IDMuNHoiLz48cGF0aCBjbGFzcz0ic3QyIiBkPSJNMjc0LjYgMjAwLjZjMCAxLjgtMS4zIDMuMi0yLjggMy4xLTEuNi0uMS0yLjgtMS42LTIuOC0zLjRzMS4zLTMuMiAyLjgtMy4xYzEuNS4xIDIuOCAxLjYgMi44IDMuNHpNMjg3LjUgMjAxLjNjMCAxLjgtMS4yIDMuMi0yLjggMy4xLTEuNS0uMS0yLjgtMS42LTIuOC0zLjRzMS4zLTMuMiAyLjgtMy4xYzEuNS4yIDIuOCAxLjcgMi44IDMuNHpNMzAwLjEgMjAyYzAgMS44LTEuMiAzLjEtMi43IDMtMS41LS4xLTIuNy0xLjYtMi43LTMuMyAwLTEuOCAxLjItMy4xIDIuNy0zIDEuNS4xIDIuNyAxLjYgMi43IDMuM3pNMzEyLjUgMjAyLjdjMCAxLjctMS4yIDMuMS0yLjcgMy0xLjUtLjEtMi43LTEuNi0yLjctMy4zIDAtMS44IDEuMi0zLjEgMi43LTMgMS41LjEgMi43IDEuNiAyLjcgMy4zek0zMjQuNyAyMDMuNGMwIDEuNy0xLjIgMy4xLTIuNiAzLTEuNS0uMS0yLjYtMS41LTIuNi0zLjMgMC0xLjcgMS4yLTMuMSAyLjYtMyAxLjQuMSAyLjYgMS42IDIuNiAzLjN6TTMzNi42IDIwNC4xYzAgMS43LTEuMiAzLTIuNiAzLTEuNC0uMS0yLjYtMS41LTIuNi0zLjIgMC0xLjcgMS4yLTMgMi42LTMgMS41IDAgMi42IDEuNCAyLjYgMy4yeiIvPjxnPjxwYXRoIGNsYXNzPSJzdDExIiBkPSJNMjM0LjMgMjUzLjhjMCAxLjgtMS4zIDMuMy0zIDMuM3MtMy0xLjUtMy0zLjQgMS40LTMuMyAzLTMuMyAzIDEuNSAzIDMuNHpNMjQ4IDI1My45YzAgMS44LTEuMyAzLjMtMyAzLjMtMS42IDAtMy0xLjUtMy0zLjRzMS4zLTMuMyAzLTMuM2MxLjcuMSAzIDEuNiAzIDMuNHoiLz48cGF0aCBjbGFzcz0ic3QxOCIgZD0iTTI2MS40IDI1NC4xYzAgMS44LTEuMyAzLjMtMi45IDMuMi0xLjYgMC0yLjktMS41LTIuOS0zLjNzMS4zLTMuMyAyLjktMy4yYzEuNiAwIDIuOSAxLjUgMi45IDMuM3pNMjc0LjYgMjU0LjNjMCAxLjgtMS4zIDMuMi0yLjggMy4yLTEuNiAwLTIuOC0xLjUtMi44LTMuM3MxLjMtMy4yIDIuOC0zLjJjMS41LjEgMi44IDEuNSAyLjggMy4zek0yODcuNSAyNTQuNWMwIDEuOC0xLjIgMy4yLTIuOCAzLjItMS41IDAtMi44LTEuNS0yLjgtMy4zczEuMy0zLjIgMi44LTMuMmMxLjUuMSAyLjggMS41IDIuOCAzLjN6Ii8+PHBhdGggY2xhc3M9InN0MiIgZD0iTTMwMC4xIDI1NC43YzAgMS44LTEuMiAzLjItMi43IDMuMi0xLjUgMC0yLjctMS41LTIuNy0zLjIgMC0xLjggMS4yLTMuMiAyLjctMy4yIDEuNSAwIDIuNyAxLjQgMi43IDMuMnpNMzEyLjUgMjU0LjljMCAxLjctMS4yIDMuMS0yLjcgMy4xLTEuNSAwLTIuNy0xLjQtMi43LTMuMnMxLjItMy4xIDIuNy0zLjFjMS41IDAgMi43IDEuNCAyLjcgMy4yek0zMjQuNyAyNTVjMCAxLjctMS4yIDMuMS0yLjYgMy4xLTEuNSAwLTIuNi0xLjQtMi42LTMuMiAwLTEuNyAxLjItMy4xIDIuNi0zLjEgMS40LjEgMi42IDEuNSAyLjYgMy4yek0zMzYuNiAyNTUuMmMwIDEuNy0xLjIgMy4xLTIuNiAzLjEtMS40IDAtMi42LTEuNC0yLjYtMy4xIDAtMS43IDEuMi0zLjEgMi42LTMuMSAxLjUgMCAyLjYgMS40IDIuNiAzLjF6Ii8+PC9nPjxnPjxwYXRoIGNsYXNzPSJzdDExIiBkPSJNMjM0LjMgMzA5LjFjMCAxLjgtMS4zIDMuNC0zIDMuNHMtMy0xLjQtMy0zLjMgMS40LTMuNCAzLTMuNCAzIDEuNCAzIDMuM3oiLz48cGF0aCBjbGFzcz0ic3QxOCIgZD0iTTI0OCAzMDguN2MwIDEuOC0xLjMgMy40LTMgMy40LTEuNiAwLTMtMS40LTMtMy4yIDAtMS44IDEuMy0zLjQgMy0zLjQgMS43LS4xIDMgMS40IDMgMy4yek0yNjEuNCAzMDguNGMwIDEuOC0xLjMgMy4zLTIuOSAzLjQtMS42IDAtMi45LTEuNC0yLjktMy4yIDAtMS44IDEuMy0zLjMgMi45LTMuNCAxLjYtLjEgMi45IDEuNCAyLjkgMy4yek0yNzQuNiAzMDhjMCAxLjgtMS4zIDMuMy0yLjggMy4zLTEuNiAwLTIuOC0xLjQtMi44LTMuMnMxLjMtMy4zIDIuOC0zLjNjMS41IDAgMi44IDEuNCAyLjggMy4yeiIvPjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0yODcuNSAzMDcuN2MwIDEuOC0xLjIgMy4zLTIuOCAzLjMtMS41IDAtMi44LTEuNC0yLjgtMy4xIDAtMS44IDEuMy0zLjMgMi44LTMuMyAxLjUtLjEgMi44IDEuMyAyLjggMy4xek0zMDAuMSAzMDcuM2MwIDEuOC0xLjIgMy4yLTIuNyAzLjMtMS41IDAtMi43LTEuNC0yLjctMy4xIDAtMS44IDEuMi0zLjIgMi43LTMuMyAxLjUgMCAyLjcgMS40IDIuNyAzLjF6TTMxMi41IDMwN2MwIDEuNy0xLjIgMy4yLTIuNyAzLjItMS41IDAtMi43LTEuMy0yLjctMy4xczEuMi0zLjIgMi43LTMuMmMxLjUgMCAyLjcgMS40IDIuNyAzLjF6TTMyNC43IDMwNi43YzAgMS43LTEuMiAzLjItMi42IDMuMi0xLjUgMC0yLjYtMS4zLTIuNi0zLjFzMS4yLTMuMiAyLjYtMy4yYzEuNCAwIDIuNiAxLjMgMi42IDMuMXpNMzM2LjYgMzA2LjNjMCAxLjctMS4yIDMuMS0yLjYgMy4yLTEuNCAwLTIuNi0xLjMtMi42LTNzMS4yLTMuMSAyLjYtMy4yYzEuNSAwIDIuNiAxLjMgMi42IDN6Ii8+PC9nPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTkuNCAxMDNjMCAxLjggMS40IDMuMiAzLjEgMi45IDEuNy0uMiAzLjEtMS45IDMuMS0zLjhzLTEuNC0zLjItMy4xLTIuOWMtMS43LjItMy4xIDEuOS0zLjEgMy44ek01OS40IDE0MC41YzAgMS44IDEuNCAzLjIgMy4xIDIuOSAxLjctLjIgMy4xLTEuOSAzLjEtMy44cy0xLjQtMy4yLTMuMS0yLjljLTEuNy4zLTMuMSAyLTMuMSAzLjh6TTU5LjQgMTc4LjFjMCAxLjggMS40IDMuMiAzLjEgMi45IDEuNy0uMiAzLjEtMS45IDMuMS0zLjhzLTEuNC0zLjItMy4xLTIuOWMtMS43LjMtMy4xIDItMy4xIDMuOHoiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MyIgZD0iTTU5LjQgMjI4LjdjMCAxLjggMS40IDMuMiAzLjEgMi45IDEuNy0uMiAzLjEtMS45IDMuMS0zLjhzLTEuNC0zLjItMy4xLTIuOWMtMS43LjMtMy4xIDItMy4xIDMuOHpNNTkuNCAyNjYuM2MwIDEuOCAxLjQgMy4yIDMuMSAyLjkgMS43LS4yIDMuMS0xLjkgMy4xLTMuOHMtMS40LTMuMi0zLjEtMi45Yy0xLjcuMy0zLjEgMi0zLjEgMy44ek01OS40IDMwMy45YzAgMS44IDEuNCAzLjIgMy4xIDIuOSAxLjctLjIgMy4xLTEuOSAzLjEtMy44cy0xLjQtMy4yLTMuMS0yLjljLTEuNy4zLTMuMSAxLjktMy4xIDMuOHoiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MyIgZD0iTTE2Mi4zIDIxMy44YzAgMi40IDEuOCA0LjEgNCAzLjggMi4yLS4zIDQuMS0yLjUgNC4xLTQuOXMtMS44LTQuMS00LjEtMy44Yy0yLjIuMy00IDIuNS00IDQuOXpNMTYyLjMgMjYzLjFjMCAyLjQgMS44IDQuMSA0IDMuOCAyLjItLjMgNC4xLTIuNSA0LjEtNC45cy0xLjgtNC4xLTQuMS0zLjhjLTIuMi4zLTQgMi41LTQgNC45ek0xNjIuMyAzMTIuNGMwIDIuNCAxLjggNC4xIDQgMy44IDIuMi0uMyA0LjEtMi41IDQuMS00LjkgMC0yLjQtMS44LTQuMS00LjEtMy44LTIuMi4zLTQgMi41LTQgNC45eiIvPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNNjEuNyAxMDIuNmwtMjItMS43Yy0zLjktLjMtNy4yIDIuOC03LjIgNi43djIwNi41Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTYxLjcgMTQwLjFsLTIyLTEuN2MtMy45LS4zLTcuMiAyLjgtNy4yIDYuN3Y5MS44Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTYxLjcgMTc3LjlsLTIyLS44Yy0zLjktLjMtNy4yIDIuOC03LjIgNi43djc2LjEiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNNjEuNyAyMjcuOWwtMjIgLjFjLTMuOS0uMy03LjIgMi44LTcuMiA2Ljd2NzYuMSIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MS43IDI2NS44bC0yMiAuMWMtMy45LS4zLTcuMiAyLjgtNy4yIDYuN3Y0OC45Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTYxLjcgMzAzLjdsLTIyIC4xYy0zLjktLjMtNy4yIDIuOC03LjIgNi43djE2Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTMyLjUgMzI0LjF2NS43YzAgMy4zLjIgNi41IDMuMSA3LjIgMi44LjcgODMuOCAxMy41IDkwLjUgMTQuNCA2LjcuOSA4LjYtMi40IDguNi01LjlWMjIzLjljMC01LjggNC43LTEwLjUgMTAuNS0xMC42bDIwLjMtLjIiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTM0LjYgMzAyLjZ2LTI5LjJjMC01LjggNC43LTEwLjUgMTAuNS0xMC42bDIwLjMtLjJNMTM0LjYgMzM4LjJWMzIzYzAtNS44IDQuNy0xMC41IDEwLjUtMTAuNmwyMC4zLS4yIi8+PC9nPjwvc3ZnPgo=");
|
|
27
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React, { ErrorInfo, PropsWithChildren } from 'react';
|
|
2
|
+
import { BlockDecorationProps } from '../../../models';
|
|
3
|
+
interface ErrorBoundaryProps extends PropsWithChildren, Partial<BlockDecorationProps> {
|
|
4
|
+
}
|
|
5
|
+
interface ErrorBoundaryState {
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
9
|
+
state: ErrorBoundaryState;
|
|
10
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
11
|
+
render(): string | number | boolean | React.ReactFragment | JSX.Element | null | undefined;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorBoundary = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
const utils_2 = require("../../utils");
|
|
8
|
+
const i18n_1 = tslib_1.__importDefault(require("./i18n"));
|
|
9
|
+
const b = (0, utils_1.block)('error-boundary');
|
|
10
|
+
class ErrorBoundary extends react_1.default.Component {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.state = {};
|
|
14
|
+
}
|
|
15
|
+
componentDidCatch(error, info) {
|
|
16
|
+
this.setState({ error: `${error.message} ${info === null || info === void 0 ? void 0 : info.componentStack}` });
|
|
17
|
+
}
|
|
18
|
+
render() {
|
|
19
|
+
const { type, index } = this.props;
|
|
20
|
+
const { error } = this.state;
|
|
21
|
+
const header = type
|
|
22
|
+
? (0, i18n_1.default)('error-block-header', { id: (0, utils_2.getBlockId)({ type, index }) })
|
|
23
|
+
: (0, i18n_1.default)('error-page-header');
|
|
24
|
+
if (this.state.error) {
|
|
25
|
+
return (react_1.default.createElement("div", { className: b() },
|
|
26
|
+
react_1.default.createElement("div", { className: b('container') },
|
|
27
|
+
react_1.default.createElement("div", { className: b('image') }),
|
|
28
|
+
react_1.default.createElement("div", { className: b('content') },
|
|
29
|
+
react_1.default.createElement("h2", { className: b('header') }, header),
|
|
30
|
+
react_1.default.createElement("code", { className: b('error') }, error)))));
|
|
31
|
+
}
|
|
32
|
+
return this.props.children;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ErrorBoundary = ErrorBoundary;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const registerKeyset_1 = require("../../../../utils/registerKeyset");
|
|
5
|
+
const en_json_1 = tslib_1.__importDefault(require("./en.json"));
|
|
6
|
+
const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
|
|
7
|
+
const COMPONENT = 'ErrorBoundary';
|
|
8
|
+
exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
:root {
|
|
4
|
+
--editor-header-height: 48px;
|
|
5
|
+
--editor-divider-width: 12px;
|
|
6
|
+
--editor-left-column-width: calc(400px + var(--editor-divider-width));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.pc-editor-layout__left, .pc-editor-layout__right {
|
|
10
|
+
--yc-scrollbar-width: 0;
|
|
11
|
+
height: calc(100vh - var(--editor-header-height));
|
|
12
|
+
max-height: calc(100vh - var(--editor-header-height));
|
|
13
|
+
overflow-y: auto;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.pc-editor-layout {
|
|
17
|
+
position: relative;
|
|
18
|
+
}
|
|
19
|
+
.pc-editor-layout__panel {
|
|
20
|
+
top: 0;
|
|
21
|
+
position: sticky;
|
|
22
|
+
z-index: 2;
|
|
23
|
+
}
|
|
24
|
+
.pc-editor-layout__container {
|
|
25
|
+
position: relative;
|
|
26
|
+
display: flex;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
z-index: 1;
|
|
29
|
+
}
|
|
30
|
+
.pc-editor-layout__left {
|
|
31
|
+
flex: 0 0 auto;
|
|
32
|
+
padding: 8px 20px 20px;
|
|
33
|
+
width: var(--editor-left-column-width);
|
|
34
|
+
border-right: var(--editor-divider-width) solid var(--yc-color-line-generic);
|
|
35
|
+
overflow-x: auto;
|
|
36
|
+
}
|
|
37
|
+
.pc-editor-layout__right {
|
|
38
|
+
width: 100%;
|
|
39
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React, { PropsWithChildren } from 'react';
|
|
2
|
+
import { ViewModeItem } from '../../types';
|
|
3
|
+
export interface LayoutProps {
|
|
4
|
+
mode: ViewModeItem;
|
|
5
|
+
onModeChange: (mode: ViewModeItem) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const Layout: {
|
|
8
|
+
({ children, mode, onModeChange }: PropsWithChildren<LayoutProps>): JSX.Element;
|
|
9
|
+
Left: React.FC<{
|
|
10
|
+
children?: React.ReactNode;
|
|
11
|
+
}>;
|
|
12
|
+
Right: React.FC<{
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
export default Layout;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
const ControlPanel_1 = tslib_1.__importDefault(require("../ControlPanel/ControlPanel"));
|
|
7
|
+
const b = (0, utils_1.block)('editor-layout');
|
|
8
|
+
const Left = () => null;
|
|
9
|
+
const Right = () => null;
|
|
10
|
+
const Layout = ({ children, mode, onModeChange }) => {
|
|
11
|
+
let left, right;
|
|
12
|
+
function handleChild(child) {
|
|
13
|
+
switch (child === null || child === void 0 ? void 0 : child.type) {
|
|
14
|
+
case Left:
|
|
15
|
+
left = child === null || child === void 0 ? void 0 : child.props.children;
|
|
16
|
+
break;
|
|
17
|
+
case Right:
|
|
18
|
+
right = child === null || child === void 0 ? void 0 : child.props.children;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (react_1.default.Children.toArray(children).length) {
|
|
23
|
+
react_1.Children.forEach(children, handleChild);
|
|
24
|
+
}
|
|
25
|
+
return (react_1.default.createElement("div", { className: b() },
|
|
26
|
+
react_1.default.createElement(ControlPanel_1.default, { viewMode: mode, onViewModeChange: onModeChange, className: b('panel') }),
|
|
27
|
+
react_1.default.createElement("div", { className: b('container') },
|
|
28
|
+
react_1.default.createElement(react_1.Fragment, null,
|
|
29
|
+
left && react_1.default.createElement("div", { className: b('left') }, left),
|
|
30
|
+
right && react_1.default.createElement("div", { className: b('right') }, right)))));
|
|
31
|
+
};
|
|
32
|
+
Layout.Left = Left;
|
|
33
|
+
Layout.Right = Right;
|
|
34
|
+
exports.default = Layout;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PageContent } from '../../../models';
|
|
3
|
+
import { CustomSpec } from '../../dynamic-forms-custom/parser/types';
|
|
4
|
+
export type PagePropsFormData = Omit<PageContent, 'blocks'>;
|
|
5
|
+
export interface PagePropsFormProps {
|
|
6
|
+
data: PagePropsFormData;
|
|
7
|
+
spec: CustomSpec;
|
|
8
|
+
onChange: (data: PagePropsFormData) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const PagePropsForm: React.MemoExoticComponent<({ data: content, spec, onChange }: PagePropsFormProps) => JSX.Element>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PagePropsForm = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
7
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
8
|
+
const react_final_form_1 = require("react-final-form");
|
|
9
|
+
const config_1 = require("../../dynamic-forms-custom/config");
|
|
10
|
+
exports.PagePropsForm = (0, react_1.memo)(({ data: content, spec, onChange }) => {
|
|
11
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
12
|
+
const initialValues = (0, react_1.useMemo)(() => ({ content }), []);
|
|
13
|
+
return (react_1.default.createElement(react_final_form_1.Form, { initialValues: initialValues, onSubmit: lodash_1.default.noop }, () => (react_1.default.createElement("div", null,
|
|
14
|
+
react_1.default.createElement(react_final_form_1.FormSpy, { onChange: ({ values }) => onChange(Object.assign({}, values.content)), subscription: { values: true } }),
|
|
15
|
+
react_1.default.createElement(dynamic_forms_1.DynamicField, { name: "content", spec: spec, config: config_1.dynamicConfig })))));
|
|
16
|
+
});
|
|
17
|
+
exports.PagePropsForm.displayName = 'PagePropsForm';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Editor = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const AddBlock_1 = tslib_1.__importDefault(require("../../components/AddBlock/AddBlock"));
|
|
7
|
+
const EditBlock_1 = tslib_1.__importDefault(require("../../components/EditBlock/EditBlock"));
|
|
8
|
+
const ErrorBoundary_1 = require("../../components/ErrorBoundary/ErrorBoundary");
|
|
9
|
+
const Layout_1 = tslib_1.__importDefault(require("../../components/Layout/Layout"));
|
|
10
|
+
const useFormSpec_1 = tslib_1.__importDefault(require("../../hooks/useFormSpec"));
|
|
11
|
+
const store_1 = require("../../store");
|
|
12
|
+
const types_1 = require("../../types");
|
|
13
|
+
const utils_1 = require("../../utils");
|
|
14
|
+
const Form_1 = require("../Form/Form");
|
|
15
|
+
const Editor = (_a) => {
|
|
16
|
+
var { children, customSchema, onChange } = _a, rest = tslib_1.__rest(_a, ["children", "customSchema", "onChange"]);
|
|
17
|
+
const { content, activeBlockIndex, errorBoundaryState, viewMode, onContentUpdate, onViewModeUpdate, onAdd, onSelect, injectEditBlockProps, } = (0, store_1.useEditorState)(rest);
|
|
18
|
+
const isEditingMode = viewMode === types_1.ViewModeItem.Edititng;
|
|
19
|
+
const constructorProps = (0, react_1.useMemo)(() => {
|
|
20
|
+
const custom = isEditingMode
|
|
21
|
+
? (0, utils_1.addCustomDecorator)([
|
|
22
|
+
(props) => (react_1.default.createElement(EditBlock_1.default, Object.assign({}, injectEditBlockProps(props)))),
|
|
23
|
+
// need errorBoundaryState flag to reset error on content update
|
|
24
|
+
(props) => (react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, Object.assign({}, props, { key: `${(0, utils_1.getBlockId)(props)}-${errorBoundaryState}` }))),
|
|
25
|
+
], rest.custom)
|
|
26
|
+
: rest.custom;
|
|
27
|
+
return { content, custom };
|
|
28
|
+
}, [injectEditBlockProps, content, errorBoundaryState, isEditingMode, rest.custom]);
|
|
29
|
+
(0, react_1.useEffect)(() => {
|
|
30
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(content);
|
|
31
|
+
}, [content, onChange]);
|
|
32
|
+
const formSpecs = (0, useFormSpec_1.default)(customSchema);
|
|
33
|
+
return (react_1.default.createElement(Layout_1.default, { mode: viewMode, onModeChange: onViewModeUpdate },
|
|
34
|
+
isEditingMode && (react_1.default.createElement(Layout_1.default.Left, null,
|
|
35
|
+
react_1.default.createElement(Form_1.Form, { content: content, onChange: onContentUpdate, activeBlockIndex: activeBlockIndex, onSelect: onSelect, spec: formSpecs }))),
|
|
36
|
+
react_1.default.createElement(Layout_1.default.Right, null,
|
|
37
|
+
react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, { key: errorBoundaryState }, children(constructorProps)),
|
|
38
|
+
isEditingMode && react_1.default.createElement(AddBlock_1.default, { onAdd: onAdd }))));
|
|
39
|
+
};
|
|
40
|
+
exports.Editor = Editor;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-editor-form {
|
|
4
|
+
--top-level-font-size: var(--yc-text-display-2-font-size);
|
|
5
|
+
--top-level-line-height: var(--yc-text-display-2-line-height);
|
|
6
|
+
--block-propery-font-size: var(--yc-text-body-3-font-size);
|
|
7
|
+
--block-property-line-height: var(--yc-text-body-3-line-height);
|
|
8
|
+
--nested-property-font-size: var(--yc-text-body-1-font-size);
|
|
9
|
+
--nested-property-line-height: var(--yc-text-body-1-line-height);
|
|
10
|
+
--complex-nested-property-font-size: var(--yc-text-body-2-font-size);
|
|
11
|
+
--complex-nested-property-line-height: var(--yc-text-body-2-line-height);
|
|
12
|
+
--input-min-width: 150px;
|
|
13
|
+
--property-title-width: 140px;
|
|
14
|
+
--button-height: 48px;
|
|
15
|
+
--icon-size: 32px;
|
|
16
|
+
--icon-margin: 42px;
|
|
17
|
+
--property-font-weight: 500;
|
|
18
|
+
--header-text-size: var(--top-level-font-size);
|
|
19
|
+
--header-line-height: var(--top-level-line-height);
|
|
20
|
+
--text-size: var(--top-level-font-size);
|
|
21
|
+
--line-height: var(--top-level-line-height);
|
|
22
|
+
}
|
|
23
|
+
.pc-editor-form .df-use-search .df-use-search {
|
|
24
|
+
--button-height: 32px;
|
|
25
|
+
--icon-size: 20px;
|
|
26
|
+
--icon-margin: 30px;
|
|
27
|
+
--header-text-size: var(--block-propery-font-size);
|
|
28
|
+
--header-line-height: var(--block-property-line-height);
|
|
29
|
+
--text-size: var(--block-propery-font-size);
|
|
30
|
+
--line-height: var(--block-property-line-height);
|
|
31
|
+
}
|
|
32
|
+
.pc-editor-form .df-use-search .df-use-search .df-use-search {
|
|
33
|
+
--button-height: 28px;
|
|
34
|
+
--icon-size: 16px;
|
|
35
|
+
--icon-margin: 25px;
|
|
36
|
+
--property-font-weight: 400;
|
|
37
|
+
--header-text-size: var(--complex-nested-property-font-size);
|
|
38
|
+
--header-line-height: var(--complex-nested-property-line-height);
|
|
39
|
+
--text-size: var(--nested-property-font-size);
|
|
40
|
+
--line-height: var(--nested-property-line-height);
|
|
41
|
+
}
|
|
42
|
+
.pc-editor-form .df-row {
|
|
43
|
+
width: inherit;
|
|
44
|
+
}
|
|
45
|
+
.pc-editor-form .df-row__left {
|
|
46
|
+
width: var(--property-title-width);
|
|
47
|
+
}
|
|
48
|
+
.pc-editor-form .df-row__title {
|
|
49
|
+
font-size: var(--text-size);
|
|
50
|
+
line-height: var(--line-height);
|
|
51
|
+
font-weight: var(--property-font-weight);
|
|
52
|
+
white-space: nowrap;
|
|
53
|
+
}
|
|
54
|
+
.pc-editor-form .df-simple-vertical-accordeon textarea {
|
|
55
|
+
min-width: var(--input-min-width);
|
|
56
|
+
min-height: var(--input-min-width);
|
|
57
|
+
}
|
|
58
|
+
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button {
|
|
59
|
+
font-size: var(--header-text-size);
|
|
60
|
+
line-height: var(--header-line-height);
|
|
61
|
+
}
|
|
62
|
+
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button {
|
|
63
|
+
--yc-button-height: var(--button-height);
|
|
64
|
+
display: flex;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
align-items: center;
|
|
67
|
+
}
|
|
68
|
+
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button .yc-button__icon-inner > svg {
|
|
69
|
+
width: var(--icon-size);
|
|
70
|
+
height: var(--icon-size);
|
|
71
|
+
color: var(--yc-color-text-hint);
|
|
72
|
+
}
|
|
73
|
+
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button .yc-button__icon_side_right ~ .yc-button__text {
|
|
74
|
+
margin-right: var(--icon-margin);
|
|
75
|
+
}
|
|
76
|
+
.pc-editor-form .df-simple-vertical-accordeon__body,
|
|
77
|
+
.pc-editor-form .df-group-indent > .df-use-search {
|
|
78
|
+
margin-top: 0;
|
|
79
|
+
margin-left: 1px;
|
|
80
|
+
padding-top: 12px;
|
|
81
|
+
padding-left: 16px;
|
|
82
|
+
border-left: 1px solid var(--yc-color-line-generic-accent);
|
|
83
|
+
}
|
|
84
|
+
.pc-editor-form .g-select,
|
|
85
|
+
.pc-editor-form .yc-text-input {
|
|
86
|
+
width: var(--input-min-width);
|
|
87
|
+
}
|
|
88
|
+
.pc-editor-form + .pc-editor-form {
|
|
89
|
+
margin-top: 12px;
|
|
90
|
+
}
|
|
91
|
+
.pc-editor-form__tabs {
|
|
92
|
+
--yc-color-base-special: var(--yc-color-promo-base-neon);
|
|
93
|
+
margin-bottom: 20px;
|
|
94
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PageContent } from '../../../models';
|
|
3
|
+
import { FormSpecs } from '../../dynamic-forms-custom/parser/types';
|
|
4
|
+
export interface FormProps {
|
|
5
|
+
content: PageContent;
|
|
6
|
+
activeBlockIndex: number;
|
|
7
|
+
spec: FormSpecs;
|
|
8
|
+
onChange: (content: PageContent) => void;
|
|
9
|
+
onSelect: (index: number) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const Form: React.MemoExoticComponent<({ content, onChange, activeBlockIndex, onSelect, spec }: FormProps) => JSX.Element>;
|