@simplybusiness/mobius 10.3.2 → 10.3.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.
Files changed (166) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/components/AddressLookup/AddressLookup.js +888 -5314
  3. package/dist/cjs/components/AddressLookup/AddressLookup.js.map +4 -4
  4. package/dist/cjs/components/AddressLookup/index.js +952 -5381
  5. package/dist/cjs/components/AddressLookup/index.js.map +4 -4
  6. package/dist/cjs/components/Checkbox/Checkbox.js +245 -5625
  7. package/dist/cjs/components/Checkbox/Checkbox.js.map +4 -4
  8. package/dist/cjs/components/Checkbox/CheckboxGroup.js +371 -5614
  9. package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +4 -4
  10. package/dist/cjs/components/Checkbox/index.js +377 -5619
  11. package/dist/cjs/components/Checkbox/index.js.map +4 -4
  12. package/dist/cjs/components/Combobox/Combobox.js +829 -5344
  13. package/dist/cjs/components/Combobox/Combobox.js.map +4 -4
  14. package/dist/cjs/components/Combobox/index.js +813 -5327
  15. package/dist/cjs/components/Combobox/index.js.map +4 -4
  16. package/dist/cjs/components/DateField/DateField.js +379 -5505
  17. package/dist/cjs/components/DateField/DateField.js.map +4 -4
  18. package/dist/cjs/components/DateField/index.js +383 -5508
  19. package/dist/cjs/components/DateField/index.js.map +4 -4
  20. package/dist/cjs/components/ErrorMessage/ErrorMessage.js +120 -5643
  21. package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +4 -4
  22. package/dist/cjs/components/ErrorMessage/index.js +121 -5642
  23. package/dist/cjs/components/ErrorMessage/index.js.map +4 -4
  24. package/dist/cjs/components/ExpandableText/ExpandableText.js +511 -5604
  25. package/dist/cjs/components/ExpandableText/ExpandableText.js.map +4 -4
  26. package/dist/cjs/components/ExpandableText/index.js +512 -5604
  27. package/dist/cjs/components/ExpandableText/index.js.map +4 -4
  28. package/dist/cjs/components/MaskedField/MaskedField.js +394 -5511
  29. package/dist/cjs/components/MaskedField/MaskedField.js.map +4 -4
  30. package/dist/cjs/components/MaskedField/index.js +293 -5118
  31. package/dist/cjs/components/MaskedField/index.js.map +4 -4
  32. package/dist/cjs/components/NumberField/NumberField.js +357 -5523
  33. package/dist/cjs/components/NumberField/NumberField.js.map +4 -4
  34. package/dist/cjs/components/NumberField/index.js +358 -5523
  35. package/dist/cjs/components/NumberField/index.js.map +4 -4
  36. package/dist/cjs/components/PasswordField/PasswordField.js +330 -5511
  37. package/dist/cjs/components/PasswordField/PasswordField.js.map +4 -4
  38. package/dist/cjs/components/PasswordField/ShowHideButton.js +32 -5655
  39. package/dist/cjs/components/PasswordField/ShowHideButton.js.map +4 -4
  40. package/dist/cjs/components/PasswordField/index.js +332 -5512
  41. package/dist/cjs/components/PasswordField/index.js.map +4 -4
  42. package/dist/cjs/components/Radio/Radio.js +242 -5632
  43. package/dist/cjs/components/Radio/Radio.js.map +4 -4
  44. package/dist/cjs/components/Radio/RadioGroup.js +274 -5619
  45. package/dist/cjs/components/Radio/RadioGroup.js.map +4 -4
  46. package/dist/cjs/components/Radio/index.js +404 -5628
  47. package/dist/cjs/components/Radio/index.js.map +4 -4
  48. package/dist/cjs/components/Select/Select.js +233 -5588
  49. package/dist/cjs/components/Select/Select.js.map +4 -4
  50. package/dist/cjs/components/Select/index.js +234 -5588
  51. package/dist/cjs/components/Select/index.js.map +4 -4
  52. package/dist/cjs/components/TextArea/TextArea.js +229 -5531
  53. package/dist/cjs/components/TextArea/TextArea.js.map +4 -4
  54. package/dist/cjs/components/TextArea/index.js +230 -5531
  55. package/dist/cjs/components/TextArea/index.js.map +4 -4
  56. package/dist/cjs/components/TextField/TextField.js +265 -5522
  57. package/dist/cjs/components/TextField/TextField.js.map +4 -4
  58. package/dist/cjs/components/TextField/index.js +266 -5522
  59. package/dist/cjs/components/TextField/index.js.map +4 -4
  60. package/dist/cjs/components/index.js +4273 -5291
  61. package/dist/cjs/components/index.js.map +4 -4
  62. package/dist/cjs/index.js +4304 -5334
  63. package/dist/cjs/index.js.map +4 -4
  64. package/dist/cjs/meta.json +5734 -51529
  65. package/dist/esm/chunk-3O5DIIGS.js +1 -0
  66. package/dist/esm/chunk-3O5DIIGS.js.map +7 -0
  67. package/dist/esm/chunk-3PRSHEVX.js +1 -0
  68. package/dist/esm/chunk-3PRSHEVX.js.map +7 -0
  69. package/dist/esm/chunk-4NBLO5WK.js +54 -0
  70. package/dist/esm/chunk-4NBLO5WK.js.map +7 -0
  71. package/dist/esm/chunk-4WVJNNBK.js +157 -0
  72. package/dist/esm/chunk-4WVJNNBK.js.map +7 -0
  73. package/dist/esm/chunk-5L4G4VLM.js +1 -0
  74. package/dist/esm/chunk-5L4G4VLM.js.map +7 -0
  75. package/dist/esm/chunk-5OFXPT4J.js +135 -0
  76. package/dist/esm/chunk-5OFXPT4J.js.map +7 -0
  77. package/dist/esm/chunk-6O77SOOB.js +1 -0
  78. package/dist/esm/chunk-6O77SOOB.js.map +7 -0
  79. package/dist/esm/chunk-AFU7BFCD.js +151 -0
  80. package/dist/esm/chunk-AFU7BFCD.js.map +7 -0
  81. package/dist/esm/chunk-BGR2OTTR.js +1 -0
  82. package/dist/esm/chunk-BGR2OTTR.js.map +7 -0
  83. package/dist/esm/chunk-BIGO5EVC.js +1 -0
  84. package/dist/esm/chunk-BIGO5EVC.js.map +7 -0
  85. package/dist/esm/chunk-CUOVI2HT.js +1 -0
  86. package/dist/esm/chunk-CUOVI2HT.js.map +7 -0
  87. package/dist/esm/chunk-F4RQKLF7.js +1 -0
  88. package/dist/esm/chunk-F4RQKLF7.js.map +7 -0
  89. package/dist/esm/chunk-FKTDL7KO.js +355 -0
  90. package/dist/esm/chunk-FKTDL7KO.js.map +7 -0
  91. package/dist/esm/chunk-KQZ3MNK5.js +100 -0
  92. package/dist/esm/chunk-KQZ3MNK5.js.map +7 -0
  93. package/dist/esm/chunk-M2NDSQR5.js +106 -0
  94. package/dist/esm/chunk-M2NDSQR5.js.map +7 -0
  95. package/dist/esm/chunk-N4WQ6522.js +125 -0
  96. package/dist/esm/chunk-N4WQ6522.js.map +7 -0
  97. package/dist/esm/{chunk-CNOF66SV.js → chunk-NGNVAFBJ.js} +4 -4
  98. package/dist/esm/chunk-NOQ27VLY.js +1 -0
  99. package/dist/esm/chunk-NOQ27VLY.js.map +7 -0
  100. package/dist/esm/chunk-ONDOONBM.js +101 -0
  101. package/dist/esm/chunk-ONDOONBM.js.map +7 -0
  102. package/dist/esm/chunk-P34DI6BE.js +1 -0
  103. package/dist/esm/chunk-P34DI6BE.js.map +7 -0
  104. package/dist/esm/chunk-P5VEI574.js +97 -0
  105. package/dist/esm/chunk-P5VEI574.js.map +7 -0
  106. package/dist/esm/chunk-QPIA6BGW.js +64 -0
  107. package/dist/esm/chunk-QPIA6BGW.js.map +7 -0
  108. package/dist/esm/chunk-SZEFLEDA.js +1 -0
  109. package/dist/esm/chunk-SZEFLEDA.js.map +7 -0
  110. package/dist/esm/chunk-TXB4BOHB.js +1 -0
  111. package/dist/esm/chunk-TXB4BOHB.js.map +7 -0
  112. package/dist/esm/chunk-UIIXVY6K.js +123 -0
  113. package/dist/esm/chunk-UIIXVY6K.js.map +7 -0
  114. package/dist/esm/chunk-UQVAEWY2.js +44 -0
  115. package/dist/esm/chunk-UQVAEWY2.js.map +7 -0
  116. package/dist/esm/chunk-WC3D5GNN.js +29 -0
  117. package/dist/esm/chunk-WC3D5GNN.js.map +7 -0
  118. package/dist/esm/chunk-WNRO77YH.js +1 -0
  119. package/dist/esm/chunk-WNRO77YH.js.map +7 -0
  120. package/dist/esm/chunk-X6EPYQKX.js +96 -0
  121. package/dist/esm/chunk-X6EPYQKX.js.map +7 -0
  122. package/dist/esm/chunk-ZN5TRIVZ.js +41 -0
  123. package/dist/esm/chunk-ZN5TRIVZ.js.map +7 -0
  124. package/dist/esm/components/AddressLookup/AddressLookup.js +9 -106
  125. package/dist/esm/components/AddressLookup/index.js +10 -103
  126. package/dist/esm/components/Checkbox/Checkbox.js +3 -116
  127. package/dist/esm/components/Checkbox/CheckboxGroup.js +4 -114
  128. package/dist/esm/components/Checkbox/index.js +7 -114
  129. package/dist/esm/components/Combobox/Combobox.js +6 -107
  130. package/dist/esm/components/Combobox/index.js +8 -107
  131. package/dist/esm/components/DateField/DateField.js +6 -113
  132. package/dist/esm/components/DateField/index.js +7 -113
  133. package/dist/esm/components/ErrorMessage/ErrorMessage.js +1 -146
  134. package/dist/esm/components/ErrorMessage/index.js +2 -146
  135. package/dist/esm/components/ExpandableText/ExpandableText.js +1 -108
  136. package/dist/esm/components/ExpandableText/index.js +2 -108
  137. package/dist/esm/components/MaskedField/MaskedField.js +5 -114
  138. package/dist/esm/components/MaskedField/MaskedField.js.map +1 -1
  139. package/dist/esm/components/MaskedField/index.js +6 -114
  140. package/dist/esm/components/NumberField/NumberField.js +6 -114
  141. package/dist/esm/components/NumberField/index.js +7 -114
  142. package/dist/esm/components/PasswordField/PasswordField.js +7 -114
  143. package/dist/esm/components/PasswordField/ShowHideButton.js +1 -149
  144. package/dist/esm/components/PasswordField/index.js +8 -114
  145. package/dist/esm/components/Radio/Radio.js +3 -144
  146. package/dist/esm/components/Radio/RadioGroup.js +3 -114
  147. package/dist/esm/components/Radio/index.js +7 -115
  148. package/dist/esm/components/Select/Select.js +3 -114
  149. package/dist/esm/components/Select/index.js +4 -114
  150. package/dist/esm/components/Slider/Slider.js +2 -2
  151. package/dist/esm/components/Slider/index.js +2 -2
  152. package/dist/esm/components/TextArea/TextArea.js +3 -112
  153. package/dist/esm/components/TextArea/index.js +4 -112
  154. package/dist/esm/components/TextField/TextField.js +4 -114
  155. package/dist/esm/components/TextField/index.js +5 -114
  156. package/dist/esm/components/index.js +81 -44
  157. package/dist/esm/index.js +81 -39
  158. package/dist/esm/meta.json +6950 -19169
  159. package/dist/tsconfig.build.tsbuildinfo +1 -1
  160. package/package.json +2 -2
  161. package/src/components/ErrorMessage/ErrorMessage.tsx +1 -1
  162. package/src/components/ExpandableText/ExpandableText.tsx +3 -1
  163. package/src/components/PasswordField/ShowHideButton.tsx +1 -1
  164. package/dist/esm/chunk-W2RQH4WS.js +0 -1606
  165. package/dist/esm/chunk-W2RQH4WS.js.map +0 -7
  166. /package/dist/esm/{chunk-CNOF66SV.js.map → chunk-NGNVAFBJ.js.map} +0 -0
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-3O5DIIGS.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-3PRSHEVX.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,54 @@
1
+ import {
2
+ ShowHideButton
3
+ } from "./chunk-WC3D5GNN.js";
4
+ import {
5
+ TextField
6
+ } from "./chunk-UIIXVY6K.js";
7
+ import {
8
+ mergeRefs
9
+ } from "./chunk-QGGILW3D.js";
10
+
11
+ // src/components/PasswordField/PasswordField.tsx
12
+ import classNames from "classnames/dedupe";
13
+ import { useRef, useState } from "react";
14
+ import "@simplybusiness/mobius/src/components/PasswordField/PasswordField.css";
15
+ import { jsx } from "react/jsx-runtime";
16
+ var PasswordField = ({
17
+ ref,
18
+ className,
19
+ autoComplete = "current-password",
20
+ ...props
21
+ }) => {
22
+ const [show, setShow] = useState(false);
23
+ const type = show ? "text" : "password";
24
+ const classes = classNames("mobius-password-field", className);
25
+ const localRef = useRef(null);
26
+ const handleShowHideButtonClick = () => {
27
+ const selectionStart = localRef.current?.selectionStart;
28
+ const selectionEnd = localRef.current?.selectionEnd;
29
+ setShow((oldShow) => !oldShow);
30
+ requestAnimationFrame(() => {
31
+ localRef.current?.focus();
32
+ if (selectionStart != null && selectionEnd != null) {
33
+ localRef.current?.setSelectionRange(selectionStart, selectionEnd);
34
+ }
35
+ });
36
+ };
37
+ return /* @__PURE__ */ jsx(
38
+ TextField,
39
+ {
40
+ ref: mergeRefs([localRef, ref]),
41
+ className: classes,
42
+ ...props,
43
+ autoComplete,
44
+ type,
45
+ suffixInside: /* @__PURE__ */ jsx(ShowHideButton, { onClick: handleShowHideButtonClick, show })
46
+ }
47
+ );
48
+ };
49
+ PasswordField.displayName = "PasswordField";
50
+
51
+ export {
52
+ PasswordField
53
+ };
54
+ //# sourceMappingURL=chunk-4NBLO5WK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/PasswordField/PasswordField.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { ShowHideButton } from \"./ShowHideButton\";\nimport \"./PasswordField.css\";\n\nexport type PasswordFieldAutoComplete = \"current-password\" | \"new-password\";\n\nexport interface PasswordFieldProps extends TextFieldProps {\n autoComplete?: PasswordFieldAutoComplete;\n}\n\nexport const PasswordField = ({\n ref,\n className,\n autoComplete = \"current-password\",\n ...props\n}: PasswordFieldProps) => {\n const [show, setShow] = useState(false);\n const type = show ? \"text\" : \"password\";\n const classes = classNames(\"mobius-password-field\", className);\n const localRef = useRef<TextFieldElementType>(null);\n\n const handleShowHideButtonClick = () => {\n const selectionStart = localRef.current?.selectionStart;\n const selectionEnd = localRef.current?.selectionEnd;\n\n setShow(oldShow => !oldShow);\n requestAnimationFrame(() => {\n localRef.current?.focus();\n if (selectionStart != null && selectionEnd != null) {\n localRef.current?.setSelectionRange(selectionStart, selectionEnd);\n }\n });\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n {...props}\n autoComplete={autoComplete}\n type={type}\n suffixInside={\n <ShowHideButton onClick={handleShowHideButtonClick} show={show} />\n }\n />\n );\n};\n\nPasswordField.displayName = \"PasswordField\";\n"],
5
+ "mappings": ";;;;;;;;;;;AAEA,OAAO,gBAAgB;AACvB,SAAS,QAAQ,gBAAgB;AAQjC,OAAO;AAwCC;AAhCD,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,MAA0B;AACxB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,OAAO,OAAO,SAAS;AAC7B,QAAM,UAAU,WAAW,yBAAyB,SAAS;AAC7D,QAAM,WAAW,OAA6B,IAAI;AAElD,QAAM,4BAA4B,MAAM;AACtC,UAAM,iBAAiB,SAAS,SAAS;AACzC,UAAM,eAAe,SAAS,SAAS;AAEvC,YAAQ,aAAW,CAAC,OAAO;AAC3B,0BAAsB,MAAM;AAC1B,eAAS,SAAS,MAAM;AACxB,UAAI,kBAAkB,QAAQ,gBAAgB,MAAM;AAClD,iBAAS,SAAS,kBAAkB,gBAAgB,YAAY;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC;AAAA,MAC9B,WAAW;AAAA,MACV,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,cACE,oBAAC,kBAAe,SAAS,2BAA2B,MAAY;AAAA;AAAA,EAEpE;AAEJ;AAEA,cAAc,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,157 @@
1
+ import {
2
+ ErrorMessage
3
+ } from "./chunk-UQVAEWY2.js";
4
+ import {
5
+ Stack
6
+ } from "./chunk-XH3OJQMW.js";
7
+ import {
8
+ Label
9
+ } from "./chunk-ZN7OWLZY.js";
10
+ import {
11
+ useValidationClasses
12
+ } from "./chunk-DYOFXXZD.js";
13
+ import {
14
+ spaceDelimitedList
15
+ } from "./chunk-DTWRSP5P.js";
16
+
17
+ // src/components/Radio/RadioGroup.tsx
18
+ import classNames from "classnames/dedupe";
19
+ import {
20
+ Children,
21
+ cloneElement,
22
+ isValidElement,
23
+ useCallback,
24
+ useEffect,
25
+ useId,
26
+ useRef,
27
+ useState
28
+ } from "react";
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ var getDefaultVal = (children, defaultValue) => {
31
+ if (Array.isArray(children) && defaultValue) {
32
+ const option = children?.find((item) => item.props.value === defaultValue);
33
+ if (!option) return "";
34
+ return option.props.value;
35
+ }
36
+ return "";
37
+ };
38
+ var RadioGroup = ({ ref, ...props }) => {
39
+ const {
40
+ label,
41
+ isDisabled = false,
42
+ isRequired,
43
+ isInvalid,
44
+ orientation = "vertical",
45
+ className,
46
+ errorMessage,
47
+ children,
48
+ defaultValue,
49
+ value,
50
+ isReadOnly,
51
+ name,
52
+ onChange,
53
+ autoStack = false,
54
+ ...rest
55
+ } = props;
56
+ const defaultSelected = getDefaultVal(children, value || defaultValue);
57
+ const [selected, setSelected] = useState(defaultSelected);
58
+ const overflowsRef = useRef({});
59
+ const [hasOverflow, setHasOverflow] = useState(false);
60
+ useEffect(() => {
61
+ if (value !== void 0) {
62
+ setSelected(value);
63
+ }
64
+ }, [value]);
65
+ const handleOverflow = useCallback(
66
+ (radioValue, overflow) => {
67
+ overflowsRef.current = {
68
+ ...overflowsRef.current,
69
+ [radioValue]: overflow
70
+ };
71
+ const anyOverflow = Object.values(overflowsRef.current).some(
72
+ (o) => o.vertical || o.horizontal
73
+ );
74
+ if (anyOverflow !== hasOverflow) {
75
+ setHasOverflow(anyOverflow);
76
+ }
77
+ },
78
+ [hasOverflow]
79
+ );
80
+ const effectiveOrientation = autoStack && orientation === "horizontal" && hasOverflow ? "vertical" : orientation;
81
+ const validationClasses = useValidationClasses({ isInvalid });
82
+ const radioClasses = {
83
+ "--is-disabled": isDisabled,
84
+ "--is-required": typeof isRequired === "boolean" && isRequired,
85
+ "--is-optional": typeof isRequired === "boolean" && !isRequired,
86
+ [`--is-${effectiveOrientation}`]: true,
87
+ [className || ""]: true
88
+ };
89
+ const radioGroupClasses = classNames(
90
+ "mobius",
91
+ "mobius-radio-group",
92
+ radioClasses,
93
+ validationClasses
94
+ );
95
+ const radioWrapperClasses = classNames("mobius-radio__wrapper", {
96
+ [`--is-${effectiveOrientation}`]: true
97
+ });
98
+ const labelClasses = classNames(radioClasses, validationClasses);
99
+ const errorMessageId = useId();
100
+ const defaultNameAttrId = useId();
101
+ const nameAttribute = name || defaultNameAttrId;
102
+ const shouldErrorMessageShow = errorMessage ? errorMessageId : void 0;
103
+ const describedBy = spaceDelimitedList([
104
+ shouldErrorMessageShow,
105
+ props["aria-describedby"]
106
+ ]);
107
+ const labelId = useId();
108
+ return /* @__PURE__ */ jsx(
109
+ "div",
110
+ {
111
+ ...rest,
112
+ "aria-describedby": describedBy,
113
+ "aria-disabled": isDisabled,
114
+ "aria-errormessage": shouldErrorMessageShow,
115
+ "aria-invalid": isInvalid,
116
+ "aria-label": props["aria-label"],
117
+ "aria-labelledby": props["aria-labelledby"] || labelId,
118
+ "aria-orientation": effectiveOrientation,
119
+ "aria-readonly": isReadOnly,
120
+ "aria-required": isRequired,
121
+ ref,
122
+ className: radioGroupClasses,
123
+ role: "radiogroup",
124
+ children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
125
+ label && /* @__PURE__ */ jsx(Label, { htmlFor: name, id: labelId, className: labelClasses, children: label }),
126
+ /* @__PURE__ */ jsx("div", { className: radioWrapperClasses, children: Children.map(children, (child) => {
127
+ if (isValidElement(child)) {
128
+ const childValue = child.props.value;
129
+ return cloneElement(
130
+ child,
131
+ {
132
+ orientation: effectiveOrientation,
133
+ groupDisabled: isDisabled,
134
+ name: nameAttribute,
135
+ selected: selected || defaultSelected,
136
+ // in case state does not update
137
+ setSelected,
138
+ isRequired,
139
+ "aria-describedby": describedBy,
140
+ onChange,
141
+ onOverflow: childValue ? (overflow) => handleOverflow(childValue, overflow) : void 0
142
+ }
143
+ );
144
+ }
145
+ return child;
146
+ }) }),
147
+ /* @__PURE__ */ jsx(ErrorMessage, { id: errorMessageId, errorMessage })
148
+ ] })
149
+ }
150
+ );
151
+ };
152
+ RadioGroup.displayName = "RadioGroup";
153
+
154
+ export {
155
+ RadioGroup
156
+ };
157
+ //# sourceMappingURL=chunk-4WVJNNBK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Radio/RadioGroup.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { Validation } from \"../../types\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport type { RadioOverflowInfo } from \"./Radio\";\n\nexport type RadioGroupElementType = HTMLDivElement;\n\nexport interface RadioGroupProps\n extends DOMProps, Validation, RefAttributes<RadioGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n errorMessage?: string;\n // Callback that fires when select changes\n onChange?: (event: HTMLElementEvent<HTMLInputElement>) => void;\n /**\n * Automatically change orientation from horizontal to vertical when any Radio label overflows.\n * Only applies when orientation is set to \"horizontal\".\n */\n autoStack?: boolean;\n // Defines a string value that labels the current element.\n \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string;\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n name?: string;\n}\n\nconst getDefaultVal = (children: ReactNode, defaultValue?: string) => {\n if (Array.isArray(children) && defaultValue) {\n const option = children?.find(item => item.props.value === defaultValue);\n\n if (!option) return \"\";\n\n return option.props.value;\n }\n\n return \"\";\n};\n\nconst RadioGroup = ({ ref, ...props }: RadioGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n className,\n errorMessage,\n children,\n defaultValue,\n value,\n isReadOnly,\n name,\n onChange,\n autoStack = false,\n ...rest\n } = props;\n const defaultSelected = getDefaultVal(children, value || defaultValue);\n const [selected, setSelected] = useState<string>(defaultSelected);\n const overflowsRef = useRef<Record<string, RadioOverflowInfo>>({});\n const [hasOverflow, setHasOverflow] = useState(false);\n\n // Handle controlled behavior - update state when value prop changes\n useEffect(() => {\n if (value !== undefined) {\n setSelected(value);\n }\n }, [value]);\n\n // Handle overflow detection and auto-stack if needed\n const handleOverflow = useCallback(\n (radioValue: string, overflow: RadioOverflowInfo) => {\n overflowsRef.current = {\n ...overflowsRef.current,\n [radioValue]: overflow,\n };\n\n // Check if any radio has overflow\n const anyOverflow = Object.values(overflowsRef.current).some(\n o => o.vertical || o.horizontal,\n );\n\n if (anyOverflow !== hasOverflow) {\n setHasOverflow(anyOverflow);\n }\n },\n [hasOverflow],\n );\n\n // Determine effective orientation (auto-stack if needed)\n const effectiveOrientation =\n autoStack && orientation === \"horizontal\" && hasOverflow\n ? \"vertical\"\n : orientation;\n\n const validationClasses = useValidationClasses({ isInvalid });\n const radioClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n [`--is-${effectiveOrientation}`]: true,\n [className || \"\"]: true,\n };\n const radioGroupClasses = classNames(\n \"mobius\",\n \"mobius-radio-group\",\n radioClasses,\n validationClasses,\n );\n const radioWrapperClasses = classNames(\"mobius-radio__wrapper\", {\n [`--is-${effectiveOrientation}`]: true,\n });\n const labelClasses = classNames(radioClasses, validationClasses);\n const errorMessageId = useId();\n const defaultNameAttrId = useId();\n const nameAttribute = name || defaultNameAttrId;\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n return (\n <div\n {...rest}\n aria-describedby={describedBy}\n aria-disabled={isDisabled}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n aria-orientation={effectiveOrientation}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n ref={ref}\n className={radioGroupClasses}\n role=\"radiogroup\"\n >\n <Stack gap=\"xs\">\n {label && (\n <Label htmlFor={name} id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={radioWrapperClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childValue = (child.props as { value?: string }).value;\n return cloneElement(\n child as ReactElement,\n {\n orientation: effectiveOrientation,\n groupDisabled: isDisabled,\n name: nameAttribute,\n selected: selected || defaultSelected, // in case state does not update\n setSelected,\n isRequired,\n \"aria-describedby\": describedBy,\n onChange,\n onOverflow: childValue\n ? (overflow: RadioOverflowInfo) =>\n handleOverflow(childValue, overflow)\n : undefined,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n </div>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\nexport { RadioGroup };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-5L4G4VLM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,135 @@
1
+ import {
2
+ ErrorMessage
3
+ } from "./chunk-UQVAEWY2.js";
4
+ import {
5
+ Label
6
+ } from "./chunk-ZN7OWLZY.js";
7
+
8
+ // src/components/Radio/Radio.tsx
9
+ import classNames from "classnames/dedupe";
10
+ import {
11
+ Children,
12
+ isValidElement,
13
+ useLayoutEffect,
14
+ useMemo,
15
+ useRef
16
+ } from "react";
17
+ import "@simplybusiness/mobius/src/components/Radio/Radio.css";
18
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
19
+ var Radio = ({ ref, ...props }) => {
20
+ const {
21
+ children,
22
+ value,
23
+ label,
24
+ className,
25
+ isDisabled,
26
+ errorMessage,
27
+ onChange,
28
+ defaultChecked,
29
+ groupDisabled,
30
+ name,
31
+ selected,
32
+ setSelected,
33
+ isRequired,
34
+ onOverflow,
35
+ orientation,
36
+ ...otherProps
37
+ } = props;
38
+ const realDisabled = groupDisabled || isDisabled;
39
+ const isMultiline = label && children;
40
+ const isControlled = selected !== void 0;
41
+ const isChecked = isControlled ? selected === value : defaultChecked;
42
+ const contentRef = useRef(null);
43
+ const prevOverflowRef = useRef({
44
+ vertical: false,
45
+ horizontal: false
46
+ });
47
+ const hasIconFirst = useMemo(() => {
48
+ if (!children || Children.count(children) === 0) return false;
49
+ const firstChild = Children.toArray(children)[0];
50
+ if (!isValidElement(firstChild)) return false;
51
+ const props2 = firstChild.props;
52
+ return "icon" in props2 && props2.icon !== void 0;
53
+ }, [children]);
54
+ useLayoutEffect(() => {
55
+ if (!contentRef.current || !onOverflow) return;
56
+ if (orientation === "vertical") {
57
+ return;
58
+ }
59
+ const element = contentRef.current;
60
+ const scrollOverflowVertical = element.scrollHeight > element.clientHeight;
61
+ const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;
62
+ const styles = window.getComputedStyle(element);
63
+ const lineHeight = parseFloat(styles.lineHeight);
64
+ const fontSize = parseFloat(styles.fontSize);
65
+ const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;
66
+ const WRAP_DETECTION_TOLERANCE = 1.1;
67
+ const hasWrapped = element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;
68
+ const vertical = scrollOverflowVertical || hasWrapped;
69
+ const horizontal = scrollOverflowHorizontal;
70
+ const newOverflowState = { vertical, horizontal };
71
+ const prevOverflow = prevOverflowRef.current;
72
+ if (newOverflowState.vertical !== prevOverflow.vertical || newOverflowState.horizontal !== prevOverflow.horizontal) {
73
+ prevOverflowRef.current = newOverflowState;
74
+ onOverflow(newOverflowState);
75
+ }
76
+ }, [label, children, onOverflow, orientation]);
77
+ const radioClasses = {
78
+ "--is-disabled": realDisabled,
79
+ "--is-selected": selected === value,
80
+ "--is-multiline": !!isMultiline,
81
+ "--is-required": isRequired
82
+ };
83
+ const containerClasses = classNames(
84
+ "mobius-radio__label",
85
+ radioClasses,
86
+ className,
87
+ { "--has-icon-first": hasIconFirst }
88
+ );
89
+ const inputClasses = classNames("mobius-radio__input", radioClasses);
90
+ const { "aria-describedby": _ariaDescribedBy, ...rest } = otherProps;
91
+ const handleChange = (event) => {
92
+ if (setSelected) {
93
+ setSelected(event.target.value);
94
+ }
95
+ if (onChange) {
96
+ const adaptedEvent = {
97
+ ...event.nativeEvent,
98
+ target: event.target
99
+ };
100
+ onChange(adaptedEvent);
101
+ }
102
+ };
103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ /* @__PURE__ */ jsxs(Label, { className: containerClasses, children: [
105
+ /* @__PURE__ */ jsx(
106
+ "input",
107
+ {
108
+ "aria-describedby": otherProps["aria-describedby"],
109
+ disabled: realDisabled,
110
+ ref,
111
+ className: inputClasses,
112
+ value,
113
+ tabIndex: 0,
114
+ type: "radio",
115
+ onChange: handleChange,
116
+ ...isControlled ? { checked: isChecked } : { defaultChecked: isChecked },
117
+ name,
118
+ required: isRequired,
119
+ ...rest
120
+ }
121
+ ),
122
+ isMultiline ? /* @__PURE__ */ jsxs("div", { ref: contentRef, className: "mobius-radio__content--multiline", children: [
123
+ /* @__PURE__ */ jsx("div", { className: "mobius-radio__content-first-line", children: label }),
124
+ /* @__PURE__ */ jsx("div", { className: "mobius-radio__extra-content", children })
125
+ ] }) : /* @__PURE__ */ jsx("div", { ref: contentRef, className: "mobius-radio__content", children: label || children })
126
+ ] }),
127
+ errorMessage && /* @__PURE__ */ jsx(ErrorMessage, { errorMessage })
128
+ ] });
129
+ };
130
+ Radio.displayName = "Radio";
131
+
132
+ export {
133
+ Radio
134
+ };
135
+ //# sourceMappingURL=chunk-5OFXPT4J.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Radio/Radio.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n isValidElement,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport \"./Radio.css\";\n\nexport type RadioElementType = HTMLInputElement;\n\nexport type RadioOverflowInfo = {\n vertical: boolean;\n horizontal: boolean;\n};\n\nexport type AriaRadioProps = {\n /**\n * Defines a string value that labels the current element.\n */\n \"aria-label\"?: string;\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n \"aria-labelledby\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n \"aria-details\"?: string;\n};\n\nexport interface RadioProps\n extends DOMProps, AriaRadioProps, RefAttributes<RadioElementType> {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n errorMessage?: string;\n value: string;\n isDisabled?: boolean;\n onChange?: (event: HTMLElementEvent<RadioElementType>) => void;\n defaultChecked?: boolean;\n /**\n * Callback fired when label overflow state changes.\n * Only invoked when the Radio is in horizontal orientation to prevent infinite loops with autoStack.\n * Provides information about vertical and horizontal overflow.\n */\n onOverflow?: (overflow: RadioOverflowInfo) => void;\n // Internal:** Do not use\n groupDisabled?: boolean;\n // Internal:** Do not use\n name?: string;\n // Internal:** Do not use\n selected?: string;\n // Internal:** Do not use\n setSelected?: React.Dispatch<React.SetStateAction<string>>;\n isRequired?: boolean;\n /**\n * **Internal:** Passed via cloneElement from RadioGroup.\n * @internal\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst Radio = ({ ref, ...props }: RadioProps) => {\n const {\n children,\n value,\n label,\n className,\n isDisabled,\n errorMessage,\n onChange,\n defaultChecked,\n groupDisabled,\n name,\n selected,\n setSelected,\n isRequired,\n onOverflow,\n orientation,\n ...otherProps\n } = props;\n const realDisabled = groupDisabled || isDisabled;\n const isMultiline = label && children;\n const isControlled = selected !== undefined;\n const isChecked = isControlled ? selected === value : defaultChecked;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const prevOverflowRef = useRef<RadioOverflowInfo>({\n vertical: false,\n horizontal: false,\n });\n\n const hasIconFirst = useMemo(() => {\n if (!children || Children.count(children) === 0) return false;\n\n const firstChild = Children.toArray(children)[0];\n if (!isValidElement(firstChild)) return false;\n\n const props = firstChild.props as Record<string, unknown>;\n return \"icon\" in props && props.icon !== undefined;\n }, [children]);\n\n // Detect overflow and call callback\n useLayoutEffect(() => {\n if (!contentRef.current || !onOverflow) return;\n\n // Only detect overflow when in horizontal orientation\n // This prevents infinite loops when autoStack switches to vertical\n if (orientation === \"vertical\") {\n return;\n }\n\n const element = contentRef.current;\n\n // Check for content being cut off (true overflow)\n const scrollOverflowVertical = element.scrollHeight > element.clientHeight;\n const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;\n\n // Check for multi-line text wrapping by comparing height to single line height\n const styles = window.getComputedStyle(element);\n const lineHeight = parseFloat(styles.lineHeight);\n const fontSize = parseFloat(styles.fontSize);\n const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;\n\n // Tolerance multiplier to account for sub-pixel rendering and line-height variations.\n // If element height is greater than single line, text has wrapped.\n const WRAP_DETECTION_TOLERANCE = 1.1;\n const hasWrapped =\n element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;\n\n const vertical = scrollOverflowVertical || hasWrapped;\n const horizontal = scrollOverflowHorizontal;\n\n const newOverflowState = { vertical, horizontal };\n const prevOverflow = prevOverflowRef.current;\n\n // Only call callback if state actually changed\n if (\n newOverflowState.vertical !== prevOverflow.vertical ||\n newOverflowState.horizontal !== prevOverflow.horizontal\n ) {\n prevOverflowRef.current = newOverflowState;\n onOverflow(newOverflowState);\n }\n }, [label, children, onOverflow, orientation]);\n\n const radioClasses = {\n \"--is-disabled\": realDisabled,\n \"--is-selected\": selected === value,\n \"--is-multiline\": !!isMultiline,\n \"--is-required\": isRequired,\n };\n const containerClasses = classNames(\n \"mobius-radio__label\",\n radioClasses,\n className,\n { \"--has-icon-first\": hasIconFirst },\n );\n\n const inputClasses = classNames(\"mobius-radio__input\", radioClasses);\n\n // Exclude props that are passed via cloneElement in `<RadioGroup />`\n const { \"aria-describedby\": _ariaDescribedBy, ...rest } = otherProps;\n\n // Handle all interactions through onChange event\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Update internal state for RadioGroup\n if (setSelected) {\n setSelected(event.target.value);\n }\n\n // Call parent onChange callback\n if (onChange) {\n // Create an HTMLElementEvent-compatible object\n const adaptedEvent: HTMLElementEvent<HTMLInputElement> = {\n ...event.nativeEvent,\n target: event.target,\n };\n onChange(adaptedEvent);\n }\n };\n\n return (\n <>\n <Label className={containerClasses}>\n <input\n aria-describedby={otherProps[\"aria-describedby\"]}\n disabled={realDisabled}\n ref={ref}\n className={inputClasses}\n value={value}\n tabIndex={0}\n type=\"radio\"\n onChange={handleChange}\n {...(isControlled\n ? { checked: isChecked }\n : { defaultChecked: isChecked })}\n name={name}\n required={isRequired}\n {...rest}\n />\n {isMultiline ? (\n <div ref={contentRef} className=\"mobius-radio__content--multiline\">\n <div className=\"mobius-radio__content-first-line\">{label}</div>\n <div className=\"mobius-radio__extra-content\">{children}</div>\n </div>\n ) : (\n <div ref={contentRef} className=\"mobius-radio__content\">\n {label || children}\n </div>\n )}\n </Label>\n {errorMessage && <ErrorMessage errorMessage={errorMessage} />}\n </>\n );\n};\n\nRadio.displayName = \"Radio\";\nexport { Radio };\n"],
5
+ "mappings": "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",
6
+ "names": ["props"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-6O77SOOB.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,151 @@
1
+ import {
2
+ Checkbox
3
+ } from "./chunk-N4WQ6522.js";
4
+ import {
5
+ ErrorMessage
6
+ } from "./chunk-UQVAEWY2.js";
7
+ import {
8
+ Label
9
+ } from "./chunk-ZN7OWLZY.js";
10
+ import {
11
+ useValidationClasses
12
+ } from "./chunk-DYOFXXZD.js";
13
+ import {
14
+ spaceDelimitedList
15
+ } from "./chunk-DTWRSP5P.js";
16
+
17
+ // src/components/Checkbox/CheckboxGroup.tsx
18
+ import classNames from "classnames/dedupe";
19
+ import {
20
+ Children,
21
+ cloneElement,
22
+ isValidElement,
23
+ useEffect,
24
+ useId,
25
+ useRef,
26
+ useState
27
+ } from "react";
28
+ import "@simplybusiness/mobius/src/components/Checkbox/CheckboxGroup.css";
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ var CheckboxGroup = ({ ref, ...props }) => {
31
+ const {
32
+ label,
33
+ isDisabled = false,
34
+ isRequired,
35
+ isInvalid,
36
+ orientation = "vertical",
37
+ onChange,
38
+ className,
39
+ errorMessage,
40
+ children,
41
+ defaultValue = [],
42
+ isReadOnly,
43
+ itemsPerRow,
44
+ lastItemDisables = false,
45
+ ...rest
46
+ } = props;
47
+ const [selected, setSelected] = useState(defaultValue);
48
+ const isInitializedRef = useRef(false);
49
+ const prevDefaultValueRef = useRef(defaultValue);
50
+ useEffect(() => {
51
+ const hasChanged = defaultValue.length !== prevDefaultValueRef.current.length || defaultValue.some(
52
+ (val, index) => val !== prevDefaultValueRef.current[index]
53
+ );
54
+ if (hasChanged || !isInitializedRef.current) {
55
+ setSelected(defaultValue);
56
+ prevDefaultValueRef.current = defaultValue;
57
+ isInitializedRef.current = true;
58
+ }
59
+ }, [defaultValue]);
60
+ const checkboxGroupClasses = classNames(
61
+ "mobius",
62
+ "mobius-checkbox-group",
63
+ className,
64
+ {
65
+ "--is-horizontal": orientation === "horizontal",
66
+ "--is-vertical": orientation === "vertical",
67
+ "--is-required": typeof isRequired === "boolean" && isRequired,
68
+ "--is-optional": typeof isRequired === "boolean" && !isRequired
69
+ }
70
+ );
71
+ const validationClasses = useValidationClasses({ isInvalid });
72
+ const labelClasses = classNames(
73
+ {
74
+ "--is-disabled": isDisabled
75
+ },
76
+ validationClasses
77
+ );
78
+ const errorMessageId = useId();
79
+ const shouldErrorMessageShow = errorMessage ? errorMessageId : void 0;
80
+ const describedBy = spaceDelimitedList([
81
+ shouldErrorMessageShow,
82
+ props["aria-describedby"]
83
+ ]);
84
+ const labelId = useId();
85
+ const handleChange = (event, isLastItem = false) => {
86
+ const {
87
+ target: { value, checked }
88
+ } = event;
89
+ let newValue = [...selected];
90
+ if (!checked) {
91
+ newValue = selected.filter((item) => item !== value);
92
+ }
93
+ if (checked) {
94
+ newValue = [...selected, value];
95
+ }
96
+ if (checked && lastItemDisables && isLastItem) {
97
+ newValue = [value];
98
+ }
99
+ setSelected(newValue);
100
+ onChange?.(newValue);
101
+ };
102
+ const childrenArray = Children.toArray(children);
103
+ const lastCheckbox = childrenArray.filter(
104
+ (child) => isValidElement(child) && child.type === Checkbox
105
+ ).pop();
106
+ const lastCheckboxIsChecked = lastCheckbox && selected.includes(lastCheckbox.props.value);
107
+ return /* @__PURE__ */ jsxs(
108
+ "div",
109
+ {
110
+ ...rest,
111
+ "aria-labelledby": props["aria-labelledby"] || labelId,
112
+ ref,
113
+ className: checkboxGroupClasses,
114
+ role: "group",
115
+ style: {
116
+ "--checkbox-items-per-row": itemsPerRow || Children.count(children)
117
+ },
118
+ children: [
119
+ label && /* @__PURE__ */ jsx(Label, { elementType: "span", id: labelId, className: labelClasses, children: label }),
120
+ /* @__PURE__ */ jsx("div", { className: "mobius-checkbox-group__wrapper", children: childrenArray.map((child) => {
121
+ if (isValidElement(child)) {
122
+ const isLastItem = child === lastCheckbox;
123
+ const isChildDisabled = isDisabled || lastItemDisables && lastCheckboxIsChecked && !isLastItem;
124
+ const childProps = child.props;
125
+ return cloneElement(
126
+ child,
127
+ {
128
+ isDisabled: isChildDisabled,
129
+ isRequired,
130
+ isReadOnly,
131
+ isInvalid,
132
+ isLastItem,
133
+ selected: selected.includes(childProps.value),
134
+ onChange: childProps.onChange || handleChange,
135
+ "aria-describedby": describedBy
136
+ }
137
+ );
138
+ }
139
+ return child;
140
+ }) }),
141
+ errorMessage && /* @__PURE__ */ jsx(ErrorMessage, { id: errorMessageId, errorMessage })
142
+ ]
143
+ }
144
+ );
145
+ };
146
+ CheckboxGroup.displayName = "CheckboxGroup";
147
+
148
+ export {
149
+ CheckboxGroup
150
+ };
151
+ //# sourceMappingURL=chunk-AFU7BFCD.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Checkbox/CheckboxGroup.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n type ChangeEvent,\n type ReactElement,\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Checkbox } from \"./Checkbox\";\nimport type { CheckboxElementType, CheckboxGroupProps } from \"./types\";\nimport \"./CheckboxGroup.css\";\n\nexport const CheckboxGroup = ({ ref, ...props }: CheckboxGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n onChange,\n className,\n errorMessage,\n children,\n defaultValue = [],\n isReadOnly,\n itemsPerRow,\n lastItemDisables = false,\n ...rest\n } = props;\n const [selected, setSelected] = useState<string[]>(defaultValue);\n\n // Handle controlled behavior - update state when defaultValue prop changes\n // Use a ref to track if we've initialized to avoid infinite re-renders\n const isInitializedRef = useRef(false);\n const prevDefaultValueRef = useRef<string[]>(defaultValue);\n\n useEffect(() => {\n // Only update if defaultValue has actually changed (shallow comparison)\n const hasChanged =\n defaultValue.length !== prevDefaultValueRef.current.length ||\n defaultValue.some(\n (val, index) => val !== prevDefaultValueRef.current[index],\n );\n\n if (hasChanged || !isInitializedRef.current) {\n setSelected(defaultValue);\n prevDefaultValueRef.current = defaultValue;\n isInitializedRef.current = true;\n }\n }, [defaultValue]);\n\n const checkboxGroupClasses = classNames(\n \"mobius\",\n \"mobius-checkbox-group\",\n className,\n {\n \"--is-horizontal\": orientation === \"horizontal\",\n \"--is-vertical\": orientation === \"vertical\",\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n );\n const validationClasses = useValidationClasses({ isInvalid });\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n const handleChange = (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem = false,\n ) => {\n const {\n target: { value, checked },\n } = event;\n let newValue = [...selected];\n\n if (!checked) {\n newValue = selected.filter(item => item !== value);\n }\n\n if (checked) {\n newValue = [...selected, value];\n }\n\n if (checked && lastItemDisables && isLastItem) {\n newValue = [value];\n }\n\n setSelected(newValue);\n onChange?.(newValue);\n };\n\n const childrenArray = Children.toArray(children);\n const lastCheckbox = childrenArray\n .filter(\n child =>\n isValidElement(child) && (child as ReactElement).type === Checkbox,\n )\n .pop() as ReactElement<CheckboxElementType> | undefined;\n const lastCheckboxIsChecked =\n lastCheckbox && selected.includes(lastCheckbox.props.value);\n\n return (\n <div\n {...rest}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n ref={ref}\n className={checkboxGroupClasses}\n role=\"group\"\n style={\n {\n \"--checkbox-items-per-row\": itemsPerRow || Children.count(children),\n } as React.CSSProperties\n }\n >\n {label && (\n <Label elementType=\"span\" id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-checkbox-group__wrapper\">\n {childrenArray.map(child => {\n if (isValidElement(child)) {\n // lastItemDisables support\n const isLastItem = child === lastCheckbox;\n const isChildDisabled =\n isDisabled ||\n (lastItemDisables && lastCheckboxIsChecked && !isLastItem);\n\n const childProps = child.props as {\n value: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n };\n\n return cloneElement(\n child as ReactElement,\n {\n isDisabled: isChildDisabled,\n isRequired,\n isReadOnly,\n isInvalid,\n isLastItem,\n selected: selected.includes(childProps.value),\n onChange: childProps.onChange || handleChange,\n \"aria-describedby\": describedBy,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-BGR2OTTR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-BIGO5EVC.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }