@ioca/react 1.4.74 → 1.4.76

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 (101) hide show
  1. package/lib/cjs/components/button/toggle.js +11 -18
  2. package/lib/cjs/components/button/toggle.js.map +1 -1
  3. package/lib/cjs/components/checkbox/checkbox.js +5 -8
  4. package/lib/cjs/components/checkbox/checkbox.js.map +1 -1
  5. package/lib/cjs/components/checkbox/item.js +15 -16
  6. package/lib/cjs/components/checkbox/item.js.map +1 -1
  7. package/lib/cjs/components/collapse/collapse.js +11 -13
  8. package/lib/cjs/components/collapse/collapse.js.map +1 -1
  9. package/lib/cjs/components/form/field.js +16 -20
  10. package/lib/cjs/components/form/field.js.map +1 -1
  11. package/lib/cjs/components/input/input.js +21 -18
  12. package/lib/cjs/components/input/input.js.map +1 -1
  13. package/lib/cjs/components/input/number.js +65 -19
  14. package/lib/cjs/components/input/number.js.map +1 -1
  15. package/lib/cjs/components/input/range.js +10 -13
  16. package/lib/cjs/components/input/range.js.map +1 -1
  17. package/lib/cjs/components/input/textarea.js +4 -7
  18. package/lib/cjs/components/input/textarea.js.map +1 -1
  19. package/lib/cjs/components/picker/colors/footer.js +7 -10
  20. package/lib/cjs/components/picker/colors/footer.js.map +1 -1
  21. package/lib/cjs/components/picker/colors/index.js +23 -21
  22. package/lib/cjs/components/picker/colors/index.js.map +1 -1
  23. package/lib/cjs/components/picker/dates/index.js +9 -12
  24. package/lib/cjs/components/picker/dates/index.js.map +1 -1
  25. package/lib/cjs/components/picker/dates/panel.js +29 -35
  26. package/lib/cjs/components/picker/dates/panel.js.map +1 -1
  27. package/lib/cjs/components/picker/time/index.js +8 -12
  28. package/lib/cjs/components/picker/time/index.js.map +1 -1
  29. package/lib/cjs/components/picker/time/panel.js +38 -21
  30. package/lib/cjs/components/picker/time/panel.js.map +1 -1
  31. package/lib/cjs/components/popconfirm/popconfirm.js +1 -1
  32. package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
  33. package/lib/cjs/components/popup/content.js +5 -9
  34. package/lib/cjs/components/popup/content.js.map +1 -1
  35. package/lib/cjs/components/popup/popup.js +388 -157
  36. package/lib/cjs/components/popup/popup.js.map +1 -1
  37. package/lib/cjs/components/radio/radio.js +4 -7
  38. package/lib/cjs/components/radio/radio.js.map +1 -1
  39. package/lib/cjs/components/select/select.js +19 -24
  40. package/lib/cjs/components/select/select.js.map +1 -1
  41. package/lib/cjs/components/tabs/tabs.js +61 -54
  42. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  43. package/lib/cjs/components/tree/tree.js +24 -26
  44. package/lib/cjs/components/tree/tree.js.map +1 -1
  45. package/lib/cjs/components/upload/upload.js +26 -33
  46. package/lib/cjs/components/upload/upload.js.map +1 -1
  47. package/lib/cjs/js/hooks.js +0 -4
  48. package/lib/cjs/js/hooks.js.map +1 -1
  49. package/lib/css/index.css +1 -1
  50. package/lib/css/index.css.map +1 -1
  51. package/lib/es/components/button/toggle.js +12 -19
  52. package/lib/es/components/button/toggle.js.map +1 -1
  53. package/lib/es/components/checkbox/checkbox.js +6 -9
  54. package/lib/es/components/checkbox/checkbox.js.map +1 -1
  55. package/lib/es/components/checkbox/item.js +16 -17
  56. package/lib/es/components/checkbox/item.js.map +1 -1
  57. package/lib/es/components/collapse/collapse.js +12 -14
  58. package/lib/es/components/collapse/collapse.js.map +1 -1
  59. package/lib/es/components/form/field.js +17 -21
  60. package/lib/es/components/form/field.js.map +1 -1
  61. package/lib/es/components/input/input.js +22 -19
  62. package/lib/es/components/input/input.js.map +1 -1
  63. package/lib/es/components/input/number.js +67 -21
  64. package/lib/es/components/input/number.js.map +1 -1
  65. package/lib/es/components/input/range.js +11 -14
  66. package/lib/es/components/input/range.js.map +1 -1
  67. package/lib/es/components/input/textarea.js +5 -8
  68. package/lib/es/components/input/textarea.js.map +1 -1
  69. package/lib/es/components/picker/colors/footer.js +8 -11
  70. package/lib/es/components/picker/colors/footer.js.map +1 -1
  71. package/lib/es/components/picker/colors/index.js +24 -22
  72. package/lib/es/components/picker/colors/index.js.map +1 -1
  73. package/lib/es/components/picker/dates/index.js +9 -12
  74. package/lib/es/components/picker/dates/index.js.map +1 -1
  75. package/lib/es/components/picker/dates/panel.js +30 -36
  76. package/lib/es/components/picker/dates/panel.js.map +1 -1
  77. package/lib/es/components/picker/time/index.js +8 -12
  78. package/lib/es/components/picker/time/index.js.map +1 -1
  79. package/lib/es/components/picker/time/panel.js +39 -22
  80. package/lib/es/components/picker/time/panel.js.map +1 -1
  81. package/lib/es/components/popconfirm/popconfirm.js +1 -1
  82. package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
  83. package/lib/es/components/popup/content.js +6 -10
  84. package/lib/es/components/popup/content.js.map +1 -1
  85. package/lib/es/components/popup/popup.js +390 -159
  86. package/lib/es/components/popup/popup.js.map +1 -1
  87. package/lib/es/components/radio/radio.js +5 -8
  88. package/lib/es/components/radio/radio.js.map +1 -1
  89. package/lib/es/components/select/select.js +19 -24
  90. package/lib/es/components/select/select.js.map +1 -1
  91. package/lib/es/components/tabs/tabs.js +63 -56
  92. package/lib/es/components/tabs/tabs.js.map +1 -1
  93. package/lib/es/components/tree/tree.js +25 -27
  94. package/lib/es/components/tree/tree.js.map +1 -1
  95. package/lib/es/components/upload/upload.js +27 -34
  96. package/lib/es/components/upload/upload.js.map +1 -1
  97. package/lib/es/js/hooks.js +2 -5
  98. package/lib/es/js/hooks.js.map +1 -1
  99. package/lib/index.js +803 -541
  100. package/lib/types/components/popup/type.d.ts +0 -4
  101. package/package.json +100 -99
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sources":["../../../../packages/components/input/number.tsx"],"sourcesContent":["import {\n\tKeyboardDoubleArrowUpRound,\n\tMinusRound,\n\tPlusRound,\n} from \"@ricons/material\";\nimport { useReactive } from \"@p/js/hooks\";\nimport classNames from \"classnames\";\nimport { ChangeEvent, useEffect } from \"react\";\nimport \"../../css/input.css\";\nimport { clamp, formatNumber } from \"../../js/utils\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport type { IInputNumber } from \"./type\";\n\nconst Number = (props: IInputNumber) => {\n\tconst {\n\t\tref,\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tlabelInline,\n\t\tstep = 1,\n\t\tmin = -Infinity,\n\t\tmax = Infinity,\n\t\tthousand,\n\t\tprecision,\n\t\ttype,\n\t\tclassName,\n\t\twidth,\n\t\tstatus = \"normal\",\n\t\tappend,\n\t\tborder,\n\t\tprepend,\n\t\tdisabled,\n\t\tmessage,\n\t\ttip,\n\t\thideControl,\n\t\tshowMax,\n\t\tstyle,\n\t\tonChange,\n\t\tonEnter,\n\t\tonInput,\n\t\tonBlur,\n\t\t...restProps\n\t} = props;\n\n\tconst state = useReactive({\n\t\tvalue,\n\t});\n\n\tconst getRangeNumber = (v: number) => clamp(v, min, max);\n\n\tconst getFormatNumber = (v: number) =>\n\t\tformatNumber(v, { precision, thousand });\n\n\tconst formatInputValue = (v?: string | number) => {\n\t\tif (!v) return \"\";\n\t\tif (typeof v === \"number\") return v.toString();\n\t\tif (!thousand) return v;\n\n\t\treturn v.split(thousand).join(\"\");\n\t};\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst { value } = e.target;\n\t\tconst v = formatInputValue(value.replace(/[^\\d\\.-]/g, \"\")); // 保留负号和小数点\n\t\tconst numValue = clamp(+v, min, max); // 确保值在范围内\n\n\t\tstate.value = getFormatNumber(numValue); // 修复 thousand 格式化\n\t\tonChange?.(numValue, e);\n\t};\n\n\tconst handleOperate = (param: number) => {\n\t\tconst value = parseFloat(formatInputValue(state.value)) || 0; // 确保值为数字,默认值为 0\n\t\tconst result = getRangeNumber(value + param);\n\n\t\tstate.value = getFormatNumber(result);\n\n\t\tonChange?.(result);\n\t};\n\n\tconst handleMax = () => {\n\t\tconst result = getRangeNumber(max);\n\t\tstate.value = getFormatNumber(result);\n\t\tonChange?.(result);\n\t};\n\n\tuseEffect(() => {\n\t\tstate.value = value;\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tref,\n\t\tname,\n\t\tdisabled,\n\t\tvalue: state.value,\n\t\tclassName: \"i-input i-input-number\",\n\t\tonChange: handleChange,\n\t\t...restProps,\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t{!hideControl && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={() => handleOperate(-step)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input {...inputProps} />\n\n\t\t\t\t{!hideControl && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={() => handleOperate(step)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{showMax && max && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<KeyboardDoubleArrowUpRound />}\n\t\t\t\t\t\tonClick={handleMax}\n\t\t\t\t\t/>\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};\n\nexport default Number;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"number.js","sources":["../../../../packages/components/input/number.tsx"],"sourcesContent":["import {\n\tKeyboardDoubleArrowUpRound,\n\tMinusRound,\n\tPlusRound,\n} from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport {\n\tChangeEvent,\n\tuseEffect,\n\tuseState,\n\ttype FocusEvent,\n\ttype KeyboardEvent,\n} from \"react\";\nimport \"../../css/input.css\";\nimport { clamp, formatNumber } from \"../../js/utils\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport type { IInputNumber } from \"./type\";\n\nconst Number = (props: IInputNumber) => {\n\tconst {\n\t\tref,\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tlabelInline,\n\t\tstep = 1,\n\t\tmin = -Infinity,\n\t\tmax = Infinity,\n\t\tthousand,\n\t\tprecision,\n\t\ttype,\n\t\tclassName,\n\t\twidth,\n\t\tstatus = \"normal\",\n\t\tappend,\n\t\tborder,\n\t\tprepend,\n\t\tdisabled,\n\t\tmessage,\n\t\ttip,\n\t\thideControl,\n\t\tshowMax,\n\t\tstyle,\n\t\tonChange,\n\t\tonEnter,\n\t\tonInput,\n\t\tonBlur,\n\t\t...restProps\n\t} = props;\n\n\tconst [inputValue, setInputValue] = useState<string>(\n\t\tvalue === undefined || value === null ? \"\" : String(value),\n\t);\n\n\tconst formatOut = (num: number) => {\n\t\tconst v = clamp(num, min, max);\n\t\tif (precision !== undefined)\n\t\t\treturn formatNumber(v, { precision, thousand });\n\t\tconst s = String(v);\n\t\tif (!thousand) return s;\n\t\tconst negative = s.startsWith(\"-\");\n\t\tconst body = negative ? s.slice(1) : s;\n\t\tconst [integer, decimal] = body.split(\".\");\n\t\tconst withThousand = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousand);\n\t\treturn decimal\n\t\t\t? `${negative ? \"-\" : \"\"}${withThousand}.${decimal}`\n\t\t\t: `${negative ? \"-\" : \"\"}${withThousand}`;\n\t};\n\n\tconst sanitizeNumberInput = (raw: string) => {\n\t\tconst hasMinus = raw.startsWith(\"-\");\n\t\tlet v = raw.replace(/[^\\d.]/g, \"\");\n\t\tif (hasMinus) v = `-${v}`;\n\n\t\tconst parts = v.split(\".\");\n\t\tif (parts.length > 1) {\n\t\t\tv = `${parts.shift()}.${parts.join(\"\")}`;\n\t\t}\n\n\t\treturn v;\n\t};\n\n\tconst formatInputValue = (v?: string | number) => {\n\t\tif (!v) return \"\";\n\t\tif (typeof v === \"number\") return v.toString();\n\t\tif (!thousand) return v;\n\n\t\treturn v.split(thousand).join(\"\");\n\t};\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst { value } = e.target;\n\t\tconst v = sanitizeNumberInput(formatInputValue(value));\n\t\tconst isIntermediate =\n\t\t\tv === \"\" || v === \"-\" || v === \".\" || v === \"-.\" || v.endsWith(\".\");\n\n\t\tsetInputValue(v);\n\t\tif (isIntermediate) return;\n\n\t\tconst num = parseFloat(v);\n\t\tif (globalThis.Number.isNaN(num)) return;\n\n\t\tonChange?.(clamp(num, min, max), e);\n\t\tif (precision !== undefined) setInputValue(formatOut(num));\n\t};\n\n\tconst handleOperate = (param: number) => {\n\t\tconst value = parseFloat(formatInputValue(inputValue)) || 0; // 确保值为数字,默认值为 0\n\t\tconst result = value + param;\n\t\tsetInputValue(formatOut(result));\n\t\tonChange?.(clamp(result, min, max));\n\t};\n\n\tconst handleMax = () => {\n\t\tsetInputValue(formatOut(max));\n\t\tonChange?.(clamp(max, min, max));\n\t};\n\n\tconst handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n\t\tonBlur?.(e);\n\n\t\tconst v = sanitizeNumberInput(formatInputValue(inputValue));\n\t\tif (!v || v === \"-\" || v === \".\" || v === \"-.\") {\n\t\t\tsetInputValue(\"\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst num = parseFloat(v);\n\t\tif (globalThis.Number.isNaN(num)) return;\n\n\t\tconst numValue = clamp(num, min, max);\n\t\tsetInputValue(formatOut(numValue));\n\t\tonChange?.(numValue, e);\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputValue(\n\t\t\tvalue === undefined || value === null ? \"\" : String(value),\n\t\t);\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tref,\n\t\tname,\n\t\tdisabled,\n\t\tvalue: inputValue,\n\t\tclassName: \"i-input i-input-number\",\n\t\tonChange: handleChange,\n\t\tonKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n\t\t\te.code === \"Enter\" && onEnter?.(e);\n\t\t},\n\t\tonInput,\n\t\tonBlur: handleBlur,\n\t\t...restProps,\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t{!hideControl && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={() => handleOperate(-step)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input {...inputProps} />\n\n\t\t\t\t{!hideControl && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={() => handleOperate(step)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{showMax && max && !disabled && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<KeyboardDoubleArrowUpRound />}\n\t\t\t\t\t\tonClick={handleMax}\n\t\t\t\t\t/>\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};\n\nexport default Number;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,17 +1,14 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { MinusRound, PlusRound, SyncAltRound } from '@ricons/material';
3
- import { useReactive } from '../../js/hooks.js';
4
3
  import classNames from 'classnames';
