Skip to content

Commit 5a937ee

Browse files
zombieJclaude
andcommitted
refactor: move motion handling from wrapper to Notification component
- Replace transform translate3d with inset (right/top) for positioning - Remove wrapper div, pass motionClassName and motionStyle directly to Notification - Simplify CSS animation classes using translateX instead of translate3d - Remove deprecated onLeaveStart/onLeaveActive callbacks from demo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 6ad85b4 commit 5a937ee

File tree

3 files changed

+62
-77
lines changed

3 files changed

+62
-77
lines changed

assets/geek.less

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,17 @@
3535
}
3636

3737
&-notice {
38+
position: absolute;
3839
pointer-events: auto;
3940
box-sizing: border-box;
4041
width: 100%;
41-
transform: translate3d(var(--notification-x, 0), var(--notification-y, 0), 0);
42-
transition: transform @notificationMotionDuration @notificationMotionEase;
42+
// transform: translate3d(var(--notification-x, 0), var(--notification-y, 0), 0);
43+
right: var(--notification-x, 0);
44+
top: var(--notification-y, 0);
45+
transition:
46+
transform @notificationMotionDuration @notificationMotionEase,
47+
inset @notificationMotionDuration @notificationMotionEase,
48+
opacity @notificationMotionDuration @notificationMotionEase;
4349
padding: 14px 16px;
4450
border: 2px solid #111;
4551
border-radius: 14px;
@@ -78,7 +84,6 @@
7884
&:hover {
7985
background: #f4f9ff;
8086
box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.12);
81-
transform: translate3d(-1px, -1px, 0);
8287
}
8388
}
8489
}
@@ -101,37 +106,28 @@
101106
.notification-fade-appear-prepare,
102107
.notification-fade-enter-prepare {
103108
opacity: 0;
104-
transform: translate3d(@notificationMotionOffset, 0, 0);
109+
transform: translateX(@notificationMotionOffset);
110+
transition: none;
105111
}
106112

107113
.notification-fade-appear-start,
108114
.notification-fade-enter-start {
109115
opacity: 0;
110-
transform: translate3d(@notificationMotionOffset, 0, 0);
116+
transform: translateX(@notificationMotionOffset);
111117
}
112118

113119
.notification-fade-appear-active,
114120
.notification-fade-enter-active {
115121
opacity: 1;
116-
transform: translate3d(0, 0, 0);
117-
transition:
118-
transform @notificationMotionDuration @notificationMotionEase,
119-
opacity @notificationMotionDuration @notificationMotionEase,
120-
height @notificationMotionDuration @notificationMotionEase,
121-
margin @notificationMotionDuration @notificationMotionEase;
122+
transform: translateX(0);
122123
}
123124

124125
.notification-fade-leave-start {
125126
opacity: 1;
126-
transform: translate3d(0, 0, 0);
127+
transform: translateX(0);
127128
}
128129

129130
.notification-fade-leave-active {
130131
opacity: 0;
131-
transform: translate3d(@notificationMotionOffset, 0, 0);
132-
transition:
133-
transform @notificationMotionDuration @notificationMotionEase,
134-
opacity @notificationMotionDuration @notificationMotionEase,
135-
height @notificationMotionDuration @notificationMotionEase,
136-
margin @notificationMotionDuration @notificationMotionEase;
132+
transform: translateX(@notificationMotionOffset);
137133
}

docs/examples/NotificationList.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@ const motion: CSSMotionProps = {
88
motionAppear: true,
99
motionEnter: true,
1010
motionLeave: true,
11-
onLeaveStart: (ele) => {
12-
const { offsetHeight } = ele;
13-
return { height: offsetHeight };
14-
},
15-
onLeaveActive: () => ({ height: 0, opacity: 0, margin: 0 }),
1611
};
1712

1813
const Demo = () => {

src/NotificationList.tsx

Lines changed: 48 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -171,61 +171,55 @@ const NotificationList: React.FC<NotificationListProps> = (props) => {
171171
};
172172

173173
return (
174-
<div
175-
className={clsx(noticeWrapperCls, itemPrefixCls, motionClassName)}
176-
style={{
177-
...motionStyle,
174+
<Notification
175+
key={key}
176+
{...notificationConfig}
177+
ref={composeRef(nodeRef, setItemRef)}
178+
prefixCls={prefixCls}
179+
offset={notificationPosition.get(strKey)}
180+
className={clsx(contextClassNames?.notice, config.className)}
181+
style={config.style}
182+
classNames={{
183+
root: clsx(classNames?.root, config.classNames?.root, motionClassName),
184+
icon: clsx(classNames?.icon, config.classNames?.icon),
185+
section: clsx(classNames?.section, config.classNames?.section),
186+
close: clsx(classNames?.close, config.classNames?.close),
187+
progress: clsx(classNames?.progress, config.classNames?.progress),
178188
}}
179-
>
180-
<Notification
181-
key={key}
182-
{...notificationConfig}
183-
ref={composeRef(nodeRef, setItemRef)}
184-
prefixCls={prefixCls}
185-
offset={notificationPosition.get(strKey)}
186-
className={clsx(contextClassNames?.notice, config.className)}
187-
style={config.style}
188-
classNames={{
189-
root: clsx(classNames?.root, config.classNames?.root),
190-
icon: clsx(classNames?.icon, config.classNames?.icon),
191-
section: clsx(classNames?.section, config.classNames?.section),
192-
close: clsx(classNames?.close, config.classNames?.close),
193-
progress: clsx(classNames?.progress, config.classNames?.progress),
194-
}}
195-
styles={{
196-
root: {
197-
...styles?.root,
198-
...config.styles?.root,
199-
},
200-
icon: {
201-
...styles?.icon,
202-
...config.styles?.icon,
203-
},
204-
section: {
205-
...styles?.section,
206-
...config.styles?.section,
207-
},
208-
close: {
209-
...styles?.close,
210-
...config.styles?.close,
211-
},
212-
progress: {
213-
...styles?.progress,
214-
...config.styles?.progress,
215-
},
216-
}}
217-
components={{
218-
...components,
219-
...config.components,
220-
}}
221-
hovering={stackEnabled && listHovering}
222-
pauseOnHover={config.pauseOnHover ?? pauseOnHover}
223-
onClose={() => {
224-
config.onClose?.();
225-
onNoticeClose?.(key);
226-
}}
227-
/>
228-
</div>
189+
styles={{
190+
root: {
191+
...styles?.root,
192+
...config.styles?.root,
193+
...motionStyle,
194+
},
195+
icon: {
196+
...styles?.icon,
197+
...config.styles?.icon,
198+
},
199+
section: {
200+
...styles?.section,
201+
...config.styles?.section,
202+
},
203+
close: {
204+
...styles?.close,
205+
...config.styles?.close,
206+
},
207+
progress: {
208+
...styles?.progress,
209+
...config.styles?.progress,
210+
},
211+
}}
212+
components={{
213+
...components,
214+
...config.components,
215+
}}
216+
hovering={stackEnabled && listHovering}
217+
pauseOnHover={config.pauseOnHover ?? pauseOnHover}
218+
onClose={() => {
219+
config.onClose?.();
220+
onNoticeClose?.(key);
221+
}}
222+
/>
229223
);
230224
}}
231225
</CSSMotionList>

0 commit comments

Comments
 (0)