@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.
Files changed (62) hide show
  1. package/lib/cjs/components/input/input.js +3 -1
  2. package/lib/cjs/components/input/input.js.map +1 -1
  3. package/lib/cjs/components/message/index.js +3 -2
  4. package/lib/cjs/components/message/index.js.map +1 -1
  5. package/lib/cjs/components/message/message.js +93 -50
  6. package/lib/cjs/components/message/message.js.map +1 -1
  7. package/lib/cjs/components/picker/daterange/daterange.js +60 -0
  8. package/lib/cjs/components/picker/daterange/daterange.js.map +1 -0
  9. package/lib/cjs/components/picker/daterange/index.js +11 -0
  10. package/lib/cjs/components/picker/daterange/index.js.map +1 -0
  11. package/lib/cjs/components/picker/daterange/panel.js +55 -0
  12. package/lib/cjs/components/picker/daterange/panel.js.map +1 -0
  13. package/lib/cjs/components/picker/dates/dates.js +12 -4
  14. package/lib/cjs/components/picker/dates/dates.js.map +1 -1
  15. package/lib/cjs/components/picker/dates/index.js +6 -2
  16. package/lib/cjs/components/picker/dates/index.js.map +1 -1
  17. package/lib/cjs/components/picker/dates/panel.js +22 -9
  18. package/lib/cjs/components/picker/dates/panel.js.map +1 -1
  19. package/lib/cjs/components/picker/time/index.js +6 -2
  20. package/lib/cjs/components/picker/time/index.js.map +1 -1
  21. package/lib/cjs/components/popconfirm/popconfirm.js +2 -4
  22. package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
  23. package/lib/cjs/index.js +10 -8
  24. package/lib/cjs/index.js.map +1 -1
  25. package/lib/css/colors.css +2 -2
  26. package/lib/css/index.css +1 -1
  27. package/lib/css/index.css.map +1 -1
  28. package/lib/css/input.css +12 -0
  29. package/lib/es/components/input/input.js +3 -1
  30. package/lib/es/components/input/input.js.map +1 -1
  31. package/lib/es/components/message/index.js +3 -3
  32. package/lib/es/components/message/index.js.map +1 -1
  33. package/lib/es/components/message/message.js +93 -51
  34. package/lib/es/components/message/message.js.map +1 -1
  35. package/lib/es/components/picker/daterange/daterange.js +50 -0
  36. package/lib/es/components/picker/daterange/daterange.js.map +1 -0
  37. package/lib/es/components/picker/daterange/index.js +6 -0
  38. package/lib/es/components/picker/daterange/index.js.map +1 -0
  39. package/lib/es/components/picker/daterange/panel.js +47 -0
  40. package/lib/es/components/picker/daterange/panel.js.map +1 -0
  41. package/lib/es/components/picker/dates/dates.js +12 -4
  42. package/lib/es/components/picker/dates/dates.js.map +1 -1
  43. package/lib/es/components/picker/dates/index.js +6 -2
  44. package/lib/es/components/picker/dates/index.js.map +1 -1
  45. package/lib/es/components/picker/dates/panel.js +22 -9
  46. package/lib/es/components/picker/dates/panel.js.map +1 -1
  47. package/lib/es/components/picker/time/index.js +6 -2
  48. package/lib/es/components/picker/time/index.js.map +1 -1
  49. package/lib/es/components/popconfirm/popconfirm.js +2 -4
  50. package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
  51. package/lib/es/index.js +2 -1
  52. package/lib/es/index.js.map +1 -1
  53. package/lib/index.js +223 -70
  54. package/lib/types/components/input/type.d.ts +1 -0
  55. package/lib/types/components/message/index.d.ts +5 -3
  56. package/lib/types/components/message/message.d.ts +5 -4
  57. package/lib/types/components/message/type.d.ts +25 -12
  58. package/lib/types/components/picker/daterange/daterange.d.ts +6 -0
  59. package/lib/types/components/picker/daterange/index.d.ts +5 -0
  60. package/lib/types/components/picker/type.d.ts +11 -2
  61. package/lib/types/index.d.ts +2 -1
  62. 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":"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"}
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 = message.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 client = require('react-dom/client');
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 GlobalConfig = {
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
- const size = queue[align][unshift ? "unshift" : "push"](item);
69
+ queue[align][unshift ? "unshift" : "push"](item);
76
70
  state.items[align] = [...queue[align]];
77
71
  item.close = this.close.bind(item);
78
- setTimeout(() => {
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][unshift ? 0 : size - 1].active = true;
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][unshift ? "unshift" : "push"](h);
87
+ heights[align][idx] = h;
83
88
  state.tops[align] = [...heights[align]];
84
89
  onShow?.();
85
- }, 12);
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 renderItems = (item, i) => {
113
- if (!item)
114
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
115
- const { id, active, content, align = "center", className } = item;
116
- offsetTop[align] += state.tops[align][i - 1] || 0;
117
- const top = GlobalConfig.gap * i + offsetTop[align];
118
- return (jsxRuntime.jsx(MessageItem, { ref: ref, active: active, content: content, top: top, className: className, style: { alignSelf: AlignMap[align] }, onClick: handler.close.bind(item) }, id));
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: 'i-messages', children: [state.items.left.map(renderItems), state.items.center.map(renderItems), state.items.right.map(renderItems)] }));
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 (["string", "number"].includes(typeof config) ||
124
- react.isValidElement(config)) {
158
+ if (typeof config !== "object" || react.isValidElement(config)) {
125
159
  config = { content: config };
126
160
  }
127
- config = Object.assign({ id: radash.uid(7) }, ItemDefaultConfig, config);
128
- handler.callout(config);
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: config,
131
- close: handler.close.bind(config),
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
- let container = null;
186
- let root = null;
187
- if (typeof window !== "undefined") {
188
- container = createContainer();
189
- if (container) {
190
- root = client.createRoot(container);
191
- root.render(jsxRuntime.jsx(Messages, {}));
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":"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"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var daterange = require('./daterange.js');
6
+
7
+
8
+
9
+ exports.DateRange = daterange.default;
10
+ exports.default = daterange.default;
11
+ //# sourceMappingURL=index.js.map
@@ -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
- 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', children: dates.map((date, i) => {
41
- const active = date.isSame(value, "day");
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
- }), onClick: () => handleDateClick(date), children: renderDate(date) }, i));
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 className='i-datepicker-dates'>\n\t\t\t\t{dates.map((date, i: number) => {\n\t\t\t\t\tconst active = date.isSame(value, \"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\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})}\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","_jsx","classNames"],"mappings":"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"}
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;