shineout 3.7.2 → 3.7.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js CHANGED
@@ -522,5 +522,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
522
522
  // 此文件由脚本自动生成,请勿直接修改。
523
523
  // This file was generated automatically by a script. Please do not modify it directly.
524
524
  var _default = exports.default = {
525
- version: '3.7.2'
525
+ version: '3.7.3-beta.2'
526
526
  };
package/dist/shineout.js CHANGED
@@ -12234,7 +12234,7 @@ var handleStyle = function handleStyle(style) {
12234
12234
  };
12235
12235
  /* harmony default export */ var jss_style_handleStyle = (handleStyle);
12236
12236
  ;// CONCATENATED MODULE: ../shineout-style/src/version.ts
12237
- /* harmony default export */ var version = ('3.7.2');
12237
+ /* harmony default export */ var version = ('3.7.3-beta.2');
12238
12238
  ;// CONCATENATED MODULE: ../shineout-style/src/jss-style/index.tsx
12239
12239
 
12240
12240
 
@@ -33234,6 +33234,103 @@ function toNum(v) {
33234
33234
  }
33235
33235
  return 0;
33236
33236
  }
33237
+
33238
+ /**
33239
+ * 在字符串层面实现四舍五入
33240
+ * @param {string} numStr 数字字符串
33241
+ * @param {number} precision 精度
33242
+ * @returns {string} 四舍五入后的字符串
33243
+ */
33244
+ function roundString(numStr, precision) {
33245
+ if (precision < 0) return numStr;
33246
+ var parts = numStr.split('.');
33247
+ var intPart = parts[0];
33248
+ var decimalPart = parts[1] || '';
33249
+ if (decimalPart.length <= precision) {
33250
+ return intPart + (decimalPart ? ".".concat(decimalPart.padEnd(precision, '0')) : '');
33251
+ }
33252
+
33253
+ // 需要进行四舍五入
33254
+ var roundPos = precision;
33255
+ var carry = 0;
33256
+
33257
+ // 确定是否需要进位
33258
+ if (parseInt(decimalPart[roundPos], 10) >= 5) carry = 1;
33259
+
33260
+ // 如果不需要进位,直接截断
33261
+ if (carry === 0) {
33262
+ return intPart + (precision > 0 ? ".".concat(decimalPart.slice(0, precision)) : '');
33263
+ }
33264
+
33265
+ // 处理进位
33266
+ var digits = (intPart + (decimalPart ? ".".concat(decimalPart) : '')).replace('.', '').split('');
33267
+ var dotPos = intPart.length;
33268
+
33269
+ // 从小数位开始向前进位
33270
+ var i = dotPos + precision - 1;
33271
+ while (carry > 0 && i >= 0) {
33272
+ // 跳过小数点
33273
+ if (i === dotPos - 1) {
33274
+ i -= 1;
33275
+ continue;
33276
+ }
33277
+ var d = parseInt(digits[i], 10) + carry;
33278
+ digits[i] = (d % 10).toString();
33279
+ carry = Math.floor(d / 10);
33280
+ i -= 1;
33281
+ }
33282
+
33283
+ // 处理最高位进位
33284
+ var result = '';
33285
+ if (carry > 0) result = '1';
33286
+
33287
+ // 重建数字字符串
33288
+ for (var j = 0; j < digits.length; j++) {
33289
+ // 插入小数点
33290
+ if (j === dotPos && precision > 0) result += '.';
33291
+ // 只添加到所需精度
33292
+ if (j < dotPos || j < dotPos + precision) {
33293
+ result += digits[j];
33294
+ }
33295
+ }
33296
+ return result;
33297
+ }
33298
+
33299
+ /**
33300
+ * 格式化数字字符串到指定小数位
33301
+ * @param {string} value 数字字符串
33302
+ * @param {number} precision 小数位数
33303
+ * @returns {string} 格式化后的字符串
33304
+ * @example
33305
+ * console.log(preciseString('111111111111111.888', 2)) // "111111111111111.89"
33306
+ * console.log(preciseString('9.999', 2)) // "10.00"
33307
+ */
33308
+ var preciseString = function preciseString(value) {
33309
+ var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
33310
+ // 如果不是数字字符串,则返回原值
33311
+ if (!/^-?\d+(\.\d+)?$/.test(value)) {
33312
+ return value;
33313
+ }
33314
+
33315
+ // 如果不需要格式化精度,直接返回
33316
+ if (precision < 0) return value;
33317
+
33318
+ // 分离整数和小数部分
33319
+ var parts = value.split('.');
33320
+ var intPart = parts[0];
33321
+ var decimalPart = parts[1] || '';
33322
+
33323
+ // 截断或补零
33324
+ if (decimalPart.length > precision) {
33325
+ // 需要四舍五入
33326
+ if (precision < decimalPart.length && parseInt(decimalPart[precision], 10) >= 5) {
33327
+ // 手动实现字符串层面的四舍五入
33328
+ return roundString("".concat(intPart, ".").concat(decimalPart), precision);
33329
+ }
33330
+ return intPart + (precision > 0 ? ".".concat(decimalPart.slice(0, precision)) : '');
33331
+ }
33332
+ return intPart + (precision > 0 ? ".".concat(decimalPart.padEnd(precision, '0')) : '');
33333
+ };
33237
33334
  ;// CONCATENATED MODULE: ../base/src/spin/base.tsx
