@sebgroup/green-react 1.8.0 → 1.8.1

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/index.js CHANGED
@@ -3429,6 +3429,7 @@ function Slider({
3429
3429
  }) {
3430
3430
  const [background, setBackground] = React.useState();
3431
3431
  const [sliderValue, setSliderValue] = React.useState(value !== null && value !== void 0 ? value : defaultValue);
3432
+ const [inputFieldValue, setInputFieldValue] = React.useState(sliderValue + '');
3432
3433
  React.useLayoutEffect(() => {
3433
3434
  if (disabled) {
3434
3435
  setBackground(sliderColors.disabled);
@@ -3438,60 +3439,60 @@ function Slider({
3438
3439
  if (sliderValue !== undefined) percent = (sliderValue - min) / (max - min) * 100;
3439
3440
  setBackground(getSliderTrackBackground(percent));
3440
3441
  }, [disabled, sliderValue]);
3441
- const clamp = origValue => {
3442
- if (!enableClamping || origValue === undefined) return origValue;
3443
- let newValue = origValue;
3444
- let hasClamped = false;
3445
- if (newValue < min) {
3446
- hasClamped = true;
3447
- newValue = min;
3448
- }
3449
- if (newValue > max) {
3450
- hasClamped = true;
3451
- newValue = max;
3452
- }
3453
- if (hasClamped && onClamp) onClamp(origValue);
3454
- return newValue;
3442
+ const clamp = unclamped => {
3443
+ if (!enableClamping) return Number(unclamped);
3444
+ if (typeof unclamped === 'string') unclamped = Number(unclamped);
3445
+ if (!unclamped || Number.isNaN(unclamped)) return min;
3446
+ const clamped = Math.min(Math.max(min, unclamped), max);
3447
+ if (clamped !== unclamped && onClamp) onClamp(unclamped);
3448
+ return clamped;
3455
3449
  };
3456
- const setNumValueOrEmpty = value => {
3457
- let numValue = Number(value);
3458
- if (Number.isNaN(numValue) || value === '') numValue = undefined;
3459
- setSliderValue(clamp(numValue));
3460
- return numValue;
3450
+ const setNumValue = value => {
3451
+ if (value === '') value = min;
3452
+ const unclamped = Number(value);
3453
+ const clamped = clamp(unclamped);
3454
+ setSliderValue(clamped);
3455
+ return [unclamped, clamped];
3461
3456
  };
3462
3457
  React.useEffect(() => {
3463
- setNumValueOrEmpty(value);
3458
+ setNumValue(value);
3464
3459
  }, [value]);
3465
- const handleChange = e => {
3466
- const {
3467
- value
3468
- } = e.target;
3469
- const newVal = setNumValueOrEmpty(value);
3470
- if (onChange) onChange(newVal);
3460
+ const handleChange = value => {
3461
+ const [unclamped, clamped] = setNumValue(value);
3462
+ setInputFieldValue(unclamped + '');
3463
+ if (onChange) onChange(clamped);
3464
+ };
3465
+ const handleInputFieldChange = (value, shouldClamp = false) => {
3466
+ handleChange(value);
3467
+ if (value === '') setInputFieldValue('');else if (shouldClamp) setInputFieldValue(clamp(value) + '');
3471
3468
  };
3472
3469
  return jsxs(Fragment, {
3473
- children: [label && jsxs("div", Object.assign({
3470
+ children: [jsxs("div", Object.assign({
3474
3471
  className: "gds-slider-label-container"
3475
3472
  }, {
3476
- children: [jsxs("div", {
3477
- children: [jsx("label", Object.assign({
3478
- htmlFor: name
3479
- }, {
3480
- children: label
3481
- })), instruction && jsx("p", {
3482
- children: instruction
3483
- })]
3473
+ children: [jsx("div", {
3474
+ children: label && jsxs(Fragment, {
3475
+ children: [jsx("label", Object.assign({
3476
+ htmlFor: name
3477
+ }, {
3478
+ children: label
3479
+ })), instruction && jsx("p", {
3480
+ children: instruction
3481
+ })]
3482
+ })
3484
3483
  }), hasTextbox && jsx(InputWrapper, Object.assign({
3485
3484
  unitLabel: unitLabel
3486
3485
  }, {
3487
3486
  children: jsx("input", {
3488
3487
  type: "number",
3489
- value: sliderValue !== null && sliderValue !== void 0 ? sliderValue : '',
3488
+ value: inputFieldValue,
3490
3489
  id: `${name}-textbox`,
3491
3490
  name: name,
3492
3491
  className: errorMessage ? 'is-invalid' : '',
3493
3492
  disabled: disabled,
3494
- onChange: handleChange,
3493
+ onChange: e => handleInputFieldChange(e.currentTarget.value),
3494
+ onKeyDown: e => e.key === 'Enter' && handleInputFieldChange(e.currentTarget.value, true),
3495
+ onBlur: e => handleInputFieldChange(e.currentTarget.value, true),
3495
3496
  min: min,
3496
3497
  max: max,
3497
3498
  onInvalid: e => {
@@ -3508,7 +3509,7 @@ function Slider({
3508
3509
  max: max,
3509
3510
  step: step,
3510
3511
  disabled: disabled,
3511
- onChange: handleChange,
3512
+ onChange: e => handleChange(e.currentTarget.value),
3512
3513
  style: {
3513
3514
  background
3514
3515
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebgroup/green-react",
3
- "version": "1.8.0",
3
+ "version": "1.8.1",
4
4
  "peerDependencies": {
5
5
  "react": "^17 || ^18",
6
6
  "react-dom": "^17 || ^18"
@@ -25,7 +25,7 @@ export interface SliderProps {
25
25
  hasTextbox?: boolean;
26
26
  unitLabel?: string;
27
27
  disabled?: boolean;
28
- onChange?: (value: number | undefined) => void;
28
+ onChange?: (value: number) => void;
29
29
  enableClamping?: boolean;
30
30
  onClamp?: (value: number) => void;
31
31
  /**