5
- import { useEffect } from 'react';
4
+ import { useState, useEffect } from 'react';
6
5
  import { formatNumber, clamp } from '../../js/utils.js';
7
6
  import Helpericon from '../utils/helpericon/helpericon.js';
8
7
  import InputContainer from './container.js';
9
8
 
10
9
  const Range = (props) => {
11
10
  const { label, name, value, labelInline, min = -Infinity, max = Infinity, type, className, status = "normal", message, tip, append, prepend, step = 1, width, thousand, precision, hideControl, placeholder, border, autoSwitch, onChange, onBlur, style, ...restProps } = props;
12
- const state = useReactive({
13
- value,
14
- });
11
+ const [rangeValue, setRangeValue] = useState(value);
15
12
  const getRangeNumber = (v) => clamp(v, min, max);
16
13
  const getFormatNumber = (v) => formatNumber(v, { precision, thousand });
17
14
  const formatInputValue = (v) => {
@@ -24,31 +21,31 @@ const Range = (props) => {
24
21
  const handleChange = (e, i) => {
25
22
  const { value } = e.target;
26
23
  const v = formatInputValue(value.replace(/[^\d\.-]/g, ""));
27
- const range = Array.isArray(state.value) ? state.value : [];
24
+ const range = Array.isArray(rangeValue) ? [...rangeValue] : [];
28
25
  range[i] = v;
29
- state.value = range;
26
+ setRangeValue(range);
30
27
  onChange?.(range, e);
31
28
  };
32
29
  const handleOperate = (e, param, i) => {
33
30
  e.preventDefault();
34
31
  e.stopPropagation();
35
- const range = Array.isArray(state.value) ? state.value : [];
32
+ const range = Array.isArray(rangeValue) ? [...rangeValue] : [];
36
33
  const value = formatInputValue(range[i]) ?? 0;
37
34
  const result = getRangeNumber(+value + param);
38
35
  range[i] = getFormatNumber(result);
39
- state.value = range;
36
+ setRangeValue(range);
40
37
  onChange?.(range, e);
41
38
  };
42
39
  const handleSwitch = (e) => {
43
40
  e?.preventDefault();
44
41
  e?.stopPropagation();
45
- const range = state.value ? state.value : [];
42
+ const range = Array.isArray(rangeValue) ? [...rangeValue] : [];
46
43
  [range[0], range[1]] = [range[1], range[0]];
47
- state.value = range;
44
+ setRangeValue(range);
48
45
  onChange?.(range);
49
46
  };
50
47
  useEffect(() => {
51
- state.value = value;
48
+ setRangeValue(value);
52
49
  }, [value]);
53
50
  const inputProps = {
54
51
  name,
@@ -58,7 +55,7 @@ const Range = (props) => {
58
55
  const handleBlur = () => {
59
56
  if (!autoSwitch)
60
57
  return;
61
- const range = Array.isArray(state.value) ? state.value : [];
58
+ const range = Array.isArray(rangeValue) ? rangeValue : [];
62
59
  if (range.length < 2)
63
60
  return;
64
61
  const [left, right] = range.map(Number);
@@ -69,7 +66,7 @@ const Range = (props) => {
69
66
  return (jsx(InputContainer, { label: label, labelInline: labelInline, className: className, style: { width, ...style }, tip: message ?? tip, status: status, children: jsxs("div", { className: classNames("i-input-item", {
70
67
  [`i-input-${status}`]: status !== "normal",
71
68
  "i-input-borderless": !border,
72
- }), children: [prepend && jsx("div", { className: 'i-input-prepend', children: prepend }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 0) })), jsx("input", { value: state.value?.[0] || "", placeholder: placeholder?.[0], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 0) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 0) })), jsx(Helpericon, { active: true, icon: jsx(SyncAltRound, {}), style: { margin: 0 }, onClick: handleSwitch }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 1) })), jsx("input", { value: state.value?.[1] || "", placeholder: placeholder?.[1], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 1) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 1) })), append && jsx("div", { className: 'i-input-append', children: append })] }) }));
69
+ }), children: [prepend && jsx("div", { className: 'i-input-prepend', children: prepend }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 0) })), jsx("input", { value: rangeValue?.[0] || "", placeholder: placeholder?.[0], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 0) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 0) })), jsx(Helpericon, { active: true, icon: jsx(SyncAltRound, {}), style: { margin: 0 }, onClick: handleSwitch }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 1) })), jsx("input", { value: rangeValue?.[1] || "", placeholder: placeholder?.[1], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 1) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 1) })), append && jsx("div", { className: 'i-input-append', children: append })] }) }));
73
70
  };
