pds-dev-kit-web 2.2.137 → 2.2.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/desktop/components/BasicButtonGroup/BasicButtonGroup.js +1 -1
- package/dist/src/sub/DynamicLayout/CompositionRenderer/ComponentBlockMatcher.d.ts +11 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/ComponentBlockMatcher.js +56 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/Composition.d.ts +9 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/Composition.js +217 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/CompositionRenderer.d.ts +6 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/CompositionRenderer.js +27 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/FlexGridItem.d.ts +12 -0
- package/dist/src/sub/DynamicLayout/CompositionRenderer/FlexGridItem.js +75 -0
- package/dist/src/sub/DynamicLayout/components/EditModeSectionMatcher/EditModeSectionMatcher.js +3 -0
- package/dist/src/sub/DynamicLayout/components/Section/ErrorBoundary/ErrorBoundary.js +12 -1
- package/dist/src/sub/DynamicLayout/components/SectionMatcher/SectionMatcher.js +5 -3
- package/dist/src/sub/DynamicLayout/gleStyles.d.ts +3 -0
- package/dist/src/sub/DynamicLayout/gleStyles.js +19 -0
- package/dist/src/sub/DynamicLayout/hooks/useCustomSectionShortcut/useCustomSectionShortcut.d.ts +1 -1
- package/dist/src/sub/DynamicLayout/hooks/useCustomSectionShortcut/useCustomSectionShortcut.js +6 -1
- package/dist/src/sub/DynamicLayout/mock_samplePage.js +132 -132
- package/dist/src/sub/DynamicLayout/mocks.d.ts +1111 -0
- package/dist/src/sub/DynamicLayout/mocks.js +4775 -0
- package/dist/src/sub/DynamicLayout/sectionActionTypes.d.ts +65 -15
- package/dist/src/sub/DynamicLayout/sections/CustomSection/CustomSection.d.ts +0 -5
- package/dist/src/sub/DynamicLayout/sections/CustomSection/CustomSection.js +768 -198
- package/dist/src/sub/DynamicLayout/sections/CustomSection/FlexGridItem.d.ts +2 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/FlexGridItem.js +9 -6
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlockMatcher.d.ts +1 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlockMatcher.js +5 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Button/Button.js +25 -23
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/ContentsCarousel/ContentsCarousel.d.ts +8 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/ContentsCarousel/ContentsCarousel.js +12 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Embed/Embed.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Embed/EmbedIframe.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Text/Text.js +26 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/components/S_Backdrop.d.ts +1 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/components/S_Backdrop.js +13 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/components/S_CB_AnimationObserverBox.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/components/S_CB_Box.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/components/S_CB_BoxWithShadow.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/types.d.ts +79 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGoogleFonts/getGoogleFonts.d.ts +2 -4
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGoogleFonts/getGoogleFonts.js +3 -14
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGoogleFonts/index.d.ts +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGoogleFonts/index.js +2 -3
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/clsx.d.ts +7 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/clsx.js +33 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/colorUtil.d.ts +4 -4
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/fontSizeAdjustment.d.ts +1 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/fontSizeAdjustment.js +333 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/{hooks/useGroupDrag/utils.d.ts → newUtils/group.d.ts} +4 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/{hooks/useGroupDrag/utils.js → newUtils/group.js} +14 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/replaceUndefinedValues.js +8 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/newUtils/textUtil.d.ts +1 -6
- package/dist/src/sub/DynamicLayout/sections/CustomSection/types.d.ts +18 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/types.js +2 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/parsePlacement.d.ts +5 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/parsePlacement.js +12 -9
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/stylePropParsers/parseStylePropTextSpec.d.ts +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/stylePropParsers/types.d.ts +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/stylePropParsers/types.js +1 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/types.d.ts +3 -5
- package/dist/src/sub/DynamicLayout/sections/{CustomSection/FlexGridCustomSection.d.ts → FlexGridCustomSection.d.ts} +1 -5
- package/dist/src/sub/DynamicLayout/sections/{CustomSection/FlexGridCustomSection.js → FlexGridCustomSection.js} +44 -88
- package/dist/src/sub/DynamicLayout/types.d.ts +45 -1
- package/package.json +2 -2
- package/release-note.md +2 -2
- package/dist/src/sub/DynamicLayout/pagesPreviewMock.d.ts +0 -14038
- package/dist/src/sub/DynamicLayout/pagesPreviewMock.js +0 -35827
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Button/btnTypes.d.ts +0 -76
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Button/btnTypes.js +0 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Text/types.d.ts +0 -38
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Text/types.js +0 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/index.d.ts +0 -1
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/index.js +0 -8
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/useGroupDrag.d.ts +0 -22
- package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/useGroupDrag.js +0 -273
|
@@ -50,24 +50,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.S_gleStyles = void 0;
|
|
54
53
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
55
54
|
var publ_echo_1 = require("publ-echo");
|
|
56
|
-
var
|
|
55
|
+
var group_1 = require("publ-echo/dist/lib/GridLayoutEditor/group");
|
|
56
|
+
var renderHelpers_1 = require("publ-echo/dist/lib/GridLayoutEditor/utils/renderHelpers");
|
|
57
57
|
var react_1 = __importStar(require("react"));
|
|
58
58
|
var ErrorBoundary_1 = require("../../../DynamicLayout/components/Section/ErrorBoundary");
|
|
59
59
|
var dynamicLayoutContext_1 = require("../../../DynamicLayout/dynamicLayoutContext");
|
|
60
|
-
var
|
|
60
|
+
var gleStyles_1 = require("../../../DynamicLayout/gleStyles");
|
|
61
61
|
var styled_components_1 = __importDefault(require("styled-components"));
|
|
62
62
|
var components_1 = require("../../components");
|
|
63
63
|
var ComponentBlockMatcher_1 = __importDefault(require("./components/ComponentBlock/ComponentBlockMatcher"));
|
|
64
64
|
var S_HiddenCover_1 = require("./components/ComponentBlock/componentBlocks/components/S_HiddenCover");
|
|
65
|
-
var
|
|
66
|
-
var
|
|
67
|
-
var utils_1 = require("./hooks/useGroupDrag/utils");
|
|
65
|
+
var clsx_1 = require("./newUtils/clsx");
|
|
66
|
+
var group_2 = require("./newUtils/group");
|
|
68
67
|
var util_1 = require("./util");
|
|
69
68
|
var parseSectionPadding_1 = __importDefault(require("./util/layoutPropParsers/parseSectionPadding"));
|
|
70
|
-
var WidthProvidedRGL = (0, publ_echo_1.WidthProvider)(ReactGridLayout_1.default);
|
|
71
69
|
var Responsive = (0, publ_echo_1.WidthProvider)(publ_echo_1.ResponsiveGridEditor);
|
|
72
70
|
var GRID_CELL_MIN = 24;
|
|
73
71
|
var DESKTOP_GRID_COLS = 24;
|
|
@@ -75,73 +73,103 @@ var MOBILE_GRID_COLS = 8;
|
|
|
75
73
|
var GLE_MIN_WIDTH_DESKTOP_PX = "".concat(GRID_CELL_MIN * DESKTOP_GRID_COLS, "px");
|
|
76
74
|
var GLE_MIN_WIDTH_MOBILE_PX = "".concat(GRID_CELL_MIN * MOBILE_GRID_COLS, "px");
|
|
77
75
|
var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
78
|
-
var _a
|
|
76
|
+
var _a, _b, _c, _d;
|
|
77
|
+
var _e = (0, react_1.useContext)(dynamicLayoutContext_1.dynamicLayoutContext), device = _e.device, editingSectionId = _e.editingSectionId, mode = _e.mode, shortcutKeyMode = _e.shortcutKeyMode, zoomScale = _e.zoomScale, sectionActionHandler = _e.sectionActionHandler;
|
|
79
78
|
var componentBlocks = props.componentBlocks, jsonProperties = props.jsonProperties;
|
|
80
|
-
var
|
|
81
|
-
var
|
|
79
|
+
var sectionPedigree = jsonProperties === null || jsonProperties === void 0 ? void 0 : jsonProperties.pedigree;
|
|
80
|
+
var _f = (0, react_1.useState)(sectionPedigree), pedigreeState = _f[0], setPedigreeState = _f[1];
|
|
81
|
+
(0, react_1.useEffect)(function () {
|
|
82
|
+
setPedigreeState(sectionPedigree);
|
|
83
|
+
}, [sectionPedigree]);
|
|
84
|
+
var _g = jsonProperties, _h = _g.data, CB_PLACEMENT_PROP_SECTION = _h.CB_PLACEMENT_PROP_SECTION, CB_LAYOUT_PROP_PADDING = _h.CB_LAYOUT_PROP_PADDING, CB_CONTENT_PROP_SECTION = _h.CB_CONTENT_PROP_SECTION, zOrders = _g.zOrders;
|
|
85
|
+
var colsDesktop = (_a = CB_PLACEMENT_PROP_SECTION.CB_PLACEMENT_PROP_SECTION_SPEC_COLS) !== null && _a !== void 0 ? _a : 24;
|
|
86
|
+
var colsMobile = (_b = CB_PLACEMENT_PROP_SECTION['CB_PLACEMENT_PROP_SECTION_SPEC_COLS:MOBILE']) !== null && _b !== void 0 ? _b : 8;
|
|
87
|
+
var _j = (0, react_1.useState)(null), selectedBlockId = _j[0], setSelectedBlockId = _j[1];
|
|
82
88
|
var gleRef = (0, react_1.useRef)(null);
|
|
83
|
-
var
|
|
84
|
-
var
|
|
89
|
+
var _k = (0, react_1.useState)(50), rowHeight = _k[0], setRowHeight = _k[1];
|
|
90
|
+
var _l = (0, react_1.useState)(16), baseFontSize = _l[0], setBaseFontSize = _l[1];
|
|
85
91
|
var isMobile = device === 'MOBILE';
|
|
86
92
|
var isEditMode = mode === 'EDIT';
|
|
87
93
|
var layoutByDevice = device === 'DESKTOP' ? 'lg' : 'sm';
|
|
88
|
-
var
|
|
89
|
-
var _a = (0, util_1.parsePlacement)(componentBlocks !== null && componentBlocks !== void 0 ? componentBlocks : []), lg = _a.lg, sm = _a.sm;
|
|
94
|
+
var _m = (0, react_1.useState)(function () {
|
|
95
|
+
var _a = (0, util_1.parsePlacement)(componentBlocks !== null && componentBlocks !== void 0 ? componentBlocks : [], zOrders), lg = _a.lg, sm = _a.sm;
|
|
90
96
|
return {
|
|
91
97
|
lg: lg,
|
|
92
98
|
sm: sm
|
|
93
99
|
};
|
|
94
|
-
}), layouts =
|
|
95
|
-
var
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
}), layouts = _m[0], setLayouts = _m[1];
|
|
101
|
+
var _o = (0, react_1.useState)('ROOT'), editingGroupBlock = _o[0], setEditingGroupBlock = _o[1];
|
|
102
|
+
var _p = (0, react_1.useState)([]), bulkBlockIds = _p[0], setBulkBlockIds = _p[1];
|
|
103
|
+
(0, react_1.useEffect)(function () {
|
|
104
|
+
if (editingGroupBlock) {
|
|
105
|
+
var found = (0, group_1.findBlockByBlockId)(sectionPedigree, editingGroupBlock);
|
|
106
|
+
if (!found) {
|
|
107
|
+
setEditingGroupBlock('ROOT');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (found.type === 'GROUP_BLOCK' && found.children.length === 0) {
|
|
111
|
+
setEditingGroupBlock('ROOT');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}, [editingGroupBlock, sectionPedigree]);
|
|
116
|
+
var newblock = bulkBlockIds.length > 0
|
|
117
|
+
? (0, group_1.addBulkToTarget)(pedigreeState, editingGroupBlock, bulkBlockIds)
|
|
118
|
+
: pedigreeState;
|
|
100
119
|
(0, react_1.useImperativeHandle)(ref, function () {
|
|
101
120
|
return {
|
|
102
|
-
selectCB: function (
|
|
103
|
-
|
|
121
|
+
selectCB: function (blockId) {
|
|
122
|
+
setSelectedBlockId(blockId);
|
|
104
123
|
},
|
|
105
|
-
selectCBInBulk: function (
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
filteredLayout.push(newGroupLayout);
|
|
112
|
-
return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = filteredLayout, _a));
|
|
113
|
-
});
|
|
124
|
+
selectCBInBulk: function (blockIds) {
|
|
125
|
+
setBulkBlockIds(blockIds);
|
|
126
|
+
},
|
|
127
|
+
selectGroup: function (groupBlockId) {
|
|
128
|
+
setBulkBlockIds([]);
|
|
129
|
+
setSelectedBlockId(groupBlockId);
|
|
114
130
|
}
|
|
115
131
|
};
|
|
116
132
|
}, [componentBlocks]);
|
|
117
133
|
(0, react_1.useLayoutEffect)(function () {
|
|
118
|
-
var parsedLayouts = (0, util_1.parsePlacement)(componentBlocks !== null && componentBlocks !== void 0 ? componentBlocks : []);
|
|
134
|
+
var parsedLayouts = (0, util_1.parsePlacement)(componentBlocks !== null && componentBlocks !== void 0 ? componentBlocks : [], zOrders);
|
|
119
135
|
setLayouts(function (prev) {
|
|
120
136
|
var _a;
|
|
121
137
|
var _b;
|
|
122
|
-
var group = (0,
|
|
138
|
+
var group = (0, group_2.getGroupCB)(prev[layoutByDevice]);
|
|
123
139
|
var groupedCBIds = (_b = group === null || group === void 0 ? void 0 : group.childrenIds) !== null && _b !== void 0 ? _b : [];
|
|
124
|
-
var filteredLayout = (0,
|
|
140
|
+
var filteredLayout = (0, group_2.filterItemsById)(parsedLayouts[layoutByDevice], groupedCBIds);
|
|
125
141
|
if (group === null || group === void 0 ? void 0 : group.groupLayouts) {
|
|
126
142
|
var groupCbs = parsedLayouts[layoutByDevice].filter(function (each) {
|
|
127
143
|
return groupedCBIds.includes(each.i);
|
|
128
144
|
});
|
|
129
145
|
if (groupCbs.length > 0) {
|
|
130
|
-
var newGroupLayout = (0,
|
|
146
|
+
var newGroupLayout = (0, group_2.getGroupForMultiple)(groupCbs);
|
|
131
147
|
filteredLayout.push(newGroupLayout);
|
|
132
148
|
}
|
|
133
149
|
}
|
|
134
150
|
return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = filteredLayout, _a));
|
|
135
151
|
});
|
|
136
|
-
}, [componentBlocks,
|
|
152
|
+
}, [componentBlocks, group_2.getGroupCB, layoutByDevice, zOrders]);
|
|
137
153
|
(0, react_1.useEffect)(function () {
|
|
138
154
|
if (editingSectionId !== props.id) {
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
setSelectedBlockId(null);
|
|
156
|
+
setBulkBlockIds([]);
|
|
157
|
+
setEditingGroupBlock('ROOT');
|
|
141
158
|
}
|
|
142
159
|
}, [editingSectionId]);
|
|
160
|
+
var workDir = (_c = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _c !== void 0 ? _c : '/ROOT';
|
|
161
|
+
(0, react_1.useEffect)(function () {
|
|
162
|
+
sectionActionHandler &&
|
|
163
|
+
sectionActionHandler({
|
|
164
|
+
type: '@CUSTOMSECTION/WORKDIR_CHANGED',
|
|
165
|
+
payload: {
|
|
166
|
+
workDir: workDir
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}, [workDir]);
|
|
143
170
|
// NOTE: 추후에 event를 외부에서 전달받게하거나, 아예 상태를 끌어올리거나 해야합니다.
|
|
144
171
|
(0, react_1.useLayoutEffect)(function () {
|
|
172
|
+
var _a, _b, _c, _d, _e, _f;
|
|
145
173
|
if (props.id !== editingSectionId) {
|
|
146
174
|
return;
|
|
147
175
|
}
|
|
@@ -149,42 +177,218 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
149
177
|
return;
|
|
150
178
|
}
|
|
151
179
|
if (shortcutKeyMode === 'SELECT_ALL') {
|
|
152
|
-
if ((componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.length) === 1) {
|
|
153
|
-
setSelectedCB(componentBlocks[0].id);
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
180
|
makeAllInOneGroup();
|
|
157
181
|
return;
|
|
158
182
|
}
|
|
183
|
+
// esc
|
|
159
184
|
if (shortcutKeyMode === 'MANUAL_BULK_BREAK') {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
185
|
+
if (selectedBlockId &&
|
|
186
|
+
editingGroupBlock !== selectedBlockId &&
|
|
187
|
+
editingGroupBlock !== 'ROOT') {
|
|
188
|
+
setSelectedBlockId(null);
|
|
189
|
+
sectionActionHandler &&
|
|
190
|
+
sectionActionHandler({
|
|
191
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
192
|
+
payload: {
|
|
193
|
+
block: {
|
|
194
|
+
blockId: editingGroupBlock,
|
|
195
|
+
type: 'GROUP_BLOCK',
|
|
196
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND',
|
|
197
|
+
childrenBlockIds: (_b = (0, group_1.findDirectChildrenBlockIds)(newblock, editingGroupBlock)) !== null && _b !== void 0 ? _b : [],
|
|
198
|
+
childrenCBIds: (_c = (0, group_1.findDirectChildrenCbIds)(newblock, editingGroupBlock)) !== null && _c !== void 0 ? _c : []
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (bulkBlockIds.length > 0) {
|
|
205
|
+
setBulkBlockIds([]);
|
|
206
|
+
setSelectedBlockId(null);
|
|
207
|
+
sectionActionHandler &&
|
|
208
|
+
sectionActionHandler({
|
|
209
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
210
|
+
payload: {
|
|
211
|
+
block: {
|
|
212
|
+
blockId: editingGroupBlock,
|
|
213
|
+
type: 'GROUP_BLOCK',
|
|
214
|
+
workDir: (_d = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _d !== void 0 ? _d : 'NOT-FOUND',
|
|
215
|
+
childrenBlockIds: (_e = (0, group_1.findDirectChildrenBlockIds)(newblock, editingGroupBlock)) !== null && _e !== void 0 ? _e : [],
|
|
216
|
+
childrenCBIds: (_f = (0, group_1.findDirectChildrenCbIds)(newblock, editingGroupBlock)) !== null && _f !== void 0 ? _f : []
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (editingGroupBlock !== 'ROOT') {
|
|
223
|
+
setEditingGroupBlock('ROOT');
|
|
224
|
+
setSelectedBlockId(null);
|
|
225
|
+
sectionActionHandler &&
|
|
226
|
+
sectionActionHandler({
|
|
227
|
+
type: '@CUSTOMSECTION/BULK_DISMISSED',
|
|
228
|
+
payload: {
|
|
229
|
+
message: 'MANUAL_BULK_BREAK_OR_ESC',
|
|
230
|
+
editingGroupBlock: 'ROOT'
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (editingGroupBlock === 'ROOT') {
|
|
236
|
+
setSelectedBlockId(null);
|
|
237
|
+
sectionActionHandler &&
|
|
238
|
+
sectionActionHandler({
|
|
239
|
+
type: '@CUSTOMSECTION/BULK_DISMISSED',
|
|
240
|
+
payload: {
|
|
241
|
+
message: 'MANUAL_BULK_BREAK_OR_ESC',
|
|
242
|
+
editingGroupBlock: 'ROOT'
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
163
246
|
}
|
|
164
|
-
}, [shortcutKeyMode,
|
|
247
|
+
}, [shortcutKeyMode, setSelectedBlockId]);
|
|
165
248
|
(0, react_1.useLayoutEffect)(function () {
|
|
249
|
+
var _a;
|
|
166
250
|
if (props.id !== editingSectionId) {
|
|
167
251
|
return;
|
|
168
252
|
}
|
|
169
253
|
if (shortcutKeyMode === 'MANUAL_COLLISION_SELECT') {
|
|
170
|
-
if (!
|
|
254
|
+
if (!selectedBlockId || selectedBlockId === 'BULK') {
|
|
171
255
|
return;
|
|
172
256
|
}
|
|
173
|
-
|
|
257
|
+
var selectedCBId = selectedBlockId ? (0, group_1.formatBlockIdToCbId)(selectedBlockId) : undefined;
|
|
258
|
+
if (!selectedCBId) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
var bulks_1 = getCollisionGroupIds(selectedCBId);
|
|
262
|
+
if (selectedBlockId) {
|
|
263
|
+
bulks_1.push(selectedBlockId);
|
|
264
|
+
}
|
|
265
|
+
setBulkBlockIds(function (prev) {
|
|
266
|
+
var set = new Set(__spreadArray(__spreadArray([], prev, true), bulks_1, true));
|
|
267
|
+
return Array.from(set);
|
|
268
|
+
});
|
|
269
|
+
setSelectedBlockId(null);
|
|
270
|
+
var newBulkCBIds = bulks_1
|
|
271
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
272
|
+
.filter(function (each) { return each !== null; });
|
|
273
|
+
var childrenCBIds = [];
|
|
274
|
+
if (newBulkCBIds.length === 0) {
|
|
275
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, bulks_1[0]);
|
|
276
|
+
childrenCBIds = oneCB ? [oneCB] : [];
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
childrenCBIds = newBulkCBIds;
|
|
280
|
+
}
|
|
281
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === __spreadArray(__spreadArray([], bulkBlockIds, true), bulks_1, true).length;
|
|
174
282
|
sectionActionHandler &&
|
|
175
283
|
sectionActionHandler({
|
|
176
|
-
type: '@CUSTOMSECTION/
|
|
284
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
177
285
|
payload: {
|
|
178
|
-
|
|
286
|
+
block: {
|
|
287
|
+
type: 'BULK',
|
|
288
|
+
blockId: 'BULK',
|
|
289
|
+
childrenBlockIds: bulks_1,
|
|
290
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND',
|
|
291
|
+
childrenCBIds: childrenCBIds,
|
|
292
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
293
|
+
}
|
|
179
294
|
}
|
|
180
295
|
});
|
|
181
|
-
|
|
296
|
+
return;
|
|
182
297
|
}
|
|
183
|
-
}, [
|
|
184
|
-
var
|
|
298
|
+
}, [selectedBlockId, shortcutKeyMode, sectionActionHandler, bulkBlockIds, setSelectedBlockId]);
|
|
299
|
+
var makeAllInOneGroup = function () {
|
|
300
|
+
var _a, _b, _c, _d, _e;
|
|
301
|
+
var allRootChildIds = (0, group_1.findDirectChildrenBlockIds)(pedigreeState, editingGroupBlock);
|
|
302
|
+
if (allRootChildIds.length === 1) {
|
|
303
|
+
var block = (0, group_1.findBlockByBlockId)(newblock, allRootChildIds[0]);
|
|
304
|
+
if (!block) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
setSelectedBlockId(block.blockId);
|
|
308
|
+
setBulkBlockIds([]);
|
|
309
|
+
if (block.type === 'COMPONENT_BLOCK') {
|
|
310
|
+
sectionActionHandler &&
|
|
311
|
+
sectionActionHandler({
|
|
312
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
313
|
+
payload: {
|
|
314
|
+
block: {
|
|
315
|
+
blockId: block.blockId,
|
|
316
|
+
type: block.type,
|
|
317
|
+
cbId: block.componentBlockId,
|
|
318
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND'
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
if (block.type === 'GROUP_BLOCK') {
|
|
325
|
+
sectionActionHandler &&
|
|
326
|
+
sectionActionHandler({
|
|
327
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
328
|
+
payload: {
|
|
329
|
+
block: {
|
|
330
|
+
blockId: block.blockId,
|
|
331
|
+
type: 'GROUP_BLOCK',
|
|
332
|
+
workDir: (_b = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _b !== void 0 ? _b : 'NOT-FOUND',
|
|
333
|
+
childrenBlockIds: (_c = (0, group_1.findDirectChildrenBlockIds)(newblock, block.blockId)) !== null && _c !== void 0 ? _c : [],
|
|
334
|
+
childrenCBIds: (_d = (0, group_1.findDirectChildrenCbIds)(newblock, block.blockId)) !== null && _d !== void 0 ? _d : []
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
setBulkBlockIds(allRootChildIds);
|
|
342
|
+
var newBulkCBIds = allRootChildIds
|
|
343
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
344
|
+
.filter(function (each) { return each !== null; });
|
|
345
|
+
var childrenCBIds = [];
|
|
346
|
+
if (newBulkCBIds.length === 0) {
|
|
347
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, allRootChildIds[0]);
|
|
348
|
+
childrenCBIds = oneCB ? [oneCB] : [];
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
childrenCBIds = newBulkCBIds;
|
|
352
|
+
}
|
|
353
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === allRootChildIds.length;
|
|
354
|
+
sectionActionHandler &&
|
|
355
|
+
sectionActionHandler({
|
|
356
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
357
|
+
payload: {
|
|
358
|
+
block: {
|
|
359
|
+
type: 'BULK',
|
|
360
|
+
blockId: 'BULK',
|
|
361
|
+
childrenBlockIds: allRootChildIds,
|
|
362
|
+
workDir: (_e = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _e !== void 0 ? _e : 'NOT-FOUND',
|
|
363
|
+
childrenCBIds: childrenCBIds,
|
|
364
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
};
|
|
369
|
+
var getCollisionGroupIds = function (cdId1) {
|
|
370
|
+
var layoutItem = (0, renderHelpers_1.getLayoutItem)(layouts[layoutByDevice], cdId1.toString());
|
|
371
|
+
if (!layoutItem) {
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
var allCollisions = (0, renderHelpers_1.getAllCollisions)(layouts[layoutByDevice], layoutItem);
|
|
375
|
+
var allCollisionsCbIds = allCollisions.map(function (each) { return Number(each.i); });
|
|
376
|
+
var workDirChildrenBlockIds = (0, group_1.findDirectChildrenBlockIds)(newblock, editingGroupBlock);
|
|
377
|
+
var collisions = workDirChildrenBlockIds.filter(function (each) {
|
|
378
|
+
var cbId = (0, group_1.formatBlockIdToCbId)(each);
|
|
379
|
+
var allCollisions = (0, group_1.findAllChildrenCbIds)(newblock, each);
|
|
380
|
+
if (cbId !== null && allCollisionsCbIds.includes(cbId)) {
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
var hasCollision = allCollisions.some(function (each) { return allCollisionsCbIds.includes(each); });
|
|
384
|
+
return hasCollision;
|
|
385
|
+
});
|
|
386
|
+
return __spreadArray(__spreadArray([], collisions, true), [(0, group_1.formatCbIdToBlockId)(cdId1)], false);
|
|
387
|
+
};
|
|
388
|
+
var _q = (0, util_1.parseCustomSectionPlacement)({
|
|
185
389
|
isMobile: isMobile,
|
|
186
390
|
customSectionProps: CB_PLACEMENT_PROP_SECTION
|
|
187
|
-
}), rows =
|
|
391
|
+
}), rows = _q.rows, width = _q.width, minHeight = _q.minHeight, isFullWidth = _q.isFullWidth;
|
|
188
392
|
var customSectionStyles = {
|
|
189
393
|
minHeight: "".concat(minHeight, "vh"),
|
|
190
394
|
width: '100%',
|
|
@@ -192,66 +396,167 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
192
396
|
};
|
|
193
397
|
var breakpoint = device === 'MOBILE' ? 'sm' : 'lg';
|
|
194
398
|
var onClickCB = function (id) {
|
|
399
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
400
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(id);
|
|
195
401
|
if (!isEditMode) {
|
|
196
402
|
return;
|
|
197
403
|
}
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
return;
|
|
404
|
+
var added = (function () {
|
|
405
|
+
if (selectedBlockId === editingGroupBlock) {
|
|
406
|
+
return [blockId];
|
|
407
|
+
}
|
|
408
|
+
if (selectedBlockId === 'BULK') {
|
|
409
|
+
return [blockId];
|
|
410
|
+
}
|
|
411
|
+
return selectedBlockId ? [selectedBlockId, blockId] : [blockId];
|
|
412
|
+
})();
|
|
413
|
+
if (shortcutKeyMode === 'BULK_SELECT') {
|
|
414
|
+
setBulkBlockIds(function (prev) {
|
|
415
|
+
var set = new Set(__spreadArray(__spreadArray([], prev, true), added, true));
|
|
416
|
+
return Array.from(set);
|
|
417
|
+
});
|
|
418
|
+
setSelectedBlockId(null);
|
|
419
|
+
var newBulkBlockIds = Array.from(new Set(__spreadArray(__spreadArray([], bulkBlockIds, true), added, true)));
|
|
420
|
+
var newBulkCBIds = newBulkBlockIds
|
|
421
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
422
|
+
.filter(function (each) { return each !== null; });
|
|
423
|
+
var childrenCBIds = [];
|
|
424
|
+
if (newBulkCBIds.length === 0) {
|
|
425
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, newBulkBlockIds[0]);
|
|
426
|
+
childrenCBIds = oneCB ? [oneCB] : [];
|
|
201
427
|
}
|
|
202
|
-
|
|
428
|
+
else {
|
|
429
|
+
childrenCBIds = newBulkCBIds;
|
|
430
|
+
}
|
|
431
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === __spreadArray(__spreadArray([], bulkBlockIds, true), added, true).length;
|
|
203
432
|
sectionActionHandler &&
|
|
204
433
|
sectionActionHandler({
|
|
205
|
-
type: '@CUSTOMSECTION/
|
|
434
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
206
435
|
payload: {
|
|
207
|
-
|
|
436
|
+
block: {
|
|
437
|
+
type: 'BULK',
|
|
438
|
+
blockId: 'BULK',
|
|
439
|
+
childrenBlockIds: newBulkBlockIds,
|
|
440
|
+
childrenCBIds: childrenCBIds,
|
|
441
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND',
|
|
442
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
443
|
+
}
|
|
208
444
|
}
|
|
209
445
|
});
|
|
210
|
-
setSelectedCB('group');
|
|
211
446
|
return;
|
|
212
447
|
}
|
|
213
448
|
if (shortcutKeyMode === 'COLLISION_SELECT') {
|
|
214
|
-
var
|
|
215
|
-
|
|
449
|
+
var bulks = getCollisionGroupIds(id);
|
|
450
|
+
var newBulksSet = new Set(__spreadArray(__spreadArray(__spreadArray([], bulkBlockIds, true), added, true), bulks, true));
|
|
451
|
+
var newBulks = Array.from(newBulksSet);
|
|
452
|
+
if (newBulks.length === 1) {
|
|
453
|
+
var blockId_1 = newBulks[0];
|
|
454
|
+
setSelectedBlockId(blockId_1);
|
|
455
|
+
setBulkBlockIds([]);
|
|
456
|
+
sectionActionHandler &&
|
|
457
|
+
sectionActionHandler({
|
|
458
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
459
|
+
payload: {
|
|
460
|
+
block: {
|
|
461
|
+
type: 'COMPONENT_BLOCK',
|
|
462
|
+
blockId: blockId_1,
|
|
463
|
+
cbId: id,
|
|
464
|
+
workDir: (_b = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _b !== void 0 ? _b : 'NOT-FOUND'
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
setBulkBlockIds(newBulks);
|
|
471
|
+
setSelectedBlockId(null);
|
|
472
|
+
var newBulkCBIds = newBulks
|
|
473
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
474
|
+
.filter(function (each) { return each !== null; });
|
|
475
|
+
var childrenCBIds = [];
|
|
476
|
+
if (newBulkCBIds.length === 0) {
|
|
477
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, bulks[0]);
|
|
478
|
+
childrenCBIds = oneCB ? [oneCB] : [];
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
childrenCBIds = newBulkCBIds;
|
|
482
|
+
}
|
|
483
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === newBulks.length;
|
|
216
484
|
sectionActionHandler &&
|
|
217
485
|
sectionActionHandler({
|
|
218
|
-
type: '@CUSTOMSECTION/
|
|
486
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
219
487
|
payload: {
|
|
220
|
-
|
|
488
|
+
block: {
|
|
489
|
+
type: 'BULK',
|
|
490
|
+
blockId: 'BULK',
|
|
491
|
+
childrenBlockIds: newBulks,
|
|
492
|
+
workDir: (_c = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _c !== void 0 ? _c : 'NOT-FOUND',
|
|
493
|
+
childrenCBIds: childrenCBIds,
|
|
494
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
495
|
+
}
|
|
221
496
|
}
|
|
222
497
|
});
|
|
223
|
-
setSelectedCB('group');
|
|
224
498
|
return;
|
|
225
499
|
}
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
500
|
+
var blockType = blockId.startsWith('GB_') ? 'GROUP_BLOCK' : 'COMPONENT_BLOCK';
|
|
501
|
+
setSelectedBlockId(blockId);
|
|
502
|
+
setBulkBlockIds([]);
|
|
503
|
+
if (blockType === 'COMPONENT_BLOCK') {
|
|
504
|
+
sectionActionHandler &&
|
|
505
|
+
sectionActionHandler({
|
|
506
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
507
|
+
payload: {
|
|
508
|
+
block: {
|
|
509
|
+
blockId: blockId,
|
|
510
|
+
type: blockType,
|
|
511
|
+
cbId: id,
|
|
512
|
+
workDir: (_d = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _d !== void 0 ? _d : 'NOT-FOUND'
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
if (blockType === 'GROUP_BLOCK') {
|
|
519
|
+
sectionActionHandler &&
|
|
520
|
+
sectionActionHandler({
|
|
521
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
522
|
+
payload: {
|
|
523
|
+
block: {
|
|
524
|
+
blockId: blockId,
|
|
525
|
+
type: 'GROUP_BLOCK',
|
|
526
|
+
workDir: (_e = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _e !== void 0 ? _e : 'NOT-FOUND',
|
|
527
|
+
childrenBlockIds: (_f = (0, group_1.findDirectChildrenBlockIds)(newblock, blockId)) !== null && _f !== void 0 ? _f : [],
|
|
528
|
+
childrenCBIds: (_g = (0, group_1.findDirectChildrenCbIds)(newblock, blockId)) !== null && _g !== void 0 ? _g : []
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
});
|
|
229
532
|
}
|
|
230
|
-
setSelectedCB(id);
|
|
231
|
-
sectionActionHandler &&
|
|
232
|
-
sectionActionHandler({
|
|
233
|
-
type: '@CUSTOMSECTION/CB_CLICKED',
|
|
234
|
-
payload: {
|
|
235
|
-
id: id
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
533
|
};
|
|
239
534
|
var onContextMenuCB = function (id, e) {
|
|
535
|
+
var _a;
|
|
536
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(id);
|
|
240
537
|
if (!isEditMode) {
|
|
241
538
|
return;
|
|
242
539
|
}
|
|
243
|
-
if (
|
|
244
|
-
|
|
245
|
-
breakGroupCB();
|
|
246
|
-
}
|
|
540
|
+
if (selectedBlockId === 'BULK' && blockId !== selectedBlockId) {
|
|
541
|
+
setBulkBlockIds([]);
|
|
247
542
|
}
|
|
248
|
-
|
|
543
|
+
// if (!['COLLISION_SELECT', 'BULK_SELECT'].includes(shortcutKeyMode ?? '')) {
|
|
544
|
+
// if (blockId !== selectedBlockId) {
|
|
545
|
+
// setBulkBlockIds([]);
|
|
546
|
+
// }
|
|
547
|
+
// }
|
|
548
|
+
setSelectedBlockId(blockId);
|
|
249
549
|
if (sectionActionHandler) {
|
|
250
550
|
sectionActionHandler({
|
|
251
551
|
type: '@CUSTOMSECTION/CB_RIGHT_CLICKED',
|
|
252
552
|
payload: {
|
|
253
|
-
|
|
254
|
-
|
|
553
|
+
e: e,
|
|
554
|
+
block: {
|
|
555
|
+
blockId: blockId,
|
|
556
|
+
cbId: id,
|
|
557
|
+
type: 'COMPONENT_BLOCK',
|
|
558
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND'
|
|
559
|
+
}
|
|
255
560
|
}
|
|
256
561
|
});
|
|
257
562
|
}
|
|
@@ -276,7 +581,7 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
276
581
|
});
|
|
277
582
|
};
|
|
278
583
|
var onDragStop = function (props) {
|
|
279
|
-
var _a;
|
|
584
|
+
var _a, _b, _c;
|
|
280
585
|
if (!isEditMode || !props.item) {
|
|
281
586
|
return;
|
|
282
587
|
}
|
|
@@ -288,33 +593,49 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
288
593
|
}, 0);
|
|
289
594
|
return;
|
|
290
595
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
596
|
+
// NOTE 미사용시 삭제
|
|
597
|
+
// if (item.i === 'BULK' && props.item.groupLayouts) {
|
|
598
|
+
// setSelectedBlockId('BULK');
|
|
599
|
+
// const outerBasedChildrenPositions = props.item.groupLayouts.map((cb) => ({
|
|
600
|
+
// ...cb,
|
|
601
|
+
// x: item.x + cb.x,
|
|
602
|
+
// y: item.y + cb.y
|
|
603
|
+
// }));
|
|
604
|
+
// sectionActionHandler &&
|
|
605
|
+
// sectionActionHandler({
|
|
606
|
+
// type: '@CUSTOMSECTION/BULK_DRAG_STOP',
|
|
607
|
+
// payload: {
|
|
608
|
+
// updatedBlocks: props.
|
|
609
|
+
// ...props,
|
|
610
|
+
// outerBasedChildrenPositions,
|
|
611
|
+
// workDir: getBlockWorkDirPath(newblock, editingGroupBlock) ?? 'NOT-FOUND'
|
|
612
|
+
// }
|
|
613
|
+
// });
|
|
614
|
+
// return;
|
|
615
|
+
// }
|
|
301
616
|
var numberId = Number((_a = props.item) === null || _a === void 0 ? void 0 : _a.i);
|
|
617
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(numberId);
|
|
302
618
|
var isIdNumber = !Number.isNaN(numberId);
|
|
303
|
-
if (
|
|
304
|
-
if ((0,
|
|
305
|
-
// NOTE: 타이밍 트릭, 구조 변경 시 확인하여 수정하면 좋을 것 같습니다.
|
|
619
|
+
if (blockId) {
|
|
620
|
+
if ((0, group_2.getGroupCB)(layouts[layoutByDevice])) {
|
|
306
621
|
setTimeout(function () {
|
|
307
|
-
|
|
622
|
+
setBulkBlockIds([]);
|
|
308
623
|
}, 100);
|
|
309
624
|
}
|
|
310
|
-
|
|
625
|
+
setSelectedBlockId(blockId);
|
|
311
626
|
}
|
|
312
627
|
if (isLayoutPlacementSame(item, prev)) {
|
|
628
|
+
// 확인 필요.. 그룹과 벌크
|
|
313
629
|
sectionActionHandler &&
|
|
314
630
|
sectionActionHandler({
|
|
315
|
-
type: '@CUSTOMSECTION/
|
|
631
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
316
632
|
payload: {
|
|
317
|
-
|
|
633
|
+
block: {
|
|
634
|
+
blockId: blockId,
|
|
635
|
+
cbId: numberId,
|
|
636
|
+
type: 'COMPONENT_BLOCK',
|
|
637
|
+
workDir: (_b = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _b !== void 0 ? _b : 'NOT-FOUND'
|
|
638
|
+
}
|
|
318
639
|
}
|
|
319
640
|
});
|
|
320
641
|
return;
|
|
@@ -322,11 +643,12 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
322
643
|
if (sectionActionHandler && isIdNumber) {
|
|
323
644
|
sectionActionHandler({
|
|
324
645
|
type: '@CUSTOMSECTION/CB_DRAG_STOP',
|
|
325
|
-
payload: props
|
|
646
|
+
payload: __assign(__assign({}, props), { blockId: blockId, workDir: (_c = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _c !== void 0 ? _c : 'NOT-FOUND' })
|
|
326
647
|
});
|
|
327
648
|
}
|
|
328
649
|
};
|
|
329
650
|
var onResizeStop = function (props) {
|
|
651
|
+
var _a;
|
|
330
652
|
var prev = props.prev, item = props.item;
|
|
331
653
|
if (!isEditMode || !item) {
|
|
332
654
|
return;
|
|
@@ -337,43 +659,48 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
337
659
|
return;
|
|
338
660
|
}
|
|
339
661
|
if (isIdNumber) {
|
|
340
|
-
|
|
662
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(numberId);
|
|
663
|
+
setSelectedBlockId(blockId);
|
|
341
664
|
}
|
|
342
665
|
if (sectionActionHandler && isIdNumber) {
|
|
343
666
|
sectionActionHandler({
|
|
344
667
|
type: '@CUSTOMSECTION/CB_RESIZE_STOP',
|
|
345
|
-
payload: props
|
|
668
|
+
payload: __assign(__assign({}, props), { blockId: (0, group_1.formatCbIdToBlockId)(numberId), workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND' })
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
var onAutoFitContent = function (props) {
|
|
673
|
+
var _a;
|
|
674
|
+
var prev = props.prev, item = props.item;
|
|
675
|
+
if (!isEditMode || !item) {
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
var numberId = Number(item.i);
|
|
679
|
+
var isIdNumber = !Number.isNaN(numberId);
|
|
680
|
+
if (isLayoutPlacementSame(item, prev)) {
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
683
|
+
if (isIdNumber) {
|
|
684
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(numberId);
|
|
685
|
+
setSelectedBlockId(blockId);
|
|
686
|
+
}
|
|
687
|
+
if (sectionActionHandler && isIdNumber) {
|
|
688
|
+
sectionActionHandler({
|
|
689
|
+
type: '@CUSTOMSECTION/CB_AUTO_FIT_CONTENT',
|
|
690
|
+
payload: __assign(__assign({}, props), { details: { hadPaddingChanged: props.hasPaddingChanged }, blockId: (0, group_1.formatCbIdToBlockId)(numberId), workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND' })
|
|
346
691
|
});
|
|
347
692
|
}
|
|
348
693
|
};
|
|
349
|
-
|
|
350
|
-
// const { prev, item } = props;
|
|
351
|
-
// if (!isEditMode || !item) {
|
|
352
|
-
// return;
|
|
353
|
-
// }
|
|
354
|
-
// const numberId = Number(item.i);
|
|
355
|
-
// const isIdNumber = !Number.isNaN(numberId);
|
|
356
|
-
// if (isLayoutPlacementSame(item, prev)) {
|
|
357
|
-
// return;
|
|
358
|
-
// }
|
|
359
|
-
// if (isIdNumber) {
|
|
360
|
-
// setSelectedCB(numberId);
|
|
361
|
-
// }
|
|
362
|
-
// if (sectionActionHandler && isIdNumber) {
|
|
363
|
-
// sectionActionHandler({
|
|
364
|
-
// type: '@CUSTOMSECTION/CB_AUTO_FIT_CONTENT',
|
|
365
|
-
// payload: { ...props, details: { hadPaddingChanged: props.hasPaddingChanged } }
|
|
366
|
-
// });
|
|
367
|
-
// }
|
|
368
|
-
// };
|
|
369
|
-
var onClickSection = function () {
|
|
694
|
+
var onClickSection = function (e) {
|
|
370
695
|
if (!isEditMode) {
|
|
371
696
|
return;
|
|
372
697
|
}
|
|
373
|
-
if (
|
|
374
|
-
|
|
698
|
+
if (editingGroupBlock !== 'ROOT') {
|
|
699
|
+
onClickGroup(e, editingGroupBlock);
|
|
700
|
+
return;
|
|
375
701
|
}
|
|
376
|
-
|
|
702
|
+
setBulkBlockIds([]);
|
|
703
|
+
setSelectedBlockId(null);
|
|
377
704
|
sectionActionHandler &&
|
|
378
705
|
sectionActionHandler({
|
|
379
706
|
type: '@CUSTOMSECTION/SECTION_CLICKED',
|
|
@@ -382,6 +709,50 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
382
709
|
}
|
|
383
710
|
});
|
|
384
711
|
};
|
|
712
|
+
var onContextGroup = function (e, blockId, isEditingGroup) {
|
|
713
|
+
var _a, _b, _c;
|
|
714
|
+
setSelectedBlockId(blockId);
|
|
715
|
+
var block = (0, group_1.findBlockByBlockId)(newblock, blockId);
|
|
716
|
+
if ((block === null || block === void 0 ? void 0 : block.type) === 'COMPONENT_BLOCK') {
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
sectionActionHandler &&
|
|
720
|
+
sectionActionHandler({
|
|
721
|
+
type: '@CUSTOMSECTION/GROUP_RIGHT_CLICKED',
|
|
722
|
+
payload: {
|
|
723
|
+
block: {
|
|
724
|
+
blockId: blockId,
|
|
725
|
+
type: 'GROUP_BLOCK',
|
|
726
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND',
|
|
727
|
+
childrenBlockIds: (_b = (0, group_1.findDirectChildrenBlockIds)(newblock, blockId)) !== null && _b !== void 0 ? _b : [],
|
|
728
|
+
childrenCBIds: (_c = (0, group_1.findDirectChildrenCbIds)(newblock, blockId)) !== null && _c !== void 0 ? _c : []
|
|
729
|
+
},
|
|
730
|
+
e: e,
|
|
731
|
+
isEditingGroup: isEditingGroup
|
|
732
|
+
}
|
|
733
|
+
});
|
|
734
|
+
};
|
|
735
|
+
var onContextSection = function (e) {
|
|
736
|
+
if (editingGroupBlock !== 'ROOT') {
|
|
737
|
+
e.preventDefault();
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
if (!isEditMode) {
|
|
741
|
+
return;
|
|
742
|
+
}
|
|
743
|
+
if ((0, group_2.getGroupCB)(layouts[layoutByDevice])) {
|
|
744
|
+
setBulkBlockIds([]);
|
|
745
|
+
}
|
|
746
|
+
setSelectedBlockId(null);
|
|
747
|
+
sectionActionHandler &&
|
|
748
|
+
sectionActionHandler({
|
|
749
|
+
type: '@CUSTOMSECTION/SECTION_RIGHT_CLICKED',
|
|
750
|
+
payload: {
|
|
751
|
+
sectionId: props.id,
|
|
752
|
+
e: e
|
|
753
|
+
}
|
|
754
|
+
});
|
|
755
|
+
};
|
|
385
756
|
var onWidthChange = function (width) {
|
|
386
757
|
var responsiveFontMode =
|
|
387
758
|
// NOTE: local환경에서 CB_CONTENT_PROP_SECTION이 없는 경우가 있음.
|
|
@@ -400,38 +771,59 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
400
771
|
var padding = (0, parseSectionPadding_1.default)(CB_LAYOUT_PROP_PADDING, device);
|
|
401
772
|
var breakpoints = device === 'DESKTOP' ? { lg: 100, sm: 0 } : { lg: 1200, sm: 480 };
|
|
402
773
|
var innerRef = (0, react_1.useRef)(null);
|
|
403
|
-
var clickOneCBInBulk = function (id
|
|
774
|
+
var clickOneCBInBulk = function (id) {
|
|
775
|
+
var _a, _b;
|
|
776
|
+
var blockId = (0, group_1.formatCbIdToBlockId)(id);
|
|
404
777
|
if (shortcutKeyMode === 'COLLISION_SELECT') {
|
|
405
|
-
makeCollisionOfBulk();
|
|
406
778
|
return;
|
|
407
779
|
}
|
|
408
780
|
if (shortcutKeyMode === 'BULK_SELECT') {
|
|
409
|
-
if (
|
|
410
|
-
var
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
781
|
+
if (bulkBlockIds.length <= 2) {
|
|
782
|
+
var oneLastBlockId = bulkBlockIds.filter(function (each) { return each !== blockId; })[0];
|
|
783
|
+
setBulkBlockIds([]);
|
|
784
|
+
if (!oneLastBlockId) {
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
787
|
+
var cbId = (0, group_1.formatBlockIdToCbId)(oneLastBlockId);
|
|
788
|
+
if (!cbId) {
|
|
415
789
|
return;
|
|
416
790
|
}
|
|
417
|
-
|
|
791
|
+
setSelectedBlockId(oneLastBlockId);
|
|
418
792
|
sectionActionHandler &&
|
|
419
793
|
sectionActionHandler({
|
|
420
|
-
type: '@CUSTOMSECTION/
|
|
794
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
421
795
|
payload: {
|
|
422
|
-
|
|
796
|
+
block: {
|
|
797
|
+
blockId: oneLastBlockId,
|
|
798
|
+
cbId: cbId,
|
|
799
|
+
type: 'COMPONENT_BLOCK',
|
|
800
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND'
|
|
801
|
+
}
|
|
423
802
|
}
|
|
424
803
|
});
|
|
425
804
|
return;
|
|
426
805
|
}
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
806
|
+
var filtered = bulkBlockIds.filter(function (each) { return each !== blockId; });
|
|
807
|
+
setBulkBlockIds(filtered);
|
|
808
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === filtered.length;
|
|
809
|
+
var newBulkCBIds = filtered
|
|
810
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
811
|
+
.filter(function (each) { return each !== null; });
|
|
812
|
+
sectionActionHandler &&
|
|
813
|
+
sectionActionHandler({
|
|
814
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
815
|
+
payload: {
|
|
816
|
+
block: {
|
|
817
|
+
type: 'BULK',
|
|
818
|
+
blockId: 'BULK',
|
|
819
|
+
childrenBlockIds: filtered,
|
|
820
|
+
workDir: (_b = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _b !== void 0 ? _b : 'NOT-FOUND',
|
|
821
|
+
childrenCBIds: newBulkCBIds,
|
|
822
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
});
|
|
433
826
|
}
|
|
434
|
-
makeCollisionOfBulk();
|
|
435
827
|
};
|
|
436
828
|
var showSectionHiddenCover = (function () {
|
|
437
829
|
if (mode === 'EDIT') {
|
|
@@ -445,77 +837,256 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
|
|
|
445
837
|
}
|
|
446
838
|
return false;
|
|
447
839
|
})();
|
|
448
|
-
|
|
840
|
+
var onDoubleClickGroup = function (e, id) {
|
|
841
|
+
e.stopPropagation();
|
|
842
|
+
if (id === 'BULK') {
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
setEditingGroupBlock(id);
|
|
846
|
+
};
|
|
847
|
+
var onDoubleClickOutsideGroup = function () {
|
|
848
|
+
setEditingGroupBlock('ROOT');
|
|
849
|
+
setSelectedBlockId(null);
|
|
850
|
+
};
|
|
851
|
+
var onClickGroup = function (e, id) {
|
|
852
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
853
|
+
e.stopPropagation();
|
|
854
|
+
if (id === 'BULK') {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
if (editingGroupBlock === id && shortcutKeyMode === 'BULK_SELECT') {
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
if (bulkBlockIds.includes(id) && shortcutKeyMode === 'BULK_SELECT') {
|
|
861
|
+
if (bulkBlockIds.length <= 2) {
|
|
862
|
+
var oneLastBlockId = bulkBlockIds.filter(function (each) { return each !== id; })[0];
|
|
863
|
+
setBulkBlockIds([]);
|
|
864
|
+
setSelectedBlockId(oneLastBlockId);
|
|
865
|
+
sectionActionHandler &&
|
|
866
|
+
sectionActionHandler({
|
|
867
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
868
|
+
payload: {
|
|
869
|
+
block: {
|
|
870
|
+
blockId: oneLastBlockId,
|
|
871
|
+
type: 'GROUP_BLOCK',
|
|
872
|
+
workDir: (_a = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _a !== void 0 ? _a : 'NOT-FOUND',
|
|
873
|
+
childrenBlockIds: (_b = (0, group_1.findDirectChildrenBlockIds)(newblock, oneLastBlockId)) !== null && _b !== void 0 ? _b : [],
|
|
874
|
+
childrenCBIds: (_c = (0, group_1.findDirectChildrenCbIds)(newblock, oneLastBlockId)) !== null && _c !== void 0 ? _c : []
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
});
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
var newBulkBlockIds_1 = bulkBlockIds.filter(function (each) { return each !== id; });
|
|
881
|
+
var newBulkCBIds_1 = newBulkBlockIds_1
|
|
882
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
883
|
+
.filter(function (each) { return each !== null; });
|
|
884
|
+
var childrenCBIds_1 = [];
|
|
885
|
+
if (newBulkCBIds_1.length === 0) {
|
|
886
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, newBulkBlockIds_1[0]);
|
|
887
|
+
childrenCBIds_1 = oneCB ? [oneCB] : [];
|
|
888
|
+
}
|
|
889
|
+
else {
|
|
890
|
+
childrenCBIds_1 = newBulkCBIds_1;
|
|
891
|
+
}
|
|
892
|
+
setBulkBlockIds(newBulkBlockIds_1);
|
|
893
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === newBulkBlockIds_1.length;
|
|
894
|
+
sectionActionHandler &&
|
|
895
|
+
sectionActionHandler({
|
|
896
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
897
|
+
payload: {
|
|
898
|
+
block: {
|
|
899
|
+
blockId: 'BULK',
|
|
900
|
+
type: 'BULK',
|
|
901
|
+
childrenBlockIds: newBulkBlockIds_1,
|
|
902
|
+
childrenCBIds: childrenCBIds_1,
|
|
903
|
+
workDir: (_d = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _d !== void 0 ? _d : 'NOT-FOUND',
|
|
904
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
});
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
if (shortcutKeyMode === 'BULK_SELECT') {
|
|
911
|
+
var added = (function () {
|
|
912
|
+
if (selectedBlockId === editingGroupBlock) {
|
|
913
|
+
return [id];
|
|
914
|
+
}
|
|
915
|
+
return selectedBlockId ? [selectedBlockId, id] : [id];
|
|
916
|
+
})();
|
|
917
|
+
if (bulkBlockIds.length === 0 && added.length === 1) {
|
|
918
|
+
setSelectedBlockId(id);
|
|
919
|
+
setBulkBlockIds([]);
|
|
920
|
+
sectionActionHandler &&
|
|
921
|
+
sectionActionHandler({
|
|
922
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
923
|
+
payload: {
|
|
924
|
+
block: {
|
|
925
|
+
blockId: id,
|
|
926
|
+
type: 'GROUP_BLOCK',
|
|
927
|
+
workDir: (_e = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _e !== void 0 ? _e : 'NOT-FOUND',
|
|
928
|
+
childrenBlockIds: (_f = (0, group_1.findDirectChildrenBlockIds)(newblock, id)) !== null && _f !== void 0 ? _f : [],
|
|
929
|
+
childrenCBIds: (_g = (0, group_1.findDirectChildrenCbIds)(newblock, id)) !== null && _g !== void 0 ? _g : []
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
});
|
|
933
|
+
return;
|
|
934
|
+
}
|
|
935
|
+
var newBulkBlockIds_2 = Array.from(new Set(__spreadArray(__spreadArray([], bulkBlockIds, true), added, true)));
|
|
936
|
+
var newBulkCBIds_2 = newBulkBlockIds_2
|
|
937
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
938
|
+
.filter(function (each) { return each !== null; });
|
|
939
|
+
setBulkBlockIds(newBulkBlockIds_2);
|
|
940
|
+
setSelectedBlockId(null);
|
|
941
|
+
var childrenCBIds_2 = [];
|
|
942
|
+
if (newBulkCBIds_2.length === 0) {
|
|
943
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, newBulkBlockIds_2[0]);
|
|
944
|
+
childrenCBIds_2 = oneCB ? [oneCB] : [];
|
|
945
|
+
}
|
|
946
|
+
else {
|
|
947
|
+
childrenCBIds_2 = newBulkCBIds_2;
|
|
948
|
+
}
|
|
949
|
+
var groupDisabled = getWorkDirDirectChildrenLength() === newBulkBlockIds_2.length;
|
|
950
|
+
sectionActionHandler &&
|
|
951
|
+
sectionActionHandler({
|
|
952
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
953
|
+
payload: {
|
|
954
|
+
block: {
|
|
955
|
+
blockId: 'BULK',
|
|
956
|
+
type: 'BULK',
|
|
957
|
+
childrenBlockIds: newBulkBlockIds_2,
|
|
958
|
+
childrenCBIds: childrenCBIds_2,
|
|
959
|
+
workDir: (_h = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _h !== void 0 ? _h : 'NOT-FOUND',
|
|
960
|
+
groupDisabled: groupDisabled && editingGroupBlock !== 'ROOT'
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
});
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
966
|
+
setBulkBlockIds([]);
|
|
967
|
+
setSelectedBlockId(id);
|
|
968
|
+
var newBulkBlockIds = (0, group_1.findDirectChildrenBlockIds)(newblock, id);
|
|
969
|
+
var newBulkCBIds = newBulkBlockIds
|
|
970
|
+
.map(function (id) { return (0, group_1.formatBlockIdToCbId)(id); })
|
|
971
|
+
.filter(function (each) { return each !== null; });
|
|
972
|
+
var childrenCBIds = [];
|
|
973
|
+
if (newBulkCBIds.length === 0) {
|
|
974
|
+
var oneCB = (0, group_1.findOneComponentBlock)(newblock, newBulkBlockIds[0]);
|
|
975
|
+
childrenCBIds = oneCB ? [oneCB] : [];
|
|
976
|
+
}
|
|
977
|
+
else {
|
|
978
|
+
childrenCBIds = newBulkCBIds;
|
|
979
|
+
}
|
|
980
|
+
sectionActionHandler &&
|
|
981
|
+
sectionActionHandler({
|
|
982
|
+
type: '@CUSTOMSECTION/BLOCK_CLICKED',
|
|
983
|
+
payload: {
|
|
984
|
+
block: {
|
|
985
|
+
blockId: id,
|
|
986
|
+
type: 'GROUP_BLOCK',
|
|
987
|
+
workDir: (_j = (0, group_1.getBlockWorkDirPath)(newblock, editingGroupBlock)) !== null && _j !== void 0 ? _j : 'NOT-FOUND',
|
|
988
|
+
childrenBlockIds: newBulkBlockIds,
|
|
989
|
+
childrenCBIds: childrenCBIds
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
});
|
|
993
|
+
};
|
|
994
|
+
var onBulkDragStop = function (_a) {
|
|
995
|
+
var _b;
|
|
996
|
+
var updatedItems = _a.updatedItems, item = _a.item;
|
|
997
|
+
if ((item === null || item === void 0 ? void 0 : item.i) === 'BULK') {
|
|
998
|
+
sectionActionHandler &&
|
|
999
|
+
sectionActionHandler({
|
|
1000
|
+
type: '@CUSTOMSECTION/BULK_DRAG_STOP',
|
|
1001
|
+
payload: {
|
|
1002
|
+
updatedBlocks: updatedItems.map(function (i) { return ({
|
|
1003
|
+
cbId: Number(i.id),
|
|
1004
|
+
blockId: (0, group_1.formatCbIdToBlockId)(Number(i.id)),
|
|
1005
|
+
x: i.x,
|
|
1006
|
+
y: i.y
|
|
1007
|
+
}); })
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
1010
|
+
return;
|
|
1011
|
+
}
|
|
1012
|
+
if (item) {
|
|
1013
|
+
sectionActionHandler &&
|
|
1014
|
+
sectionActionHandler({
|
|
1015
|
+
type: '@CUSTOMSECTION/GROUP_DRAG_STOP',
|
|
1016
|
+
payload: {
|
|
1017
|
+
workDir: (_b = (0, group_1.getBlockWorkDirPath)(newblock, item.i)) !== null && _b !== void 0 ? _b : 'NOT-FOUND',
|
|
1018
|
+
updatedBlocks: updatedItems.map(function (i) { return ({
|
|
1019
|
+
cbId: Number(i.id),
|
|
1020
|
+
blockId: (0, group_1.formatCbIdToBlockId)(Number(i.id)),
|
|
1021
|
+
x: i.x,
|
|
1022
|
+
y: i.y
|
|
1023
|
+
}); })
|
|
1024
|
+
}
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
};
|
|
1028
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
1029
|
+
if (innerRef.current) {
|
|
1030
|
+
innerRef.current.setAttribute('data-section-id', props.id.toString());
|
|
1031
|
+
}
|
|
1032
|
+
}, []);
|
|
1033
|
+
function getWorkDirDirectChildrenLength() {
|
|
1034
|
+
var ids = (0, group_1.findDirectChildrenBlockIds)(newblock, editingGroupBlock).filter(function (each) { return each !== 'BULK'; });
|
|
1035
|
+
return ids.length + bulkBlockIds.length;
|
|
1036
|
+
}
|
|
1037
|
+
var editableCBIDs = (0, group_1.findDirectChildrenCbIds)(newblock, editingGroupBlock);
|
|
1038
|
+
return ((0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsxs)(gleStyles_1.S_gleStyles, __assign({ isBulkMode: shortcutKeyMode === 'BULK_SELECT' }, { children: [showSectionHiddenCover && (0, jsx_runtime_1.jsx)(S_HiddenCover_1.S_HiddenCover, {}), (0, jsx_runtime_1.jsx)(S_SectionWrapper, __assign({ ref: gleRef, "x-dlayout-section-type": "NO_NAME", onClick: onClickSection, onContextMenu: function (e) {
|
|
1039
|
+
e.stopPropagation();
|
|
1040
|
+
e.preventDefault();
|
|
1041
|
+
onContextSection(e);
|
|
1042
|
+
} }, { children: (0, jsx_runtime_1.jsx)(components_1.CustomSection, __assign({}, props, { isMobile: isMobile, overrideStyles: {
|
|
449
1043
|
minHeight: customSectionStyles.minHeight,
|
|
450
1044
|
paddingTop: padding.top,
|
|
451
1045
|
paddingBottom: padding.bottom,
|
|
452
1046
|
paddingRight: padding.right,
|
|
453
1047
|
paddingLeft: padding.left
|
|
454
|
-
} }, { children: (0, jsx_runtime_1.jsx)(Responsive, __assign({
|
|
1048
|
+
} }, { children: (0, jsx_runtime_1.jsx)(Responsive, __assign({ sectionId: props.id.toString(), innerRef: innerRef, className: (0, clsx_1.clsx)({
|
|
1049
|
+
'selected-grid-layout': editingSectionId === props.id
|
|
1050
|
+
}), allowOverlap: true, layouts: layouts, resizeHandles: ['nw', 'e', 'n', 'ne', 's', 'se', 'sw', 'w'], breakpoints: breakpoints, breakpoint: breakpoint, cols: { lg: colsDesktop, sm: colsMobile }, rowHeight: rowHeight, margin: [10, 10], style: {
|
|
455
1051
|
width: customSectionStyles.width,
|
|
456
1052
|
maxWidth: customSectionStyles.maxWidth,
|
|
457
1053
|
minWidth: isMobile ? GLE_MIN_WIDTH_MOBILE_PX : GLE_MIN_WIDTH_DESKTOP_PX,
|
|
458
1054
|
fontSize: "".concat(baseFontSize, "px")
|
|
459
|
-
}, onLayoutChange: onLayoutChange, onDragStart: onDragStart, onDragStop: onDragStop, onResizeStop: onResizeStop,
|
|
460
|
-
//
|
|
461
|
-
|
|
462
|
-
var _a;
|
|
463
|
-
if (each === null) {
|
|
464
|
-
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
465
|
-
}
|
|
1055
|
+
}, onLayoutChange: onLayoutChange, onDragStart: onDragStart, onDragStop: onDragStop, onResizeStop: onResizeStop, onDragStopForGroup: onBulkDragStop, onFitToContent: onAutoFitContent, onWidthChange: onWidthChange, minNbRow: rows, isDraggable: isEditMode, isResizable: isEditMode, zoom: zoomScale,
|
|
1056
|
+
// GROUP
|
|
1057
|
+
selectedGroupBlock: (_d = selectedBlockId === null || selectedBlockId === void 0 ? void 0 : selectedBlockId.toString()) !== null && _d !== void 0 ? _d : 'ROOT', editingGroupBlock: editingGroupBlock, blockStructure: newblock, bulkIds: bulkBlockIds, onDoubleClickGroup: onDoubleClickGroup, onClickGroup: onClickGroup, onDoubleClickOutsideGroup: onDoubleClickOutsideGroup, onContextGroup: onContextGroup }, { children: layouts[layoutByDevice].map(function (each, index) {
|
|
466
1058
|
var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === each.i; });
|
|
467
|
-
|
|
468
|
-
return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "iamgroup", onClick: function (e) {
|
|
469
|
-
e.stopPropagation();
|
|
470
|
-
onClickBulk();
|
|
471
|
-
}, onContextMenu: function (e) {
|
|
472
|
-
e.stopPropagation();
|
|
473
|
-
e.preventDefault();
|
|
474
|
-
onContextMenuCB('group', e);
|
|
475
|
-
} }, { children: (0, jsx_runtime_1.jsx)(WidthProvidedRGL, __assign({ cols: each.w, allowOverlap: true, layout: each.groupLayouts, rowHeight: rowHeight, containerPadding: [0, 0], margin: [10, 10], isDraggable: false, isResizable: false, transformScale: zoomScale, style: {
|
|
476
|
-
width: '100%'
|
|
477
|
-
} }, { children: (_a = each.groupLayouts) === null || _a === void 0 ? void 0 : _a.map(function (layoutItem, index, array) {
|
|
478
|
-
var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === layoutItem.i; });
|
|
479
|
-
if (!matchedCB) {
|
|
480
|
-
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
481
|
-
}
|
|
482
|
-
var cbCopy = (0, deepCopy_1.default)(matchedCB);
|
|
483
|
-
cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM.CB_EFFECT_PROP_ENTANIM_SPEC_TYPE =
|
|
484
|
-
'NONE';
|
|
485
|
-
cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM['CB_EFFECT_PROP_ENTANIM_SPEC_TYPE:MOBILE'] = 'NONE';
|
|
486
|
-
return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "cb-box-in-group", onClick: function (e) {
|
|
487
|
-
e.stopPropagation();
|
|
488
|
-
clickOneCBInBulk(matchedCB.id, array);
|
|
489
|
-
} }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: cbCopy, device: device, index: index }) }) }), matchedCB.id));
|
|
490
|
-
}) })) }), each.i));
|
|
491
|
-
}
|
|
1059
|
+
var isInBulk = bulkBlockIds.includes((0, group_1.formatCbIdToBlockId)(Number(each.i)));
|
|
492
1060
|
if (!matchedCB) {
|
|
493
1061
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
494
1062
|
}
|
|
495
|
-
return ((0, jsx_runtime_1.jsx)("div", __assign({ className:
|
|
1063
|
+
return ((0, jsx_runtime_1.jsx)("div", __assign({ className: (0, clsx_1.clsx)({
|
|
1064
|
+
'react-grid-item-selected': selectedBlockId === (0, group_1.formatCbIdToBlockId)(matchedCB.id)
|
|
1065
|
+
}) }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ className: (0, clsx_1.clsx)({
|
|
1066
|
+
'grid-item-child': true
|
|
1067
|
+
}), style: {
|
|
496
1068
|
width: '100%',
|
|
497
1069
|
height: '100%'
|
|
498
1070
|
}, onClick: function (e) {
|
|
499
1071
|
e.stopPropagation();
|
|
1072
|
+
if (isInBulk) {
|
|
1073
|
+
clickOneCBInBulk(matchedCB.id);
|
|
1074
|
+
return;
|
|
1075
|
+
}
|
|
1076
|
+
if (editingGroupBlock !== 'ROOT') {
|
|
1077
|
+
if (!editableCBIDs.includes(matchedCB.id)) {
|
|
1078
|
+
e.preventDefault();
|
|
1079
|
+
return;
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
500
1082
|
onClickCB(matchedCB.id);
|
|
501
1083
|
}, onContextMenu: function (e) {
|
|
502
1084
|
e.stopPropagation();
|
|
503
1085
|
e.preventDefault();
|
|
504
1086
|
onContextMenuCB(matchedCB.id, e);
|
|
505
|
-
} }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: matchedCB, device: device, index: index }) }) })) }), each.i));
|
|
506
|
-
}) })) })) }))] }) }));
|
|
1087
|
+
} }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: matchedCB, device: device, rowHeight: rowHeight, index: index }) }) })) }), each.i));
|
|
1088
|
+
}) })) })) }))] })) }));
|
|
507
1089
|
});
|
|
508
|
-
function keepSimilarOrderToPreventRerender(arr) {
|
|
509
|
-
var _a;
|
|
510
|
-
var arrCopy = __spreadArray([], arr, true).sort(function (a, b) { return Number(a.i) - Number(b.i); });
|
|
511
|
-
var groupIdx = arrCopy.findIndex(function (each) { return each.i === 'group'; });
|
|
512
|
-
if (groupIdx >= 0) {
|
|
513
|
-
var group = arrCopy.splice(groupIdx, 1)[0];
|
|
514
|
-
(_a = group.groupLayouts) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) { return Number(a.i) - Number(b.i); });
|
|
515
|
-
return __spreadArray([group], arrCopy, true);
|
|
516
|
-
}
|
|
517
|
-
return __spreadArray([null], arrCopy, true);
|
|
518
|
-
}
|
|
519
1090
|
function isLayoutPlacementSame(current, prev) {
|
|
520
1091
|
if (!prev) {
|
|
521
1092
|
return false;
|
|
@@ -527,7 +1098,6 @@ function isLayoutPlacementSame(current, prev) {
|
|
|
527
1098
|
prev.z === current.z &&
|
|
528
1099
|
prev.i === current.i);
|
|
529
1100
|
}
|
|
530
|
-
exports.S_gleStyles = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n * {\n box-sizing: border-box;\n }\n\n .iamgroup .cb-box-in-group:after {\n box-shadow: 0 0 0 3px #027aff;\n bottom: 0;\n box-sizing: border-box;\n content: '';\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n }\n\n .cb-box-in-group:hover:after {\n box-shadow: 0 0 0 3px #d902ff;\n bottom: 0;\n box-sizing: border-box;\n content: '';\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n }\n\n .iamgroup {\n box-shadow: 0 0 0 3px #027aff;\n opacity: 1;\n }\n\n .react-grid-layout {\n position: relative;\n z-index: 1;\n }\n\n .react-grid-layout .grid-placeholder {\n box-sizing: border-box;\n }\n\n .react-grid-item {\n left: 0;\n position: absolute;\n top: 0;\n z-index: 1;\n }\n\n .react-grid-item.react-draggable.react-resizable:not(.react-grid-item-selected):not(.iamgroup):hover {\n box-shadow: 0 0 0 3px #d902ff;\n }\n\n .react-grid-item-selected {\n box-shadow: 0 0 0 3px #027aff;\n }\n\n .react-grid-item img {\n pointer-events: none;\n user-select: none;\n }\n\n .react-grid-item.isResizing,\n .react-grid-item.isResizing .cb-layout-box,\n .react-grid-item.isResizing .cb-layout-box .cb-divider {\n visibility: hidden;\n }\n\n .react-grid-item.react-draggable.isDragging,\n .react-grid-item.react-draggable.isDragging .cb-layout-box,\n .react-grid-item.react-draggable.isDragging .cb-layout-box .cb-divider {\n visibility: hidden;\n }\n\n .react-grid-item.isResizing > .react-resizable-handle,\n .react-grid-item.react-draggable.isDragging > .react-resizable-handle {\n visibility: hidden;\n }\n\n .react-grid-item.dropping {\n visibility: hidden;\n }\n\n .react-grid-item.static::after {\n color: red;\n content: \"this is static, can't drag\";\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n .react-grid-item.placeholder {\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n z-index: 9999;\n }\n\n .react-grid-item > .react-resizable-handle::after {\n background: rgb(255, 255, 255);\n border: 3px solid rgb(2, 122, 255);\n content: '';\n height: 5px;\n position: absolute;\n width: 5px;\n }\n\n .react-resizable-handle {\n visibility: hidden;\n }\n\n .react-grid-item-selected > .react-resizable-handle {\n visibility: visible;\n }\n\n /* NOTE: Resizable related */\n .react-resizable {\n position: relative;\n }\n\n .react-resizable-handle {\n align-items: center;\n background-origin: content-box;\n background-repeat: no-repeat;\n box-sizing: border-box;\n display: flex;\n height: 20px;\n justify-content: center;\n position: absolute;\n width: 20px;\n }\n\n .react-resizable-handle-sw {\n bottom: 0;\n cursor: sw-resize;\n left: 0;\n transform: translate(-50%, 50%);\n }\n\n .react-resizable-handle-se {\n bottom: 0;\n cursor: se-resize;\n right: 0;\n transform: translate(50%, 50%);\n }\n\n .react-resizable-handle-nw {\n cursor: nw-resize;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-ne {\n cursor: ne-resize;\n right: 0;\n top: 0;\n transform: translate(50%, -50%);\n }\n\n .react-resizable-handle-w,\n .react-resizable-handle-e {\n cursor: ew-resize;\n top: 50%;\n }\n\n .react-resizable-handle-w {\n left: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-e {\n right: 0;\n transform: translate(50%, -50%);\n }\n\n .react-resizable-handle-n,\n .react-resizable-handle-s {\n cursor: ns-resize;\n left: 50%;\n }\n\n .react-resizable-handle-n {\n top: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-s {\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n\n .grid-placeholder {\n position: absolute;\n z-index: 0;\n }\n\n .grid-pattern-rect {\n fill: #0000001a;\n stroke: #ffffff33;\n }\n\n .react-grid-item.placeholder .cb-layout-box,\n .react-grid-item.placeholder .cb-layout-box .cb-divider {\n animation: none;\n }\n\n .react-grid-item.placeholder {\n box-shadow: 0 0 0 3px #027aff;\n }\n\n .react-grid-item.placeholder > .react-resizable-handle {\n visibility: hidden;\n }\n\n .grid-guide-line-center {\n border-color: #ff463aff;\n border-style: dashed;\n border-width: 1px;\n height: 100%;\n left: 50%;\n position: absolute;\n transform: translateX(-50%);\n z-index: 99999;\n }\n\n /* NOTE: Effects */\n\n @-webkit-keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-fwd {\n 0% {\n -webkit-transform: translateZ(-80px);\n transform: translateZ(-80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes fade-in-fwd {\n 0% {\n -webkit-transform: translateZ(-80px);\n transform: translateZ(-80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-bck {\n 0% {\n -webkit-transform: translateZ(80px);\n transform: translateZ(80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-bck {\n 0% {\n -webkit-transform: translateZ(80px);\n transform: translateZ(80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-top {\n 0% {\n -webkit-transform: translateY(-50px);\n transform: translateY(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-top {\n 0% {\n -webkit-transform: translateY(-50px);\n transform: translateY(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-right {\n 0% {\n -webkit-transform: translateX(50px);\n transform: translateX(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-right {\n 0% {\n -webkit-transform: translateX(50px);\n transform: translateX(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:29:36\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation fade-in-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes fade-in-bottom {\n 0% {\n -webkit-transform: translateY(50px);\n transform: translateY(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-bottom {\n 0% {\n -webkit-transform: translateY(50px);\n transform: translateY(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:29:52\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation fade-in-left\n * ----------------------------------------\n */\n @-webkit-keyframes fade-in-left {\n 0% {\n -webkit-transform: translateX(-50px);\n transform: translateX(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-left {\n 0% {\n -webkit-transform: translateX(-50px);\n transform: translateX(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:53:50\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-top\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-top {\n 0% {\n -webkit-transform: translateY(-1000px);\n transform: translateY(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-top {\n 0% {\n -webkit-transform: translateY(-1000px);\n transform: translateY(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:47\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-right\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-right {\n 0% {\n -webkit-transform: translateX(1000px);\n transform: translateX(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-right {\n 0% {\n -webkit-transform: translateX(1000px);\n transform: translateX(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:1\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-bottom {\n 0% {\n -webkit-transform: translateY(1000px);\n transform: translateY(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-bottom {\n 0% {\n -webkit-transform: translateY(1000px);\n transform: translateY(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:28\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-left\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-left {\n 0% {\n -webkit-transform: translateX(-1000px);\n transform: translateX(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-left {\n 0% {\n -webkit-transform: translateX(-1000px);\n transform: translateX(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:52:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation tracking-in-contract\n * ----------------------------------------\n */\n @-webkit-keyframes tracking-in-contract {\n 0% {\n letter-spacing: 1em;\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n letter-spacing: normal;\n opacity: 1;\n }\n }\n @keyframes tracking-in-contract {\n 0% {\n letter-spacing: 1em;\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n letter-spacing: normal;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:47:57\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation rotate-in-2-cw\n * ----------------------------------------\n */\n @-webkit-keyframes rotate-in-2-cw {\n 0% {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n @keyframes rotate-in-2-cw {\n 0% {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:52:54\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation rotate-in-2-ccw\n * ----------------------------------------\n */\n @-webkit-keyframes rotate-in-2-ccw {\n 0% {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n @keyframes rotate-in-2-ccw {\n 0% {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:34:56\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-top-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-top-fwd {\n 0% {\n -webkit-transform: rotateX(-100deg);\n transform: rotateX(-100deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n @keyframes swing-in-top-fwd {\n 0% {\n -webkit-transform: rotateX(-100deg);\n transform: rotateX(-100deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:35:56\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-top-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-top-bck {\n 0% {\n -webkit-transform: rotateX(70deg);\n transform: rotateX(70deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n @keyframes swing-in-top-bck {\n 0% {\n -webkit-transform: rotateX(70deg);\n transform: rotateX(70deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:36:18\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-right-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-right-fwd {\n 0% {\n -webkit-transform: rotateY(-100deg);\n transform: rotateY(-100deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n @keyframes swing-in-right-fwd {\n 0% {\n -webkit-transform: rotateY(-100deg);\n transform: rotateY(-100deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:36:46\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-right-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-right-bck {\n 0% {\n -webkit-transform: rotateY(70deg);\n transform: rotateY(70deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n @keyframes swing-in-right-bck {\n 0% {\n -webkit-transform: rotateY(70deg);\n transform: rotateY(70deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:37:11\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-bottom-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-bottom-fwd {\n 0% {\n -webkit-transform: rotateX(100deg);\n transform: rotateX(100deg);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0);\n transform: rotateX(0);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 1;\n }\n }\n\n @keyframes swing-in-bottom-fwd {\n 0% {\n -webkit-transform: rotateX(100deg);\n transform: rotateX(100deg);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0);\n transform: rotateX(0);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:38:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-left-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-left-fwd {\n 0% {\n -webkit-transform: rotateY(100deg);\n transform: rotateY(100deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n @keyframes swing-in-left-fwd {\n 0% {\n -webkit-transform: rotateY(100deg);\n transform: rotateY(100deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:40:3\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-left-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-left-bck {\n 0% {\n -webkit-transform: rotateY(-70deg);\n transform: rotateY(-70deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n @keyframes swing-in-left-bck {\n 0% {\n -webkit-transform: rotateY(-70deg);\n transform: rotateY(-70deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:44:48\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation scale-in-center\n * ----------------------------------------\n */\n @-webkit-keyframes scale-in-center {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 1;\n }\n }\n @keyframes scale-in-center {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:46:1\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-bck-center\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-bck-center {\n 0% {\n -webkit-transform: translateZ(600px);\n transform: translateZ(600px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-bck-center {\n 0% {\n -webkit-transform: translateZ(600px);\n transform: translateZ(600px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:13:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation tracking-in-contract-bck\n * ----------------------------------------\n */\n @-webkit-keyframes tracking-in-contract-bck {\n 0% {\n letter-spacing: 1em;\n -webkit-transform: translateZ(400px);\n transform: translateZ(400px);\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes tracking-in-contract-bck {\n 0% {\n letter-spacing: 1em;\n -webkit-transform: translateZ(400px);\n transform: translateZ(400px);\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:11:16\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation text-focus-in\n * ----------------------------------------\n */\n @-webkit-keyframes text-focus-in {\n 0% {\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes text-focus-in {\n 0% {\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:33:10\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation puff-in-center\n * ----------------------------------------\n */\n @-webkit-keyframes puff-in-center {\n 0% {\n -webkit-transform: scale(2);\n transform: scale(2);\n -webkit-filter: blur(4px);\n filter: blur(4px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes puff-in-center {\n 0% {\n -webkit-transform: scale(2);\n transform: scale(2);\n -webkit-filter: blur(4px);\n filter: blur(4px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:11:29\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation focus-in-contract\n * ----------------------------------------\n */\n @-webkit-keyframes focus-in-contract {\n 0% {\n letter-spacing: 1em;\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes focus-in-contract {\n 0% {\n letter-spacing: 1em;\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:22:44\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-horizontal\n * ----------------------------------------\n */\n @-webkit-keyframes shake-horizontal {\n 0%,\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateX(-10px);\n transform: translateX(-10px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateX(10px);\n transform: translateX(10px);\n }\n 80% {\n -webkit-transform: translateX(8px);\n transform: translateX(8px);\n }\n 90% {\n -webkit-transform: translateX(-8px);\n transform: translateX(-8px);\n }\n }\n @keyframes shake-horizontal {\n 0%,\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateX(-10px);\n transform: translateX(-10px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateX(10px);\n transform: translateX(10px);\n }\n 80% {\n -webkit-transform: translateX(8px);\n transform: translateX(8px);\n }\n 90% {\n -webkit-transform: translateX(-8px);\n transform: translateX(-8px);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:23:8\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-vertical\n * ----------------------------------------\n */\n @-webkit-keyframes shake-vertical {\n 0%,\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateY(-8px);\n transform: translateY(-8px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateY(8px);\n transform: translateY(8px);\n }\n 80% {\n -webkit-transform: translateY(6.4px);\n transform: translateY(6.4px);\n }\n 90% {\n -webkit-transform: translateY(-6.4px);\n transform: translateY(-6.4px);\n }\n }\n @keyframes shake-vertical {\n 0%,\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateY(-8px);\n transform: translateY(-8px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateY(8px);\n transform: translateY(8px);\n }\n 80% {\n -webkit-transform: translateY(6.4px);\n transform: translateY(6.4px);\n }\n 90% {\n -webkit-transform: translateY(-6.4px);\n transform: translateY(-6.4px);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:24:19\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-top\n * ----------------------------------------\n */\n @-webkit-keyframes shake-top {\n 0%,\n 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n -webkit-transform-origin: 50% 0;\n transform-origin: 50% 0;\n }\n 10% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: rotate(-4deg);\n transform: rotate(-4deg);\n }\n 30%,\n 50%,\n 70% {\n -webkit-transform: rotate(4deg);\n transform: rotate(4deg);\n }\n 80% {\n -webkit-transform: rotate(-2deg);\n transform: rotate(-2deg);\n }\n 90% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n }\n @keyframes shake-top {\n 0%,\n 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n -webkit-transform-origin: 50% 0;\n transform-origin: 50% 0;\n }\n 10% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: rotate(-4deg);\n transform: rotate(-4deg);\n }\n 30%,\n 50%,\n 70% {\n -webkit-transform: rotate(4deg);\n transform: rotate(4deg);\n }\n 80% {\n -webkit-transform: rotate(-2deg);\n transform: rotate(-2deg);\n }\n 90% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:21:6\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation vibrate-1\n * ----------------------------------------\n */\n @-webkit-keyframes vibrate-1 {\n 0% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n 20% {\n -webkit-transform: translate(-2px, 2px);\n transform: translate(-2px, 2px);\n }\n 40% {\n -webkit-transform: translate(-2px, -2px);\n transform: translate(-2px, -2px);\n }\n 60% {\n -webkit-transform: translate(2px, 2px);\n transform: translate(2px, 2px);\n }\n 80% {\n -webkit-transform: translate(2px, -2px);\n transform: translate(2px, -2px);\n }\n 100% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n }\n @keyframes vibrate-1 {\n 0% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n 20% {\n -webkit-transform: translate(-2px, 2px);\n transform: translate(-2px, 2px);\n }\n 40% {\n -webkit-transform: translate(-2px, -2px);\n transform: translate(-2px, -2px);\n }\n 60% {\n -webkit-transform: translate(2px, 2px);\n transform: translate(2px, 2px);\n }\n 80% {\n -webkit-transform: translate(2px, -2px);\n transform: translate(2px, -2px);\n }\n 100% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:27:38\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation blink-1\n * ----------------------------------------\n */\n @-webkit-keyframes blink-1 {\n 0%,\n 50%,\n 100% {\n opacity: 1;\n }\n 25%,\n 75% {\n opacity: 0;\n }\n }\n @keyframes blink-1 {\n 0%,\n 50%,\n 100% {\n opacity: 1;\n }\n 25%,\n 75% {\n opacity: 0;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:41:14\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * @animation flicker-in-2\n * ----------------------------------------\n */\n @-webkit-keyframes flicker-in-2 {\n 0% {\n opacity: 0;\n }\n 10% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.1% {\n opacity: 1;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.2% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n }\n 20.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.5% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 50% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 100% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n }\n @keyframes flicker-in-2 {\n 0% {\n opacity: 0;\n }\n 10% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.1% {\n opacity: 1;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.2% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n }\n 20.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.5% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 50% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 100% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-24 16:9:5\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bounce-top\n * ----------------------------------------\n */\n @-webkit-keyframes bounce-top {\n 0% {\n -webkit-transform: translateY(-45px);\n transform: translateY(-45px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 1;\n }\n 24% {\n opacity: 1;\n }\n 40% {\n -webkit-transform: translateY(-24px);\n transform: translateY(-24px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 65% {\n -webkit-transform: translateY(-12px);\n transform: translateY(-12px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 82% {\n -webkit-transform: translateY(-6px);\n transform: translateY(-6px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 93% {\n -webkit-transform: translateY(-4px);\n transform: translateY(-4px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 25%,\n 55%,\n 75%,\n 87% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 100% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n opacity: 1;\n }\n }\n @keyframes bounce-top {\n 0% {\n -webkit-transform: translateY(-45px);\n transform: translateY(-45px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 1;\n }\n 24% {\n opacity: 1;\n }\n 40% {\n -webkit-transform: translateY(-24px);\n transform: translateY(-24px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 65% {\n -webkit-transform: translateY(-12px);\n transform: translateY(-12px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 82% {\n -webkit-transform: translateY(-6px);\n transform: translateY(-6px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 93% {\n -webkit-transform: translateY(-4px);\n transform: translateY(-4px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 25%,\n 55%,\n 75%,\n 87% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 100% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:29:16\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation heartbeat\n * ----------------------------------------\n */\n @-webkit-keyframes heartbeat {\n from {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 10% {\n -webkit-transform: scale(0.91);\n transform: scale(0.91);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 17% {\n -webkit-transform: scale(0.98);\n transform: scale(0.98);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 33% {\n -webkit-transform: scale(0.87);\n transform: scale(0.87);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 45% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n }\n @keyframes heartbeat {\n from {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 10% {\n -webkit-transform: scale(0.91);\n transform: scale(0.91);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 17% {\n -webkit-transform: scale(0.98);\n transform: scale(0.98);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 33% {\n -webkit-transform: scale(0.87);\n transform: scale(0.87);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 45% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:30:57\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation kenburns-top\n * ----------------------------------------\n */\n @-webkit-keyframes kenburns-top {\n 0% {\n -webkit-transform: scale(1) translateY(0);\n transform: scale(1) translateY(0);\n -webkit-transform-origin: 50% 16%;\n transform-origin: 50% 16%;\n }\n 100% {\n -webkit-transform: scale(1.25) translateY(-15px);\n transform: scale(1.25) translateY(-15px);\n -webkit-transform-origin: top;\n transform-origin: top;\n }\n }\n @keyframes kenburns-top {\n 0% {\n -webkit-transform: scale(1) translateY(0);\n transform: scale(1) translateY(0);\n -webkit-transform-origin: 50% 16%;\n transform-origin: 50% 16%;\n }\n 100% {\n -webkit-transform: scale(1.25) translateY(-15px);\n transform: scale(1.25) translateY(-15px);\n -webkit-transform-origin: top;\n transform-origin: top;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:33:12\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-top\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-top {\n 0% {\n background-position: 50% 100%;\n }\n 100% {\n background-position: 50% 0%;\n }\n }\n @keyframes bg-pan-top {\n 0% {\n background-position: 50% 100%;\n }\n 100% {\n background-position: 50% 0%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:34:5\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-right\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-right {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n }\n @keyframes bg-pan-right {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:33:27\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-bottom {\n 0% {\n background-position: 50% 0%;\n }\n 100% {\n background-position: 50% 100%;\n }\n }\n @keyframes bg-pan-bottom {\n 0% {\n background-position: 50% 0%;\n }\n 100% {\n background-position: 50% 100%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:34:26\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-left\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-left {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n @keyframes bg-pan-left {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n"], ["\n * {\n box-sizing: border-box;\n }\n\n .iamgroup .cb-box-in-group:after {\n box-shadow: 0 0 0 3px #027aff;\n bottom: 0;\n box-sizing: border-box;\n content: '';\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n }\n\n .cb-box-in-group:hover:after {\n box-shadow: 0 0 0 3px #d902ff;\n bottom: 0;\n box-sizing: border-box;\n content: '';\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n }\n\n .iamgroup {\n box-shadow: 0 0 0 3px #027aff;\n opacity: 1;\n }\n\n .react-grid-layout {\n position: relative;\n z-index: 1;\n }\n\n .react-grid-layout .grid-placeholder {\n box-sizing: border-box;\n }\n\n .react-grid-item {\n left: 0;\n position: absolute;\n top: 0;\n z-index: 1;\n }\n\n .react-grid-item.react-draggable.react-resizable:not(.react-grid-item-selected):not(.iamgroup):hover {\n box-shadow: 0 0 0 3px #d902ff;\n }\n\n .react-grid-item-selected {\n box-shadow: 0 0 0 3px #027aff;\n }\n\n .react-grid-item img {\n pointer-events: none;\n user-select: none;\n }\n\n .react-grid-item.isResizing,\n .react-grid-item.isResizing .cb-layout-box,\n .react-grid-item.isResizing .cb-layout-box .cb-divider {\n visibility: hidden;\n }\n\n .react-grid-item.react-draggable.isDragging,\n .react-grid-item.react-draggable.isDragging .cb-layout-box,\n .react-grid-item.react-draggable.isDragging .cb-layout-box .cb-divider {\n visibility: hidden;\n }\n\n .react-grid-item.isResizing > .react-resizable-handle,\n .react-grid-item.react-draggable.isDragging > .react-resizable-handle {\n visibility: hidden;\n }\n\n .react-grid-item.dropping {\n visibility: hidden;\n }\n\n .react-grid-item.static::after {\n color: red;\n content: \"this is static, can't drag\";\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n .react-grid-item.placeholder {\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n z-index: 9999;\n }\n\n .react-grid-item > .react-resizable-handle::after {\n background: rgb(255, 255, 255);\n border: 3px solid rgb(2, 122, 255);\n content: '';\n height: 5px;\n position: absolute;\n width: 5px;\n }\n\n .react-resizable-handle {\n visibility: hidden;\n }\n\n .react-grid-item-selected > .react-resizable-handle {\n visibility: visible;\n }\n\n /* NOTE: Resizable related */\n .react-resizable {\n position: relative;\n }\n\n .react-resizable-handle {\n align-items: center;\n background-origin: content-box;\n background-repeat: no-repeat;\n box-sizing: border-box;\n display: flex;\n height: 20px;\n justify-content: center;\n position: absolute;\n width: 20px;\n }\n\n .react-resizable-handle-sw {\n bottom: 0;\n cursor: sw-resize;\n left: 0;\n transform: translate(-50%, 50%);\n }\n\n .react-resizable-handle-se {\n bottom: 0;\n cursor: se-resize;\n right: 0;\n transform: translate(50%, 50%);\n }\n\n .react-resizable-handle-nw {\n cursor: nw-resize;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-ne {\n cursor: ne-resize;\n right: 0;\n top: 0;\n transform: translate(50%, -50%);\n }\n\n .react-resizable-handle-w,\n .react-resizable-handle-e {\n cursor: ew-resize;\n top: 50%;\n }\n\n .react-resizable-handle-w {\n left: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-e {\n right: 0;\n transform: translate(50%, -50%);\n }\n\n .react-resizable-handle-n,\n .react-resizable-handle-s {\n cursor: ns-resize;\n left: 50%;\n }\n\n .react-resizable-handle-n {\n top: 0;\n transform: translate(-50%, -50%);\n }\n\n .react-resizable-handle-s {\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n\n .grid-placeholder {\n position: absolute;\n z-index: 0;\n }\n\n .grid-pattern-rect {\n fill: #0000001a;\n stroke: #ffffff33;\n }\n\n .react-grid-item.placeholder .cb-layout-box,\n .react-grid-item.placeholder .cb-layout-box .cb-divider {\n animation: none;\n }\n\n .react-grid-item.placeholder {\n box-shadow: 0 0 0 3px #027aff;\n }\n\n .react-grid-item.placeholder > .react-resizable-handle {\n visibility: hidden;\n }\n\n .grid-guide-line-center {\n border-color: #ff463aff;\n border-style: dashed;\n border-width: 1px;\n height: 100%;\n left: 50%;\n position: absolute;\n transform: translateX(-50%);\n z-index: 99999;\n }\n\n /* NOTE: Effects */\n\n @-webkit-keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-fwd {\n 0% {\n -webkit-transform: translateZ(-80px);\n transform: translateZ(-80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes fade-in-fwd {\n 0% {\n -webkit-transform: translateZ(-80px);\n transform: translateZ(-80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-bck {\n 0% {\n -webkit-transform: translateZ(80px);\n transform: translateZ(80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-bck {\n 0% {\n -webkit-transform: translateZ(80px);\n transform: translateZ(80px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-top {\n 0% {\n -webkit-transform: translateY(-50px);\n transform: translateY(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-top {\n 0% {\n -webkit-transform: translateY(-50px);\n transform: translateY(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @-webkit-keyframes fade-in-right {\n 0% {\n -webkit-transform: translateX(50px);\n transform: translateX(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-right {\n 0% {\n -webkit-transform: translateX(50px);\n transform: translateX(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:29:36\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation fade-in-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes fade-in-bottom {\n 0% {\n -webkit-transform: translateY(50px);\n transform: translateY(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-bottom {\n 0% {\n -webkit-transform: translateY(50px);\n transform: translateY(50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:29:52\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation fade-in-left\n * ----------------------------------------\n */\n @-webkit-keyframes fade-in-left {\n 0% {\n -webkit-transform: translateX(-50px);\n transform: translateX(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes fade-in-left {\n 0% {\n -webkit-transform: translateX(-50px);\n transform: translateX(-50px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:53:50\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-top\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-top {\n 0% {\n -webkit-transform: translateY(-1000px);\n transform: translateY(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-top {\n 0% {\n -webkit-transform: translateY(-1000px);\n transform: translateY(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:47\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-right\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-right {\n 0% {\n -webkit-transform: translateX(1000px);\n transform: translateX(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-right {\n 0% {\n -webkit-transform: translateX(1000px);\n transform: translateX(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:1\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-bottom {\n 0% {\n -webkit-transform: translateY(1000px);\n transform: translateY(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-bottom {\n 0% {\n -webkit-transform: translateY(1000px);\n transform: translateY(1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:54:28\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-left\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-left {\n 0% {\n -webkit-transform: translateX(-1000px);\n transform: translateX(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-left {\n 0% {\n -webkit-transform: translateX(-1000px);\n transform: translateX(-1000px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:52:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation tracking-in-contract\n * ----------------------------------------\n */\n @-webkit-keyframes tracking-in-contract {\n 0% {\n letter-spacing: 1em;\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n letter-spacing: normal;\n opacity: 1;\n }\n }\n @keyframes tracking-in-contract {\n 0% {\n letter-spacing: 1em;\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n letter-spacing: normal;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:47:57\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation rotate-in-2-cw\n * ----------------------------------------\n */\n @-webkit-keyframes rotate-in-2-cw {\n 0% {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n @keyframes rotate-in-2-cw {\n 0% {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:52:54\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation rotate-in-2-ccw\n * ----------------------------------------\n */\n @-webkit-keyframes rotate-in-2-ccw {\n 0% {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n @keyframes rotate-in-2-ccw {\n 0% {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:34:56\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-top-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-top-fwd {\n 0% {\n -webkit-transform: rotateX(-100deg);\n transform: rotateX(-100deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n @keyframes swing-in-top-fwd {\n 0% {\n -webkit-transform: rotateX(-100deg);\n transform: rotateX(-100deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:35:56\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-top-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-top-bck {\n 0% {\n -webkit-transform: rotateX(70deg);\n transform: rotateX(70deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n @keyframes swing-in-top-bck {\n 0% {\n -webkit-transform: rotateX(70deg);\n transform: rotateX(70deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0deg);\n transform: rotateX(0deg);\n -webkit-transform-origin: top;\n transform-origin: top;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:36:18\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-right-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-right-fwd {\n 0% {\n -webkit-transform: rotateY(-100deg);\n transform: rotateY(-100deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n @keyframes swing-in-right-fwd {\n 0% {\n -webkit-transform: rotateY(-100deg);\n transform: rotateY(-100deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:36:46\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-right-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-right-bck {\n 0% {\n -webkit-transform: rotateY(70deg);\n transform: rotateY(70deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n @keyframes swing-in-right-bck {\n 0% {\n -webkit-transform: rotateY(70deg);\n transform: rotateY(70deg);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: right;\n transform-origin: right;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:37:11\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-bottom-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-bottom-fwd {\n 0% {\n -webkit-transform: rotateX(100deg);\n transform: rotateX(100deg);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0);\n transform: rotateX(0);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 1;\n }\n }\n\n @keyframes swing-in-bottom-fwd {\n 0% {\n -webkit-transform: rotateX(100deg);\n transform: rotateX(100deg);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateX(0);\n transform: rotateX(0);\n -webkit-transform-origin: bottom;\n transform-origin: bottom;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:38:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-left-fwd\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-left-fwd {\n 0% {\n -webkit-transform: rotateY(100deg);\n transform: rotateY(100deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n @keyframes swing-in-left-fwd {\n 0% {\n -webkit-transform: rotateY(100deg);\n transform: rotateY(100deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:40:3\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation swing-in-left-bck\n * ----------------------------------------\n */\n @-webkit-keyframes swing-in-left-bck {\n 0% {\n -webkit-transform: rotateY(-70deg);\n transform: rotateY(-70deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n @keyframes swing-in-left-bck {\n 0% {\n -webkit-transform: rotateY(-70deg);\n transform: rotateY(-70deg);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 0;\n }\n 100% {\n -webkit-transform: rotateY(0);\n transform: rotateY(0);\n -webkit-transform-origin: left;\n transform-origin: left;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:44:48\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation scale-in-center\n * ----------------------------------------\n */\n @-webkit-keyframes scale-in-center {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 1;\n }\n }\n @keyframes scale-in-center {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:46:1\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation slide-in-bck-center\n * ----------------------------------------\n */\n @-webkit-keyframes slide-in-bck-center {\n 0% {\n -webkit-transform: translateZ(600px);\n transform: translateZ(600px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes slide-in-bck-center {\n 0% {\n -webkit-transform: translateZ(600px);\n transform: translateZ(600px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:13:59\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation tracking-in-contract-bck\n * ----------------------------------------\n */\n @-webkit-keyframes tracking-in-contract-bck {\n 0% {\n letter-spacing: 1em;\n -webkit-transform: translateZ(400px);\n transform: translateZ(400px);\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n @keyframes tracking-in-contract-bck {\n 0% {\n letter-spacing: 1em;\n -webkit-transform: translateZ(400px);\n transform: translateZ(400px);\n opacity: 0;\n }\n 40% {\n opacity: 0.6;\n }\n 100% {\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:11:16\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation text-focus-in\n * ----------------------------------------\n */\n @-webkit-keyframes text-focus-in {\n 0% {\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes text-focus-in {\n 0% {\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:33:10\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation puff-in-center\n * ----------------------------------------\n */\n @-webkit-keyframes puff-in-center {\n 0% {\n -webkit-transform: scale(2);\n transform: scale(2);\n -webkit-filter: blur(4px);\n filter: blur(4px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes puff-in-center {\n 0% {\n -webkit-transform: scale(2);\n transform: scale(2);\n -webkit-filter: blur(4px);\n filter: blur(4px);\n opacity: 0;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:11:29\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation focus-in-contract\n * ----------------------------------------\n */\n @-webkit-keyframes focus-in-contract {\n 0% {\n letter-spacing: 1em;\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n @keyframes focus-in-contract {\n 0% {\n letter-spacing: 1em;\n -webkit-filter: blur(12px);\n filter: blur(12px);\n opacity: 0;\n }\n 100% {\n -webkit-filter: blur(0px);\n filter: blur(0px);\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:22:44\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-horizontal\n * ----------------------------------------\n */\n @-webkit-keyframes shake-horizontal {\n 0%,\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateX(-10px);\n transform: translateX(-10px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateX(10px);\n transform: translateX(10px);\n }\n 80% {\n -webkit-transform: translateX(8px);\n transform: translateX(8px);\n }\n 90% {\n -webkit-transform: translateX(-8px);\n transform: translateX(-8px);\n }\n }\n @keyframes shake-horizontal {\n 0%,\n 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateX(-10px);\n transform: translateX(-10px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateX(10px);\n transform: translateX(10px);\n }\n 80% {\n -webkit-transform: translateX(8px);\n transform: translateX(8px);\n }\n 90% {\n -webkit-transform: translateX(-8px);\n transform: translateX(-8px);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:23:8\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-vertical\n * ----------------------------------------\n */\n @-webkit-keyframes shake-vertical {\n 0%,\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateY(-8px);\n transform: translateY(-8px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateY(8px);\n transform: translateY(8px);\n }\n 80% {\n -webkit-transform: translateY(6.4px);\n transform: translateY(6.4px);\n }\n 90% {\n -webkit-transform: translateY(-6.4px);\n transform: translateY(-6.4px);\n }\n }\n @keyframes shake-vertical {\n 0%,\n 100% {\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n 10%,\n 30%,\n 50%,\n 70% {\n -webkit-transform: translateY(-8px);\n transform: translateY(-8px);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: translateY(8px);\n transform: translateY(8px);\n }\n 80% {\n -webkit-transform: translateY(6.4px);\n transform: translateY(6.4px);\n }\n 90% {\n -webkit-transform: translateY(-6.4px);\n transform: translateY(-6.4px);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:24:19\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation shake-top\n * ----------------------------------------\n */\n @-webkit-keyframes shake-top {\n 0%,\n 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n -webkit-transform-origin: 50% 0;\n transform-origin: 50% 0;\n }\n 10% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: rotate(-4deg);\n transform: rotate(-4deg);\n }\n 30%,\n 50%,\n 70% {\n -webkit-transform: rotate(4deg);\n transform: rotate(4deg);\n }\n 80% {\n -webkit-transform: rotate(-2deg);\n transform: rotate(-2deg);\n }\n 90% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n }\n @keyframes shake-top {\n 0%,\n 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n -webkit-transform-origin: 50% 0;\n transform-origin: 50% 0;\n }\n 10% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n 20%,\n 40%,\n 60% {\n -webkit-transform: rotate(-4deg);\n transform: rotate(-4deg);\n }\n 30%,\n 50%,\n 70% {\n -webkit-transform: rotate(4deg);\n transform: rotate(4deg);\n }\n 80% {\n -webkit-transform: rotate(-2deg);\n transform: rotate(-2deg);\n }\n 90% {\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:21:6\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation vibrate-1\n * ----------------------------------------\n */\n @-webkit-keyframes vibrate-1 {\n 0% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n 20% {\n -webkit-transform: translate(-2px, 2px);\n transform: translate(-2px, 2px);\n }\n 40% {\n -webkit-transform: translate(-2px, -2px);\n transform: translate(-2px, -2px);\n }\n 60% {\n -webkit-transform: translate(2px, 2px);\n transform: translate(2px, 2px);\n }\n 80% {\n -webkit-transform: translate(2px, -2px);\n transform: translate(2px, -2px);\n }\n 100% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n }\n @keyframes vibrate-1 {\n 0% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n 20% {\n -webkit-transform: translate(-2px, 2px);\n transform: translate(-2px, 2px);\n }\n 40% {\n -webkit-transform: translate(-2px, -2px);\n transform: translate(-2px, -2px);\n }\n 60% {\n -webkit-transform: translate(2px, 2px);\n transform: translate(2px, 2px);\n }\n 80% {\n -webkit-transform: translate(2px, -2px);\n transform: translate(2px, -2px);\n }\n 100% {\n -webkit-transform: translate(0);\n transform: translate(0);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:27:38\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation blink-1\n * ----------------------------------------\n */\n @-webkit-keyframes blink-1 {\n 0%,\n 50%,\n 100% {\n opacity: 1;\n }\n 25%,\n 75% {\n opacity: 0;\n }\n }\n @keyframes blink-1 {\n 0%,\n 50%,\n 100% {\n opacity: 1;\n }\n 25%,\n 75% {\n opacity: 0;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 0:41:14\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * @animation flicker-in-2\n * ----------------------------------------\n */\n @-webkit-keyframes flicker-in-2 {\n 0% {\n opacity: 0;\n }\n 10% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.1% {\n opacity: 1;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.2% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n }\n 20.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.5% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 50% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 100% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n }\n @keyframes flicker-in-2 {\n 0% {\n opacity: 0;\n }\n 10% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.1% {\n opacity: 1;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 10.2% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 20.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.25);\n }\n 20.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 30.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.5% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 30.6% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 45.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 50% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.45), 0 0 60px rgba(255, 255, 255, 0.25);\n }\n 55.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 57.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3);\n }\n 60.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 65.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.55), 0 0 60px rgba(255, 255, 255, 0.3),\n 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 75.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 77.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4),\n 0 0 110px rgba(255, 255, 255, 0.2), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 85.1% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86% {\n opacity: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n 86.1% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n 100% {\n opacity: 1;\n -webkit-box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n box-shadow: 0 0 30px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.45),\n 0 0 110px rgba(255, 255, 255, 0.25), 0 0 100px rgba(255, 255, 255, 0.1);\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-24 16:9:5\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bounce-top\n * ----------------------------------------\n */\n @-webkit-keyframes bounce-top {\n 0% {\n -webkit-transform: translateY(-45px);\n transform: translateY(-45px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 1;\n }\n 24% {\n opacity: 1;\n }\n 40% {\n -webkit-transform: translateY(-24px);\n transform: translateY(-24px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 65% {\n -webkit-transform: translateY(-12px);\n transform: translateY(-12px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 82% {\n -webkit-transform: translateY(-6px);\n transform: translateY(-6px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 93% {\n -webkit-transform: translateY(-4px);\n transform: translateY(-4px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 25%,\n 55%,\n 75%,\n 87% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 100% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n opacity: 1;\n }\n }\n @keyframes bounce-top {\n 0% {\n -webkit-transform: translateY(-45px);\n transform: translateY(-45px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 1;\n }\n 24% {\n opacity: 1;\n }\n 40% {\n -webkit-transform: translateY(-24px);\n transform: translateY(-24px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 65% {\n -webkit-transform: translateY(-12px);\n transform: translateY(-12px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 82% {\n -webkit-transform: translateY(-6px);\n transform: translateY(-6px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 93% {\n -webkit-transform: translateY(-4px);\n transform: translateY(-4px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 25%,\n 55%,\n 75%,\n 87% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 100% {\n -webkit-transform: translateY(0px);\n transform: translateY(0px);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n opacity: 1;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:29:16\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation heartbeat\n * ----------------------------------------\n */\n @-webkit-keyframes heartbeat {\n from {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 10% {\n -webkit-transform: scale(0.91);\n transform: scale(0.91);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 17% {\n -webkit-transform: scale(0.98);\n transform: scale(0.98);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 33% {\n -webkit-transform: scale(0.87);\n transform: scale(0.87);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 45% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n }\n @keyframes heartbeat {\n from {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 10% {\n -webkit-transform: scale(0.91);\n transform: scale(0.91);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 17% {\n -webkit-transform: scale(0.98);\n transform: scale(0.98);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n 33% {\n -webkit-transform: scale(0.87);\n transform: scale(0.87);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n 45% {\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:30:57\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation kenburns-top\n * ----------------------------------------\n */\n @-webkit-keyframes kenburns-top {\n 0% {\n -webkit-transform: scale(1) translateY(0);\n transform: scale(1) translateY(0);\n -webkit-transform-origin: 50% 16%;\n transform-origin: 50% 16%;\n }\n 100% {\n -webkit-transform: scale(1.25) translateY(-15px);\n transform: scale(1.25) translateY(-15px);\n -webkit-transform-origin: top;\n transform-origin: top;\n }\n }\n @keyframes kenburns-top {\n 0% {\n -webkit-transform: scale(1) translateY(0);\n transform: scale(1) translateY(0);\n -webkit-transform-origin: 50% 16%;\n transform-origin: 50% 16%;\n }\n 100% {\n -webkit-transform: scale(1.25) translateY(-15px);\n transform: scale(1.25) translateY(-15px);\n -webkit-transform-origin: top;\n transform-origin: top;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:33:12\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-top\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-top {\n 0% {\n background-position: 50% 100%;\n }\n 100% {\n background-position: 50% 0%;\n }\n }\n @keyframes bg-pan-top {\n 0% {\n background-position: 50% 100%;\n }\n 100% {\n background-position: 50% 0%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:34:5\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-right\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-right {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n }\n @keyframes bg-pan-right {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:33:27\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-bottom\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-bottom {\n 0% {\n background-position: 50% 0%;\n }\n 100% {\n background-position: 50% 100%;\n }\n }\n @keyframes bg-pan-bottom {\n 0% {\n background-position: 50% 0%;\n }\n 100% {\n background-position: 50% 100%;\n }\n }\n\n /* ----------------------------------------------\n * Generated by Animista on 2023-7-4 1:34:26\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n /**\n * ----------------------------------------\n * animation bg-pan-left\n * ----------------------------------------\n */\n @-webkit-keyframes bg-pan-left {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n @keyframes bg-pan-left {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n"])));
|
|
531
|
-
var S_SectionWrapper = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
|
|
1101
|
+
var S_SectionWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
|
|
532
1102
|
exports.default = react_1.default.memo(CustomSection);
|
|
533
|
-
var templateObject_1
|
|
1103
|
+
var templateObject_1;
|