@simplybusiness/mobius 6.4.2 → 6.4.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.4.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 3da43d9: Show "placeholder" option in paler colour for required select inputs
8
+
9
+ ## 6.4.3
10
+
11
+ ### Patch Changes
12
+
13
+ - 2a09422: Change colour of input text to be darker then placeholder
14
+
3
15
  ## 6.4.2
4
16
 
5
17
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -3902,9 +3902,9 @@ var Segment = (props) => {
3902
3902
  Segment.displayName = "Segment";
3903
3903
 
3904
3904
  // src/components/Select/Select.tsx
3905
+ var import_icons12 = require("@simplybusiness/icons");
3905
3906
  var import_dedupe43 = __toESM(require("classnames/dedupe"));
3906
3907
  var import_react66 = require("react");
3907
- var import_icons12 = require("@simplybusiness/icons");
3908
3908
  var import_jsx_runtime55 = require("react/jsx-runtime");
3909
3909
  var Select = (0, import_react66.forwardRef)((props, ref) => {
3910
3910
  const {
@@ -3973,6 +3973,7 @@ var Select = (0, import_react66.forwardRef)((props, ref) => {
3973
3973
  "aria-invalid": !!errorMessage,
3974
3974
  "aria-describedby": describedBy,
3975
3975
  "aria-required": isRequired,
3976
+ required: isRequired,
3976
3977
  onChange: handleChange
3977
3978
  }
3978
3979
  ),
@@ -4575,98 +4576,132 @@ ExpandableText.displayName = "ExpandableText";
4575
4576
  var import_react83 = require("react");
4576
4577
  var import_react_imask = require("react-imask");
4577
4578
  var import_jsx_runtime71 = require("react/jsx-runtime");
4578
- var createSyntheticEvent = (options) => {
4579
- const { event, useMaskedValue, maskedValue, unmaskedValue, name } = options;
4580
- const valueToEmit = useMaskedValue ? maskedValue : unmaskedValue;
4581
- return {
4582
- ...event,
4583
- target: {
4584
- ...event.target,
4585
- value: valueToEmit,
4586
- name
4579
+ var useAcceptHandler = (onChange, useMaskedValue, name) => {
4580
+ return (0, import_react83.useCallback)(
4581
+ (maskedValue, maskInstance) => {
4582
+ if (!onChange) {
4583
+ return;
4584
+ }
4585
+ const formattedValue = maskedValue;
4586
+ const rawValue = maskInstance.unmaskedValue;
4587
+ const valueToEmit = useMaskedValue ? formattedValue : rawValue;
4588
+ onChange({
4589
+ target: { name, value: valueToEmit }
4590
+ });
4587
4591
  },
4588
- currentTarget: {
4589
- ...event.currentTarget,
4590
- value: valueToEmit,
4591
- name
4592
- }
4593
- };
4592
+ [onChange, useMaskedValue, name]
4593
+ );
4594
4594
  };
4595
- var MaskedField = (0, import_react83.forwardRef)((props, ref) => {
4596
- const {
4597
- mask,
4598
- value,
4599
- defaultValue,
4600
- useMaskedValue = false,
4601
- onChange,
4602
- onBlur,
4603
- "aria-describedby": ariaDescribedBy,
4604
- "aria-label": ariaLabel,
4605
- ...textFieldProps
4606
- } = props;
4607
- const {
4608
- ref: maskRef,
4609
- value: maskedValue,
4610
- unmaskedValue,
4611
- setValue
4612
- } = (0, import_react_imask.useIMask)(mask, {
4613
- defaultValue: value || defaultValue
4614
- });
4595
+ var useCombinedRef = (imaskRef, forwardedRef) => {
4596
+ return (0, import_react83.useCallback)(
4597
+ (element) => {
4598
+ imaskRef.current = element;
4599
+ if (typeof forwardedRef === "function") {
4600
+ forwardedRef(element);
4601
+ } else if (forwardedRef) {
4602
+ forwardedRef.current = element;
4603
+ }
4604
+ },
4605
+ [imaskRef, forwardedRef]
4606
+ );
4607
+ };
4608
+ var useBlurHandler = (onBlur, maskRef, useMaskedValue, name) => {
4609
+ return (0, import_react83.useCallback)(
4610
+ (event) => {
4611
+ if (!onBlur || !maskRef.current) {
4612
+ return;
4613
+ }
4614
+ const formattedValue = maskRef.current.value;
4615
+ const rawValue = maskRef.current.unmaskedValue;
4616
+ const valueToEmit = useMaskedValue ? formattedValue : rawValue;
4617
+ onBlur({
4618
+ ...event,
4619
+ target: { ...event.target, name, value: valueToEmit }
4620
+ });
4621
+ },
4622
+ [onBlur, maskRef, useMaskedValue, name]
4623
+ );
4624
+ };
4625
+ var ControlledMaskedField = ({
4626
+ mask,
4627
+ useMaskedValue = false,
4628
+ value,
4629
+ onChange,
4630
+ onBlur,
4631
+ name,
4632
+ forwardedRef,
4633
+ ...textFieldProps
4634
+ }) => {
4635
+ const onAccept = useAcceptHandler(onChange, useMaskedValue, name);
4636
+ const { ref: imaskRef, maskRef, setValue } = (0, import_react_imask.useIMask)(mask, { onAccept });
4637
+ const combinedRef = useCombinedRef(imaskRef, forwardedRef);
4638
+ const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);
4615
4639
  (0, import_react83.useEffect)(() => {
4616
- const valueToCompare = useMaskedValue ? maskedValue : unmaskedValue;
4617
- if (value !== void 0 && value !== valueToCompare) {
4618
- setValue(value);
4619
- }
4620
- }, [value, setValue]);
4621
- const handleChange = (event) => {
4622
- if (onChange) {
4623
- onChange(
4624
- createSyntheticEvent({
4625
- event,
4626
- useMaskedValue,
4627
- maskedValue,
4628
- unmaskedValue,
4629
- name: textFieldProps.name
4630
- })
4631
- );
4632
- }
4633
- };
4634
- const handleBlur = (event) => {
4635
- if (onBlur) {
4636
- onBlur(
4637
- createSyntheticEvent({
4638
- event,
4639
- useMaskedValue,
4640
- maskedValue,
4641
- unmaskedValue,
4642
- name: textFieldProps.name
4643
- })
4644
- );
4640
+ if (!maskRef.current) {
4641
+ return;
4645
4642
  }
4646
- };
4647
- const inputRef = (node) => {
4648
- if (maskRef) {
4649
- maskRef.current = node;
4643
+ const stringValue = value.toString();
4644
+ const currentMasked = maskRef.current.value;
4645
+ const currentUnmasked = maskRef.current.unmaskedValue;
4646
+ if (currentMasked !== stringValue && currentUnmasked !== stringValue) {
4647
+ setValue(stringValue);
4650
4648
  }
4651
- if (ref) {
4652
- if (typeof ref === "function") {
4653
- ref(node);
4654
- } else {
4655
- ref.current = node;
4656
- }
4649
+ }, [value, maskRef, setValue, imaskRef]);
4650
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
4651
+ TextField,
4652
+ {
4653
+ ...textFieldProps,
4654
+ ref: combinedRef,
4655
+ name,
4656
+ onBlur: handleBlur
4657
4657
  }
4658
- };
4658
+ );
4659
+ };
4660
+ var UncontrolledMaskedField = ({
4661
+ mask,
4662
+ useMaskedValue = false,
4663
+ defaultValue,
4664
+ onChange,
4665
+ onBlur,
4666
+ name,
4667
+ forwardedRef,
4668
+ ...textFieldProps
4669
+ }) => {
4670
+ const onAccept = useAcceptHandler(onChange, useMaskedValue, name);
4671
+ const { ref: imaskRef, maskRef } = (0, import_react_imask.useIMask)(mask, { onAccept });
4672
+ const combinedRef = useCombinedRef(imaskRef, forwardedRef);
4673
+ const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);
4659
4674
  return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
4660
4675
  TextField,
4661
4676
  {
4662
4677
  ...textFieldProps,
4663
- ref: inputRef,
4664
- value: maskedValue,
4665
- onChange: handleChange,
4678
+ ref: combinedRef,
4679
+ name,
4666
4680
  onBlur: handleBlur,
4667
- "aria-describedby": ariaDescribedBy,
4668
- "aria-label": ariaLabel
4681
+ defaultValue: defaultValue?.toString()
4669
4682
  }
4670
4683
  );
4684
+ };
4685
+ var MaskedField = (0, import_react83.forwardRef)((props, forwardedRef) => {
4686
+ const { value, defaultValue, ...rest } = props;
4687
+ if ("value" in props) {
4688
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
4689
+ ControlledMaskedField,
4690
+ {
4691
+ ...rest,
4692
+ value: value ?? "",
4693
+ forwardedRef
4694
+ }
4695
+ );
4696
+ } else {
4697
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
4698
+ UncontrolledMaskedField,
4699
+ {
4700
+ ...rest,
4701
+ defaultValue,
4702
+ forwardedRef
4703
+ }
4704
+ );
4705
+ }
4671
4706
  });
4672
4707
  MaskedField.displayName = "MaskedField";