74
71
 
75
72
  export { Range as default };
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","sources":["../../../../packages/components/input/range.tsx"],"sourcesContent":["import { MinusRound, PlusRound, SyncAltRound } from \"@ricons/material\";\nimport { useReactive } from \"@p/js/hooks\";\nimport classNames from \"classnames\";\nimport { ChangeEvent, MouseEvent, useEffect } from \"react\";\nimport \"../../css/input.css\";\nimport { clamp, formatNumber } from \"../../js/utils\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport type { IInputRange } from \"./type\";\n\nconst Range = (props: IInputRange) => {\n\tconst {\n\t\tlabel,\n\t\tname,\n\t\tvalue,\n\t\tlabelInline,\n\t\tmin = -Infinity,\n\t\tmax = Infinity,\n\t\ttype,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tappend,\n\t\tprepend,\n\t\tstep = 1,\n\t\twidth,\n\t\tthousand,\n\t\tprecision,\n\t\thideControl,\n\t\tplaceholder,\n\t\tborder,\n\t\tautoSwitch,\n\t\tonChange,\n\t\tonBlur,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst state = useReactive({\n\t\tvalue,\n\t});\n\n\tconst getRangeNumber = (v: number) => clamp(v, min, max);\n\n\tconst getFormatNumber = (v: number) =>\n\t\tformatNumber(v, { precision, thousand });\n\n\tconst formatInputValue = (v?: string | number) => {\n\t\tif (!v) return \"\";\n\t\tif (typeof v === \"number\" || !thousand) return v;\n\n\t\treturn v.replaceAll(thousand, \"\");\n\t};\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>, i: number) => {\n\t\tconst { value } = e.target;\n\t\tconst v = formatInputValue(value.replace(/[^\\d\\.-]/g, \"\"));\n\t\tconst range = Array.isArray(state.value) ? state.value : [];\n\n\t\trange[i] = v;\n\t\tstate.value = range;\n\t\tonChange?.(range, e);\n\t};\n\n\tconst handleOperate = (\n\t\te: MouseEvent<Element>,\n\t\tparam: number,\n\t\ti: number\n\t) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst range = Array.isArray(state.value) ? state.value : [];\n\t\tconst value = formatInputValue(range[i]) ?? 0;\n\t\tconst result = getRangeNumber(+value + param);\n\n\t\trange[i] = getFormatNumber(result);\n\n\t\tstate.value = range;\n\t\tonChange?.(range, e);\n\t};\n\n\tconst handleSwitch = (e?: MouseEvent) => {\n\t\te?.preventDefault();\n\t\te?.stopPropagation();\n\t\tconst range = state.value ? state.value : [];\n\t\t[range[0], range[1]] = [range[1], range[0]];\n\n\t\tstate.value = range;\n\t\tonChange?.(range);\n\t};\n\n\tuseEffect(() => {\n\t\tstate.value = value;\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tname,\n\t\tclassName: \"i-input i-input-number\",\n\t\t...restProps,\n\t};\n\n\tconst handleBlur = () => {\n\t\tif (!autoSwitch) return;\n\t\tconst range = Array.isArray(state.value) ? state.value : [];\n\n\t\tif (range.length < 2) return;\n\n\t\tconst [left, right] = range.map(Number);\n\t\tif (left > right) {\n\t\t\thandleSwitch();\n\t\t}\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, -step, 0)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tvalue={state.value?.[0] || \"\"}\n\t\t\t\t\tplaceholder={placeholder?.[0]}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonChange={(e) => handleChange(e, 0)}\n\t\t\t\t/>\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, step, 0)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<Helpericon\n\t\t\t\t\tactive\n\t\t\t\t\ticon={<SyncAltRound />}\n\t\t\t\t\tstyle={{ margin: 0 }}\n\t\t\t\t\tonClick={handleSwitch}\n\t\t\t\t/>\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, -step, 1)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tvalue={state.value?.[1] || \"\"}\n\t\t\t\t\tplaceholder={placeholder?.[1]}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonChange={(e) => handleChange(e, 1)}\n\t\t\t\t/>\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, step, 1)}\n\t\t\t\t\t/>\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};\n\nexport default Range;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AAUA,MAAM,KAAK,GAAG,CAAC,KAAkB,KAAI;AACpC,IAAA,MAAM,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,WAAW,EACX,GAAG,GAAG,CAAC,QAAQ,EACf,GAAG,GAAG,QAAQ,EACd,IAAI,EACJ,SAAS,EACT,MAAM,GAAG,QAAQ,EACjB,OAAO,EACP,GAAG,EACH,MAAM,EACN,OAAO,EACP,IAAI,GAAG,CAAC,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,SAAS,EACZ,GAAG,KAAK;IAET,MAAM,KAAK,GAAG,WAAW,CAAC;QACzB,KAAK;AACL,KAAA,CAAC;AAEF,IAAA,MAAM,cAAc,GAAG,CAAC,CAAS,KAAK,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAExD,IAAA,MAAM,eAAe,GAAG,CAAC,CAAS,KACjC,YAAY,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAEzC,IAAA,MAAM,gBAAgB,GAAG,CAAC,CAAmB,KAAI;AAChD,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;AACjB,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC;QAEhD,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;AAClC,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,CAAS,KAAI;AACpE,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM;AAC1B,QAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;AAE3D,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AACZ,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;AACrB,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,CACrB,CAAsB,EACtB,KAAa,EACb,CAAS,KACN;QACH,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QAE7C,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;AAElC,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;AACrB,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,CAAc,KAAI;QACvC,CAAC,EAAE,cAAc,EAAE;QACnB,CAAC,EAAE,eAAe,EAAE;AACpB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;QAC5C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3C,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,QAAQ,GAAG,KAAK,CAAC;AAClB,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACd,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,UAAU,GAAG;QAClB,IAAI;AACJ,QAAA,SAAS,EAAE,wBAAwB;AACnC,QAAA,GAAG,SAAS;KACZ;IAED,MAAM,UAAU,GAAG,MAAK;AACvB,QAAA,IAAI,CAAC,UAAU;YAAE;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;AAE3D,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE;AAEtB,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,IAAI,GAAG,KAAK,EAAE;AACjB,YAAA,YAAY,EAAE;QACf;AACD,IAAA,CAAC;AAED,IAAA,QACCA,GAAA,CAAC,cAAc,IACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAC1B,GAAG,EAAE,OAAO,IAAI,GAAG,EACnB,MAAM,EAAE,MAAM,YAEdC,IAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACrC,gBAAA,CAAC,WAAW,MAAM,CAAA,CAAE,GAAG,MAAM,KAAK,QAAQ;gBAC1C,oBAAoB,EAAE,CAAC,MAAM;AAC7B,aAAA,CAAC,EAAA,QAAA,EAAA,CAED,OAAO,IAAID,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,OAAO,EAAA,CAAO,EAE3D,CAAC,WAAW,KACZA,GAAA,CAAC,UAAU,EAAA,EACV,MAAM,EAAA,IAAA,EACN,IAAI,EAAEA,GAAA,CAAC,UAAU,EAAA,EAAA,CAAG,EACpB,OAAO,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAA,CACzC,CACF,EAEDA,eACC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,EAC7B,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,EAAA,GACzB,UAAU,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA,CAClC,EAED,CAAC,WAAW,KACZA,GAAA,CAAC,UAAU,EAAA,EACV,MAAM,QACN,IAAI,EAAEA,GAAA,CAAC,SAAS,EAAA,EAAA,CAAG,EACnB,OAAO,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CACxC,CACF,EACDA,GAAA,CAAC,UAAU,EAAA,EACV,MAAM,EAAA,IAAA,EACN,IAAI,EAAEA,GAAA,CAAC,YAAY,KAAG,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACpB,OAAO,EAAE,YAAY,EAAA,CACpB,EACD,CAAC,WAAW,KACZA,GAAA,CAAC,UAAU,EAAA,EACV,MAAM,EAAA,IAAA,EACN,IAAI,EAAEA,GAAA,CAAC,UAAU,EAAA,EAAA,CAAG,EACpB,OAAO,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAA,CACzC,CACF,EAEDA,GAAA,CAAA,OAAA,EAAA,EACC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,EAC7B,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,EAAA,GACzB,UAAU,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA,CAClC,EAED,CAAC,WAAW,KACZA,GAAA,CAAC,UAAU,EAAA,EACV,MAAM,EAAA,IAAA,EACN,IAAI,EAAEA,GAAA,CAAC,SAAS,EAAA,EAAA,CAAG,EACnB,OAAO,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CACxC,CACF,EAEA,MAAM,IAAIA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAE,MAAM,EAAA,CAAO,CAAA,EAAA,CACpD,EAAA,CACU;AAEnB;;;;"}
1
+ {"version":3,"file":"range.js","sources":["../../../../packages/components/input/range.tsx"],"sourcesContent":["import { MinusRound, PlusRound, SyncAltRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { ChangeEvent, MouseEvent, useEffect, useState } from \"react\";\nimport \"../../css/input.css\";\nimport { clamp, formatNumber } from \"../../js/utils\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport type { IInputRange } from \"./type\";\n\nconst Range = (props: IInputRange) => {\n\tconst {\n\t\tlabel,\n\t\tname,\n\t\tvalue,\n\t\tlabelInline,\n\t\tmin = -Infinity,\n\t\tmax = Infinity,\n\t\ttype,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tappend,\n\t\tprepend,\n\t\tstep = 1,\n\t\twidth,\n\t\tthousand,\n\t\tprecision,\n\t\thideControl,\n\t\tplaceholder,\n\t\tborder,\n\t\tautoSwitch,\n\t\tonChange,\n\t\tonBlur,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst [rangeValue, setRangeValue] = useState(value);\n\n\tconst getRangeNumber = (v: number) => clamp(v, min, max);\n\n\tconst getFormatNumber = (v: number) =>\n\t\tformatNumber(v, { precision, thousand });\n\n\tconst formatInputValue = (v?: string | number) => {\n\t\tif (!v) return \"\";\n\t\tif (typeof v === \"number\" || !thousand) return v;\n\n\t\treturn v.replaceAll(thousand, \"\");\n\t};\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>, i: number) => {\n\t\tconst { value } = e.target;\n\t\tconst v = formatInputValue(value.replace(/[^\\d\\.-]/g, \"\"));\n\t\tconst range = Array.isArray(rangeValue) ? [...rangeValue] : [];\n\n\t\trange[i] = v;\n\t\tsetRangeValue(range);\n\t\tonChange?.(range, e);\n\t};\n\n\tconst handleOperate = (\n\t\te: MouseEvent<Element>,\n\t\tparam: number,\n\t\ti: number\n\t) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst range = Array.isArray(rangeValue) ? [...rangeValue] : [];\n\t\tconst value = formatInputValue(range[i]) ?? 0;\n\t\tconst result = getRangeNumber(+value + param);\n\n\t\trange[i] = getFormatNumber(result);\n\n\t\tsetRangeValue(range);\n\t\tonChange?.(range, e);\n\t};\n\n\tconst handleSwitch = (e?: MouseEvent) => {\n\t\te?.preventDefault();\n\t\te?.stopPropagation();\n\t\tconst range = Array.isArray(rangeValue) ? [...rangeValue] : [];\n\t\t[range[0], range[1]] = [range[1], range[0]];\n\n\t\tsetRangeValue(range);\n\t\tonChange?.(range);\n\t};\n\n\tuseEffect(() => {\n\t\tsetRangeValue(value);\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tname,\n\t\tclassName: \"i-input i-input-number\",\n\t\t...restProps,\n\t};\n\n\tconst handleBlur = () => {\n\t\tif (!autoSwitch) return;\n\t\tconst range = Array.isArray(rangeValue) ? rangeValue : [];\n\n\t\tif (range.length < 2) return;\n\n\t\tconst [left, right] = range.map(Number);\n\t\tif (left > right) {\n\t\t\thandleSwitch();\n\t\t}\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, -step, 0)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tvalue={rangeValue?.[0] || \"\"}\n\t\t\t\t\tplaceholder={placeholder?.[0]}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonChange={(e) => handleChange(e, 0)}\n\t\t\t\t/>\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, step, 0)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<Helpericon\n\t\t\t\t\tactive\n\t\t\t\t\ticon={<SyncAltRound />}\n\t\t\t\t\tstyle={{ margin: 0 }}\n\t\t\t\t\tonClick={handleSwitch}\n\t\t\t\t/>\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<MinusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, -step, 1)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tvalue={rangeValue?.[1] || \"\"}\n\t\t\t\t\tplaceholder={placeholder?.[1]}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonChange={(e) => handleChange(e, 1)}\n\t\t\t\t/>\n\n\t\t\t\t{!hideControl && (\n\t\t\t\t\t<Helpericon\n\t\t\t\t\t\tactive\n\t\t\t\t\t\ticon={<PlusRound />}\n\t\t\t\t\t\tonClick={(e) => handleOperate(e, step, 1)}\n\t\t\t\t\t/>\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};\n\nexport default Range;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,18 +1,15 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useReactive } from '../../js/hooks.js';
3
2
  import classNames from 'classnames';
4
- import { useRef, useEffect, useImperativeHandle } from 'react';
3
+ import { useState, useRef, useEffect, useImperativeHandle } from 'react';
5
4
  import InputContainer from './container.js';
6
5
 
7
6
  const Textarea = (props) => {
8
7
  const { ref, label, name, value = "", labelInline, className, status = "normal", message, tip, autoSize, border, width, style, onChange, onEnter, ...restProps } = props;
9
- const state = useReactive({
10
- value,
11
- });
8
+ const [textareaValue, setTextareaValue] = useState(value);
12
9
  const refTextarea = useRef(null);
13
10
  const handleChange = (e) => {
14
11
  const v = e.target.value;
15
- state.value = v;
12
+ setTextareaValue(v);
16
13
  const ta = refTextarea.current;
17
14
  if (autoSize && ta) {
18
15
  ta.style.height = `${ta.scrollHeight}px`;
@@ -26,7 +23,7 @@ const Textarea = (props) => {
26
23
  onEnter?.(e);
27
24
  };
28
25
  useEffect(() => {
29
- state.value = value;
26
+ setTextareaValue(value);
30
27
  }, [value]);
31
28
  useImperativeHandle(ref, () => {
32
29
  return {
@@ -36,7 +33,7 @@ const Textarea = (props) => {
36
33
  const inputProps = {
37
34
  ref: refTextarea,
38
35
  name,
39
- value: state.value,
36
+ value: textareaValue,
40
37
  className: "i-input i-textarea",
41
38
  onChange: handleChange,
42
39
  onKeyDown: handleKeydown,
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","sources":["../../../../packages/components/input/textarea.tsx"],"sourcesContent":["import { useReactive } from \"@p/js/hooks\";\nimport classNames from \"classnames\";\nimport { ChangeEvent, useEffect, useImperativeHandle, useRef } from \"react\";\nimport \"../../css/input.css\";\nimport InputContainer from \"./container\";\nimport type { ITextarea } from \"./type\";\n\nconst Textarea = (props: ITextarea) => {\n\tconst {\n\t\tref,\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tlabelInline,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tautoSize,\n\t\tborder,\n\t\twidth,\n\t\tstyle,\n\t\tonChange,\n\t\tonEnter,\n\t\t...restProps\n\t} = props;\n\n\tconst state = useReactive({\n\t\tvalue,\n\t});\n\tconst refTextarea = useRef<HTMLTextAreaElement>(null);\n\n\tconst handleChange = (\n\t\te: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n\t) => {\n\t\tconst v = e.target.value;\n\n\t\tstate.value = v;\n\n\t\tconst ta = refTextarea.current as HTMLElement;\n\t\tif (autoSize && ta) {\n\t\t\tta.style.height = `${ta.scrollHeight}px`;\n\t\t}\n\n\t\tonChange?.(v, e);\n\t};\n\n\tconst handleKeydown = (e) => {\n\t\tif (e.code !== \"Enter\") return;\n\n\t\te.stopPropagation();\n\t\tonEnter?.(e);\n\t};\n\n\tuseEffect(() => {\n\t\tstate.value = value;\n\t}, [value]);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tinput: refTextarea.current,\n\t\t};\n\t});\n\n\tconst inputProps = {\n\t\tref: refTextarea,\n\t\tname,\n\t\tvalue: state.value,\n\t\tclassName: \"i-input i-textarea\",\n\t\tonChange: handleChange,\n\t\tonKeyDown: handleKeydown,\n\t\t...restProps,\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t<textarea {...inputProps} />\n\t\t\t</div>\n\t\t</InputContainer>\n\t);\n};\n\nexport default Textarea;\n"],"names":["_jsx"],"mappings":";;;;;;AAOA,MAAM,QAAQ,GAAG,CAAC,KAAgB,KAAI;AACrC,IAAA,MAAM,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,EAAE,EACV,WAAW,EACX,SAAS,EACT,MAAM,GAAG,QAAQ,EACjB,OAAO,EACP,GAAG,EACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,GAAG,SAAS,EACZ,GAAG,KAAK;IAET,MAAM,KAAK,GAAG,WAAW,CAAC;QACzB,KAAK;AACL,KAAA,CAAC;AACF,IAAA,MAAM,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC;AAErD,IAAA,MAAM,YAAY,GAAG,CACpB,CAAsD,KACnD;AACH,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;AAExB,QAAA,KAAK,CAAC,KAAK,GAAG,CAAC;AAEf,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,OAAsB;AAC7C,QAAA,IAAI,QAAQ,IAAI,EAAE,EAAE;YACnB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA,EAAA,CAAI;QACzC;AAEA,QAAA,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,CAAC,KAAI;AAC3B,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE;QAExB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,OAAO,GAAG,CAAC,CAAC;AACb,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACd,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,mBAAmB,CAAC,GAAG,EAAE,MAAK;QAC7B,OAAO;YACN,KAAK,EAAE,WAAW,CAAC,OAAO;SAC1B;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AAClB,QAAA,GAAG,EAAE,WAAW;QAChB,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,GAAG,SAAS;KACZ;AAED,IAAA,QACCA,GAAA,CAAC,cAAc,IACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAC1B,GAAG,EAAE,OAAO,IAAI,GAAG,EACnB,MAAM,EAAE,MAAM,YAEdA,GAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACrC,gBAAA,CAAC,WAAW,MAAM,CAAA,CAAE,GAAG,MAAM,KAAK,QAAQ;gBAC1C,oBAAoB,EAAE,CAAC,MAAM;AAC7B,aAAA,CAAC,YAEFA,GAAA,CAAA,UAAA,EAAA,EAAA,GAAc,UAAU,GAAI,EAAA,CACvB,EAAA,CACU;AAEnB;;;;"}
1
+ {"version":3,"file":"textarea.js","sources":["../../../../packages/components/input/textarea.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport {\n\tChangeEvent,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n\ttype KeyboardEvent,\n} from \"react\";\nimport \"../../css/input.css\";\nimport InputContainer from \"./container\";\nimport type { ITextarea } from \"./type\";\n\nconst Textarea = (props: ITextarea) => {\n\tconst {\n\t\tref,\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tlabelInline,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tautoSize,\n\t\tborder,\n\t\twidth,\n\t\tstyle,\n\t\tonChange,\n\t\tonEnter,\n\t\t...restProps\n\t} = props;\n\n\tconst [textareaValue, setTextareaValue] = useState(value);\n\tconst refTextarea = useRef<HTMLTextAreaElement>(null);\n\n\tconst handleChange = (\n\t\te: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n\t) => {\n\t\tconst v = e.target.value;\n\n\t\tsetTextareaValue(v);\n\n\t\tconst ta = refTextarea.current as HTMLElement;\n\t\tif (autoSize && ta) {\n\t\t\tta.style.height = `${ta.scrollHeight}px`;\n\t\t}\n\n\t\tonChange?.(v, e);\n\t};\n\n\tconst handleKeydown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.code !== \"Enter\") return;\n\n\t\te.stopPropagation();\n\t\tonEnter?.(e);\n\t};\n\n\tuseEffect(() => {\n\t\tsetTextareaValue(value);\n\t}, [value]);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tinput: refTextarea.current,\n\t\t};\n\t});\n\n\tconst inputProps = {\n\t\tref: refTextarea,\n\t\tname,\n\t\tvalue: textareaValue,\n\t\tclassName: \"i-input i-textarea\",\n\t\tonChange: handleChange,\n\t\tonKeyDown: handleKeydown,\n\t\t...restProps,\n\t};\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>\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})}\n\t\t\t>\n\t\t\t\t<textarea {...inputProps} />\n\t\t\t</div>\n\t\t</InputContainer>\n\t);\n};\n\nexport default Textarea;\n"],"names":["_jsx"],"mappings":";;;;;AAaA,MAAM,QAAQ,GAAG,CAAC,KAAgB,KAAI;AACrC,IAAA,MAAM,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,EAAE,EACV,WAAW,EACX,SAAS,EACT,MAAM,GAAG,QAAQ,EACjB,OAAO,EACP,GAAG,EACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,GAAG,SAAS,EACZ,GAAG,KAAK;IAET,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACzD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC;AAErD,IAAA,MAAM,YAAY,GAAG,CACpB,CAAsD,KACnD;AACH,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAExB,gBAAgB,CAAC,CAAC,CAAC;AAEnB,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,OAAsB;AAC7C,QAAA,IAAI,QAAQ,IAAI,EAAE,EAAE;YACnB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA,EAAA,CAAI;QACzC;AAEA,QAAA,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,CAAqC,KAAI;AAC/D,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE;QAExB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,OAAO,GAAG,CAAC,CAAC;AACb,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;QACd,gBAAgB,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,mBAAmB,CAAC,GAAG,EAAE,MAAK;QAC7B,OAAO;YACN,KAAK,EAAE,WAAW,CAAC,OAAO;SAC1B;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AAClB,QAAA,GAAG,EAAE,WAAW;QAChB,IAAI;AACJ,QAAA,KAAK,EAAE,aAAa;AACpB,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,GAAG,SAAS;KACZ;AAED,IAAA,QACCA,GAAA,CAAC,cAAc,IACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAC1B,GAAG,EAAE,OAAO,IAAI,GAAG,EACnB,MAAM,EAAE,MAAM,YAEdA,GAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACrC,gBAAA,CAAC,WAAW,MAAM,CAAA,CAAE,GAAG,MAAM,KAAK,QAAQ;gBAC1C,oBAAoB,EAAE,CAAC,MAAM;AAC7B,aAAA,CAAC,YAEFA,GAAA,CAAA,UAAA,EAAA,EAAA,GAAc,UAAU,GAAI,EAAA,CACvB,EAAA,CACU;AAEnB;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { CheckRound } from '@ricons/material';
3
- import { useEffect } from 'react';
4
- import { useReactive } from '../../../js/hooks.js';
3
+ import { useState, useEffect } from 'react';
5
4
  import Button from '../../button/button.js';
6
5
  import Icon from '../../icon/icon.js';
7
6
  import Input from '../../input/input.js';
@@ -14,23 +13,21 @@ const ColorMethods = {
14
13
  };
15
14
  function Footer(props) {
16
15
  const { value, type, onTypeChange, onChange, onOk } = props;
17
- const state = useReactive({
18
- value,
19
- type,
20
- });
16
+ const [inputValue, setInputValue] = useState(value);
17
+ const [colorType, setColorType] = useState(type);
21
18
  const handleChange = (v) => {
22
- state.value = v;
19
+ setInputValue(v);
23
20
  onChange(v);
24
21
  };
25
22
  const handleTypeChange = (t) => {
26
- state.type = t;
23
+ setColorType(t);
27
24
  onTypeChange(t);
28
25
  };
29
26
  useEffect(() => {
30
- state.value = value;
31
- state.type = type;
27
+ setInputValue(value);
28
+ setColorType(type);
32
29
  }, [value, type]);
33
- return (jsxs("div", { className: 'i-colorpicker-footer', children: [jsx(Select, { readOnly: true, hideClear: true, hideArrow: true, style: { width: "5.6em" }, options: ["RGB", "HEX", "HSB"], value: state.type, onChange: handleTypeChange }), jsx(Input, { placeholder: 'color', value: state.value, onChange: handleChange }), jsx(Button, { square: true, onClick: onOk, children: jsx(Icon, { icon: jsx(CheckRound, {}) }) })] }));
30
+ return (jsxs("div", { className: 'i-colorpicker-footer', children: [jsx(Select, { readOnly: true, hideClear: true, hideArrow: true, style: { width: "5.6em" }, options: ["RGB", "HEX", "HSB"], value: colorType, onChange: handleTypeChange }), jsx(Input, { placeholder: 'color', value: inputValue, onChange: handleChange }), jsx(Button, { square: true, onClick: onOk, children: jsx(Icon, { icon: jsx(CheckRound, {}) }) })] }));
34
31
  }
35
32
 
36
33
  export { ColorMethods, Footer as default };
@@ -1 +1 @@
1
- {"version":3,"file":"footer.js","sources":["../../../../../packages/components/picker/colors/footer.tsx"],"sourcesContent":["import { CheckRound } from \"@ricons/material\";\nimport { useEffect } from \"react\";\nimport { useReactive } from \"../../../js/hooks\";\nimport Button from \"../../button\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Select from \"../../select\";\n\nexport const ColorMethods = {\n\tHEX: \"toHexString\",\n\tRGB: \"toRgbString\",\n\tHSB: \"toHsbString\",\n};\n\nexport default function Footer(props) {\n\tconst { value, type, onTypeChange, onChange, onOk } = props;\n\tconst state = useReactive({\n\t\tvalue,\n\t\ttype,\n\t});\n\n\tconst handleChange = (v) => {\n\t\tstate.value = v;\n\t\tonChange(v);\n\t};\n\n\tconst handleTypeChange = (t) => {\n\t\tstate.type = t;\n\t\tonTypeChange(t);\n\t};\n\n\tuseEffect(() => {\n\t\tstate.value = value;\n\t\tstate.type = type;\n\t}, [value, type]);\n\n\treturn (\n\t\t<div className='i-colorpicker-footer'>\n\t\t\t<Select\n\t\t\t\treadOnly\n\t\t\t\thideClear\n\t\t\t\thideArrow\n\t\t\t\tstyle={{ width: \"5.6em\" }}\n\t\t\t\toptions={[\"RGB\", \"HEX\", \"HSB\"]}\n\t\t\t\tvalue={state.type}\n\t\t\t\tonChange={handleTypeChange}\n\t\t\t/>\n\t\t\t<Input\n\t\t\t\tplaceholder='color'\n\t\t\t\tvalue={state.value}\n\t\t\t\tonChange={handleChange}\n\t\t\t/>\n\t\t\t<Button square onClick={onOk}>\n\t\t\t\t<Icon icon={<CheckRound />} />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;AAQO,MAAM,YAAY,GAAG;AAC3B,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,aAAa;;AAGL,SAAU,MAAM,CAAC,KAAK,EAAA;AACnC,IAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC;QACzB,KAAK;QACL,IAAI;AACJ,KAAA,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;AAC1B,QAAA,KAAK,CAAC,KAAK,GAAG,CAAC;QACf,QAAQ,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAI;AAC9B,QAAA,KAAK,CAAC,IAAI,GAAG,CAAC;QACd,YAAY,CAAC,CAAC,CAAC;AAChB,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACd,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI;AAClB,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEjB,IAAA,QACCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,aACpCC,GAAA,CAAC,MAAM,EAAA,EACN,QAAQ,QACR,SAAS,EAAA,IAAA,EACT,SAAS,EAAA,IAAA,EACT,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACzB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,QAAQ,EAAE,gBAAgB,EAAA,CACzB,EACFA,GAAA,CAAC,KAAK,IACL,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,YAAY,GACrB,EACFA,GAAA,CAAC,MAAM,EAAA,EAAC,MAAM,EAAA,IAAA,EAAC,OAAO,EAAE,IAAI,EAAA,QAAA,EAC3BA,IAAC,IAAI,EAAA,EAAC,IAAI,EAAEA,IAAC,UAAU,EAAA,EAAA,CAAG,GAAI,EAAA,CACtB,CAAA,EAAA,CACJ;AAER;;;;"}
1
+ {"version":3,"file":"footer.js","sources":["../../../../../packages/components/picker/colors/footer.tsx"],"sourcesContent":["import { CheckRound } from \"@ricons/material\";\nimport { useEffect, useState } from \"react\";\nimport Button from \"../../button\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Select from \"../../select\";\n\nexport const ColorMethods = {\n\tHEX: \"toHexString\",\n\tRGB: \"toRgbString\",\n\tHSB: \"toHsbString\",\n};\n\nexport default function Footer(props) {\n\tconst { value, type, onTypeChange, onChange, onOk } = props;\n\tconst [inputValue, setInputValue] = useState(value);\n\tconst [colorType, setColorType] = useState(type);\n\n\tconst handleChange = (v) => {\n\t\tsetInputValue(v);\n\t\tonChange(v);\n\t};\n\n\tconst handleTypeChange = (t) => {\n\t\tsetColorType(t);\n\t\tonTypeChange(t);\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t\tsetColorType(type);\n\t}, [value, type]);\n\n\treturn (\n\t\t<div className='i-colorpicker-footer'>\n\t\t\t<Select\n\t\t\t\treadOnly\n\t\t\t\thideClear\n\t\t\t\thideArrow\n\t\t\t\tstyle={{ width: \"5.6em\" }}\n\t\t\t\toptions={[\"RGB\", \"HEX\", \"HSB\"]}\n\t\t\t\tvalue={colorType}\n\t\t\t\tonChange={handleTypeChange}\n\t\t\t/>\n\t\t\t<Input\n\t\t\t\tplaceholder='color'\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={handleChange}\n\t\t\t/>\n\t\t\t<Button square onClick={onOk}>\n\t\t\t\t<Icon icon={<CheckRound />} />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;AAOO,MAAM,YAAY,GAAG;AAC3B,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,aAAa;;AAGL,SAAU,MAAM,CAAC,KAAK,EAAA;AACnC,IAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;QAC1B,aAAa,CAAC,CAAC,CAAC;QAChB,QAAQ,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAI;QAC9B,YAAY,CAAC,CAAC,CAAC;QACf,YAAY,CAAC,CAAC,CAAC;AAChB,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;QACd,aAAa,CAAC,KAAK,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC;AACnB,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEjB,IAAA,QACCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,aACpCC,GAAA,CAAC,MAAM,EAAA,EACN,QAAQ,QACR,SAAS,EAAA,IAAA,EACT,SAAS,EAAA,IAAA,EACT,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACzB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC9B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,gBAAgB,EAAA,CACzB,EACFA,GAAA,CAAC,KAAK,EAAA,EACL,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EAAA,CACrB,EACFA,GAAA,CAAC,MAAM,EAAA,EAAC,MAAM,QAAC,OAAO,EAAE,IAAI,EAAA,QAAA,EAC3BA,IAAC,IAAI,EAAA,EAAC,IAAI,EAAEA,IAAC,UAAU,EAAA,EAAA,CAAG,GAAI,EAAA,CACtB,CAAA,EAAA,CACJ;AAER;;;;"}
@@ -1,55 +1,57 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import ColorsPanel from '@rc-component/color-picker';
3
- import { useEffect } from 'react';
4
- import { useReactive } from '../../../js/hooks.js';
3
+ import { useState, useEffect } from 'react';
5
4
  import Popup from '../../popup/popup.js';
6
5
  import Footer, { ColorMethods } from './footer.js';
7
6
  import Handle from './handle.js';
8
7
 
9
8
  function ColorPicker(props) {
10
9
  const { value, type = "HEX", disabledAlpha, children, usePanel, handle = "both", placeholder = "Colors", popupProps, onChange, } = props;
11
- const state = useReactive({
12
- type,
13
- value,
14
- syncValue: value,
15
- visible: popupProps?.visible,
16
- });
10
+ const [colorType, setColorType] = useState(type);
11
+ const [colorValue, setColorValue] = useState(value);
12
+ const [syncValue, setSyncValue] = useState(value);
13
+ const [visible, setVisible] = useState(popupProps?.visible);
17
14
  const handleChange = (target) => {
18
- state.syncValue = target;
15
+ setSyncValue(target);
19
16
  };
20
17
  const handleComplete = (target) => {
21
- const method = ColorMethods[state.type];
18
+ const method = ColorMethods[colorType];
22
19
  if (target.a !== 1) {
23
20
  target.a = parseFloat(target.a.toFixed(3));
24
21
  }
25
- state.value = target[method]?.();
22
+ setColorValue(target[method]?.());
26
23
  };
27
24
  const handleVisibleChange = (v) => {
28
- state.visible = v;
25
+ setVisible(v);
29
26
  popupProps?.onVisibleChange?.(v);
30
27
  };
31
28
  const handleTypeChange = (t) => {
32
29
  const method = ColorMethods[t];
33
- state.type = t;
34
- state.value = state.syncValue[method]?.();
30
+ setColorType(t);
31
+ setColorValue(syncValue?.[method]?.());
35
32
  };
36
33
  const handleValueChange = (v) => {
37
- state.value = v;
38
- state.syncValue = v;
34
+ setColorValue(v);
35
+ setSyncValue(v);
39
36
  };
40
37
  const handleOk = () => {
41
- onChange?.(state.value);
42
- state.visible = false;
38
+ onChange?.(colorValue);
39
+ setVisible(false);
43
40
  };
44
41
  useEffect(() => {
45
- state.syncValue = value;
46
- state.value = value;
42
+ setSyncValue(value);
43
+ setColorValue(value);
47
44
  }, [value]);
45
+ useEffect(() => {
46
+ if (popupProps?.visible !== undefined) {
47
+ setVisible(popupProps.visible);
48
+ }
49
+ }, [popupProps?.visible]);
48
50
  if (usePanel) {
49
51
  return jsx(ColorsPanel, { ...props });
50
52
  }
51
- return (jsx(Popup, { trigger: 'click', touchable: true, position: 'bottom', ...popupProps, visible: state.visible, content: jsx(ColorsPanel, { value: state.syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
52
- return (jsxs(Fragment, { children: [panel, jsx(Footer, { value: state.value, type: state.type, onTypeChange: handleTypeChange, onChange: handleValueChange, onOk: handleOk })] }));
53
+ return (jsx(Popup, { trigger: 'click', touchable: true, position: 'bottom', ...popupProps, visible: visible, content: jsx(ColorsPanel, { value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
54
+ return (jsxs(Fragment, { children: [panel, jsx(Footer, { value: colorValue, type: colorType, onTypeChange: handleTypeChange, onChange: handleValueChange, onOk: handleOk })] }));
53
55
  }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: children ?? (jsx(Handle, { color: value, handle: handle, placeholder: placeholder })) }));
54
56
  }
55
57
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/colors/index.tsx"],"sourcesContent":["import ColorsPanel from \"@rc-component/color-picker\";\nimport { useEffect } from \"react\";\nimport { useReactive } from \"../../../js/hooks\";\nimport Popup from \"../../popup\";\nimport { IColorPicker } from \"../type\";\nimport Footer, { ColorMethods } from \"./footer\";\nimport Handle from \"./handle\";\nimport \"./index.css\";\n\nexport default function ColorPicker(props: IColorPicker) {\n\tconst {\n\t\tvalue,\n\t\ttype = \"HEX\",\n\t\tdisabledAlpha,\n\t\tchildren,\n\t\tusePanel,\n\t\thandle = \"both\",\n\t\tplaceholder = \"Colors\",\n\t\tpopupProps,\n\t\tonChange,\n\t} = props;\n\n\tconst state = useReactive({\n\t\ttype,\n\t\tvalue,\n\t\tsyncValue: value,\n\t\tvisible: popupProps?.visible,\n\t});\n\n\tconst handleChange = (target) => {\n\t\tstate.syncValue = target;\n\t};\n\n\tconst handleComplete = (target) => {\n\t\tconst method = ColorMethods[state.type];\n\n\t\tif (target.a !== 1) {\n\t\t\ttarget.a = parseFloat(target.a.toFixed(3));\n\t\t}\n\n\t\tstate.value = target[method]?.();\n\t};\n\n\tconst handleVisibleChange = (v: boolean) => {\n\t\tstate.visible = v;\n\t\tpopupProps?.onVisibleChange?.(v);\n\t};\n\n\tconst handleTypeChange = (t) => {\n\t\tconst method = ColorMethods[t];\n\n\t\tstate.type = t;\n\t\tstate.value = state.syncValue[method]?.();\n\t};\n\n\tconst handleValueChange = (v) => {\n\t\tstate.value = v;\n\t\tstate.syncValue = v;\n\t};\n\n\tconst handleOk = () => {\n\t\tonChange?.(state.value);\n\t\tstate.visible = false;\n\t};\n\n\tuseEffect(() => {\n\t\tstate.syncValue = value;\n\t\tstate.value = value;\n\t}, [value]);\n\n\tif (usePanel) {\n\t\treturn <ColorsPanel {...props} />;\n\t}\n\n\treturn (\n\t\t<Popup\n\t\t\ttrigger='click'\n\t\t\ttouchable\n\t\t\tposition='bottom'\n\t\t\t{...popupProps}\n\t\t\tvisible={state.visible}\n\t\t\tcontent={\n\t\t\t\t<ColorsPanel\n\t\t\t\t\tvalue={state.syncValue}\n\t\t\t\t\tdisabledAlpha={disabledAlpha}\n\t\t\t\t\tpanelRender={(panel) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{panel}\n\t\t\t\t\t\t\t\t<Footer\n\t\t\t\t\t\t\t\t\tvalue={state.value}\n\t\t\t\t\t\t\t\t\ttype={state.type}\n\t\t\t\t\t\t\t\t\tonTypeChange={handleTypeChange}\n\t\t\t\t\t\t\t\t\tonChange={handleValueChange}\n\t\t\t\t\t\t\t\t\tonOk={handleOk}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonChangeComplete={handleComplete}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tonVisibleChange={handleVisibleChange}\n\t\t>\n\t\t\t{children ?? (\n\t\t\t\t<Handle\n\t\t\t\t\tcolor={value}\n\t\t\t\t\thandle={handle}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Popup>\n\t);\n}\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/colors/index.tsx"],"sourcesContent":["import ColorsPanel from \"@rc-component/color-picker\";\nimport { useEffect, useState } from \"react\";\nimport Popup from \"../../popup\";\nimport { IColorPicker } from \"../type\";\nimport Footer, { ColorMethods } from \"./footer\";\nimport Handle from \"./handle\";\nimport \"./index.css\";\n\nexport default function ColorPicker(props: IColorPicker) {\n\tconst {\n\t\tvalue,\n\t\ttype = \"HEX\",\n\t\tdisabledAlpha,\n\t\tchildren,\n\t\tusePanel,\n\t\thandle = \"both\",\n\t\tplaceholder = \"Colors\",\n\t\tpopupProps,\n\t\tonChange,\n\t} = props;\n\n\tconst [colorType, setColorType] = useState(type);\n\tconst [colorValue, setColorValue] = useState(value);\n\tconst [syncValue, setSyncValue] = useState(value);\n\tconst [visible, setVisible] = useState<boolean | undefined>(popupProps?.visible);\n\n\tconst handleChange = (target) => {\n\t\tsetSyncValue(target);\n\t};\n\n\tconst handleComplete = (target) => {\n\t\tconst method = ColorMethods[colorType];\n\n\t\tif (target.a !== 1) {\n\t\t\ttarget.a = parseFloat(target.a.toFixed(3));\n\t\t}\n\n\t\tsetColorValue(target[method]?.());\n\t};\n\n\tconst handleVisibleChange = (v: boolean) => {\n\t\tsetVisible(v);\n\t\tpopupProps?.onVisibleChange?.(v);\n\t};\n\n\tconst handleTypeChange = (t) => {\n\t\tconst method = ColorMethods[t];\n\n\t\tsetColorType(t);\n\t\tsetColorValue(syncValue?.[method]?.());\n\t};\n\n\tconst handleValueChange = (v) => {\n\t\tsetColorValue(v);\n\t\tsetSyncValue(v);\n\t};\n\n\tconst handleOk = () => {\n\t\tonChange?.(colorValue);\n\t\tsetVisible(false);\n\t};\n\n\tuseEffect(() => {\n\t\tsetSyncValue(value);\n\t\tsetColorValue(value);\n\t}, [value]);\n\n\tuseEffect(() => {\n\t\tif (popupProps?.visible !== undefined) {\n\t\t\tsetVisible(popupProps.visible);\n\t\t}\n\t}, [popupProps?.visible]);\n\n\tif (usePanel) {\n\t\treturn <ColorsPanel {...props} />;\n\t}\n\n\treturn (\n\t\t<Popup\n\t\t\ttrigger='click'\n\t\t\ttouchable\n\t\t\tposition='bottom'\n\t\t\t{...popupProps}\n\t\t\tvisible={visible}\n\t\t\tcontent={\n\t\t\t\t<ColorsPanel\n\t\t\t\t\tvalue={syncValue}\n\t\t\t\t\tdisabledAlpha={disabledAlpha}\n\t\t\t\t\tpanelRender={(panel) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{panel}\n\t\t\t\t\t\t\t\t<Footer\n\t\t\t\t\t\t\t\t\tvalue={colorValue}\n\t\t\t\t\t\t\t\t\ttype={colorType}\n\t\t\t\t\t\t\t\t\tonTypeChange={handleTypeChange}\n\t\t\t\t\t\t\t\t\tonChange={handleValueChange}\n\t\t\t\t\t\t\t\t\tonOk={handleOk}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonChangeComplete={handleComplete}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tonVisibleChange={handleVisibleChange}\n\t\t>\n\t\t\t{children ?? (\n\t\t\t\t<Handle\n\t\t\t\t\tcolor={value}\n\t\t\t\t\thandle={handle}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Popup>\n\t);\n}\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -4,7 +4,6 @@ import classNames from 'classnames';
4
4
  import dayjs from 'dayjs';
5
5
  import customParseFormat from 'dayjs/plugin/customParseFormat.js';
6
6
  import { useState, useMemo, useEffect } from 'react';
7
- import { useReactive } from '../../../js/hooks.js';
8
7
  import Icon from '../../icon/icon.js';
9
8
  import Input from '../../input/input.js';
10
9
  import Popup from '../../popup/popup.js';
@@ -15,29 +14,27 @@ const FORMATTYPES = ["YYYY-MM-DD", "YYYY-M-D", "YYYY/MM/DD", "YYYY/M/D"];
15
14
  const FORMAT = "YYYY-MM-DD";
16
15
  const Datepicker = (props) => {
17
16
  const { name, value, weeks, format = FORMAT, placeholder = props.format ?? FORMAT, className, renderDate, renderMonth, renderYear, popupProps, disabledDate, onDateClick, onChange, onBlur, ...restProps } = props;
18
- const state = useReactive({
19
- value,
20
- });
17
+ const [inputValue, setInputValue] = useState(value);
21
18
  const [active, setActive] = useState(false);
22
19
  const dayJsValue = useMemo(() => {
23
- if (!state.value)
20
+ if (!inputValue)
24
21
  return null;
25
- const date = dayjs(state.value, format, true);
22
+ const date = dayjs(inputValue, format, true);
26
23
  if (date.isValid())
27
24
  return date;
28
25
  return null;
29
- }, [state.value]);
26
+ }, [inputValue, format]);
30
27
  const handleDateClick = (date) => {
31
28
  handleChange(date.format(format));
32
29
  };
33
30
  const handleChange = (v) => {
34
- state.value = v;
31
+ setInputValue(v);
35
32
  onChange?.(v);
36
33
  };
37
34
  const handleSetDate = () => {
38
- if (!state.value)
35
+ if (!inputValue)
39
36
  return;
40
- const date = dayjs(state.value, FORMATTYPES, true);
37
+ const date = dayjs(inputValue, FORMATTYPES, true);
41
38
  if (date.isValid()) {
42
39
  handleChange(date.format(format));
43
40
  return;
@@ -53,9 +50,9 @@ const Datepicker = (props) => {
53
50
  setActive(v);
54
51
  };
55
52
  useEffect(() => {
56
- state.value = value;
53
+ setInputValue(value);
57
54
  }, [value]);
58
- return (jsx(Popup, { visible: active, trigger: 'click', position: 'bottom', arrow: false, align: 'start', onVisibleChange: handleVisibleChange, watchResize: true, content: jsx(Panel, { value: dayJsValue, weeks: weeks, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick }), ...popupProps, children: jsx(Input, { value: state.value, append: jsx(Icon, { icon: jsx(CalendarMonthTwotone, {}), className: 'i-datepicker-icon', size: '1em' }), placeholder: placeholder, onChange: handleChange, onBlur: handleBlur, onEnter: handleSetDate, className: classNames("i-datepicker-label", className), ...restProps }) }));
55
+ return (jsx(Popup, { visible: active, trigger: 'click', position: 'bottom', arrow: false, align: 'start', onVisibleChange: handleVisibleChange, content: jsx(Panel, { value: dayJsValue, weeks: weeks, renderDate: renderDate, renderMonth: renderMonth, renderYear: renderYear, disabledDate: disabledDate, onDateClick: handleDateClick }), ...popupProps, children: jsx(Input, { value: inputValue, append: jsx(Icon, { icon: jsx(CalendarMonthTwotone, {}), className: 'i-datepicker-icon', size: '1em' }), placeholder: placeholder, onChange: handleChange, onBlur: handleBlur, onEnter: handleSetDate, className: classNames("i-datepicker-label", className), ...restProps }) }));
59
56
  };
60
57
 
61
58
  export { Datepicker as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/dates/index.tsx"],"sourcesContent":["import { CalendarMonthTwotone } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useReactive } from \"../../../js/hooks\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Popup from \"../../popup\";\nimport { IDatePicker } from \"../type\";\nimport \"./index.css\";\nimport Panel from \"./panel\";\n\ndayjs.extend(customParseFormat);\n\nconst FORMATTYPES = [\"YYYY-MM-DD\", \"YYYY-M-D\", \"YYYY/MM/DD\", \"YYYY/M/D\"];\nconst FORMAT = \"YYYY-MM-DD\";\n\nconst Datepicker = (props: IDatePicker) => {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tweeks,\n\t\tformat = FORMAT,\n\t\tplaceholder = props.format ?? FORMAT,\n\t\tclassName,\n\t\trenderDate,\n\t\trenderMonth,\n\t\trenderYear,\n\t\tpopupProps,\n\t\tdisabledDate,\n\t\tonDateClick,\n\t\tonChange,\n\t\tonBlur,\n\t\t...restProps\n\t} = props;\n\n\tconst state = useReactive({\n\t\tvalue,\n\t});\n\n\tconst [active, setActive] = useState<boolean>(false);\n\n\tconst dayJsValue = useMemo(() => {\n\t\tif (!state.value) return null;\n\n\t\tconst date = dayjs(state.value as string, format, true);\n\n\t\tif (date.isValid()) return date;\n\n\t\treturn null;\n\t}, [state.value]);\n\n\tconst handleDateClick = (date: Dayjs) => {\n\t\thandleChange(date.format(format));\n\t};\n\n\tconst handleChange = (v) => {\n\t\tstate.value = v;\n\t\tonChange?.(v);\n\t};\n\n\tconst handleSetDate = () => {\n\t\tif (!state.value) return;\n\n\t\tconst date = dayjs(state.value as string, FORMATTYPES, true);\n\n\t\tif (date.isValid()) {\n\t\t\thandleChange(date.format(format));\n\t\t\treturn;\n\t\t}\n\n\t\thandleChange(\"\");\n\t};\n\n\tconst handleBlur = (e) => {\n\t\tonBlur?.(e);\n\t\thandleSetDate();\n\t};\n\n\tconst handleVisibleChange = (v) => {\n\t\tpopupProps?.onVisibleChange?.(v);\n\t\tsetActive(v);\n\t};\n\n\tuseEffect(() => {\n\t\tstate.value = value;\n\t}, [value]);\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\twatchResize\n\t\t\tcontent={\n\t\t\t\t<Panel\n\t\t\t\t\tvalue={dayJsValue}\n\t\t\t\t\tweeks={weeks}\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/>\n\t\t\t}\n\t\t\t{...popupProps}\n\t\t>\n\t\t\t<Input\n\t\t\t\tvalue={state.value}\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\tplaceholder={placeholder}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonEnter={handleSetDate}\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 Datepicker;\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/dates/index.tsx"],"sourcesContent":["import { CalendarMonthTwotone } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport Icon from \"../../icon\";\nimport Input from \"../../input\";\nimport Popup from \"../../popup\";\nimport { IDatePicker } from \"../type\";\nimport \"./index.css\";\nimport Panel from \"./panel\";\n\ndayjs.extend(customParseFormat);\n\nconst FORMATTYPES = [\"YYYY-MM-DD\", \"YYYY-M-D\", \"YYYY/MM/DD\", \"YYYY/M/D\"];\nconst FORMAT = \"YYYY-MM-DD\";\n\nconst Datepicker = (props: IDatePicker) => {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tweeks,\n\t\tformat = FORMAT,\n\t\tplaceholder = props.format ?? FORMAT,\n\t\tclassName,\n\t\trenderDate,\n\t\trenderMonth,\n\t\trenderYear,\n\t\tpopupProps,\n\t\tdisabledDate,\n\t\tonDateClick,\n\t\tonChange,\n\t\tonBlur,\n\t\t...restProps\n\t} = props;\n\n\tconst [inputValue, setInputValue] = useState(value);\n\n\tconst [active, setActive] = useState<boolean>(false);\n\n\tconst dayJsValue = useMemo(() => {\n\t\tif (!inputValue) return null;\n\n\t\tconst date = dayjs(inputValue as string, format, true);\n\n\t\tif (date.isValid()) return date;\n\n\t\treturn null;\n\t}, [inputValue, format]);\n\n\tconst handleDateClick = (date: Dayjs) => {\n\t\thandleChange(date.format(format));\n\t};\n\n\tconst handleChange = (v) => {\n\t\tsetInputValue(v);\n\t\tonChange?.(v);\n\t};\n\n\tconst handleSetDate = () => {\n\t\tif (!inputValue) return;\n\n\t\tconst date = dayjs(inputValue as string, FORMATTYPES, true);\n\n\t\tif (date.isValid()) {\n\t\t\thandleChange(date.format(format));\n\t\t\treturn;\n\t\t}\n\n\t\thandleChange(\"\");\n\t};\n\n\tconst handleBlur = (e) => {\n\t\tonBlur?.(e);\n\t\thandleSetDate();\n\t};\n\n\tconst handleVisibleChange = (v) => {\n\t\tpopupProps?.onVisibleChange?.(v);\n\t\tsetActive(v);\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t}, [value]);\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<Panel\n\t\t\t\t\tvalue={dayJsValue}\n\t\t\t\t\tweeks={weeks}\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/>\n\t\t\t}\n\t\t\t{...popupProps}\n\t\t>\n\t\t\t<Input\n\t\t\t\tvalue={inputValue}\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\tplaceholder={placeholder}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonEnter={handleSetDate}\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 Datepicker;\n"],"names":["_jsx"],"mappings":"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"}
@@ -3,8 +3,7 @@ import { KeyboardArrowLeftRound, KeyboardArrowRightRound } from '@ricons/materia
3
3
  import classNames from 'classnames';
4
4
  import dayjs from 'dayjs';
5
5
  import { throttle } from 'radash';
6
- import { useRef, useEffect } from 'react';
7
- import { useReactive } from '../../../js/hooks.js';
6
+ import { useState, useRef, useEffect } from 'react';
8
7
  import Icon from '../../icon/icon.js';
9
8
  import Helpericon from '../../utils/helpericon/helpericon.js';
10
9
  import Dates from './dates.js';
@@ -16,61 +15,56 @@ const YearMonth = (props) => {
16
15
  };
17
16
  const Panel = (props) => {
18
17
  const { value, unitYear, unitMonth, renderDate, renderMonth = (m) => m, renderYear = (y) => y, disabledDate, onDateClick, } = props;
19
- const state = useReactive({
20
- today: value,
21
- month: value || dayjs(),
22
- selectedYear: dayjs(),
23
- years: [],
24
- selectable: false,
25
- });
18
+ const [today, setToday] = useState(value);
19
+ const [month, setMonth] = useState(value || dayjs());
20
+ const [selectedYear, setSelectedYear] = useState(dayjs());
21
+ const [years, setYears] = useState([]);
22
+ const [selectable, setSelectable] = useState(false);
26
23
  const $years = useRef(null);
27
24
  const handleOperateMonth = (next) => {
28
- state.month = state.month[next ? "add" : "subtract"](1, "month");
25
+ setMonth((m) => m[next ? "add" : "subtract"](1, "month"));
29
26
  };
30
27
  const handleChangeDate = (date) => {
31
- if (date.isSame(state.today, "day"))
28
+ if (date.isSame(today, "day"))
32
29
  return;
33
- if (!date.isSame(state.month, "month")) {
34
- state.month = date;
30
+ if (!date.isSame(month, "month")) {
31
+ setMonth(date);
35
32
  }
36
- state.today = date;
33
+ setToday(date);
37
34
  onDateClick?.(date);
38
35
  };
39
36
  const handleChangeMonth = (month) => {
40
- state.month = state.month
41
- .year(state.selectedYear.year())
42
- .month(month - 1);
43
- state.selectable = false;
37
+ setMonth((m) => m.year(selectedYear.year()).month(month - 1));
38
+ setSelectable(false);
44
39
  };
45
40
  const getMoreYears = throttle({ interval: 100 }, (e) => {
46
41
  const isUp = e.deltaY < 0;
47
- state.years = state.years.map((y) => (y += isUp ? -1 : 1));
42
+ setYears((ys) => ys.map((y) => y + (isUp ? -1 : 1)));
48
43
  });
49
44
  useEffect(() => {
50
- if (!state.selectable)
45
+ if (!selectable)
51
46
  return;
52
- state.selectedYear = state.month;
53
- const y = state.selectedYear.year();
54
- const years = Array.from({ length: 7 }).map((_, i) => y - 3 + i);
55
- state.years = [...years];
56
- }, [state.selectable]);
47
+ setSelectedYear(month);
48
+ const y = month.year();
49
+ const nextYears = Array.from({ length: 7 }).map((_, i) => y - 3 + i);
50
+ setYears([...nextYears]);
51
+ }, [selectable, month]);
57
52
  useEffect(() => {
58
- state.today = value;
59
- state.month = value || dayjs();
53
+ setToday(value);
54
+ setMonth(value || dayjs());
60
55
  }, [value]);
61
- return (jsxs("div", { className: 'i-datepicker', children: [jsxs("div", { className: 'i-datepicker-units', children: [jsx(YearMonth, { value: state.month, unitYear: unitYear, unitMonth: unitMonth, renderMonth: renderMonth, renderYear: renderYear, onClick: () => (state.selectable = true) }), jsx("a", { className: 'ml-auto i-datepicker-action', "data-ripple": true, onClick: () => handleOperateMonth(false), children: jsx(Icon, { icon: jsx(KeyboardArrowLeftRound, {}) }) }), jsx("a", { className: 'i-datepicker-action', "data-ripple": true, onClick: () => handleOperateMonth(true), children: jsx(Icon, { icon: jsx(KeyboardArrowRightRound, {}) }) })] }), jsxs("div", { className: classNames("i-datepicker-ym", {
62
- "i-datepicker-active": state.selectable,
56
+ return (jsxs("div", { className: 'i-datepicker', children: [jsxs("div", { className: 'i-datepicker-units', children: [jsx(YearMonth, { value: month, unitYear: unitYear, unitMonth: unitMonth, renderMonth: renderMonth, renderYear: renderYear, onClick: () => setSelectable(true) }), jsx("a", { className: 'ml-auto i-datepicker-action', "data-ripple": true, onClick: () => handleOperateMonth(false), children: jsx(Icon, { icon: jsx(KeyboardArrowLeftRound, {}) }) }), jsx("a", { className: 'i-datepicker-action', "data-ripple": true, onClick: () => handleOperateMonth(true), children: jsx(Icon, { icon: jsx(KeyboardArrowRightRound, {}) }) })] }), jsxs("div", { className: classNames("i-datepicker-ym", {
57
+ "i-datepicker-active": selectable,
63
58
  }), children: [jsx(Helpericon, { active: true, className: 'i-datepicker-close', onClick: (e) => {
64
59
  e.stopPropagation();
65
- state.selectable = false;
66
- } }), jsx("div", { ref: $years, className: 'i-datepicker-years', onWheel: getMoreYears, children: state.years.map((y) => (jsx("a", { className: classNames("i-datepicker-year", {
67
- "i-datepicker-active": y === state.selectedYear.year(),
68
- }), onClick: () => (state.selectedYear =
69
- state.selectedYear.year(y)), children: renderYear(y) }, y))) }), jsx("div", { className: 'i-datepicker-months', children: MONTHS.map((m) => {
60
+ setSelectable(false);
61
+ } }), jsx("div", { ref: $years, className: 'i-datepicker-years', onWheel: getMoreYears, children: years.map((y) => (jsx("a", { className: classNames("i-datepicker-year", {
62
+ "i-datepicker-active": y === selectedYear.year(),
63
+ }), onClick: () => setSelectedYear((sy) => sy.year(y)), children: renderYear(y) }, y))) }), jsx("div", { className: 'i-datepicker-months', children: MONTHS.map((m) => {
70
64
  return (jsx("a", { className: classNames("i-datepicker-month", {
71
- "i-datepicker-active": m === state.month.month() + 1,
65
+ "i-datepicker-active": m === month.month() + 1,
72
66
  }), onClick: () => handleChangeMonth(m), children: renderMonth(m) }, m));
73
- }) })] }), jsx(Dates, { value: state.today, month: state.month, disabledDate: disabledDate, onDateClick: handleChangeDate, renderDate: renderDate })] }));
67
+ }) })] }), jsx(Dates, { value: today, month: month, disabledDate: disabledDate, onDateClick: handleChangeDate, renderDate: renderDate })] }));
74
68
  };
75
69
 
76
70
  export { Panel as default };