33238
33335
 
33239
33336
 
@@ -35776,6 +35873,7 @@ Input.displayName = 'SimpleInput';
35776
35873
 
35777
35874
 
35778
35875
 
35876
+
35779
35877
  function regLength(size) {
35780
35878
  return /\d+/.test(String(size)) && size > 0 ? "{0,".concat(size, "}") : '*';
35781
35879
  }
@@ -35859,7 +35957,7 @@ var useInputFormat = function useInputFormat(props) {
35859
35957
  if (numType === 'positive' && Number(value) <= 0) value = '';
35860
35958
  if (digits !== undefined && autoFix) {
35861
35959
  if (digits > 0) {
35862
- value = parseFloat(value).toFixed(digits);
35960
+ value = preciseString(value, digits);
35863
35961
  } else if (digits === 0) {
35864
35962
  value = parseInt(value, 10).toString();
35865
35963
  }
@@ -40511,7 +40609,7 @@ var Result = function Result(props) {
40511
40609
  var _props$onBlur, _inputRef$current$upd, _inputRef$current;
40512
40610
  e.stopPropagation();
40513
40611
  if (e.relatedTarget === context.inputRefs[1 - info.index]) return;
40514
- (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, e);
40612
+ (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, e, info.index);
40515
40613
  if (inputRef.current) (_inputRef$current$upd = (_inputRef$current = inputRef.current).updateValue) === null || _inputRef$current$upd === void 0 || _inputRef$current$upd.call(_inputRef$current);
40516
40614
  context.clickIndex = 0;
40517
40615
  },
@@ -44644,8 +44742,18 @@ function isValid(date) {
44644
44742
  if (!(date instanceof Date)) return false;
44645
44743
  return dayjs_min_default()(date).isValid();
44646
44744
  }
44647
- function isValidString(date, fmt) {
44745
+
44746
+ /**
44747
+ * @param date 日期字符串
44748
+ * @param fmt 日期格式
44749
+ * @param isLoose 是否为宽松模式
44750
+ * @returns 是否为有效日期
44751
+ */
44752
+ function isValidString(date, fmt, isLoose) {
44648
44753
  if (!date) return false;
44754
+ if (isLoose) {
44755
+ return dayjs_min_default()(date).isValid();
44756
+ }
44649
44757
  return dayjs_min_default()(date, fmt, true).isValid();
44650
44758
  }
44651
44759
  function util_parse(d, fmt, options) {
@@ -45207,9 +45315,9 @@ var useDatePickerFormat = function useDatePickerFormat(props) {
45207
45315
  }
45208
45316
  (_props$onClear = props.onClear) === null || _props$onClear === void 0 || _props$onClear.call(props);
45209
45317
  });
45210
- var handleInputChange = usePersistFn(function (str, index) {
45318
+ var handleInputChange = usePersistFn(function (str, index, isFromBlur) {
45211
45319
  // 比较 日期字符串是否符合format格式, 如果符合返回 true 否则返回 false
45212
- var isValid = util.isValidString(str, format);
45320
+ var isValid = util.isValidString(str, format, isFromBlur);
45213
45321
  if (!isValid) return;
45214
45322
  var date = util.toDateWithFormat(str, format, undefined, options);
45215
45323
  setInputArr(function (prev) {
@@ -45233,6 +45341,11 @@ var useDatePickerFormat = function useDatePickerFormat(props) {
45233
45341
  return arr;
45234
45342
  });
45235
45343
  });
45344
+
45345
+ // 失焦时,需要宽松模式校验,eg: 2025-06-16 18:00 和 2025-06-16 18 都可以校验通过
45346
+ var handleInputBlur = usePersistFn(function (str, index) {
45347
+ handleInputChange(str, index, true);
45348
+ });
45236
45349
  var handleClearInputArr = usePersistFn(function (index) {
45237
45350
  if (index !== undefined) {
45238
45351
  setInputArr(function (prev) {
@@ -45276,6 +45389,7 @@ var useDatePickerFormat = function useDatePickerFormat(props) {
45276
45389
  handleClear: handleClear,
45277
45390
  handleClearInputArr: handleClearInputArr,
45278
45391
  handleInputChange: handleInputChange,
45392
+ handleInputBlur: handleInputBlur,
45279
45393
  registerModeDisabled: registerModeDisabled,
45280
45394
  setCurrentArrWithParams: setCurrentArrWithParams,
45281
45395
  isDisabledDate: isDisabledDate
@@ -47530,11 +47644,14 @@ var DatePicker = function DatePicker(props0) {
47530
47644
  setFocused(true);
47531
47645
  (_props$onFocus = props.onFocus) === null || _props$onFocus === void 0 || _props$onFocus.call(props, e);
47532
47646
  });
47533
- var handleBlur = usePersistFn(function (e) {
47647
+ var handleBlur = usePersistFn(function (e, index) {
47534
47648
  var _props$onBlur;
47535
47649
  setFocused(false);
47536
- (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, e);
47650
+ (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, e, index);
47537
47651
  if (props.needConfirm) return;
47652
+ if (props.inputable && index !== undefined) {
47653
+ func.handleInputBlur(e.target.value, index);
47654
+ }
47538
47655
 
47539
47656
  // 当输入框有值时,失焦时需要立即触发 onChange,否则触控板的轻触模拟出来的click事件就获取不到最新的值
47540
47657
  if (inputArr.some(function (d) {
@@ -55218,6 +55335,11 @@ var SIZE_MAP = {
55218
55335
  'default': 36,
55219
55336
  'large': 42
55220
55337
  };
55338
+ var PADDING_Y_MAP = {
55339
+ 'small': 3,
55340
+ 'default': 0,
55341
+ 'large': 0
55342
+ };
55221
55343
  var TreeVirtual = function TreeVirtual(props) {
55222
55344
  var jssStyle = props.jssStyle,
55223
55345
  height = props.height,
@@ -55296,7 +55418,8 @@ var TreeVirtual = function TreeVirtual(props) {
55296
55418
  keepScrollHeight: true,
55297
55419
  dynamicVirtual: true,
55298
55420
  lineHeight: lineHeight,
55299
- renderItem: renderItem
55421
+ renderItem: renderItem,
55422
+ paddingY: PADDING_Y_MAP[datum.size || 'default']
55300
55423
  });
55301
55424
  };
55302
55425
  /* harmony default export */ var tree_virtual = (TreeVirtual);
@@ -67619,13 +67742,25 @@ var TreeSelect = function TreeSelect(props0) {
67619
67742
  var style = {
67620
67743
  maxHeight: height
67621
67744
  };
67745
+ var rootStyle = {
67746
+ padding: '0 4px'
67747
+ };
67748
+ if (!virtual) {
67749
+ if (size === 'small') {
67750
+ rootStyle = {
67751
+ padding: '3px 4px'
67752
+ };
67753
+ } else if (size === 'large') {
67754
+ rootStyle = {
67755
+ padding: '0 5px'
67756
+ };
67757
+ }
67758
+ }
67622
67759
  return /*#__PURE__*/(0,jsx_runtime.jsx)("div", {
67623
67760
  className: classnames_default()(styles.tree, styles.treeWrapper),
67624
67761
  style: style,
67625
67762
  children: /*#__PURE__*/(0,jsx_runtime.jsx)(src_tree_tree, objectSpread2_default()(objectSpread2_default()({
67626
- rootStyle: {
67627
- padding: '0 4px'
67628
- },
67763
+ rootStyle: rootStyle,
67629
67764
  jssStyle: jssStyle,
67630
67765
  renderItem: renderItem
67631
67766
  }, treeProps), {}, {
@@ -71429,7 +71564,7 @@ var upload_interface = __webpack_require__(8821);
71429
71564
 
71430
71565
 
71431
71566
  /* harmony default export */ var src_0 = ({
71432
- version: '3.7.2'
71567
+ version: '3.7.3-beta.2'
71433
71568
  });
71434
71569
  }();
71435
71570
  /******/ return __webpack_exports__;