@alifd/chat 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/button/index.d.ts +23 -1
- package/es/button/index.js +30 -1
- package/es/button/main.scss +5 -0
- package/es/button/style.d.ts +1 -0
- package/es/button/style.js +1 -0
- package/es/card/index.d.ts +5 -0
- package/es/card/index.js +5 -0
- package/es/card/main.scss +141 -0
- package/es/card/style.d.ts +2 -0
- package/es/card/style.js +2 -0
- package/es/card/types.d.ts +56 -0
- package/es/card/types.js +1 -0
- package/es/card/view/card.d.ts +6 -0
- package/es/card/view/card.js +52 -0
- package/es/card/view/collapsable.d.ts +7 -0
- package/es/card/view/collapsable.js +62 -0
- package/es/core/variables.scss +33 -0
- package/es/feedback/index.d.ts +6 -0
- package/es/feedback/index.js +46 -0
- package/es/feedback/main.scss +42 -0
- package/es/feedback/style.d.ts +1 -0
- package/es/feedback/style.js +1 -0
- package/es/feedback/types.d.ts +54 -0
- package/es/feedback/types.js +1 -0
- package/es/feedback/view/good.d.ts +7 -0
- package/es/feedback/view/good.js +7 -0
- package/es/float-button/hooks/useAutoAlign.d.ts +2 -2
- package/es/float-button/hooks/useAutoAlign.js +2 -2
- package/es/float-button/hooks/useTriggerType.d.ts +3 -0
- package/es/float-button/hooks/useTriggerType.js +31 -0
- package/es/float-button/main.scss +69 -11
- package/es/float-button/style.d.ts +1 -0
- package/es/float-button/style.js +1 -0
- package/es/float-button/types.d.ts +7 -2
- package/es/float-button/view/backtop.js +3 -3
- package/es/float-button/view/drawer.d.ts +7 -1
- package/es/float-button/view/drawer.js +11 -2
- package/es/float-button/view/float-button.js +43 -7
- package/es/float-button/view/inner-drawer.d.ts +16 -2
- package/es/float-button/view/inner-drawer.js +103 -3
- package/es/index.d.ts +6 -0
- package/es/index.js +7 -1
- package/es/tab/index.d.ts +8 -0
- package/es/tab/index.js +14 -0
- package/es/tab/main.scss +10 -0
- package/es/tab/style.d.ts +2 -0
- package/es/tab/style.js +2 -0
- package/es/tag/index.d.ts +12 -0
- package/es/tag/index.js +18 -0
- package/es/tag/main.scss +9 -0
- package/es/tag/style.d.ts +2 -0
- package/es/tag/style.js +2 -0
- package/es/tag/types.d.ts +0 -0
- package/es/tag/types.js +1 -0
- package/es/text/index.d.ts +3 -0
- package/es/text/index.js +301 -0
- package/es/text/main.scss +19 -0
- package/es/text/style.d.ts +1 -0
- package/es/text/style.js +1 -0
- package/es/text/types.d.ts +16 -0
- package/es/text/types.js +1 -0
- package/es/utils/consts.d.ts +1 -0
- package/es/utils/consts.js +1 -0
- package/es/utils/hooks/useControlable.d.ts +1 -1
- package/es/utils/hooks/useControlable.js +4 -3
- package/es/utils/index.d.ts +1 -0
- package/es/utils/index.js +1 -0
- package/lib/button/index.d.ts +23 -1
- package/lib/button/index.js +30 -6
- package/lib/button/main.scss +5 -0
- package/lib/button/style.d.ts +1 -0
- package/lib/button/style.js +1 -0
- package/lib/card/index.d.ts +5 -0
- package/lib/card/index.js +8 -0
- package/lib/card/main.scss +141 -0
- package/lib/card/style.d.ts +2 -0
- package/lib/card/style.js +4 -0
- package/lib/card/types.d.ts +56 -0
- package/lib/card/types.js +2 -0
- package/lib/card/view/card.d.ts +6 -0
- package/lib/card/view/card.js +57 -0
- package/lib/card/view/collapsable.d.ts +7 -0
- package/lib/card/view/collapsable.js +64 -0
- package/lib/core/variables.scss +33 -0
- package/lib/feedback/index.d.ts +6 -0
- package/lib/feedback/index.js +48 -0
- package/lib/feedback/main.scss +42 -0
- package/lib/feedback/style.d.ts +1 -0
- package/lib/feedback/style.js +3 -0
- package/lib/feedback/types.d.ts +54 -0
- package/lib/feedback/types.js +2 -0
- package/lib/feedback/view/good.d.ts +7 -0
- package/lib/feedback/view/good.js +10 -0
- package/lib/float-button/hooks/useAutoAlign.d.ts +2 -2
- package/lib/float-button/hooks/useAutoAlign.js +2 -2
- package/lib/float-button/hooks/useTriggerType.d.ts +3 -0
- package/lib/float-button/hooks/useTriggerType.js +35 -0
- package/lib/float-button/main.scss +69 -11
- package/lib/float-button/style.d.ts +1 -0
- package/lib/float-button/style.js +1 -0
- package/lib/float-button/types.d.ts +7 -2
- package/lib/float-button/view/backtop.js +2 -2
- package/lib/float-button/view/drawer.d.ts +7 -1
- package/lib/float-button/view/drawer.js +10 -2
- package/lib/float-button/view/float-button.js +41 -5
- package/lib/float-button/view/inner-drawer.d.ts +16 -2
- package/lib/float-button/view/inner-drawer.js +103 -3
- package/lib/index.d.ts +6 -0
- package/lib/index.js +14 -2
- package/lib/tab/index.d.ts +8 -0
- package/lib/tab/index.js +16 -0
- package/lib/tab/main.scss +10 -0
- package/lib/tab/style.d.ts +2 -0
- package/lib/tab/style.js +4 -0
- package/lib/tag/index.d.ts +12 -0
- package/lib/tag/index.js +20 -0
- package/lib/tag/main.scss +9 -0
- package/lib/tag/style.d.ts +2 -0
- package/lib/tag/style.js +4 -0
- package/lib/tag/types.d.ts +0 -0
- package/lib/tag/types.js +1 -0
- package/lib/text/index.d.ts +3 -0
- package/lib/text/index.js +304 -0
- package/lib/text/main.scss +19 -0
- package/lib/text/style.d.ts +1 -0
- package/lib/text/style.js +3 -0
- package/lib/text/types.d.ts +16 -0
- package/lib/text/types.js +2 -0
- package/lib/utils/consts.d.ts +1 -0
- package/lib/utils/consts.js +4 -0
- package/lib/utils/hooks/useControlable.d.ts +1 -1
- package/lib/utils/hooks/useControlable.js +4 -3
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/package.json +81 -1
- package/es/button/view/button.d.ts +0 -23
- package/es/button/view/button.js +0 -26
- package/lib/button/view/button.d.ts +0 -23
- package/lib/button/view/button.js +0 -29
|
@@ -4,9 +4,9 @@ import { useThrottle } from '../../utils';
|
|
|
4
4
|
/**
|
|
5
5
|
* 自动调整弹层 align 位置逻辑
|
|
6
6
|
*/
|
|
7
|
-
export function useAutoAlign(
|
|
7
|
+
export function useAutoAlign(_dom, trigger, { enable, defaultAlign, }) {
|
|
8
8
|
const [align, setAlign] = useState(defaultAlign);
|
|
9
|
-
const update = () => {
|
|
9
|
+
const update = (dom = _dom) => {
|
|
10
10
|
if (!enable || !dom || !trigger) {
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
import type { FloatButtonProps } from '../types';
|
|
3
|
+
export declare function useTriggerType({ triggerType, visible, onVisibleChange, }: Pick<FloatButtonProps, 'triggerType' | 'visible' | 'onVisibleChange'>): Pick<HTMLAttributes<HTMLElement>, "onClick" | "onMouseEnter" | "onMouseLeave">;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useDebounce } from '../../utils';
|
|
2
|
+
function normalizeTriggerType(triggerType, defaultTriggerType) {
|
|
3
|
+
if (!triggerType) {
|
|
4
|
+
return defaultTriggerType;
|
|
5
|
+
}
|
|
6
|
+
const arr = Array.isArray(triggerType) ? triggerType : [triggerType];
|
|
7
|
+
return Array.from(new Set(arr));
|
|
8
|
+
}
|
|
9
|
+
export function useTriggerType({ triggerType, visible, onVisibleChange, }) {
|
|
10
|
+
const normalTriggerTypes = normalizeTriggerType(triggerType, ['click']);
|
|
11
|
+
const allowClick = normalTriggerTypes.includes('click');
|
|
12
|
+
const allowHover = normalTriggerTypes.includes('hover');
|
|
13
|
+
const triggerHandlerProps = {};
|
|
14
|
+
const debounceOnVisibleChange = useDebounce((v, type) => {
|
|
15
|
+
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(v, type);
|
|
16
|
+
}, 150);
|
|
17
|
+
if (allowClick) {
|
|
18
|
+
triggerHandlerProps.onClick = () => {
|
|
19
|
+
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(!visible, 'fromeTrigger');
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (allowHover) {
|
|
23
|
+
triggerHandlerProps.onMouseEnter = () => {
|
|
24
|
+
debounceOnVisibleChange(true, 'fromTrigger');
|
|
25
|
+
};
|
|
26
|
+
triggerHandlerProps.onMouseLeave = () => {
|
|
27
|
+
debounceOnVisibleChange(false, 'fromTrigger');
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return triggerHandlerProps;
|
|
31
|
+
}
|
|
@@ -1,16 +1,74 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import '../core/variables.scss';
|
|
2
2
|
|
|
3
|
-
.#{$
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
.#{$prefix}float-button {
|
|
4
|
+
position: fixed;
|
|
5
|
+
z-index: 1001;
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
&-backtop {
|
|
8
|
+
transition:
|
|
9
|
+
opacity 0.2s,
|
|
10
|
+
transform 0.2s;
|
|
11
|
+
cursor: pointer;
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
&--hidden {
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transform: scale(0);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
&-inner-drawer {
|
|
20
|
+
flex: 1;
|
|
21
|
+
display: flex;
|
|
22
|
+
padding: $size-base * 2 $size-base * 3;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
display: flex;
|
|
25
|
+
box-shadow: $shadow-2;
|
|
26
|
+
border-radius: $size-base * 2;
|
|
27
|
+
|
|
28
|
+
&-outer {
|
|
29
|
+
display: flex;
|
|
30
|
+
}
|
|
31
|
+
&-inner-start {
|
|
32
|
+
flex: 1;
|
|
33
|
+
}
|
|
34
|
+
&-inner-end {
|
|
35
|
+
flex: none;
|
|
36
|
+
transition:
|
|
37
|
+
width 0.3s,
|
|
38
|
+
opacity 0.3s;
|
|
39
|
+
display: flex;
|
|
40
|
+
}
|
|
41
|
+
&-inner {
|
|
42
|
+
flex: 1;
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-direction: column;
|
|
45
|
+
}
|
|
46
|
+
&-header {
|
|
47
|
+
flex: none;
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: end;
|
|
50
|
+
&-title {
|
|
51
|
+
flex: 1;
|
|
52
|
+
}
|
|
53
|
+
&-close {
|
|
54
|
+
flex: none;
|
|
55
|
+
color: $color-text1-2;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
transition: color .15s;
|
|
58
|
+
outline: 0;
|
|
59
|
+
border: 0;
|
|
60
|
+
background-color: transparent;
|
|
61
|
+
|
|
62
|
+
&:hover {
|
|
63
|
+
color: $color-brand1-6;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
&-body {
|
|
68
|
+
flex: 1;
|
|
69
|
+
}
|
|
70
|
+
&-footer {
|
|
71
|
+
flex: none;
|
|
72
|
+
}
|
|
14
73
|
}
|
|
15
|
-
}
|
|
16
74
|
}
|
package/es/float-button/style.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
2
|
import { type CommonProps } from '@alifd/next';
|
|
3
3
|
import { type BalloonProps } from '@alifd/next/lib/balloon';
|
|
4
4
|
export type { BalloonProps };
|
|
@@ -100,6 +100,7 @@ export interface FloatButtonRef {
|
|
|
100
100
|
*/
|
|
101
101
|
updateNestleEdge(animation?: boolean): void;
|
|
102
102
|
}
|
|
103
|
+
export type TriggerType = 'hover' | 'click';
|
|
103
104
|
/**
|
|
104
105
|
* @api FloatButton
|
|
105
106
|
* @order 1
|
|
@@ -116,6 +117,10 @@ export interface FloatButtonProps extends CommonProps {
|
|
|
116
117
|
* - `inner-drawer`: 文档内部抽屉
|
|
117
118
|
*/
|
|
118
119
|
type?: 'balloon' | 'drawer' | 'inner-drawer';
|
|
120
|
+
drawerProps?: {
|
|
121
|
+
title?: ReactNode;
|
|
122
|
+
width?: number | string;
|
|
123
|
+
};
|
|
119
124
|
/**
|
|
120
125
|
* 弹层位置,适用 `type`: 'balloon'
|
|
121
126
|
*/
|
|
@@ -196,7 +201,7 @@ export interface FloatButtonProps extends CommonProps {
|
|
|
196
201
|
* 触发方式
|
|
197
202
|
* @defaultValue 'click'
|
|
198
203
|
*/
|
|
199
|
-
triggerType?:
|
|
204
|
+
triggerType?: TriggerType | TriggerType[];
|
|
200
205
|
/**
|
|
201
206
|
* 展示关闭按钮
|
|
202
207
|
* @defaultValue false
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
2
2
|
import { ConfigProvider } from '@alifd/next';
|
|
3
3
|
import cs from 'classnames';
|
|
4
|
-
import { debounce } from '../../utils';
|
|
4
|
+
import { PREFIX_DEFAULT, debounce } from '../../utils';
|
|
5
5
|
function getScroller(scroller) {
|
|
6
6
|
if (!scroller) {
|
|
7
7
|
return window;
|
|
@@ -11,9 +11,9 @@ function getScroller(scroller) {
|
|
|
11
11
|
}
|
|
12
12
|
return scroller;
|
|
13
13
|
}
|
|
14
|
-
const Backtop = forwardRef(({
|
|
14
|
+
const Backtop = forwardRef(({ autoHide = true, scroller, offset = 10, smooth = true, children }, ref) => {
|
|
15
15
|
const [visible, setVisible] = useState(true);
|
|
16
|
-
const cls = `${
|
|
16
|
+
const cls = `${PREFIX_DEFAULT}float-button-backtop`;
|
|
17
17
|
const visibleRef = useRef(visible);
|
|
18
18
|
visibleRef.current = visible;
|
|
19
19
|
const handleBackToTop = () => {
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
import type { DrawerProps as NextDrawerProps } from '@alifd/next/types/drawer';
|
|
3
|
+
import type { TriggerType } from '../types';
|
|
4
|
+
export interface DrawerProps extends Omit<NextDrawerProps, 'triggerType' | 'container' | 'onVisibleChange'> {
|
|
5
|
+
onVisibleChange?: (visible: boolean, reason: string) => void;
|
|
6
|
+
triggerType?: TriggerType | TriggerType[];
|
|
7
|
+
}
|
|
8
|
+
export declare function Drawer({ prefix, target, children, trigger, triggerType, visible, onVisibleChange, ...rests }: DrawerProps): React.JSX.Element;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
1
2
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
import { Drawer as NextDrawer } from '@alifd/next';
|
|
4
|
+
import { useTriggerType } from '../hooks/useTriggerType';
|
|
5
|
+
export function Drawer(_a) {
|
|
6
|
+
var { prefix, target, children, trigger, triggerType, visible, onVisibleChange } = _a, rests = __rest(_a, ["prefix", "target", "children", "trigger", "triggerType", "visible", "onVisibleChange"]);
|
|
7
|
+
const handlers = useTriggerType({ visible, onVisibleChange, triggerType });
|
|
8
|
+
return (React.createElement(React.Fragment, null,
|
|
9
|
+
React.createElement("div", Object.assign({}, handlers), trigger),
|
|
10
|
+
React.createElement(NextDrawer, Object.assign({}, rests, { visible: visible, onClose: reason => {
|
|
11
|
+
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(false, reason);
|
|
12
|
+
}, v2: true }), children)));
|
|
4
13
|
}
|
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
import { __rest } from "tslib";
|
|
2
|
-
import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
2
|
+
import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState, } from 'react';
|
|
3
3
|
import cs from 'classnames';
|
|
4
4
|
import { Balloon, ConfigProvider } from '@alifd/next';
|
|
5
|
-
import { useControlable } from '../../utils/index';
|
|
5
|
+
import { PREFIX_DEFAULT, useControlable } from '../../utils/index';
|
|
6
6
|
import { useAutoHide } from '../hooks/useAutoHide';
|
|
7
7
|
import { useAutoAlign } from '../hooks/useAutoAlign';
|
|
8
8
|
import { useNestleEdge } from '../hooks/useNestleEdge';
|
|
9
9
|
import { useDragable } from '../hooks/useDragable';
|
|
10
|
+
import { InnerDrawer } from './inner-drawer';
|
|
11
|
+
/**
|
|
12
|
+
* @component 悬浮球
|
|
13
|
+
* @en FloatButton
|
|
14
|
+
* @type 通用 - General
|
|
15
|
+
* @remarks 悬浮球组件用于承载机器人入口。- Apply for entry for web bot.
|
|
16
|
+
* @when 机器人入口 - The entry of robot
|
|
17
|
+
* @others
|
|
18
|
+
* ## 无障碍键盘操作指南
|
|
19
|
+
* | 按键 | 说明 |
|
|
20
|
+
* | :---- | :---------- |
|
|
21
|
+
* | Enter | 触发 onClick 事件 |
|
|
22
|
+
* | SPACE | 触发 onClick 事件 |
|
|
23
|
+
* @othersEn
|
|
24
|
+
* ## ARIA and KeyBoard
|
|
25
|
+
* | KeyBoard | Description |
|
|
26
|
+
* | :---------- | :------------------------------ |
|
|
27
|
+
* | Enter | Trigger the onClick event |
|
|
28
|
+
* | SPACE | Trigger the onClick event |
|
|
29
|
+
*/
|
|
10
30
|
const FloatButton = forwardRef((_a, ref) => {
|
|
11
|
-
var { className, style,
|
|
31
|
+
var { className, style, type = 'balloon', addonAfter, addonBefore, dragable, safeAreaMargin = [10, 10, 10, 10], autoNestleEdge = true, interactiveEdges = ['left', 'right'], autoHide, autoAlign, leftSizeOfHidden, defaultPosition, trigger, triggerType = 'click', showClose = true, align, balloonProps, drawerProps, children } = _a, others = __rest(_a, ["className", "style", "type", "addonAfter", "addonBefore", "dragable", "safeAreaMargin", "autoNestleEdge", "interactiveEdges", "autoHide", "autoAlign", "leftSizeOfHidden", "defaultPosition", "trigger", "triggerType", "showClose", "align", "balloonProps", "drawerProps", "children"]);
|
|
12
32
|
const elRef = useRef(null);
|
|
13
33
|
const triggerRef = useRef(null);
|
|
14
34
|
const [el, setEl] = useState(null);
|
|
15
35
|
const [triggerEl, setTriggerEl] = useState(null);
|
|
16
36
|
const draggedRef = useRef(false);
|
|
17
|
-
const cls = `${
|
|
37
|
+
const cls = `${PREFIX_DEFAULT}float-button`;
|
|
18
38
|
const [visible, onVisibleChange] = useControlable(others, {
|
|
19
39
|
valueName: 'visible',
|
|
20
40
|
changeName: 'onVisibleChange',
|
|
@@ -23,10 +43,13 @@ const FloatButton = forwardRef((_a, ref) => {
|
|
|
23
43
|
setEl(elRef.current);
|
|
24
44
|
setTriggerEl(triggerRef.current);
|
|
25
45
|
}, []);
|
|
26
|
-
const { align: currentAlign, update:
|
|
46
|
+
const { align: currentAlign, update: _updateAlign } = useAutoAlign(el === null || el === void 0 ? void 0 : el.querySelector(`.${cls}-popup`), triggerEl, {
|
|
27
47
|
enable: type === 'balloon' && autoAlign,
|
|
28
48
|
defaultAlign: align,
|
|
29
49
|
});
|
|
50
|
+
const updateAlign = () => {
|
|
51
|
+
_updateAlign(el === null || el === void 0 ? void 0 : el.querySelector(`.${cls}-popup`));
|
|
52
|
+
};
|
|
30
53
|
const { isHideRef, setHide, handleMove, saveRestorePosition } = useAutoHide(el, {
|
|
31
54
|
enable: !visible && autoHide,
|
|
32
55
|
interactiveEdges,
|
|
@@ -35,7 +58,6 @@ const FloatButton = forwardRef((_a, ref) => {
|
|
|
35
58
|
useEffect(() => {
|
|
36
59
|
if (visible) {
|
|
37
60
|
setHide(false);
|
|
38
|
-
updateAlign();
|
|
39
61
|
}
|
|
40
62
|
}, [visible]);
|
|
41
63
|
const { update: updateNestleEdge } = useNestleEdge(el, {
|
|
@@ -48,6 +70,9 @@ const FloatButton = forwardRef((_a, ref) => {
|
|
|
48
70
|
return false;
|
|
49
71
|
}
|
|
50
72
|
},
|
|
73
|
+
onUpdateEnd() {
|
|
74
|
+
updateAlign();
|
|
75
|
+
},
|
|
51
76
|
});
|
|
52
77
|
useImperativeHandle(ref, () => ({
|
|
53
78
|
setVisible(value) {
|
|
@@ -87,13 +112,24 @@ const FloatButton = forwardRef((_a, ref) => {
|
|
|
87
112
|
return;
|
|
88
113
|
}
|
|
89
114
|
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(...args);
|
|
115
|
+
}, popupProps: {
|
|
116
|
+
afterOpen() {
|
|
117
|
+
var _a, _b;
|
|
118
|
+
updateAlign();
|
|
119
|
+
(_b = (_a = balloonProps === null || balloonProps === void 0 ? void 0 : balloonProps.popupProps) === null || _a === void 0 ? void 0 : _a.afterClose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
120
|
+
},
|
|
90
121
|
}, popupClassName: `${cls}-popup`, trigger: trigger, popupContainer: () => el, triggerType: triggerType, align: currentAlign, v2: true, closable: showClose, autoAdjust: false }, balloonProps), children));
|
|
91
122
|
};
|
|
92
123
|
const renderDrawer = () => {
|
|
93
124
|
return React.createElement("div", null);
|
|
94
125
|
};
|
|
95
126
|
const renderInnerDrawer = () => {
|
|
96
|
-
return React.createElement("
|
|
127
|
+
return (React.createElement(InnerDrawer, Object.assign({}, drawerProps, { prefix: `${cls}-`, target: ".card-legal-affairs", trigger: trigger, triggerType: triggerType, visible: visible, closable: showClose, onVisibleChange: (...args) => {
|
|
128
|
+
if (draggedRef.current) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(...args);
|
|
132
|
+
} }), children));
|
|
97
133
|
};
|
|
98
134
|
const renderView = () => {
|
|
99
135
|
switch (type) {
|
|
@@ -1,2 +1,16 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import type { FloatButtonProps } from '../types';
|
|
3
|
+
export interface InnerDrawerProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
title?: ReactNode;
|
|
6
|
+
prefix: string;
|
|
7
|
+
target: string | (() => HTMLElement);
|
|
8
|
+
visible?: boolean;
|
|
9
|
+
onVisibleChange?: (visible: boolean, reason: string) => void;
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
trigger: ReactNode;
|
|
12
|
+
closable?: boolean;
|
|
13
|
+
triggerType: FloatButtonProps['triggerType'];
|
|
14
|
+
width?: string | number;
|
|
15
|
+
}
|
|
16
|
+
export declare function InnerDrawer({ className, prefix, target, children, trigger, triggerType, visible, onVisibleChange, closable, title, width, }: InnerDrawerProps): React.JSX.Element;
|
|
@@ -1,4 +1,104 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React, { useRef, useLayoutEffect, useEffect, useState } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import cs from 'classnames';
|
|
4
|
+
import { Icon } from '@alifd/next';
|
|
5
|
+
import { useTriggerType } from '../hooks/useTriggerType';
|
|
6
|
+
function getTarget(target) {
|
|
7
|
+
if (typeof target === 'string') {
|
|
8
|
+
return document.querySelector(target);
|
|
9
|
+
}
|
|
10
|
+
return target();
|
|
11
|
+
}
|
|
12
|
+
function getMountTarget(prefix, target) {
|
|
13
|
+
const dom = getTarget(target);
|
|
14
|
+
let parent = dom === null || dom === void 0 ? void 0 : dom.parentElement;
|
|
15
|
+
if (!dom || !parent) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (!parent.dataset.chat) {
|
|
19
|
+
const oldParent = parent;
|
|
20
|
+
parent = document.createElement('div');
|
|
21
|
+
parent.classList.add(`${prefix}outer`);
|
|
22
|
+
parent.dataset.chat = 'drawer';
|
|
23
|
+
oldParent.appendChild(parent);
|
|
24
|
+
parent.appendChild(dom);
|
|
25
|
+
}
|
|
26
|
+
let mountTarget = parent.childNodes[1];
|
|
27
|
+
if (!mountTarget) {
|
|
28
|
+
mountTarget = document.createElement('div');
|
|
29
|
+
mountTarget.dataset.chat = 'drawer-mounted';
|
|
30
|
+
mountTarget.classList.add(`${prefix}inner-end`);
|
|
31
|
+
mountTarget.style.width = '0px';
|
|
32
|
+
mountTarget.style.opacity = '0';
|
|
33
|
+
parent.appendChild(mountTarget);
|
|
34
|
+
}
|
|
35
|
+
dom.classList.add(`${prefix}inner-start`);
|
|
36
|
+
return mountTarget;
|
|
37
|
+
}
|
|
38
|
+
export function InnerDrawer({ className, prefix, target, children, trigger, triggerType, visible, onVisibleChange, closable = true, title, width = 400, }) {
|
|
39
|
+
const [mount, setMount] = useState(!!visible);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (visible) {
|
|
42
|
+
setMount(visible);
|
|
43
|
+
}
|
|
44
|
+
}, [visible]);
|
|
45
|
+
const cls = `${prefix}inner-drawer`;
|
|
46
|
+
const handleVisibleChange = (nextVisible, type) => {
|
|
47
|
+
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(nextVisible, type);
|
|
48
|
+
};
|
|
49
|
+
const handleVisibleChangeRef = useRef(handleVisibleChange);
|
|
50
|
+
handleVisibleChangeRef.current = handleVisibleChange;
|
|
51
|
+
const handlers = useTriggerType({ visible, onVisibleChange: handleVisibleChange, triggerType });
|
|
52
|
+
const mountTarget = mount ? getMountTarget(`${cls}-`, target) : undefined;
|
|
53
|
+
const domRef = useRef(null);
|
|
54
|
+
const triggerRef = useRef(null);
|
|
55
|
+
useLayoutEffect(() => {
|
|
56
|
+
if (mountTarget) {
|
|
57
|
+
const timer = setTimeout(() => {
|
|
58
|
+
mountTarget.style.width = visible
|
|
59
|
+
? `${typeof width === 'number' ? `${width}px` : width}`
|
|
60
|
+
: '0px';
|
|
61
|
+
mountTarget.style.opacity = visible ? '1' : '0';
|
|
62
|
+
}, 16);
|
|
63
|
+
return () => {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (!mountTarget || !className) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
mountTarget.classList.add(className);
|
|
73
|
+
return () => {
|
|
74
|
+
mountTarget.classList.remove(className);
|
|
75
|
+
};
|
|
76
|
+
}, [mountTarget, className]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
const onClick = (e) => {
|
|
79
|
+
const dom = domRef.current;
|
|
80
|
+
const trigger = triggerRef.current;
|
|
81
|
+
const target = e.target;
|
|
82
|
+
if (!dom || !trigger || !target) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!dom.contains(target) && !trigger.contains(target)) {
|
|
86
|
+
handleVisibleChangeRef.current(false, 'docClick');
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
window.addEventListener('click', onClick);
|
|
90
|
+
return () => {
|
|
91
|
+
window.removeEventListener('click', onClick);
|
|
92
|
+
};
|
|
93
|
+
}, []);
|
|
94
|
+
return (React.createElement(React.Fragment, null,
|
|
95
|
+
React.createElement("div", Object.assign({}, handlers, { ref: triggerRef }), trigger),
|
|
96
|
+
!!mountTarget &&
|
|
97
|
+
ReactDOM.createPortal(React.createElement("div", { className: cs(cls, { [`${cls}--visible`]: visible }), ref: domRef, style: { width } },
|
|
98
|
+
React.createElement("div", { className: `${cls}-inner` },
|
|
99
|
+
React.createElement("div", { className: `${cls}-header` },
|
|
100
|
+
!!title && React.createElement("div", { className: `${cls}-header-title` }, title),
|
|
101
|
+
!!closable && (React.createElement("button", { className: `${cls}-header-close`, onClick: () => handleVisibleChange(false, 'close') },
|
|
102
|
+
React.createElement(Icon, { className: `${cls}-header-close-icon`, type: "close", size: 14 })))),
|
|
103
|
+
React.createElement("div", { className: `${cls}-body` }, children))), mountTarget)));
|
|
4
104
|
}
|
package/es/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export { default as Button } from './button';
|
|
2
|
+
export { default as Card } from './card';
|
|
3
|
+
export { default as Feedback } from './feedback';
|
|
4
|
+
export { default as FloatButton } from './float-button';
|
|
5
|
+
export { default as Text } from './text';
|
|
6
|
+
export { default as Tag } from './tag';
|
|
7
|
+
export { default as Tab } from './tab';
|
|
2
8
|
export declare const version: string;
|
package/es/index.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export { default as Button } from './button';
|
|
2
|
-
export
|
|
2
|
+
export { default as Card } from './card';
|
|
3
|
+
export { default as Feedback } from './feedback';
|
|
4
|
+
export { default as FloatButton } from './float-button';
|
|
5
|
+
export { default as Text } from './text';
|
|
6
|
+
export { default as Tag } from './tag';
|
|
7
|
+
export { default as Tab } from './tab';
|
|
8
|
+
export const version = '0.1.0';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tab as NextTab } from '@alifd/next';
|
|
3
|
+
import type { TabProps } from '@alifd/next/types/tab';
|
|
4
|
+
declare const TabWithSub: React.ForwardRefExoticComponent<TabProps & React.RefAttributes<NextTab>> & {
|
|
5
|
+
Item: typeof import("@alifd/next/types/tab").Item;
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
export default TabWithSub;
|
package/es/tab/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import { Tab as NextTab } from '@alifd/next';
|
|
4
|
+
import cs from 'classnames';
|
|
5
|
+
import { PREFIX_DEFAULT, assignSubComponent } from '../utils';
|
|
6
|
+
const Tab = forwardRef((_a, ref) => {
|
|
7
|
+
var { className, size = 'small' } = _a, props = __rest(_a, ["className", "size"]);
|
|
8
|
+
return React.createElement(NextTab, Object.assign({}, props, { className: cs(`${PREFIX_DEFAULT}tabs`, className), ref: ref, size: size }));
|
|
9
|
+
});
|
|
10
|
+
const TabWithSub = assignSubComponent(Tab, {
|
|
11
|
+
Item: NextTab.Item,
|
|
12
|
+
displayName: 'Tab',
|
|
13
|
+
});
|
|
14
|
+
export default TabWithSub;
|
package/es/tab/main.scss
ADDED
package/es/tab/style.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @component 标签
|
|
3
|
+
* @en Tag
|
|
4
|
+
* @type 通用 - General
|
|
5
|
+
* @remarks 同 Next Tag - Same as Next.Tag
|
|
6
|
+
* @when Tag
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { Tag as NextTag } from '@alifd/next';
|
|
10
|
+
import type { TagProps } from '@alifd/next/types/tag';
|
|
11
|
+
declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<NextTag>>;
|
|
12
|
+
export default Tag;
|
package/es/tag/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @component 标签
|
|
3
|
+
* @en Tag
|
|
4
|
+
* @type 通用 - General
|
|
5
|
+
* @remarks 同 Next Tag - Same as Next.Tag
|
|
6
|
+
* @when Tag
|
|
7
|
+
*/
|
|
8
|
+
import { __rest } from "tslib";
|
|
9
|
+
import React, { forwardRef } from 'react';
|
|
10
|
+
import { Tag as NextTag } from '@alifd/next';
|
|
11
|
+
import cs from 'classnames';
|
|
12
|
+
import { PREFIX_DEFAULT } from '../utils';
|
|
13
|
+
const Tag = forwardRef((_a, ref) => {
|
|
14
|
+
var { className, size = 'small', type = 'normal' } = _a, props = __rest(_a, ["className", "size", "type"]);
|
|
15
|
+
return (React.createElement(NextTag, Object.assign({}, props, { ref: ref, className: cs(`${PREFIX_DEFAULT}tag`, className), size: size, type: type })));
|
|
16
|
+
});
|
|
17
|
+
Tag.displayName = 'Tag';
|
|
18
|
+
export default Tag;
|
package/es/tag/main.scss
ADDED
package/es/tag/style.js
ADDED
|
File without changes
|
package/es/tag/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|