@ioca/react 1.5.17 → 1.5.18
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/cjs/components/input/input.js +3 -1
- package/lib/cjs/components/input/input.js.map +1 -1
- package/lib/cjs/components/message/index.js +3 -2
- package/lib/cjs/components/message/index.js.map +1 -1
- package/lib/cjs/components/message/message.js +93 -50
- package/lib/cjs/components/message/message.js.map +1 -1
- package/lib/cjs/components/picker/daterange/daterange.js +60 -0
- package/lib/cjs/components/picker/daterange/daterange.js.map +1 -0
- package/lib/cjs/components/picker/daterange/index.js +11 -0
- package/lib/cjs/components/picker/daterange/index.js.map +1 -0
- package/lib/cjs/components/picker/daterange/panel.js +55 -0
- package/lib/cjs/components/picker/daterange/panel.js.map +1 -0
- package/lib/cjs/components/picker/dates/dates.js +12 -4
- package/lib/cjs/components/picker/dates/dates.js.map +1 -1
- package/lib/cjs/components/picker/dates/index.js +6 -2
- package/lib/cjs/components/picker/dates/index.js.map +1 -1
- package/lib/cjs/components/picker/dates/panel.js +22 -9
- package/lib/cjs/components/picker/dates/panel.js.map +1 -1
- package/lib/cjs/components/picker/time/index.js +6 -2
- package/lib/cjs/components/picker/time/index.js.map +1 -1
- package/lib/cjs/components/popconfirm/popconfirm.js +2 -4
- package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/cjs/index.js +10 -8
- package/lib/cjs/index.js.map +1 -1
- package/lib/css/colors.css +2 -2
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/css/input.css +12 -0
- package/lib/es/components/input/input.js +3 -1
- package/lib/es/components/input/input.js.map +1 -1
- package/lib/es/components/message/index.js +3 -3
- package/lib/es/components/message/index.js.map +1 -1
- package/lib/es/components/message/message.js +93 -51
- package/lib/es/components/message/message.js.map +1 -1
- package/lib/es/components/picker/daterange/daterange.js +50 -0
- package/lib/es/components/picker/daterange/daterange.js.map +1 -0
- package/lib/es/components/picker/daterange/index.js +6 -0
- package/lib/es/components/picker/daterange/index.js.map +1 -0
- package/lib/es/components/picker/daterange/panel.js +47 -0
- package/lib/es/components/picker/daterange/panel.js.map +1 -0
- package/lib/es/components/picker/dates/dates.js +12 -4
- package/lib/es/components/picker/dates/dates.js.map +1 -1
- package/lib/es/components/picker/dates/index.js +6 -2
- package/lib/es/components/picker/dates/index.js.map +1 -1
- package/lib/es/components/picker/dates/panel.js +22 -9
- package/lib/es/components/picker/dates/panel.js.map +1 -1
- package/lib/es/components/picker/time/index.js +6 -2
- package/lib/es/components/picker/time/index.js.map +1 -1
- package/lib/es/components/popconfirm/popconfirm.js +2 -4
- package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/es/index.js +2 -1
- package/lib/es/index.js.map +1 -1
- package/lib/index.js +223 -70
- package/lib/types/components/input/type.d.ts +1 -0
- package/lib/types/components/message/index.d.ts +5 -3
- package/lib/types/components/message/message.d.ts +5 -4
- package/lib/types/components/message/type.d.ts +25 -12
- package/lib/types/components/picker/daterange/daterange.d.ts +6 -0
- package/lib/types/components/picker/daterange/index.d.ts +5 -0
- package/lib/types/components/picker/type.d.ts +11 -2
- package/lib/types/index.d.ts +2 -1
- package/package.json +1 -1
|
@@ -69,11 +69,13 @@ const Input = ((props) => {
|
|
|
69
69
|
}, [type]);
|
|
70
70
|
const clearable = clear && inputValue;
|
|
71
71
|
const showHelper = type === "password" && !!inputValue;
|
|
72
|
+
const isClearBtn = clearable && !showHelper;
|
|
72
73
|
return (jsxRuntime.jsx(container.default, { label: label, labelInline: labelInline, className: className, style: { width, ...style }, tip: message ?? tip, status: status, required: required, children: jsxRuntime.jsxs("div", { className: classNames__default("i-input-item", {
|
|
74
|
+
"i-input-clearable": clearable,
|
|
73
75
|
[`i-input-${status}`]: status !== "normal",
|
|
74
76
|
"i-input-borderless": !border,
|
|
75
77
|
"i-input-underline": underline,
|
|
76
|
-
}), children: [prepend && jsxRuntime.jsx("div", { className: 'i-input-prepend', children: prepend }), jsxRuntime.jsx("input", { ...inputProps }), maxLength && inputValue?.length > 0 && (jsxRuntime.jsxs("span", { className: 'color-8 pr-4 font-sm', children: [inputValue.length, " / ", maxLength] })), jsxRuntime.jsx(helpericon.default, { active: !!clearable || showHelper, icon: HelperIcon, onClick: handleHelperClick }), append && jsxRuntime.jsx("div", { className: 'i-input-append', children: append })] }) }));
|
|
78
|
+
}), children: [prepend && jsxRuntime.jsx("div", { className: 'i-input-prepend', children: prepend }), jsxRuntime.jsx("input", { ...inputProps }), maxLength && inputValue?.length > 0 && (jsxRuntime.jsxs("span", { className: 'color-8 pr-4 font-sm', children: [inputValue.length, " / ", maxLength] })), jsxRuntime.jsx(helpericon.default, { active: !!clearable || showHelper, icon: HelperIcon, className: classNames__default({ "i-helpericon-clear": isClearBtn }), onClick: handleHelperClick }), append && jsxRuntime.jsx("div", { className: 'i-input-append', children: append })] }) }));
|
|
77
79
|
});
|
|
78
80
|
Input.Textarea = textarea.default;
|
|
79
81
|
Input.Number = number.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sources":["../../../../packages/components/input/input.tsx"],"sourcesContent":["import { VisibilityOffRound, VisibilityRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport {\n\tChangeEvent,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\ttype KeyboardEvent,\n} from \"react\";\nimport \"../../css/input.css\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport Number from \"./number\";\nimport Range from \"./range\";\nimport Textarea from \"./textarea\";\nimport type { CompositionInput, IInput } from \"./type\";\n\nconst Input = ((props: IInput) => {\n\tconst {\n\t\tref,\n\t\ttype = \"text\",\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tprepend,\n\t\tappend,\n\t\tlabelInline,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tclear,\n\t\twidth,\n\t\thideVisible,\n\t\tborder,\n\t\tunderline,\n\t\trequired,\n\t\tmaxLength,\n\t\tonChange,\n\t\tonEnter,\n\t\tonClear,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst [inputValue, setInputValue] = useState(value);\n\tconst [inputType, setInputType] = useState(type);\n\tconst [visible, setVisible] = useState(false);\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst v = e.target.value;\n\n\t\tsetInputValue(v);\n\t\tonChange?.(v, e);\n\t};\n\n\tconst handleKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\te.code === \"Enter\" && onEnter?.(e);\n\t};\n\n\tconst handleHelperClick = () => {\n\t\tif (type === \"password\" && !hideVisible) {\n\t\t\tsetVisible((v) => {\n\t\t\t\tconst next = !v;\n\t\t\t\tsetInputType(next ? \"text\" : \"password\");\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst v = \"\";\n\t\tsetInputValue(v);\n\t\tonChange?.(v);\n\t\tonClear?.();\n\t};\n\n\tconst HelperIcon = useMemo(() => {\n\t\tif (type === \"password\") {\n\t\t\treturn visible ? <VisibilityRound /> : <VisibilityOffRound />;\n\t\t}\n\n\t\treturn undefined;\n\t}, [type, visible]);\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tref,\n\t\ttype: inputType,\n\t\tname,\n\t\tvalue: inputValue,\n\t\tmaxLength,\n\t\tclassName: classNames(\"i-input\", `i-input-${type}`),\n\t\tonChange: handleChange,\n\t\tonKeyDown: handleKeydown,\n\t\t...restProps,\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputType(type);\n\t\tsetVisible(false);\n\t}, [type]);\n\n\tconst clearable = clear && inputValue;\n\tconst showHelper = type === \"password\" && !!inputValue;\n\n\treturn (\n\t\t<InputContainer\n\t\t\tlabel={label}\n\t\t\tlabelInline={labelInline}\n\t\t\tclassName={className}\n\t\t\tstyle={{ width, ...style }}\n\t\t\ttip={message ?? tip}\n\t\t\tstatus={status}\n\t\t\trequired={required}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={classNames(\"i-input-item\", {\n\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\n\t\t\t\t\t\"i-input-borderless\": !border,\n\t\t\t\t\t\"i-input-underline\": underline,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t<input {...inputProps} />\n\n\t\t\t\t{maxLength && inputValue?.length > 0 && (\n\t\t\t\t\t<span className='color-8 pr-4 font-sm'>\n\t\t\t\t\t\t{inputValue.length} / {maxLength}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<Helpericon\n\t\t\t\t\tactive={!!clearable || showHelper}\n\t\t\t\t\ticon={HelperIcon}\n\t\t\t\t\tonClick={handleHelperClick}\n\t\t\t\t/>\n\n\t\t\t\t{append && <div className='i-input-append'>{append}</div>}\n\t\t\t</div>\n\t\t</InputContainer>\n\t);\n}) as CompositionInput;\n\nInput.Textarea = Textarea;\nInput.Number = Number;\nInput.Range = Range;\n\nexport default Input;\n"],"names":["useState","useMemo","_jsx","VisibilityRound","VisibilityOffRound","useEffect","classNames","InputContainer","_jsxs","Helpericon","Textarea","Number","Range"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAM,KAAK,IAAI,CAAC,KAAa,KAAI;IAChC,MAAM,EACL,GAAG,EACH,IAAI,GAAG,MAAM,EACb,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,EAAE,EACV,OAAO,EACP,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAM,GAAG,QAAQ,EACjB,OAAO,EACP,GAAG,EACH,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,EACP,KAAK,EACL,GAAG,SAAS,EACZ,GAAG,KAAK;IAET,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,IAAI,CAAC;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AAE7C,IAAA,MAAM,YAAY,GAAG,CAAC,CAAgC,KAAI;AACzD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAExB,aAAa,CAAC,CAAC,CAAC;AAChB,QAAA,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,CAAkC,KAAI;QAC5D,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC;AACnC,IAAA,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAK;AAC9B,QAAA,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,WAAW,EAAE;AACxC,YAAA,UAAU,CAAC,CAAC,CAAC,KAAI;AAChB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC;gBACf,YAAY,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;AACxC,gBAAA,OAAO,IAAI;AACZ,YAAA,CAAC,CAAC;YACF;QACD;QAEA,MAAM,CAAC,GAAG,EAAE;QACZ,aAAa,CAAC,CAAC,CAAC;AAChB,QAAA,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,IAAI;AACZ,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAGC,aAAO,CAAC,MAAK;AAC/B,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACxB,YAAA,OAAO,OAAO,GAAGC,cAAA,CAACC,wBAAe,EAAA,EAAA,CAAG,GAAGD,cAAA,CAACE,2BAAkB,KAAG;QAC9D;AAEA,QAAA,OAAO,SAAS;AACjB,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEnBC,eAAS,CAAC,MAAK;QACd,aAAa,CAAC,KAAK,CAAC;AACrB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,UAAU,GAAG;QAClB,GAAG;AACH,QAAA,IAAI,EAAE,SAAS;QACf,IAAI;AACJ,QAAA,KAAK,EAAE,UAAU;QACjB,SAAS;QACT,SAAS,EAAEC,mBAAU,CAAC,SAAS,EAAE,CAAA,QAAA,EAAW,IAAI,EAAE,CAAC;AACnD,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,GAAG,SAAS;KACZ;IAEDD,eAAS,CAAC,MAAK;QACd,YAAY,CAAC,IAAI,CAAC;QAClB,UAAU,CAAC,KAAK,CAAC;AAClB,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAEV,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU;IACrC,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"input.js","sources":["../../../../packages/components/input/input.tsx"],"sourcesContent":["import { VisibilityOffRound, VisibilityRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport {\n\tChangeEvent,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\ttype KeyboardEvent,\n} from \"react\";\nimport \"../../css/input.css\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport Number from \"./number\";\nimport Range from \"./range\";\nimport Textarea from \"./textarea\";\nimport type { CompositionInput, IInput } from \"./type\";\n\nconst Input = ((props: IInput) => {\n\tconst {\n\t\tref,\n\t\ttype = \"text\",\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tprepend,\n\t\tappend,\n\t\tlabelInline,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tclear,\n\t\twidth,\n\t\thideVisible,\n\t\tborder,\n\t\tunderline,\n\t\trequired,\n\t\tmaxLength,\n\t\tonChange,\n\t\tonEnter,\n\t\tonClear,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst [inputValue, setInputValue] = useState(value);\n\tconst [inputType, setInputType] = useState(type);\n\tconst [visible, setVisible] = useState(false);\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst v = e.target.value;\n\n\t\tsetInputValue(v);\n\t\tonChange?.(v, e);\n\t};\n\n\tconst handleKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\te.code === \"Enter\" && onEnter?.(e);\n\t};\n\n\tconst handleHelperClick = () => {\n\t\tif (type === \"password\" && !hideVisible) {\n\t\t\tsetVisible((v) => {\n\t\t\t\tconst next = !v;\n\t\t\t\tsetInputType(next ? \"text\" : \"password\");\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst v = \"\";\n\t\tsetInputValue(v);\n\t\tonChange?.(v);\n\t\tonClear?.();\n\t};\n\n\tconst HelperIcon = useMemo(() => {\n\t\tif (type === \"password\") {\n\t\t\treturn visible ? <VisibilityRound /> : <VisibilityOffRound />;\n\t\t}\n\n\t\treturn undefined;\n\t}, [type, visible]);\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tref,\n\t\ttype: inputType,\n\t\tname,\n\t\tvalue: inputValue,\n\t\tmaxLength,\n\t\tclassName: classNames(\"i-input\", `i-input-${type}`),\n\t\tonChange: handleChange,\n\t\tonKeyDown: handleKeydown,\n\t\t...restProps,\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputType(type);\n\t\tsetVisible(false);\n\t}, [type]);\n\n\tconst clearable = clear && inputValue;\n\tconst showHelper = type === \"password\" && !!inputValue;\n\tconst isClearBtn = clearable && !showHelper;\n\n\treturn (\n\t\t<InputContainer\n\t\t\tlabel={label}\n\t\t\tlabelInline={labelInline}\n\t\t\tclassName={className}\n\t\t\tstyle={{ width, ...style }}\n\t\t\ttip={message ?? tip}\n\t\t\tstatus={status}\n\t\t\trequired={required}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={classNames(\"i-input-item\", {\n\t\t\t\t\t\t\"i-input-clearable\": clearable,\n\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\n\t\t\t\t\t\"i-input-borderless\": !border,\n\t\t\t\t\t\"i-input-underline\": underline,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t<input {...inputProps} />\n\n\t\t\t\t{maxLength && inputValue?.length > 0 && (\n\t\t\t\t\t<span className='color-8 pr-4 font-sm'>\n\t\t\t\t\t\t{inputValue.length} / {maxLength}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<Helpericon\n\t\t\t\t\tactive={!!clearable || showHelper}\n\t\t\t\t\ticon={HelperIcon}\n\t\t\t\t\tclassName={classNames({ \"i-helpericon-clear\": isClearBtn })}\n\t\t\t\t\tonClick={handleHelperClick}\n\t\t\t\t/>\n\n\t\t\t\t{append && <div className='i-input-append'>{append}</div>}\n\t\t\t</div>\n\t\t</InputContainer>\n\t);\n}) as CompositionInput;\n\nInput.Textarea = Textarea;\nInput.Number = Number;\nInput.Range = Range;\n\nexport default Input;\n"],"names":["useState","useMemo","_jsx","VisibilityRound","VisibilityOffRound","useEffect","classNames","InputContainer","_jsxs","Helpericon","Textarea","Number","Range"],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var message = require('./message.js');
|
|
6
6
|
|
|
7
|
+
const Message = Object.assign(message.default, { Container: message.MessageContainer });
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
exports.default =
|
|
9
|
+
exports.MessageContainer = message.MessageContainer;
|
|
10
|
+
exports.default = Message;
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/components/message/index.tsx"],"sourcesContent":["import message, { MessageContainer } from \"./message\";\n\nconst Message = Object.assign(message, { Container: MessageContainer });\n\nexport { MessageContainer };\nexport default Message;\n"],"names":["message","MessageContainer"],"mappings":";;;;;;AAEA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAACA,eAAO,EAAE,EAAE,SAAS,EAAEC,wBAAgB,EAAE;;;;;"}
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var hooks = require('../../js/hooks.js');
|
|
7
6
|
var classNames = require('classnames');
|
|
8
7
|
var radash = require('radash');
|
|
9
8
|
var react = require('react');
|
|
10
|
-
var
|
|
9
|
+
var hooks = require('../../js/hooks.js');
|
|
11
10
|
|
|
12
11
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
13
12
|
|
|
@@ -18,13 +17,13 @@ const AlignMap = {
|
|
|
18
17
|
center: "center",
|
|
19
18
|
right: "flex-end",
|
|
20
19
|
};
|
|
21
|
-
const
|
|
20
|
+
const ContainerConfig = {
|
|
21
|
+
align: "center",
|
|
22
|
+
fromBottom: false,
|
|
23
|
+
unshift: false,
|
|
22
24
|
gap: 12,
|
|
23
|
-
|
|
24
|
-
const ItemDefaultConfig = {
|
|
25
|
+
offset: "12px",
|
|
25
26
|
duration: 3000,
|
|
26
|
-
closable: true,
|
|
27
|
-
active: false,
|
|
28
27
|
};
|
|
29
28
|
const handler = {
|
|
30
29
|
oneInstance: null,
|
|
@@ -41,12 +40,12 @@ const heights = {
|
|
|
41
40
|
center: [],
|
|
42
41
|
right: [],
|
|
43
42
|
};
|
|
44
|
-
const MessageItem = function ({ ref, active, content, top, className, style, onClick, }) {
|
|
43
|
+
const MessageItem = function ({ ref, active, content, top, bottom, className, style, onClick, }) {
|
|
45
44
|
return (jsxRuntime.jsx("div", { ref: ref, className: classNames__default("i-message", className, {
|
|
46
45
|
"i-message-active": active,
|
|
47
46
|
}), style: {
|
|
48
47
|
...style,
|
|
49
|
-
top,
|
|
48
|
+
...(bottom !== undefined ? { bottom } : { top }),
|
|
50
49
|
}, onClick: onClick, children: content }));
|
|
51
50
|
};
|
|
52
51
|
function Messages() {
|
|
@@ -63,26 +62,32 @@ function Messages() {
|
|
|
63
62
|
right: [],
|
|
64
63
|
},
|
|
65
64
|
});
|
|
66
|
-
const offsetTop = {
|
|
67
|
-
left: 0,
|
|
68
|
-
center: 0,
|
|
69
|
-
right: 0,
|
|
70
|
-
};
|
|
71
65
|
react.useEffect(() => {
|
|
72
66
|
Object.assign(handler, {
|
|
73
67
|
callout: function (item) {
|
|
74
68
|
const { align = "center", unshift, onShow } = item;
|
|
75
|
-
|
|
69
|
+
queue[align][unshift ? "unshift" : "push"](item);
|
|
76
70
|
state.items[align] = [...queue[align]];
|
|
77
71
|
item.close = this.close.bind(item);
|
|
78
|
-
|
|
72
|
+
// Pre-fill 0-height placeholder so heights stays index-aligned with queue
|
|
73
|
+
if (unshift) {
|
|
74
|
+
heights[align].unshift(0);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
heights[align].push(0);
|
|
78
|
+
}
|
|
79
|
+
state.tops[align] = [...heights[align]];
|
|
80
|
+
requestAnimationFrame(() => {
|
|
79
81
|
const h = ref.current?.offsetHeight || 0;
|
|
80
|
-
queue[align]
|
|
82
|
+
const idx = queue[align].findIndex((i) => i.id === item.id);
|
|
83
|
+
if (idx < 0)
|
|
84
|
+
return;
|
|
85
|
+
queue[align][idx].active = true;
|
|
81
86
|
state.items[align] = [...queue[align]];
|
|
82
|
-
heights[align][
|
|
87
|
+
heights[align][idx] = h;
|
|
83
88
|
state.tops[align] = [...heights[align]];
|
|
84
89
|
onShow?.();
|
|
85
|
-
}
|
|
90
|
+
});
|
|
86
91
|
if (item.duration !== 0) {
|
|
87
92
|
item.timer = setTimeout(() => {
|
|
88
93
|
this.close.call(item);
|
|
@@ -109,36 +114,65 @@ function Messages() {
|
|
|
109
114
|
},
|
|
110
115
|
});
|
|
111
116
|
}, []);
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const renderGroup = (align) => {
|
|
118
|
+
const items = state.items[align];
|
|
119
|
+
const tops = state.tops[align];
|
|
120
|
+
const gap = ContainerConfig.gap;
|
|
121
|
+
if (ContainerConfig.fromBottom) {
|
|
122
|
+
// bottom-up: calculate bottom-edge positions
|
|
123
|
+
let offset = 0;
|
|
124
|
+
const bottoms = [];
|
|
125
|
+
for (let i = items.length - 1; i >= 0; i--) {
|
|
126
|
+
bottoms[i] = offset;
|
|
127
|
+
offset += (tops[i] || 0) + gap;
|
|
128
|
+
}
|
|
129
|
+
return items.map((item, i) => {
|
|
130
|
+
if (!item)
|
|
131
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
132
|
+
const { id, active, content, className, style: itemStyle } = item;
|
|
133
|
+
return (jsxRuntime.jsx(MessageItem, { ref: ref, active: active, content: content, bottom: bottoms[i], className: className, style: {
|
|
134
|
+
...itemStyle,
|
|
135
|
+
alignSelf: AlignMap[align],
|
|
136
|
+
}, onClick: handler.close.bind(item) }, id));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// top-down (default)
|
|
140
|
+
let offset = 0;
|
|
141
|
+
return items.map((item, i) => {
|
|
142
|
+
if (!item)
|
|
143
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
144
|
+
const { id, active, content, className, style: itemStyle } = item;
|
|
145
|
+
const top = offset;
|
|
146
|
+
offset += (tops[i] || 0) + gap;
|
|
147
|
+
return (jsxRuntime.jsx(MessageItem, { ref: ref, active: active, content: content, top: top, className: className, style: {
|
|
148
|
+
...itemStyle,
|
|
149
|
+
alignSelf: AlignMap[align],
|
|
150
|
+
}, onClick: handler.close.bind(item) }, id));
|
|
151
|
+
});
|
|
119
152
|
};
|
|
120
|
-
return (jsxRuntime.jsxs("div", { className:
|
|
153
|
+
return (jsxRuntime.jsxs("div", { className: "i-messages", style: {
|
|
154
|
+
margin: ContainerConfig.offset,
|
|
155
|
+
}, children: [renderGroup("left"), renderGroup("center"), renderGroup("right")] }));
|
|
121
156
|
}
|
|
122
157
|
function message(config) {
|
|
123
|
-
if (
|
|
124
|
-
react.isValidElement(config)) {
|
|
158
|
+
if (typeof config !== "object" || react.isValidElement(config)) {
|
|
125
159
|
config = { content: config };
|
|
126
160
|
}
|
|
127
|
-
|
|
128
|
-
|
|
161
|
+
const msg = {
|
|
162
|
+
id: radash.uid(7),
|
|
163
|
+
active: false,
|
|
164
|
+
align: ContainerConfig.align,
|
|
165
|
+
duration: ContainerConfig.duration,
|
|
166
|
+
closable: true,
|
|
167
|
+
unshift: ContainerConfig.unshift,
|
|
168
|
+
...config,
|
|
169
|
+
};
|
|
170
|
+
handler.callout(msg);
|
|
129
171
|
return {
|
|
130
|
-
instance:
|
|
131
|
-
close: handler.close.bind(
|
|
172
|
+
instance: msg,
|
|
173
|
+
close: handler.close.bind(msg),
|
|
132
174
|
};
|
|
133
175
|
}
|
|
134
|
-
function createContainer() {
|
|
135
|
-
if (typeof document === "undefined")
|
|
136
|
-
return null;
|
|
137
|
-
const container = document.createElement("div");
|
|
138
|
-
container.dataset.id = "messages";
|
|
139
|
-
document.body.append(container);
|
|
140
|
-
return container;
|
|
141
|
-
}
|
|
142
176
|
message.error = (content) => {
|
|
143
177
|
return message({
|
|
144
178
|
content,
|
|
@@ -181,16 +215,25 @@ message.one = (config) => {
|
|
|
181
215
|
handler.oneInstance = instance;
|
|
182
216
|
}
|
|
183
217
|
};
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
218
|
+
function MessageContainer({ align = "center", fromBottom = false, unshift = false, gap = 12, offset = "12px", duration = 3000, }) {
|
|
219
|
+
ContainerConfig.align = align;
|
|
220
|
+
ContainerConfig.fromBottom = fromBottom;
|
|
221
|
+
ContainerConfig.unshift = unshift;
|
|
222
|
+
ContainerConfig.gap = gap;
|
|
223
|
+
ContainerConfig.offset = offset;
|
|
224
|
+
ContainerConfig.duration = duration;
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
// 默认 Portal 到 document.body(仅在客户端执行,避免 SSR 问题)
|
|
228
|
+
if (typeof document !== "undefined") {
|
|
229
|
+
import('react-dom/client').then(({ createRoot }) => {
|
|
230
|
+
const container = document.createElement("div");
|
|
231
|
+
container.dataset.id = "messages";
|
|
232
|
+
document.body.append(container);
|
|
233
|
+
createRoot(container).render(jsxRuntime.jsx(Messages, {}));
|
|
234
|
+
});
|
|
193
235
|
}
|
|
194
236
|
|
|
237
|
+
exports.MessageContainer = MessageContainer;
|
|
195
238
|
exports.default = message;
|
|
196
239
|
//# sourceMappingURL=message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sources":["../../../../packages/components/message/message.tsx"],"sourcesContent":["import { useReactive } from \"../../js/hooks\";\nimport classNames from \"classnames\";\nimport { uid } from \"radash\";\nimport { ReactNode, isValidElement, useEffect, useRef } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport \"./index.css\";\nimport type { IMessage, IMessageItem, THeights, TMessageQueue } from \"./type\";\n\nconst AlignMap = {\n\tleft: \"flex-start\",\n\tcenter: \"center\",\n\tright: \"flex-end\",\n};\n\nconst GlobalConfig = {\n\talign: \"center\",\n\toffset: \"12px\",\n\tgap: 12,\n};\n\nconst ItemDefaultConfig = {\n\tduration: 3000,\n\tclosable: true,\n\tactive: false,\n};\n\nconst handler: {\n\toneInstance: null | IMessage;\n\tcallout: (item: IMessage) => void;\n\tclose: () => void;\n} = {\n\toneInstance: null,\n\tcallout(item: IMessage) {},\n\tclose() {},\n};\n\nconst queue: TMessageQueue = {\n\tleft: [],\n\tcenter: [],\n\tright: [],\n};\nconst heights: THeights = {\n\tleft: [],\n\tcenter: [],\n\tright: [],\n};\n\nconst MessageItem = function ({\n\tref,\n\tactive,\n\tcontent,\n\ttop,\n\tclassName,\n\tstyle,\n\tonClick,\n}: IMessageItem) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={classNames(\"i-message\", className, {\n\t\t\t\t\"i-message-active\": active,\n\t\t\t})}\n\t\t\tstyle={{\n\t\t\t\t...style,\n\t\t\t\ttop,\n\t\t\t}}\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t{content}\n\t\t</div>\n\t);\n};\n\nfunction Messages() {\n\tconst ref = useRef<HTMLDivElement>(null);\n\tconst state = useReactive<{\n\t\ttops: THeights;\n\t\titems: TMessageQueue;\n\t}>({\n\t\titems: {\n\t\t\tleft: [],\n\t\t\tcenter: [],\n\t\t\tright: [],\n\t\t},\n\t\ttops: {\n\t\t\tleft: [],\n\t\t\tcenter: [],\n\t\t\tright: [],\n\t\t},\n\t});\n\tconst offsetTop = {\n\t\tleft: 0,\n\t\tcenter: 0,\n\t\tright: 0,\n\t};\n\n\tuseEffect(() => {\n\t\tObject.assign(handler, {\n\t\t\tcallout: function (item: IMessage) {\n\t\t\t\tconst { align = \"center\", unshift, onShow } = item;\n\t\t\t\tconst size = queue[align][unshift ? \"unshift\" : \"push\"](item);\n\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\titem.close = this.close.bind(item);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst h = ref.current?.offsetHeight || 0;\n\n\t\t\t\t\tqueue[align][unshift ? 0 : size - 1].active = true;\n\t\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\t\theights[align][unshift ? \"unshift\" : \"push\"](h);\n\t\t\t\t\tstate.tops[align] = [...heights[align]];\n\t\t\t\t\tonShow?.();\n\t\t\t\t}, 12);\n\n\t\t\t\tif (item.duration !== 0) {\n\t\t\t\t\titem.timer = setTimeout(() => {\n\t\t\t\t\t\tthis.close.call(item);\n\t\t\t\t\t}, item.duration);\n\t\t\t\t}\n\t\t\t},\n\t\t\tclose: function () {\n\t\t\t\tconst item = this as IMessage;\n\t\t\t\tconst { align = \"center\", onHide } = item;\n\t\t\t\tconst index = queue[align].findIndex((i) => i.id === item.id);\n\t\t\t\tif (index < 0) return;\n\n\t\t\t\tqueue[align][index].active = false;\n\t\t\t\tstate.items[align] = [...queue[align]];\n\n\t\t\t\titem.timer = setTimeout(() => {\n\t\t\t\t\tconst index = queue[align].findIndex(\n\t\t\t\t\t\t(i) => i.id === item.id\n\t\t\t\t\t);\n\n\t\t\t\t\tqueue[align].splice(index, 1);\n\t\t\t\t\theights[align].splice(index, 1);\n\t\t\t\t\tstate.tops[align] = [...heights[align]];\n\t\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\t\titem.timer && clearTimeout(item.timer);\n\t\t\t\t\tonHide?.();\n\t\t\t\t}, 240);\n\t\t\t},\n\t\t});\n\t}, []);\n\n\tconst renderItems = (item, i) => {\n\t\tif (!item) return <></>;\n\n\t\tconst { id, active, content, align = \"center\", className } = item;\n\t\toffsetTop[align] += state.tops[align][i - 1] || 0;\n\t\tconst top = GlobalConfig.gap * i + offsetTop[align];\n\n\t\treturn (\n\t\t\t<MessageItem\n\t\t\t\tkey={id}\n\t\t\t\tref={ref}\n\t\t\t\tactive={active}\n\t\t\t\tcontent={content}\n\t\t\t\ttop={top}\n\t\t\t\tclassName={className}\n\t\t\t\tstyle={{ alignSelf: AlignMap[align] }}\n\t\t\t\tonClick={handler.close.bind(item)}\n\t\t\t/>\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className='i-messages'>\n\t\t\t{state.items.left.map(renderItems)}\n\t\t\t{state.items.center.map(renderItems)}\n\t\t\t{state.items.right.map(renderItems)}\n\t\t</div>\n\t);\n}\n\nexport function setMessageConfig(config: IMessage) {\n\tObject.assign(GlobalConfig, config);\n}\n\nfunction message(config: IMessage | ReactNode) {\n\tif (\n\t\t[\"string\", \"number\"].includes(typeof config) ||\n\t\tisValidElement(config)\n\t) {\n\t\tconfig = { content: config as ReactNode };\n\t}\n\n\tconfig = Object.assign(\n\t\t{ id: uid(7) },\n\t\tItemDefaultConfig,\n\t\tconfig as IMessage\n\t);\n\n\thandler.callout(config as IMessage);\n\n\treturn {\n\t\tinstance: config,\n\t\tclose: handler.close.bind(config),\n\t};\n}\n\nfunction createContainer() {\n\tif (typeof document === \"undefined\") return null;\n\tconst container = document.createElement(\"div\");\n\tcontainer.dataset.id = \"messages\";\n\tdocument.body.append(container);\n\treturn container;\n}\n\nmessage.error = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-error\",\n\t});\n};\n\nmessage.success = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-success\",\n\t});\n};\n\nmessage.warning = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-warning\",\n\t});\n};\n\nmessage.info = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-blue\",\n\t});\n};\n\nmessage.one = (config: IMessage) => {\n\tconst o = handler.oneInstance;\n\n\tif (o) {\n\t\tif (o.active && o.duration !== 0) {\n\t\t\tclearTimeout(o.timer);\n\t\t\to.timer = setTimeout(() => {\n\t\t\t\to.close?.();\n\t\t\t}, o.duration);\n\t\t} else {\n\t\t\thandler.callout(o);\n\t\t}\n\t} else {\n\t\tconst { instance } = message(config);\n\t\thandler.oneInstance = instance;\n\t}\n};\n\n// 初始化消息容器\nlet container: HTMLElement | null = null;\nlet root: any = null;\n\nif (typeof window !== \"undefined\") {\n\tcontainer = createContainer();\n\tif (container) {\n\t\troot = createRoot(container);\n\t\troot.render(<Messages />);\n\t}\n}\n\nexport default message;\n"],"names":["_jsx","classNames","useRef","useReactive","useEffect","_jsxs","isValidElement","uid","createRoot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message.js","sources":["../../../../packages/components/message/message.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { uid } from \"radash\";\nimport { ReactNode, isValidElement, useEffect, useRef } from \"react\";\nimport { useReactive } from \"../../js/hooks\";\nimport \"./index.css\";\nimport type {\n\tIMessage,\n\tIMessageConfig,\n\tIMessageContainerProps,\n\tIMessageItem,\n\tTHeights,\n\tTMessageQueue,\n} from \"./type\";\n\nconst AlignMap = {\n\tleft: \"flex-start\",\n\tcenter: \"center\",\n\tright: \"flex-end\",\n};\n\nconst ContainerConfig = {\n\talign: \"center\",\n\tfromBottom: false,\n\tunshift: false,\n\tgap: 12,\n\toffset: \"12px\",\n\tduration: 3000,\n};\n\nconst handler: {\n\toneInstance: null | IMessage;\n\tcallout: (item: IMessage) => void;\n\tclose: () => void;\n} = {\n\toneInstance: null,\n\tcallout(item: IMessage) {},\n\tclose() {},\n};\n\nconst queue: TMessageQueue = {\n\tleft: [],\n\tcenter: [],\n\tright: [],\n};\nconst heights: THeights = {\n\tleft: [],\n\tcenter: [],\n\tright: [],\n};\n\nconst MessageItem = function ({\n\tref,\n\tactive,\n\tcontent,\n\ttop,\n\tbottom,\n\tclassName,\n\tstyle,\n\tonClick,\n}: IMessageItem) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={classNames(\"i-message\", className, {\n\t\t\t\t\"i-message-active\": active,\n\t\t\t})}\n\t\t\tstyle={{\n\t\t\t\t...style,\n\t\t\t\t...(bottom !== undefined ? { bottom } : { top }),\n\t\t\t}}\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t{content}\n\t\t</div>\n\t);\n};\n\nfunction Messages() {\n\tconst ref = useRef<HTMLDivElement>(null);\n\tconst state = useReactive<{\n\t\ttops: THeights;\n\t\titems: TMessageQueue;\n\t}>({\n\t\titems: {\n\t\t\tleft: [],\n\t\t\tcenter: [],\n\t\t\tright: [],\n\t\t},\n\t\ttops: {\n\t\t\tleft: [],\n\t\t\tcenter: [],\n\t\t\tright: [],\n\t\t},\n\t});\n\n\tuseEffect(() => {\n\t\tObject.assign(handler, {\n\t\t\tcallout: function (item: IMessage) {\n\t\t\t\tconst { align = \"center\", unshift, onShow } = item;\n\t\t\t\tqueue[align][unshift ? \"unshift\" : \"push\"](item);\n\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\titem.close = this.close.bind(item);\n\n\t\t\t\t// Pre-fill 0-height placeholder so heights stays index-aligned with queue\n\t\t\t\tif (unshift) {\n\t\t\t\t\theights[align].unshift(0);\n\t\t\t\t} else {\n\t\t\t\t\theights[align].push(0);\n\t\t\t\t}\n\t\t\t\tstate.tops[align] = [...heights[align]];\n\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst h = ref.current?.offsetHeight || 0;\n\t\t\t\t\tconst idx = queue[align].findIndex((i) => i.id === item.id);\n\t\t\t\t\tif (idx < 0) return;\n\n\t\t\t\t\tqueue[align][idx].active = true;\n\t\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\t\theights[align][idx] = h;\n\t\t\t\t\tstate.tops[align] = [...heights[align]];\n\t\t\t\t\tonShow?.();\n\t\t\t\t});\n\n\t\t\t\tif (item.duration !== 0) {\n\t\t\t\t\titem.timer = setTimeout(() => {\n\t\t\t\t\t\tthis.close.call(item);\n\t\t\t\t\t}, item.duration);\n\t\t\t\t}\n\t\t\t},\n\t\t\tclose: function () {\n\t\t\t\tconst item = this as unknown as IMessage;\n\t\t\t\tconst { align = \"center\", onHide } = item;\n\t\t\t\tconst index = queue[align].findIndex((i) => i.id === item.id);\n\t\t\t\tif (index < 0) return;\n\n\t\t\t\tqueue[align][index].active = false;\n\t\t\t\tstate.items[align] = [...queue[align]];\n\n\t\t\t\titem.timer = setTimeout(() => {\n\t\t\t\t\tconst index = queue[align].findIndex(\n\t\t\t\t\t\t(i) => i.id === item.id,\n\t\t\t\t\t);\n\n\t\t\t\t\tqueue[align].splice(index, 1);\n\t\t\t\t\theights[align].splice(index, 1);\n\t\t\t\t\tstate.tops[align] = [...heights[align]];\n\t\t\t\t\tstate.items[align] = [...queue[align]];\n\t\t\t\t\titem.timer && clearTimeout(item.timer);\n\t\t\t\t\tonHide?.();\n\t\t\t\t}, 240);\n\t\t\t},\n\t\t});\n\t}, []);\n\n\tconst renderGroup = (align: string) => {\n\t\tconst items = state.items[align];\n\t\tconst tops = state.tops[align];\n\t\tconst gap = ContainerConfig.gap;\n\n\t\tif (ContainerConfig.fromBottom) {\n\t\t\t// bottom-up: calculate bottom-edge positions\n\t\t\tlet offset = 0;\n\t\t\tconst bottoms: number[] = [];\n\t\t\tfor (let i = items.length - 1; i >= 0; i--) {\n\t\t\t\tbottoms[i] = offset;\n\t\t\t\toffset += (tops[i] || 0) + gap;\n\t\t\t}\n\n\t\t\treturn items.map((item: IMessage, i: number) => {\n\t\t\t\tif (!item) return <></>;\n\n\t\t\t\tconst { id, active, content, className, style: itemStyle } =\n\t\t\t\t\titem;\n\n\t\t\t\treturn (\n\t\t\t\t\t<MessageItem\n\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\tcontent={content}\n\t\t\t\t\t\tbottom={bottoms[i]}\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...itemStyle,\n\t\t\t\t\t\t\talignSelf: AlignMap[align],\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={handler.close.bind(item)}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\t// top-down (default)\n\t\tlet offset = 0;\n\t\treturn items.map((item: IMessage, i: number) => {\n\t\t\tif (!item) return <></>;\n\n\t\t\tconst { id, active, content, className, style: itemStyle } = item;\n\t\t\tconst top = offset;\n\n\t\t\toffset += (tops[i] || 0) + gap;\n\n\t\t\treturn (\n\t\t\t\t<MessageItem\n\t\t\t\t\tkey={id}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tactive={active}\n\t\t\t\t\tcontent={content}\n\t\t\t\t\ttop={top}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...itemStyle,\n\t\t\t\t\t\talignSelf: AlignMap[align],\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={handler.close.bind(item)}\n\t\t\t\t/>\n\t\t\t);\n\t\t});\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"i-messages\"\n\t\t\tstyle={{\n\t\t\t\tmargin: ContainerConfig.offset,\n\t\t\t}}\n\t\t>\n\t\t\t{renderGroup(\"left\")}\n\t\t\t{renderGroup(\"center\")}\n\t\t\t{renderGroup(\"right\")}\n\t\t</div>\n\t);\n}\n\nfunction message(config: IMessageConfig | ReactNode) {\n\tif (typeof config !== \"object\" || isValidElement(config as ReactNode)) {\n\t\tconfig = { content: config as ReactNode };\n\t}\n\n\tconst msg: IMessage = {\n\t\tid: uid(7),\n\t\tactive: false,\n\t\talign: ContainerConfig.align,\n\t\tduration: ContainerConfig.duration,\n\t\tclosable: true,\n\t\tunshift: ContainerConfig.unshift,\n\t\t...(config as IMessageConfig),\n\t};\n\n\thandler.callout(msg);\n\n\treturn {\n\t\tinstance: msg,\n\t\tclose: handler.close.bind(msg),\n\t};\n}\n\nmessage.error = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-error\",\n\t});\n};\n\nmessage.success = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-success\",\n\t});\n};\n\nmessage.warning = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-warning\",\n\t});\n};\n\nmessage.info = (content: ReactNode) => {\n\treturn message({\n\t\tcontent,\n\t\tclassName: \"bg-blue\",\n\t});\n};\n\nmessage.one = (config: IMessageConfig) => {\n\tconst o = handler.oneInstance;\n\n\tif (o) {\n\t\tif (o.active && o.duration !== 0) {\n\t\t\tclearTimeout(o.timer);\n\t\t\to.timer = setTimeout(() => {\n\t\t\t\to.close?.();\n\t\t\t}, o.duration);\n\t\t} else {\n\t\t\thandler.callout(o);\n\t\t}\n\t} else {\n\t\tconst { instance } = message(config);\n\t\thandler.oneInstance = instance;\n\t}\n};\n\nfunction MessageContainer({\n\talign = \"center\",\n\tfromBottom = false,\n\tunshift = false,\n\tgap = 12,\n\toffset = \"12px\",\n\tduration = 3000,\n}: IMessageContainerProps) {\n\tContainerConfig.align = align;\n\tContainerConfig.fromBottom = fromBottom;\n\tContainerConfig.unshift = unshift;\n\tContainerConfig.gap = gap;\n\tContainerConfig.offset = offset;\n\tContainerConfig.duration = duration;\n\n\treturn null;\n}\n\n// 默认 Portal 到 document.body(仅在客户端执行,避免 SSR 问题)\nif (typeof document !== \"undefined\") {\n\timport(\"react-dom/client\").then(({ createRoot }) => {\n\t\tconst container = document.createElement(\"div\");\n\t\tcontainer.dataset.id = \"messages\";\n\t\tdocument.body.append(container);\n\t\tcreateRoot(container).render(<Messages />);\n\t});\n}\n\nexport { MessageContainer };\nexport default message;\n"],"names":["_jsx","classNames","useRef","useReactive","useEffect","_jsxs","isValidElement","uid"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var material = require('@ricons/material');
|
|
7
|
+
var classNames = require('classnames');
|
|
8
|
+
var dayjs = require('dayjs');
|
|
9
|
+
var customParseFormat = require('dayjs/plugin/customParseFormat.js');
|
|
10
|
+
var react = require('react');
|
|
11
|
+
var icon = require('../../icon/icon.js');
|
|
12
|
+
var input = require('../../input/input.js');
|
|
13
|
+
var popup = require('../../popup/popup.js');
|
|
14
|
+
var panel = require('./panel.js');
|
|
15
|
+
|
|
16
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
17
|
+
|
|
18
|
+
var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
|
|
19
|
+
var dayjs__default = /*#__PURE__*/_interopDefaultCompat(dayjs);
|
|
20
|
+
var customParseFormat__default = /*#__PURE__*/_interopDefaultCompat(customParseFormat);
|
|
21
|
+
|
|
22
|
+
dayjs__default.extend(customParseFormat__default);
|
|
23
|
+
const DateRange = (props) => {
|
|
24
|
+
const { value, format = "YYYY-MM-DD", placeholder = "选择日期范围", className, disabledDate, onChange, clear, onClear: onClearProp, weeks, unitYear, unitMonth, renderDate, renderMonth, renderYear, ...restProps } = props;
|
|
25
|
+
const [active, setActive] = react.useState(false);
|
|
26
|
+
const inputValue = react.useMemo(() => {
|
|
27
|
+
if (value?.[0] && value?.[1]) {
|
|
28
|
+
return `${value[0]} ~ ${value[1]}`;
|
|
29
|
+
}
|
|
30
|
+
if (value?.[0]) {
|
|
31
|
+
return `${value[0]} ~ `;
|
|
32
|
+
}
|
|
33
|
+
return "";
|
|
34
|
+
}, [value]);
|
|
35
|
+
const dayJsValue = react.useMemo(() => {
|
|
36
|
+
const start = value?.[0] ? dayjs__default(value[0], format, true) : null;
|
|
37
|
+
const end = value?.[1] ? dayjs__default(value[1], format, true) : null;
|
|
38
|
+
if (start?.isValid() || end?.isValid()) {
|
|
39
|
+
return [start?.isValid() ? start : null, end?.isValid() ? end : null];
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}, [value, format]);
|
|
43
|
+
const handleSelected = (dates) => {
|
|
44
|
+
const formatted = dates.map((d) => d.format(format));
|
|
45
|
+
onChange?.([formatted[0], formatted[1]]);
|
|
46
|
+
setActive(false);
|
|
47
|
+
};
|
|
48
|
+
const handleVisibleChange = (v) => {
|
|
49
|
+
setActive(v);
|
|
50
|
+
};
|
|
51
|
+
const handleClear = () => {
|
|
52
|
+
onChange?.([undefined, undefined]);
|
|
53
|
+
setActive(false);
|
|
54
|
+
onClearProp?.();
|
|
55
|
+
};
|
|
56
|
+
return (jsxRuntime.jsx(popup.default, { visible: active, trigger: 'click', position: 'bottom', arrow: false, align: 'start', onVisibleChange: handleVisibleChange, content: jsxRuntime.jsx(panel.default, { value: dayJsValue, weeks: weeks, unitYear: unitYear, unitMonth: unitMonth, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onSelected: handleSelected }), children: jsxRuntime.jsx(input.default, { value: inputValue, placeholder: placeholder, readOnly: true, clear: clear, onClear: handleClear, append: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.CalendarMonthTwotone, {}), className: 'i-datepicker-icon', size: '1em' }), className: classNames__default("i-datepicker-label", className), ...restProps }) }));
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.default = DateRange;
|
|
60
|
+
//# sourceMappingURL=daterange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daterange.js","sources":["../../../../../packages/components/picker/daterange/daterange.tsx"],"sourcesContent":["import { CalendarMonthTwotone } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport { useMemo, useState } from \"react\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Popup from \"../../popup\";\nimport type { IDateRange } from \"../type\";\nimport \"../dates/index.css\";\nimport \"./index.css\";\nimport DoublePanel from \"./panel\";\n\ndayjs.extend(customParseFormat);\n\nconst DateRange = (props: IDateRange) => {\n\tconst {\n\t\tvalue,\n\t\tformat = \"YYYY-MM-DD\",\n\t\tplaceholder = \"选择日期范围\",\n\t\tclassName,\n\t\tdisabledDate,\n\t\tonChange,\n\t\tclear,\n\t\tonClear: onClearProp,\n\t\tweeks,\n\t\tunitYear,\n\t\tunitMonth,\n\t\trenderDate,\n\t\trenderMonth,\n\t\trenderYear,\n\t\t...restProps\n\t} = props;\n\n\tconst [active, setActive] = useState(false);\n\n\n\tconst inputValue = useMemo(() => {\n\t\tif (value?.[0] && value?.[1]) {\n\t\t\treturn `${value[0]} ~ ${value[1]}`;\n\t\t}\n\t\tif (value?.[0]) {\n\t\t\treturn `${value[0]} ~ `;\n\t\t}\n\t\treturn \"\";\n\t}, [value]);\n\n\tconst dayJsValue = useMemo(() => {\n\t\tconst start = value?.[0] ? dayjs(value[0] as string, format, true) : null;\n\t\tconst end = value?.[1] ? dayjs(value[1] as string, format, true) : null;\n\t\tif (start?.isValid() || end?.isValid()) {\n\t\t\treturn [start?.isValid() ? start : null, end?.isValid() ? end : null] as [\n\t\t\t\tDayjs | null,\n\t\t\t\tDayjs | null,\n\t\t\t];\n\t\t}\n\t\treturn null;\n\t}, [value, format]);\n\n\tconst handleSelected = (dates: [Dayjs, Dayjs]) => {\n\t\tconst formatted = dates.map((d) => d.format(format));\n\t\tonChange?.([formatted[0], formatted[1]]);\n\t\tsetActive(false);\n\t};\n\n\tconst handleVisibleChange = (v: boolean) => {\n\t\tsetActive(v);\n\t};\n\n\tconst handleClear = () => {\n\t\tonChange?.([undefined, undefined]);\n\t\tsetActive(false);\n\t\tonClearProp?.();\n\t};\n\n\treturn (\n\t\t<Popup\n\t\t\tvisible={active}\n\t\t\ttrigger='click'\n\t\t\tposition='bottom'\n\t\t\tarrow={false}\n\t\t\talign='start'\n\t\t\tonVisibleChange={handleVisibleChange}\n\t\t\tcontent={\n\t\t\t\t<DoublePanel\n\t\t\t\t\tvalue={dayJsValue}\n\t\t\t\t\tweeks={weeks}\n\t\t\t\t\tunitYear={unitYear}\n\t\t\t\t\tunitMonth={unitMonth}\n\t\t\t\t\trenderDate={renderDate}\n\t\t\t\t\trenderMonth={renderMonth}\n\t\t\t\t\trenderYear={renderYear}\n\t\t\t\t\tdisabledDate={disabledDate}\n\t\t\t\t\tonSelected={handleSelected}\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<Input\n\t\t\t\tvalue={inputValue}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\treadOnly\n\t\t\t\tclear={clear}\n\t\t\t\tonClear={handleClear}\n\t\t\t\tappend={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={<CalendarMonthTwotone />}\n\t\t\t\t\t\tclassName='i-datepicker-icon'\n\t\t\t\t\t\tsize='1em'\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tclassName={classNames(\"i-datepicker-label\", className)}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t</Popup>\n\t);\n};\n\nexport default DateRange;\n"],"names":["dayjs","customParseFormat","useState","useMemo","_jsx","Popup","DoublePanel","Input","Icon","CalendarMonthTwotone","classNames"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAaAA,cAAK,CAAC,MAAM,CAACC,0BAAiB,CAAC;AAE/B,MAAM,SAAS,GAAG,CAAC,KAAiB,KAAI;AACvC,IAAA,MAAM,EACL,KAAK,EACL,MAAM,GAAG,YAAY,EACrB,WAAW,GAAG,QAAQ,EACtB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,GAAG,SAAS,EACZ,GAAG,KAAK;IAET,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;AAG3C,IAAA,MAAM,UAAU,GAAGC,aAAO,CAAC,MAAK;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YAC7B,OAAO,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;QACnC;AACA,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACf,YAAA,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK;QACxB;AACA,QAAA,OAAO,EAAE;AACV,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,UAAU,GAAGA,aAAO,CAAC,MAAK;QAC/B,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,GAAGH,cAAK,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;QACzE,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,GAAGA,cAAK,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;QACvE,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE;YACvC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG,IAAI,CAGnE;QACF;AACA,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEnB,IAAA,MAAM,cAAc,GAAG,CAAC,KAAqB,KAAI;AAChD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpD,QAAA,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,SAAS,CAAC,KAAK,CAAC;AACjB,IAAA,CAAC;AAED,IAAA,MAAM,mBAAmB,GAAG,CAAC,CAAU,KAAI;QAC1C,SAAS,CAAC,CAAC,CAAC;AACb,IAAA,CAAC;IAED,MAAM,WAAW,GAAG,MAAK;QACxB,QAAQ,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClC,SAAS,CAAC,KAAK,CAAC;QAChB,WAAW,IAAI;AAChB,IAAA,CAAC;AAED,IAAA,QACCI,cAAA,CAACC,aAAK,EAAA,EACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAC,OAAO,EACb,eAAe,EAAE,mBAAmB,EACpC,OAAO,EACND,cAAA,CAACE,aAAW,EAAA,EACX,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,cAAc,EAAA,CACzB,EAAA,QAAA,EAGHF,cAAA,CAACG,aAAK,EAAA,EACL,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAA,IAAA,EACR,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,MAAM,EACLH,cAAA,CAACI,YAAI,EAAA,EACJ,IAAI,EAAEJ,cAAA,CAACK,6BAAoB,EAAA,EAAA,CAAG,EAC9B,SAAS,EAAC,mBAAmB,EAC7B,IAAI,EAAC,KAAK,EAAA,CACT,EAEH,SAAS,EAAEC,mBAAU,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAAA,GAClD,SAAS,EAAA,CACZ,EAAA,CACK;AAEV;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var dayjs = require('dayjs');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var panel = require('../dates/panel.js');
|
|
9
|
+
|
|
10
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
11
|
+
|
|
12
|
+
var dayjs__default = /*#__PURE__*/_interopDefaultCompat(dayjs);
|
|
13
|
+
|
|
14
|
+
const DoublePanel = (props) => {
|
|
15
|
+
const { value, weeks, unitYear, unitMonth, renderDate, renderMonth, renderYear, disabledDate, onSelected, } = props;
|
|
16
|
+
const [baseMonth, setBaseMonth] = react.useState(value?.[0] || dayjs__default());
|
|
17
|
+
const [startDate, setStartDate] = react.useState(value?.[0] || null);
|
|
18
|
+
const [endDate, setEndDate] = react.useState(value?.[1] || null);
|
|
19
|
+
const [selecting, setSelecting] = react.useState("start");
|
|
20
|
+
const [hoverDate, setHoverDate] = react.useState(null);
|
|
21
|
+
const nextMonth = react.useMemo(() => baseMonth.add(1, "month"), [baseMonth]);
|
|
22
|
+
react.useEffect(() => {
|
|
23
|
+
setStartDate(value?.[0] || null);
|
|
24
|
+
setEndDate(value?.[1] || null);
|
|
25
|
+
setBaseMonth(value?.[0] || dayjs__default());
|
|
26
|
+
}, [value]);
|
|
27
|
+
const handleDateClick = (date) => {
|
|
28
|
+
if (selecting === "start") {
|
|
29
|
+
setStartDate(date);
|
|
30
|
+
setSelecting("end");
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
let start = startDate || date;
|
|
34
|
+
let end = date;
|
|
35
|
+
if (start.isAfter(end)) {
|
|
36
|
+
[start, end] = [end, start];
|
|
37
|
+
}
|
|
38
|
+
setEndDate(end);
|
|
39
|
+
setSelecting("start");
|
|
40
|
+
onSelected?.([start, end]);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const handleDateHover = (date) => {
|
|
44
|
+
if (selecting === "end" && startDate) {
|
|
45
|
+
setHoverDate(date);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const handleOperateMonth = (next) => {
|
|
49
|
+
setBaseMonth((m) => m[next ? "add" : "subtract"](1, "month"));
|
|
50
|
+
};
|
|
51
|
+
return (jsxRuntime.jsxs("div", { className: 'i-daterange-panel i-daterange-grids', children: [jsxRuntime.jsx("div", { className: 'i-daterange-col', children: jsxRuntime.jsx(panel.default, { value: startDate, month: baseMonth, rangeEnd: endDate, hoverDate: hoverDate, onDateHover: handleDateHover, weeks: weeks, unitYear: unitYear, unitMonth: unitMonth, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick, onOperateMonth: handleOperateMonth }) }), jsxRuntime.jsx("div", { className: 'i-daterange-col', children: jsxRuntime.jsx(panel.default, { value: startDate, month: nextMonth, rangeEnd: endDate, hoverDate: hoverDate, onDateHover: handleDateHover, weeks: weeks, unitYear: unitYear, unitMonth: unitMonth, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick, onOperateMonth: handleOperateMonth }) })] }));
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
exports.default = DoublePanel;
|
|
55
|
+
//# sourceMappingURL=panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.js","sources":["../../../../../packages/components/picker/daterange/panel.tsx"],"sourcesContent":["import dayjs, { Dayjs } from \"dayjs\";\nimport { ReactNode, useEffect, useMemo, useState } from \"react\";\nimport Panel from \"../dates/panel\";\n\ninterface IDoublePanel {\n\tvalue?: [Dayjs | null, Dayjs | null] | null;\n\tweeks?: ReactNode[];\n\tunitYear?: ReactNode;\n\tunitMonth?: ReactNode;\n\trenderDate?: (date: Dayjs) => ReactNode;\n\trenderMonth?: (m: number) => ReactNode;\n\trenderYear?: (y: number) => ReactNode;\n\tdisabledDate?: (date: Dayjs) => boolean;\n\tonSelected?: (dates: [Dayjs, Dayjs]) => void;\n}\n\nconst DoublePanel = (props: IDoublePanel) => {\n\tconst {\n\t\tvalue,\n\t\tweeks,\n\t\tunitYear,\n\t\tunitMonth,\n\t\trenderDate,\n\t\trenderMonth,\n\t\trenderYear,\n\t\tdisabledDate,\n\t\tonSelected,\n\t} = props;\n\n\tconst [baseMonth, setBaseMonth] = useState(value?.[0] || dayjs());\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(\n\t\tvalue?.[0] || null\n\t);\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(\n\t\tvalue?.[1] || null\n\t);\n\tconst [selecting, setSelecting] = useState<\"start\" | \"end\">(\"start\");\n\tconst [hoverDate, setHoverDate] = useState<Dayjs | null>(null);\n\n\tconst nextMonth = useMemo(() => baseMonth.add(1, \"month\"), [baseMonth]);\n\n\tuseEffect(() => {\n\t\tsetStartDate(value?.[0] || null);\n\t\tsetEndDate(value?.[1] || null);\n\t\tsetBaseMonth(value?.[0] || dayjs());\n\t}, [value]);\n\n\tconst handleDateClick = (date: Dayjs) => {\n\t\tif (selecting === \"start\") {\n\t\t\tsetStartDate(date);\n\t\t\tsetSelecting(\"end\");\n\t\t} else {\n\t\t\tlet start = startDate || date;\n\t\t\tlet end = date;\n\t\t\tif (start.isAfter(end)) {\n\t\t\t\t[start, end] = [end, start];\n\t\t\t}\n\t\t\tsetEndDate(end);\n\t\t\tsetSelecting(\"start\");\n\t\t\tonSelected?.([start, end]);\n\t\t}\n\t};\n\n\tconst handleDateHover = (date: Dayjs | null) => {\n\t\tif (selecting === \"end\" && startDate) {\n\t\t\tsetHoverDate(date);\n\t\t}\n\t};\n\n\tconst handleOperateMonth = (next: boolean) => {\n\t\tsetBaseMonth((m) => m[next ? \"add\" : \"subtract\"](1, \"month\"));\n\t};\n\n\treturn (\n\t\t<div className='i-daterange-panel i-daterange-grids'>\n\t\t\t<div className='i-daterange-col'>\n\t\t\t\t<Panel\n\t\t\t\t\tvalue={startDate}\n\t\t\t\t\tmonth={baseMonth}\n\t\t\t\t\trangeEnd={endDate}\n\t\t\t\t\thoverDate={hoverDate}\n\t\t\t\t\tonDateHover={handleDateHover}\n\t\t\t\t\tweeks={weeks}\n\t\t\t\t\tunitYear={unitYear}\n\t\t\t\t\tunitMonth={unitMonth}\n\t\t\t\t\trenderDate={renderDate}\n\t\t\t\t\trenderMonth={renderMonth}\n\t\t\t\t\trenderYear={renderYear}\n\t\t\t\t\tdisabledDate={disabledDate}\n\t\t\t\t\tonDateClick={handleDateClick}\n\t\t\t\t\tonOperateMonth={handleOperateMonth}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className='i-daterange-col'>\n\t\t\t\t<Panel\n\t\t\t\t\tvalue={startDate}\n\t\t\t\t\tmonth={nextMonth}\n\t\t\t\t\trangeEnd={endDate}\n\t\t\t\t\thoverDate={hoverDate}\n\t\t\t\t\tonDateHover={handleDateHover}\n\t\t\t\t\tweeks={weeks}\n\t\t\t\t\tunitYear={unitYear}\n\t\t\t\t\tunitMonth={unitMonth}\n\t\t\t\t\trenderDate={renderDate}\n\t\t\t\t\trenderMonth={renderMonth}\n\t\t\t\t\trenderYear={renderYear}\n\t\t\t\t\tdisabledDate={disabledDate}\n\t\t\t\t\tonDateClick={handleDateClick}\n\t\t\t\t\tonOperateMonth={handleOperateMonth}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default DoublePanel;\n"],"names":["useState","dayjs","useMemo","useEffect","_jsxs","_jsx","Panel"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
|
|
|
13
13
|
var dayjs__default = /*#__PURE__*/_interopDefaultCompat(dayjs);
|
|
14
14
|
|
|
15
15
|
const Dates = (props) => {
|
|
16
|
-
const { value, month, weeks = ["一", "二", "三", "四", "五", "六", "日"], renderDate = (date) => date.date(), disabledDate, onDateClick, } = props;
|
|
16
|
+
const { value, month, rangeEnd, hoverDate, weeks = ["一", "二", "三", "四", "五", "六", "日"], renderDate = (date) => date.date(), disabledDate, onDateClick, onDateHover, } = props;
|
|
17
17
|
const today = dayjs__default();
|
|
18
18
|
const dates = react.useMemo(() => {
|
|
19
19
|
const dates = [];
|
|
@@ -37,17 +37,25 @@ const Dates = (props) => {
|
|
|
37
37
|
return;
|
|
38
38
|
onDateClick?.(date);
|
|
39
39
|
};
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
const handleMouseEnter = (date) => {
|
|
41
|
+
if (disabledDate?.(date))
|
|
42
|
+
return;
|
|
43
|
+
onDateHover?.(date);
|
|
44
|
+
};
|
|
45
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'i-datepicker-weeks', children: weeks.map((week, i) => (jsxRuntime.jsx("span", { className: 'i-datepicker-week', children: week }, i))) }), jsxRuntime.jsx("div", { className: 'i-datepicker-dates', onMouseLeave: () => onDateHover?.(null), children: dates.map((date, i) => {
|
|
46
|
+
const active = date.isSame(value, "day") || (rangeEnd && date.isSame(rangeEnd, "day"));
|
|
42
47
|
const isSameMonth = date.isSame(month, "month");
|
|
43
48
|
const isToday = date.isSame(today, "day");
|
|
44
49
|
const disabled = disabledDate?.(date);
|
|
50
|
+
const isBetween = hoverDate && value && ((date.isAfter(value, "day") && date.isBefore(hoverDate, "day")) ||
|
|
51
|
+
(date.isAfter(hoverDate, "day") && date.isBefore(value, "day")));
|
|
45
52
|
return (jsxRuntime.jsx("div", { className: classNames__default("i-datepicker-item", {
|
|
46
53
|
"i-datepicker-active": active,
|
|
47
54
|
"i-datepicker-same-month": isSameMonth,
|
|
48
55
|
"i-datepicker-today": isToday,
|
|
49
56
|
"i-datepicker-disabled": disabled,
|
|
50
|
-
|
|
57
|
+
"i-daterange-between": isBetween,
|
|
58
|
+
}), onMouseEnter: () => handleMouseEnter(date), onClick: () => handleDateClick(date), children: renderDate(date) }, i));
|
|
51
59
|
}) })] }));
|
|
52
60
|
};
|
|
53
61
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sources":["../../../../../packages/components/picker/dates/dates.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { ReactNode, useMemo } from \"react\";\nimport { IBaseDates } from \"../type\";\n\nconst Dates = (\n\tprops: IBaseDates & {\n\t\tmonth: any;\n\t}\n) => {\n\tconst {\n\t\tvalue,\n\t\tmonth,\n\t\tweeks = [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\trenderDate = (date: Dayjs) => date.date(),\n\t\tdisabledDate,\n\t\tonDateClick,\n\t} = props;\n\tconst today = dayjs();\n\n\tconst dates = useMemo(() => {\n\t\tconst dates: Dayjs[] = [];\n\n\t\tconst lastDateOfLastMonth = month.add(-1, \"month\").endOf(\"month\");\n\t\tlet { $W, $D } = lastDateOfLastMonth;\n\n\t\tif ($W !== 0) {\n\t\t\tconst lastMonthDates = Array.from({ length: $W }).map(\n\t\t\t\t(whatever, i) => lastDateOfLastMonth.add(i + 1 - $W, \"day\")\n\t\t\t);\n\t\t\tdates.push(...lastMonthDates);\n\t\t}\n\n\t\tconst lastDate = month.endOf(\"month\");\n\t\t$D = lastDate.$D;\n\t\t$W = lastDate.$W;\n\t\tdates.push(\n\t\t\t...Array.from({ length: $D }).map((whatever, i) =>\n\t\t\t\tlastDate.add(i + 1 - $D, \"day\")\n\t\t\t)\n\t\t);\n\n\t\tif ($W !== 0) {\n\t\t\tdates.push(\n\t\t\t\t...Array.from({ length: 7 - $W }).map((whatever, i) =>\n\t\t\t\t\tlastDate.add(i + 1, \"day\")\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn dates;\n\t}, [month]);\n\n\tconst handleDateClick = (date: Dayjs) => {\n\t\tif (disabledDate?.(date)) return;\n\n\t\tonDateClick?.(date);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className='i-datepicker-weeks'>\n\t\t\t\t{weeks.map((week: ReactNode, i: number) => (\n\t\t\t\t\t<span key={i} className='i-datepicker-week'>\n\t\t\t\t\t\t{week}\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<div
|
|
1
|
+
{"version":3,"file":"dates.js","sources":["../../../../../packages/components/picker/dates/dates.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { ReactNode, useMemo } from \"react\";\nimport { IBaseDates } from \"../type\";\n\nconst Dates = (\n\tprops: IBaseDates & {\n\t\tmonth: any;\n\t\trangeEnd?: Dayjs | null;\n\t\thoverDate?: Dayjs | null;\n\t\tonDateHover?: (date: Dayjs | null) => void;\n\t}\n) => {\n\tconst {\n\t\tvalue,\n\t\tmonth,\n\t\trangeEnd,\n\t\thoverDate,\n\t\tweeks = [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\trenderDate = (date: Dayjs) => date.date(),\n\t\tdisabledDate,\n\t\tonDateClick,\n\t\tonDateHover,\n\t} = props;\n\tconst today = dayjs();\n\n\tconst dates = useMemo(() => {\n\t\tconst dates: Dayjs[] = [];\n\n\t\tconst lastDateOfLastMonth = month.add(-1, \"month\").endOf(\"month\");\n\t\tlet { $W, $D } = lastDateOfLastMonth;\n\n\t\tif ($W !== 0) {\n\t\t\tconst lastMonthDates = Array.from({ length: $W }).map(\n\t\t\t\t(whatever, i) => lastDateOfLastMonth.add(i + 1 - $W, \"day\")\n\t\t\t);\n\t\t\tdates.push(...lastMonthDates);\n\t\t}\n\n\t\tconst lastDate = month.endOf(\"month\");\n\t\t$D = lastDate.$D;\n\t\t$W = lastDate.$W;\n\t\tdates.push(\n\t\t\t...Array.from({ length: $D }).map((whatever, i) =>\n\t\t\t\tlastDate.add(i + 1 - $D, \"day\")\n\t\t\t)\n\t\t);\n\n\t\tif ($W !== 0) {\n\t\t\tdates.push(\n\t\t\t\t...Array.from({ length: 7 - $W }).map((whatever, i) =>\n\t\t\t\t\tlastDate.add(i + 1, \"day\")\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn dates;\n\t}, [month]);\n\n\tconst handleDateClick = (date: Dayjs) => {\n\t\tif (disabledDate?.(date)) return;\n\n\t\tonDateClick?.(date);\n\t};\n\n\tconst handleMouseEnter = (date: Dayjs) => {\n\t\tif (disabledDate?.(date)) return;\n\t\tonDateHover?.(date);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className='i-datepicker-weeks'>\n\t\t\t\t{weeks.map((week: ReactNode, i: number) => (\n\t\t\t\t\t<span key={i} className='i-datepicker-week'>\n\t\t\t\t\t\t{week}\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName='i-datepicker-dates'\n\t\t\t\tonMouseLeave={() => onDateHover?.(null)}\n\t\t\t>\n\t\t\t\t{dates.map((date, i: number) => {\n\t\t\t\t\tconst active = date.isSame(value, \"day\") || (rangeEnd && date.isSame(rangeEnd, \"day\"));\n\t\t\t\t\tconst isSameMonth = date.isSame(month, \"month\");\n\t\t\t\t\tconst isToday = date.isSame(today, \"day\");\n\t\t\t\t\tconst disabled = disabledDate?.(date);\n\t\t\t\t\tconst isBetween = hoverDate && value && (\n\t\t\t\t\t\t(date.isAfter(value, \"day\") && date.isBefore(hoverDate, \"day\")) ||\n\t\t\t\t\t\t(date.isAfter(hoverDate, \"day\") && date.isBefore(value, \"day\"))\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName={classNames(\"i-datepicker-item\", {\n\t\t\t\t\t\t\t\t\"i-datepicker-active\": active,\n\t\t\t\t\t\t\t\t\"i-datepicker-same-month\": isSameMonth,\n\t\t\t\t\t\t\t\t\"i-datepicker-today\": isToday,\n\t\t\t\t\t\t\t\t\"i-datepicker-disabled\": disabled,\n\t\t\t\t\t\t\t\t\"i-daterange-between\": isBetween,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tonMouseEnter={() => handleMouseEnter(date)}\n\t\t\t\t\t\t\tonClick={() => handleDateClick(date)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderDate(date)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default Dates;\n"],"names":["dayjs","useMemo","_jsxs","_Fragment","_jsx","classNames"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ dayjs__default.extend(customParseFormat__default);
|
|
|
23
23
|
const FORMATTYPES = ["YYYY-MM-DD", "YYYY-M-D", "YYYY/MM/DD", "YYYY/M/D"];
|
|
24
24
|
const FORMAT = "YYYY-MM-DD";
|
|
25
25
|
const Datepicker = (props) => {
|
|
26
|
-
const { name, value, weeks, format = FORMAT, placeholder = props.format ?? FORMAT, className, renderDate, renderMonth, renderYear, popupProps, disabledDate, onDateClick, onChange, onBlur, ...restProps } = props;
|
|
26
|
+
const { name, value, weeks, format = FORMAT, placeholder = props.format ?? FORMAT, className, renderDate, renderMonth, renderYear, popupProps, disabledDate, onDateClick, onChange, onBlur, clear, onClear: onClearProp, ...restProps } = props;
|
|
27
27
|
const [inputValue, setInputValue] = react.useState(value);
|
|
28
28
|
const [active, setActive] = react.useState(false);
|
|
29
29
|
const dayJsValue = react.useMemo(() => {
|
|
@@ -59,10 +59,14 @@ const Datepicker = (props) => {
|
|
|
59
59
|
popupProps?.onVisibleChange?.(v);
|
|
60
60
|
setActive(v);
|
|
61
61
|
};
|
|
62
|
+
const handleClear = () => {
|
|
63
|
+
setActive(false);
|
|
64
|
+
onClearProp?.();
|
|
65
|
+
};
|
|
62
66
|
react.useEffect(() => {
|
|
63
67
|
setInputValue(value);
|
|
64
68
|
}, [value]);
|
|
65
|
-
return (jsxRuntime.jsx(popup.default, { visible: active, trigger: 'click', position: 'bottom', arrow: false, align: 'start', onVisibleChange: handleVisibleChange, content: jsxRuntime.jsx(panel.default, { value: dayJsValue, weeks: weeks, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick }), ...popupProps, children: jsxRuntime.jsx(input.default, { value: inputValue, append: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.CalendarMonthTwotone, {}), className: 'i-datepicker-icon', size: '1em' }), placeholder: placeholder, onChange: handleChange, onBlur: handleBlur, onEnter: handleSetDate, className: classNames__default("i-datepicker-label", className), ...restProps }) }));
|
|
69
|
+
return (jsxRuntime.jsx(popup.default, { visible: active, trigger: 'click', position: 'bottom', arrow: false, align: 'start', onVisibleChange: handleVisibleChange, content: jsxRuntime.jsx(panel.default, { value: dayJsValue, weeks: weeks, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick }), ...popupProps, children: jsxRuntime.jsx(input.default, { value: inputValue, append: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.CalendarMonthTwotone, {}), className: 'i-datepicker-icon', size: '1em' }), placeholder: placeholder, clear: clear, onClear: handleClear, onChange: handleChange, onBlur: handleBlur, onEnter: handleSetDate, className: classNames__default("i-datepicker-label", className), ...restProps }) }));
|
|
66
70
|
};
|
|
67
71
|
|
|
68
72
|
exports.default = Datepicker;
|