@cntrl-site/sdk-nextjs 0.15.5-1 → 0.15.5-3
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/lib/components/Item.js +30 -20
- package/lib/components/items/RichTextItem.js +2 -3
- package/lib/components/items/useRichTextItemValues.js +1 -1
- package/package.json +1 -1
- package/src/components/Item.tsx +45 -25
- package/src/components/items/RichTextItem.tsx +2 -3
- package/src/components/items/useRichTextItemValues.ts +1 -1
- package/cntrl-site-sdk-nextjs-0.15.5-1.tgz +0 -0
package/lib/components/Item.js
CHANGED
|
@@ -35,6 +35,11 @@ const itemsMap = {
|
|
|
35
35
|
[sdk_1.ArticleItemType.VimeoEmbed]: VimeoEmbed_1.VimeoEmbedItem,
|
|
36
36
|
[sdk_1.ArticleItemType.Custom]: CustomItem_1.CustomItem
|
|
37
37
|
};
|
|
38
|
+
const RichTextWrapper = ({ isRichText, children }) => {
|
|
39
|
+
if (!isRichText)
|
|
40
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
41
|
+
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ style: { transformOrigin: 'top left', transform: 'scale(var(--layout-deviation))' } }, { children: children })));
|
|
42
|
+
};
|
|
38
43
|
const noop = () => null;
|
|
39
44
|
const Item = ({ item, sectionId }) => {
|
|
40
45
|
var _a, _b;
|
|
@@ -43,6 +48,7 @@ const Item = ({ item, sectionId }) => {
|
|
|
43
48
|
const layout = (0, useLayoutContext_1.useLayoutContext)();
|
|
44
49
|
const exemplary = (_b = (_a = layouts.find(l => l.id === layout)) === null || _a === void 0 ? void 0 : _a.exemplary) !== null && _b !== void 0 ? _b : 1;
|
|
45
50
|
const [wrapperHeight, setWrapperHeight] = (0, react_1.useState)(undefined);
|
|
51
|
+
const [itemHeight, setItemHeight] = (0, react_1.useState)(undefined);
|
|
46
52
|
const { scale, scaleAnchor } = (0, useItemScale_1.useItemScale)(item, sectionId);
|
|
47
53
|
const { top, left } = (0, useItemPosition_1.useItemPosition)(item, sectionId);
|
|
48
54
|
const sectionHeight = (0, useSectionHeightMap_1.useSectionHeightData)(sectionId);
|
|
@@ -69,41 +75,45 @@ const Item = ({ item, sectionId }) => {
|
|
|
69
75
|
return;
|
|
70
76
|
}
|
|
71
77
|
const wrapperHeight = getStickyItemWrapperHeight(sticky, height);
|
|
78
|
+
setItemHeight(height);
|
|
72
79
|
setWrapperHeight(wrapperHeight);
|
|
73
80
|
};
|
|
74
81
|
(0, react_1.useEffect)(() => {
|
|
75
82
|
isInitialRef.current = false;
|
|
76
83
|
}, []);
|
|
77
84
|
const isRichText = isItemType(item, sdk_1.ArticleItemType.RichText);
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
: {}
|
|
81
|
-
|
|
82
|
-
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: `item-wrapper-${item.id}`, style: isInitialRef.current ? {} : Object.assign({ top, left }, (wrapperHeight ? { height: `${wrapperHeight * 100}vw` } : {})) }, { children: [(0, jsx_runtime_1.jsx)("div", Object.assign({ suppressHydrationWarning: true, className: `item-${item.id}`, style: isInitialRef.current ? {} : styles }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ style: {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
const styles = {
|
|
86
|
+
top: stickyTop,
|
|
87
|
+
height: isRichText && itemHeight ? `${itemHeight * 100}vw` : 'unset'
|
|
88
|
+
};
|
|
89
|
+
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: `item-wrapper-${item.id}`, style: isInitialRef.current ? {} : Object.assign({ top, left }, (wrapperHeight ? { height: `${wrapperHeight * 100}vw` } : {})) }, { children: [(0, jsx_runtime_1.jsx)("div", Object.assign({ suppressHydrationWarning: true, className: `item-${item.id}`, style: isInitialRef.current ? {} : styles }, { children: (0, jsx_runtime_1.jsx)(RichTextWrapper, Object.assign({ isRichText: isRichText }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ className: `item-${item.id}-inner`, style: {
|
|
90
|
+
width: `${sizingAxis.x === sdk_1.ArticleItemSizingType.Manual
|
|
91
|
+
? isRichText
|
|
92
|
+
? `${width * exemplary}px`
|
|
93
|
+
: `${width * 100}vw`
|
|
94
|
+
: 'max-content'}`,
|
|
95
|
+
height: `${sizingAxis.y === sdk_1.ArticleItemSizingType.Manual ? `${height * 100}vw` : 'unset'}`,
|
|
96
|
+
transform: `scale(${scale})`,
|
|
97
|
+
transformOrigin: ScaleAnchorMap_1.ScaleAnchorMap[scaleAnchor]
|
|
98
|
+
} }, { children: (0, jsx_runtime_1.jsx)(ItemComponent, { item: item, sectionId: sectionId, onResize: handleItemResize }) })) })) })), (0, jsx_runtime_1.jsx)(style_1.default, Object.assign({ id: id }, { children: `
|
|
92
99
|
${(0, sdk_1.getLayoutStyles)(layouts, layoutValues, ([area, hidden, hoverParams, sticky, sectionHeight, layoutParams]) => {
|
|
93
100
|
const sizingAxis = parseSizing(layoutParams.sizing);
|
|
94
101
|
return (`
|
|
95
102
|
.item-${item.id} {
|
|
96
103
|
position: ${sticky ? 'sticky' : 'absolute'};
|
|
97
|
-
width: ${sizingAxis.x === sdk_1.ArticleItemSizingType.Manual ? `${area.width * 100}vw` : 'max-content'};
|
|
98
|
-
height: ${sizingAxis.y === sdk_1.ArticleItemSizingType.Manual ? `${area.height * 100}vw` : 'unset'};
|
|
99
|
-
transform: scale(${scale});
|
|
100
104
|
top: ${sticky ? `${(0, getAnchoredItemTop_1.getAnchoredItemTop)(area.top - sticky.from, sectionHeight, area.anchorSide)}` : 0};
|
|
101
|
-
transform-origin: ${ScaleAnchorMap_1.ScaleAnchorMap[scaleAnchor]};
|
|
102
105
|
pointer-events: auto;
|
|
103
|
-
--webkit-backface-visibility: hidden;
|
|
104
106
|
cursor: ${hoverParams ? 'pointer' : 'default'};
|
|
105
107
|
visibility: ${hidden ? 'hidden' : 'visible'};
|
|
108
|
+
height: fit-content;
|
|
109
|
+
}
|
|
110
|
+
.item-${item.id}-inner {
|
|
106
111
|
transition: ${(0, HoverStyles_1.getTransitions)(['width', 'height', 'scale'], hoverParams)};
|
|
112
|
+
width: ${sizingAxis.x === sdk_1.ArticleItemSizingType.Manual ? `${area.width * 100}vw` : 'max-content'};
|
|
113
|
+
height: ${sizingAxis.y === sdk_1.ArticleItemSizingType.Manual ? `${area.height * 100}vw` : 'unset'};
|
|
114
|
+
transform: scale(${scale});
|
|
115
|
+
transform-origin: ${ScaleAnchorMap_1.ScaleAnchorMap[scaleAnchor]};
|
|
116
|
+
--webkit-backface-visibility: hidden;
|
|
107
117
|
}
|
|
108
118
|
.item-wrapper-${item.id} {
|
|
109
119
|
position: absolute;
|
|
@@ -116,7 +126,7 @@ const Item = ({ item, sectionId }) => {
|
|
|
116
126
|
height: ${sticky ? `${getStickyItemWrapperHeight(sticky, area.height) * 100}vw` : 'unset'};
|
|
117
127
|
transition: ${(0, HoverStyles_1.getTransitions)(['left', 'top'], hoverParams)};
|
|
118
128
|
}
|
|
119
|
-
.item-${item.id}:hover {
|
|
129
|
+
.item-${item.id}-inner:hover {
|
|
120
130
|
${(0, HoverStyles_1.getHoverStyles)(['width', 'height', 'scale'], hoverParams)}
|
|
121
131
|
}
|
|
122
132
|
.item-wrapper-${item.id}:hover {
|
|
@@ -14,11 +14,10 @@ const HoverStyles_1 = require("../../utils/HoverStyles/HoverStyles");
|
|
|
14
14
|
const useRichTextItemValues_1 = require("./useRichTextItemValues");
|
|
15
15
|
const resize_observer_polyfill_1 = __importDefault(require("resize-observer-polyfill"));
|
|
16
16
|
const RichTextItem = ({ item, sectionId, onResize }) => {
|
|
17
|
-
const [content, styles
|
|
17
|
+
const [content, styles] = (0, useRichTextItem_1.useRichTextItem)(item);
|
|
18
18
|
const id = (0, react_1.useId)();
|
|
19
19
|
const [ref, setRef] = (0, react_1.useState)(null);
|
|
20
20
|
const { layouts } = (0, useCntrlContext_1.useCntrlContext)();
|
|
21
|
-
const className = preset ? `cntrl-preset-${preset.id}` : undefined;
|
|
22
21
|
const { angle, blur } = (0, useRichTextItemValues_1.useRichTextItemValues)(item, sectionId);
|
|
23
22
|
(0, react_1.useEffect)(() => {
|
|
24
23
|
if (!ref || !onResize)
|
|
@@ -32,7 +31,7 @@ const RichTextItem = ({ item, sectionId, onResize }) => {
|
|
|
32
31
|
observer.unobserve(ref);
|
|
33
32
|
};
|
|
34
33
|
}, [ref, onResize]);
|
|
35
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", Object.assign({ ref: setRef, className:
|
|
34
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", Object.assign({ ref: setRef, className: `rich-text-wrapper-${item.id}`, style: {
|
|
36
35
|
transform: `rotate(${angle}deg)`,
|
|
37
36
|
filter: `blur(${blur * 100}vw)`
|
|
38
37
|
} }, { children: content })), (0, jsx_runtime_1.jsxs)(style_1.default, Object.assign({ id: id }, { children: [styles, `${(0, sdk_1.getLayoutStyles)(layouts, [item.state.hover], ([hoverParams]) => {
|
|
@@ -5,7 +5,7 @@ const useKeyframeValue_1 = require("../../common/useKeyframeValue");
|
|
|
5
5
|
const useLayoutContext_1 = require("../useLayoutContext");
|
|
6
6
|
const useRichTextItemValues = (item, sectionId) => {
|
|
7
7
|
const layoutId = (0, useLayoutContext_1.useLayoutContext)();
|
|
8
|
-
const angle = (0, useKeyframeValue_1.useKeyframeValue)(item, (item, layoutId) => ({ angle: layoutId ? item.area[layoutId].angle : 0 }), (animator, scroll, value) => animator.getRotation(value, scroll), sectionId);
|
|
8
|
+
const { angle } = (0, useKeyframeValue_1.useKeyframeValue)(item, (item, layoutId) => ({ angle: layoutId ? item.area[layoutId].angle : 0 }), (animator, scroll, value) => animator.getRotation(value, scroll), sectionId);
|
|
9
9
|
const blur = (0, useKeyframeValue_1.useKeyframeValue)(item, (item, layoutId) => {
|
|
10
10
|
if (!layoutId)
|
|
11
11
|
return 0;
|
package/package.json
CHANGED
package/src/components/Item.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentType, FC, useEffect, useId, useRef, useState } from 'react';
|
|
1
|
+
import { ComponentType, FC, PropsWithChildren, useEffect, useId, useRef, useState } from 'react';
|
|
2
2
|
import JSXStyle from 'styled-jsx/style';
|
|
3
3
|
import {
|
|
4
4
|
AnchorSide,
|
|
@@ -45,6 +45,19 @@ const itemsMap: Record<ArticleItemType, ComponentType<ItemProps<any>>> = {
|
|
|
45
45
|
[ArticleItemType.Custom]: CustomItem
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
interface RTWrapperProps {
|
|
49
|
+
isRichText: boolean;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const RichTextWrapper: FC<PropsWithChildren<RTWrapperProps>> = ({ isRichText, children }) => {
|
|
53
|
+
if (!isRichText) return <>{children}</>;
|
|
54
|
+
return (
|
|
55
|
+
<div style={{ transformOrigin: 'top left', transform: 'scale(var(--layout-deviation))' }}>
|
|
56
|
+
{children}
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
48
61
|
const noop = () => null;
|
|
49
62
|
|
|
50
63
|
export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
@@ -53,6 +66,7 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
53
66
|
const layout = useLayoutContext();
|
|
54
67
|
const exemplary = layouts.find(l => l.id === layout)?.exemplary ?? 1;
|
|
55
68
|
const [wrapperHeight, setWrapperHeight] = useState<undefined | number>(undefined);
|
|
69
|
+
const [itemHeight, setItemHeight] = useState<undefined | number>(undefined);
|
|
56
70
|
const { scale, scaleAnchor } = useItemScale(item, sectionId);
|
|
57
71
|
const { top, left } = useItemPosition(item, sectionId);
|
|
58
72
|
const sectionHeight = useSectionHeightData(sectionId);
|
|
@@ -79,7 +93,8 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
79
93
|
setWrapperHeight(undefined);
|
|
80
94
|
return;
|
|
81
95
|
}
|
|
82
|
-
const wrapperHeight = getStickyItemWrapperHeight(sticky, height)
|
|
96
|
+
const wrapperHeight = getStickyItemWrapperHeight(sticky, height);
|
|
97
|
+
setItemHeight(height);
|
|
83
98
|
setWrapperHeight(wrapperHeight);
|
|
84
99
|
};
|
|
85
100
|
|
|
@@ -88,13 +103,10 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
88
103
|
}, []);
|
|
89
104
|
|
|
90
105
|
const isRichText = isItemType(item, ArticleItemType.RichText);
|
|
91
|
-
const scaleIfRichText = isRichText
|
|
92
|
-
? { transformOrigin: 'top left', transform: 'scale(var(--layout-deviation))' }
|
|
93
|
-
: {};
|
|
94
106
|
|
|
95
107
|
const styles = {
|
|
96
|
-
|
|
97
|
-
|
|
108
|
+
top: stickyTop,
|
|
109
|
+
height: isRichText && itemHeight ? `${itemHeight * 100}vw` : 'unset'
|
|
98
110
|
};
|
|
99
111
|
|
|
100
112
|
return (
|
|
@@ -107,18 +119,23 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
107
119
|
className={`item-${item.id}`}
|
|
108
120
|
style={isInitialRef.current ? {} : styles }
|
|
109
121
|
>
|
|
110
|
-
<
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
: `${
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
+
<RichTextWrapper isRichText={isRichText}>
|
|
123
|
+
<div
|
|
124
|
+
className={`item-${item.id}-inner`}
|
|
125
|
+
style={{
|
|
126
|
+
width: `${sizingAxis.x === SizingType.Manual
|
|
127
|
+
? isRichText
|
|
128
|
+
? `${width * exemplary}px`
|
|
129
|
+
: `${width * 100}vw`
|
|
130
|
+
: 'max-content'}`,
|
|
131
|
+
height: `${sizingAxis.y === SizingType.Manual ? `${height * 100}vw` : 'unset'}`,
|
|
132
|
+
transform: `scale(${scale})`,
|
|
133
|
+
transformOrigin: ScaleAnchorMap[scaleAnchor]
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
<ItemComponent item={item} sectionId={sectionId} onResize={handleItemResize} />
|
|
137
|
+
</div>
|
|
138
|
+
</RichTextWrapper>
|
|
122
139
|
</div>
|
|
123
140
|
<JSXStyle id={id}>{`
|
|
124
141
|
${getLayoutStyles(layouts, layoutValues, ([area, hidden, hoverParams, sticky, sectionHeight, layoutParams]) => {
|
|
@@ -126,16 +143,19 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
126
143
|
return (`
|
|
127
144
|
.item-${item.id} {
|
|
128
145
|
position: ${sticky ? 'sticky' : 'absolute'};
|
|
129
|
-
width: ${sizingAxis.x === SizingType.Manual ? `${area.width * 100}vw` : 'max-content'};
|
|
130
|
-
height: ${sizingAxis.y === SizingType.Manual ? `${area.height * 100}vw` : 'unset'};
|
|
131
|
-
transform: scale(${scale});
|
|
132
146
|
top: ${sticky ? `${getAnchoredItemTop(area.top - sticky.from, sectionHeight, area.anchorSide)}` : 0};
|
|
133
|
-
transform-origin: ${ScaleAnchorMap[scaleAnchor]};
|
|
134
147
|
pointer-events: auto;
|
|
135
|
-
--webkit-backface-visibility: hidden;
|
|
136
148
|
cursor: ${hoverParams ? 'pointer' : 'default'};
|
|
137
149
|
visibility: ${hidden ? 'hidden' : 'visible'};
|
|
150
|
+
height: fit-content;
|
|
151
|
+
}
|
|
152
|
+
.item-${item.id}-inner {
|
|
138
153
|
transition: ${getTransitions(['width', 'height', 'scale'], hoverParams)};
|
|
154
|
+
width: ${sizingAxis.x === SizingType.Manual ? `${area.width * 100}vw` : 'max-content'};
|
|
155
|
+
height: ${sizingAxis.y === SizingType.Manual ? `${area.height * 100}vw` : 'unset'};
|
|
156
|
+
transform: scale(${scale});
|
|
157
|
+
transform-origin: ${ScaleAnchorMap[scaleAnchor]};
|
|
158
|
+
--webkit-backface-visibility: hidden;
|
|
139
159
|
}
|
|
140
160
|
.item-wrapper-${item.id} {
|
|
141
161
|
position: absolute;
|
|
@@ -148,7 +168,7 @@ export const Item: FC<ItemProps<TArticleItemAny>> = ({ item, sectionId}) => {
|
|
|
148
168
|
height: ${sticky ? `${getStickyItemWrapperHeight(sticky, area.height) * 100}vw` : 'unset'};
|
|
149
169
|
transition: ${getTransitions(['left', 'top'], hoverParams)};
|
|
150
170
|
}
|
|
151
|
-
.item-${item.id}:hover {
|
|
171
|
+
.item-${item.id}-inner:hover {
|
|
152
172
|
${getHoverStyles(['width', 'height', 'scale'], hoverParams)}
|
|
153
173
|
}
|
|
154
174
|
.item-wrapper-${item.id}:hover {
|
|
@@ -9,11 +9,10 @@ import { useRichTextItemValues } from './useRichTextItemValues';
|
|
|
9
9
|
import ResizeObserver from 'resize-observer-polyfill';
|
|
10
10
|
|
|
11
11
|
export const RichTextItem: FC<ItemProps<TRichTextItem>> = ({ item, sectionId, onResize }) => {
|
|
12
|
-
const [content, styles
|
|
12
|
+
const [content, styles] = useRichTextItem(item);
|
|
13
13
|
const id = useId();
|
|
14
14
|
const [ref, setRef] = useState<HTMLDivElement | null>(null);
|
|
15
15
|
const { layouts } = useCntrlContext();
|
|
16
|
-
const className = preset ? `cntrl-preset-${preset.id}` : undefined;
|
|
17
16
|
const { angle, blur } = useRichTextItemValues(item, sectionId);
|
|
18
17
|
|
|
19
18
|
useEffect(() => {
|
|
@@ -32,7 +31,7 @@ export const RichTextItem: FC<ItemProps<TRichTextItem>> = ({ item, sectionId, on
|
|
|
32
31
|
<>
|
|
33
32
|
<div
|
|
34
33
|
ref={setRef}
|
|
35
|
-
className={
|
|
34
|
+
className={`rich-text-wrapper-${item.id}`}
|
|
36
35
|
style={{
|
|
37
36
|
transform: `rotate(${angle}deg)`,
|
|
38
37
|
filter: `blur(${blur * 100}vw)`
|
|
@@ -4,7 +4,7 @@ import { useLayoutContext } from '../useLayoutContext';
|
|
|
4
4
|
|
|
5
5
|
export const useRichTextItemValues = (item: TRichTextItem, sectionId: string) => {
|
|
6
6
|
const layoutId = useLayoutContext();
|
|
7
|
-
const angle = useKeyframeValue(
|
|
7
|
+
const { angle } = useKeyframeValue(
|
|
8
8
|
item,
|
|
9
9
|
(item, layoutId) => ({ angle: layoutId ? item.area[layoutId].angle : 0 }),
|
|
10
10
|
(animator, scroll, value) => animator.getRotation(value, scroll),
|
|
Binary file
|