@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,125 @@
1
+ import {
2
+ ErrorMessage
3
+ } from "./chunk-UQVAEWY2.js";
4
+ import {
5
+ Stack
6
+ } from "./chunk-XH3OJQMW.js";
7
+ import {
8
+ Icon
9
+ } from "./chunk-TKIP5Q5H.js";
10
+ import {
11
+ useValidationClasses
12
+ } from "./chunk-DYOFXXZD.js";
13
+ import {
14
+ spaceDelimitedList
15
+ } from "./chunk-DTWRSP5P.js";
16
+
17
+ // src/components/Checkbox/Checkbox.tsx
18
+ import { useRef, useId, useState, useEffect } from "react";
19
+ import classNames from "classnames/dedupe";
20
+ import { squareTick, square } from "@simplybusiness/icons";
21
+ import "@simplybusiness/mobius/src/components/Checkbox/Checkbox.css";
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ var Checkbox = ({ ref, ...props }) => {
24
+ const {
25
+ id,
26
+ label,
27
+ isDisabled,
28
+ isRequired,
29
+ isInvalid,
30
+ onChange,
31
+ className,
32
+ errorMessage,
33
+ selected,
34
+ defaultSelected = false,
35
+ isReadOnly,
36
+ isLastItem,
37
+ name,
38
+ value,
39
+ ["aria-describedby"]: ariaDescribedBy,
40
+ ...rest
41
+ } = props;
42
+ const [checked, setChecked] = useState(defaultSelected);
43
+ const fallbackRef = useRef(null);
44
+ const refObj = ref || fallbackRef;
45
+ const inputId = useId();
46
+ const isControlled = typeof selected === "boolean";
47
+ useEffect(() => {
48
+ if (isControlled) {
49
+ setChecked(selected);
50
+ }
51
+ }, [selected, isControlled]);
52
+ const validationClasses = useValidationClasses({ isInvalid });
53
+ const sharedClasses = classNames(
54
+ {
55
+ "--is-disabled": isDisabled,
56
+ "--is-selected": checked,
57
+ "--is-required": typeof isRequired === "boolean" && isRequired,
58
+ "--is-optional": typeof isRequired === "boolean" && !isRequired
59
+ },
60
+ validationClasses
61
+ );
62
+ const wrapperClasses = classNames(
63
+ "mobius",
64
+ "mobius-checkbox",
65
+ sharedClasses,
66
+ className
67
+ );
68
+ const labelClasses = classNames("mobius-checkbox__label", sharedClasses);
69
+ const inputClasses = classNames("mobius-checkbox__input", sharedClasses);
70
+ const iconClasses = classNames("mobius-checkbox__icon", sharedClasses);
71
+ const errorMessageId = useId();
72
+ const shouldErrorMessageShow = errorMessage ? errorMessageId : void 0;
73
+ const describedBy = spaceDelimitedList([
74
+ shouldErrorMessageShow,
75
+ ariaDescribedBy
76
+ ]);
77
+ const labelId = useId();
78
+ const handleChange = (event) => {
79
+ setChecked(!checked);
80
+ if (onChange) {
81
+ onChange(event, isLastItem);
82
+ }
83
+ };
84
+ return /* @__PURE__ */ jsxs(Stack, { gap: "xs", className: wrapperClasses, children: [
85
+ /* @__PURE__ */ jsxs("label", { className: labelClasses, children: [
86
+ /* @__PURE__ */ jsx(
87
+ "input",
88
+ {
89
+ "aria-describedby": describedBy,
90
+ "aria-errormessage": shouldErrorMessageShow,
91
+ "aria-invalid": isInvalid,
92
+ "aria-labelledby": labelId,
93
+ readOnly: isReadOnly,
94
+ disabled: isDisabled,
95
+ ref: refObj,
96
+ className: inputClasses,
97
+ onChange: handleChange,
98
+ type: "checkbox",
99
+ checked,
100
+ required: isRequired,
101
+ id: id || inputId,
102
+ name,
103
+ value,
104
+ ...rest
105
+ }
106
+ ),
107
+ /* @__PURE__ */ jsx(
108
+ Icon,
109
+ {
110
+ icon: checked ? squareTick : square,
111
+ size: "md",
112
+ className: iconClasses
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx("span", { id: labelId, className: "mobius-checkbox__visible-label", children: label })
116
+ ] }),
117
+ /* @__PURE__ */ jsx(ErrorMessage, { id: errorMessageId, errorMessage })
118
+ ] });
119
+ };
120
+ Checkbox.displayName = "Checkbox";
121
+
122
+ export {
123
+ Checkbox
124
+ };
125
+ //# sourceMappingURL=chunk-N4WQ6522.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Checkbox/Checkbox.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useId, useState, useEffect } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { squareTick, square } from \"@simplybusiness/icons\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport type { CheckboxElementType, CheckboxProps } from \"./types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { Icon } from \"../Icon\";\nimport { Stack } from \"../Stack\";\nimport \"./Checkbox.css\";\n\nexport const Checkbox = ({ ref, ...props }: CheckboxProps) => {\n const {\n id,\n label,\n isDisabled,\n isRequired,\n isInvalid,\n onChange,\n className,\n errorMessage,\n selected,\n defaultSelected = false,\n isReadOnly,\n isLastItem,\n name,\n value,\n [\"aria-describedby\"]: ariaDescribedBy,\n ...rest\n } = props;\n const [checked, setChecked] = useState<boolean>(defaultSelected);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const refObj = ref || fallbackRef;\n const inputId = useId();\n\n const isControlled = typeof selected === \"boolean\";\n useEffect(() => {\n if (isControlled) {\n setChecked(selected);\n }\n }, [selected, isControlled]);\n\n const validationClasses = useValidationClasses({ isInvalid });\n const sharedClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": checked,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n validationClasses,\n );\n // Append an additional wrapper class name to differenitate from input\n const wrapperClasses = classNames(\n \"mobius\",\n \"mobius-checkbox\",\n sharedClasses,\n className,\n );\n const labelClasses = classNames(\"mobius-checkbox__label\", sharedClasses);\n const inputClasses = classNames(\"mobius-checkbox__input\", sharedClasses);\n const iconClasses = classNames(\"mobius-checkbox__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n ariaDescribedBy,\n ]);\n const labelId = useId();\n\n const handleChange = (event: ChangeEvent<CheckboxElementType>) => {\n setChecked(!checked);\n if (onChange) {\n onChange(event, isLastItem);\n }\n };\n\n return (\n <Stack gap=\"xs\" className={wrapperClasses}>\n <label className={labelClasses}>\n <input\n aria-describedby={describedBy}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-labelledby={labelId}\n readOnly={isReadOnly}\n disabled={isDisabled}\n ref={refObj}\n className={inputClasses}\n onChange={handleChange}\n type=\"checkbox\"\n checked={checked}\n required={isRequired}\n id={id || inputId}\n name={name}\n value={value}\n {...rest}\n />\n <Icon\n icon={checked ? squareTick : square}\n size=\"md\"\n className={iconClasses}\n />\n <span id={labelId} className=\"mobius-checkbox__visible-label\">\n {label}\n </span>\n </label>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAGA,SAAS,QAAQ,OAAO,UAAU,iBAAiB;AACnD,OAAO,gBAAgB;AACvB,SAAS,YAAY,cAAc;AAOnC,OAAO;AAsED,SACE,KADF;AApEC,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,kBAAkB,GAAG;AAAA,IACtB,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAkB,eAAe;AAC/D,QAAM,cAAc,OAAyB,IAAI;AACjD,QAAM,SAAS,OAAO;AACtB,QAAM,UAAU,MAAM;AAEtB,QAAM,eAAe,OAAO,aAAa;AACzC,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,QAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,QAAM,gBAAgB;AAAA,IACpB;AAAA,MACE,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,MACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,eAAe,WAAW,0BAA0B,aAAa;AACvE,QAAM,eAAe,WAAW,0BAA0B,aAAa;AACvE,QAAM,cAAc,WAAW,yBAAyB,aAAa;AACrE,QAAM,iBAAiB,MAAM;AAC7B,QAAM,yBAAyB,eAAe,iBAAiB;AAC/D,QAAM,cAAc,mBAAmB;AAAA,IACrC;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,UAAU,MAAM;AAEtB,QAAM,eAAe,CAAC,UAA4C;AAChE,eAAW,CAAC,OAAO;AACnB,QAAI,UAAU;AACZ,eAAS,OAAO,UAAU;AAAA,IAC5B;AAAA,EACF;AAEA,SACE,qBAAC,SAAM,KAAI,MAAK,WAAW,gBACzB;AAAA,yBAAC,WAAM,WAAW,cAChB;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,oBAAkB;AAAA,UAClB,qBAAmB;AAAA,UACnB,gBAAc;AAAA,UACd,mBAAiB;AAAA,UACjB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,KAAK;AAAA,UACL,WAAW;AAAA,UACX,UAAU;AAAA,UACV,MAAK;AAAA,UACL;AAAA,UACA,UAAU;AAAA,UACV,IAAI,MAAM;AAAA,UACV;AAAA,UACA;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,UAAU,aAAa;AAAA,UAC7B,MAAK;AAAA,UACL,WAAW;AAAA;AAAA,MACb;AAAA,MACA,oBAAC,UAAK,IAAI,SAAS,WAAU,kCAC1B,iBACH;AAAA,OACF;AAAA,IACA,oBAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,KAChE;AAEJ;AAEA,SAAS,cAAc;",
6
+ "names": []
7
+ }
@@ -1,9 +1,9 @@
1
- import {
2
- Label
3
- } from "./chunk-ZN7OWLZY.js";
4
1
  import {
5
2
  numberFormatter
6
3
  } from "./chunk-4SIR6D4L.js";
4
+ import {
5
+ Label
6
+ } from "./chunk-ZN7OWLZY.js";
7
7
  import {
8
8
  useLabel
9
9
  } from "./chunk-YLEFK7S2.js";
@@ -101,4 +101,4 @@ var Slider = (props) => {
101
101
  export {
102
102
  Slider
103
103
  };
104
- //# sourceMappingURL=chunk-CNOF66SV.js.map
104
+ //# sourceMappingURL=chunk-NGNVAFBJ.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-NOQ27VLY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,101 @@
1
+ import {
2
+ Accordion
3
+ } from "./chunk-7JT4DKQA.js";
4
+ import {
5
+ TextOrHTML
6
+ } from "./chunk-DYTHXKMX.js";
7
+ import {
8
+ useBreakpoint
9
+ } from "./chunk-7FQ7SXK4.js";
10
+
11
+ // src/components/ExpandableText/ExpandableText.tsx
12
+ import classNames from "classnames/dedupe";
13
+ import { useEffect, useId, useRef, useState } from "react";
14
+ import "@simplybusiness/mobius/src/components/ExpandableText/ExpandableText.css";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var ExpandableText = ({ ref, ...props }) => {
17
+ const {
18
+ text,
19
+ maxLines = 3,
20
+ breakpoint,
21
+ showText = "Read more",
22
+ hideText = "Read less",
23
+ className,
24
+ textProps = {},
25
+ accordionProps = {},
26
+ onToggle,
27
+ ...otherProps
28
+ } = props;
29
+ const [isExpanded, setIsExpanded] = useState(false);
30
+ const [isCollapsed, setIsCollapsed] = useState(false);
31
+ const textRef = useRef(null);
32
+ const { down } = useBreakpoint();
33
+ const baseId = useId();
34
+ const expandButtonId = `expandable-text-expand-${baseId}`;
35
+ const shouldCollapse = breakpoint ? down(breakpoint) : true;
36
+ useEffect(() => {
37
+ if (!shouldCollapse || !textRef.current) {
38
+ setIsCollapsed(false);
39
+ return;
40
+ }
41
+ const element = textRef.current;
42
+ const isOverflowing = element.scrollHeight > element.clientHeight;
43
+ setIsCollapsed(isOverflowing);
44
+ }, [text, shouldCollapse, maxLines]);
45
+ if (breakpoint && !shouldCollapse) {
46
+ return /* @__PURE__ */ jsx("div", { ref, className, ...otherProps, children: /* @__PURE__ */ jsx(TextOrHTML, { text, textWrapper: true, ...textProps }) });
47
+ }
48
+ const handleAccordionChange = (expanded) => {
49
+ setIsExpanded(expanded);
50
+ onToggle?.(expanded);
51
+ };
52
+ const classes = classNames("mobius-expandable-text", className);
53
+ const textContainerClasses = classNames("mobius-expandable-text__content", {
54
+ "mobius-expandable-text__content--collapsed": !isExpanded
55
+ });
56
+ const textContainerStyle = {
57
+ "--line-clamp": maxLines
58
+ };
59
+ return /* @__PURE__ */ jsxs(
60
+ "div",
61
+ {
62
+ ref,
63
+ className: classes,
64
+ "data-testid": "expandable-text",
65
+ ...otherProps,
66
+ children: [
67
+ /* @__PURE__ */ jsx(
68
+ "div",
69
+ {
70
+ ref: textRef,
71
+ className: textContainerClasses,
72
+ style: textContainerStyle,
73
+ "data-testid": "expandable-text-content",
74
+ "aria-describedby": isCollapsed ? expandButtonId : void 0,
75
+ children: /* @__PURE__ */ jsx(TextOrHTML, { elementType: "span", textWrapper: true, text, ...textProps })
76
+ }
77
+ ),
78
+ isCollapsed && /* @__PURE__ */ jsx(
79
+ Accordion,
80
+ {
81
+ showText,
82
+ hideText,
83
+ headerPosition: "bottom",
84
+ onChange: handleAccordionChange,
85
+ onClick: (e) => {
86
+ e?.stopPropagation();
87
+ },
88
+ id: expandButtonId,
89
+ ...accordionProps
90
+ }
91
+ )
92
+ ]
93
+ }
94
+ );
95
+ };
96
+ ExpandableText.displayName = "ExpandableText";
97
+
98
+ export {
99
+ ExpandableText
100
+ };
101
+ //# sourceMappingURL=chunk-ONDOONBM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/ExpandableText/ExpandableText.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Accordion } from \"../Accordion\";\nimport { TextOrHTML } from \"../TextOrHTML\";\nimport type { AccordionProps } from \"../Accordion/Accordion\";\nimport type { TextProps } from \"../Text/Text\";\nimport \"./ExpandableText.css\";\n\nexport type ExpandableTextElementType = HTMLDivElement;\n\nexport interface ExpandableTextProps\n extends DOMProps, RefAttributes<ExpandableTextElementType> {\n /** The text content to display (can be plain text or HTML) */\n text: string;\n /** Maximum number of lines to show when collapsed */\n maxLines?: number;\n /** Breakpoint at which collapsing should be applied. If not provided, collapsing is always applied */\n breakpoint?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Text for the expand trigger */\n showText?: string;\n /** Text for the collapse trigger */\n hideText?: string;\n /** Custom class name for the container */\n className?: string;\n /** Props to pass to the Text component */\n textProps?: Partial<TextProps>;\n /** Props to pass to the Accordion component */\n accordionProps?: Partial<AccordionProps>;\n /** Callback when expansion state changes */\n onToggle?: (expanded: boolean) => void;\n}\n\nexport const ExpandableText = ({ ref, ...props }: ExpandableTextProps) => {\n const {\n text,\n maxLines = 3,\n breakpoint,\n showText = \"Read more\",\n hideText = \"Read less\",\n className,\n textProps = {},\n accordionProps = {},\n onToggle,\n ...otherProps\n } = props;\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const textRef = useRef<HTMLDivElement>(null);\n const { down } = useBreakpoint();\n\n // Generate unique ID for accessibility\n const baseId = useId();\n const expandButtonId = `expandable-text-expand-${baseId}`;\n\n // Determine if content should be collapsible based on breakpoint\n const shouldCollapse = breakpoint ? down(breakpoint) : true;\n\n useEffect(() => {\n if (!shouldCollapse || !textRef.current) {\n setIsCollapsed(false);\n return;\n }\n\n // Check if text is actually collapsed by comparing scroll height with client height\n const element = textRef.current;\n const isOverflowing = element.scrollHeight > element.clientHeight;\n setIsCollapsed(isOverflowing);\n }, [text, shouldCollapse, maxLines]);\n\n // If breakpoint is specified and we're above it, show full text without collapsible UI\n if (breakpoint && !shouldCollapse) {\n return (\n <div ref={ref} className={className} {...otherProps}>\n <TextOrHTML text={text} textWrapper {...textProps} />\n </div>\n );\n }\n\n const handleAccordionChange = (expanded: boolean) => {\n setIsExpanded(expanded);\n onToggle?.(expanded);\n };\n\n const classes = classNames(\"mobius-expandable-text\", className);\n const textContainerClasses = classNames(\"mobius-expandable-text__content\", {\n \"mobius-expandable-text__content--collapsed\": !isExpanded,\n });\n\n // CSS custom property for dynamic line clamping\n const textContainerStyle = {\n \"--line-clamp\": maxLines,\n } as React.CSSProperties;\n\n return (\n <div\n ref={ref}\n className={classes}\n data-testid=\"expandable-text\"\n {...otherProps}\n >\n <div\n ref={textRef}\n className={textContainerClasses}\n style={textContainerStyle}\n data-testid=\"expandable-text-content\"\n aria-describedby={isCollapsed ? expandButtonId : undefined}\n >\n <TextOrHTML elementType=\"span\" textWrapper text={text} {...textProps} />\n </div>\n {isCollapsed && (\n <Accordion\n showText={showText}\n hideText={hideText}\n headerPosition=\"bottom\"\n onChange={handleAccordionChange}\n onClick={(e?: React.MouseEvent) => {\n e?.stopPropagation();\n }}\n id={expandButtonId}\n {...accordionProps}\n />\n )}\n </div>\n );\n};\n\nExpandableText.displayName = \"ExpandableText\";\n"],
5
+ "mappings": ";;;;;;;;;;;AAEA,OAAO,gBAAgB;AAGvB,SAAS,WAAW,OAAO,QAAQ,gBAAgB;AAOnD,OAAO;AAoEC,cAqBJ,YArBI;AA1CD,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA2B;AACxE,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA,YAAY,CAAC;AAAA,IACb,iBAAiB,CAAC;AAAA,IAClB;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,UAAU,OAAuB,IAAI;AAC3C,QAAM,EAAE,KAAK,IAAI,cAAc;AAG/B,QAAM,SAAS,MAAM;AACrB,QAAM,iBAAiB,0BAA0B,MAAM;AAGvD,QAAM,iBAAiB,aAAa,KAAK,UAAU,IAAI;AAEvD,YAAU,MAAM;AACd,QAAI,CAAC,kBAAkB,CAAC,QAAQ,SAAS;AACvC,qBAAe,KAAK;AACpB;AAAA,IACF;AAGA,UAAM,UAAU,QAAQ;AACxB,UAAM,gBAAgB,QAAQ,eAAe,QAAQ;AACrD,mBAAe,aAAa;AAAA,EAC9B,GAAG,CAAC,MAAM,gBAAgB,QAAQ,CAAC;AAGnC,MAAI,cAAc,CAAC,gBAAgB;AACjC,WACE,oBAAC,SAAI,KAAU,WAAuB,GAAG,YACvC,8BAAC,cAAW,MAAY,aAAW,MAAE,GAAG,WAAW,GACrD;AAAA,EAEJ;AAEA,QAAM,wBAAwB,CAAC,aAAsB;AACnD,kBAAc,QAAQ;AACtB,eAAW,QAAQ;AAAA,EACrB;AAEA,QAAM,UAAU,WAAW,0BAA0B,SAAS;AAC9D,QAAM,uBAAuB,WAAW,mCAAmC;AAAA,IACzE,8CAA8C,CAAC;AAAA,EACjD,CAAC;AAGD,QAAM,qBAAqB;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,MACX,eAAY;AAAA,MACX,GAAG;AAAA,MAEJ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW;AAAA,YACX,OAAO;AAAA,YACP,eAAY;AAAA,YACZ,oBAAkB,cAAc,iBAAiB;AAAA,YAEjD,8BAAC,cAAW,aAAY,QAAO,aAAW,MAAC,MAAa,GAAG,WAAW;AAAA;AAAA,QACxE;AAAA,QACC,eACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,gBAAe;AAAA,YACf,UAAU;AAAA,YACV,SAAS,CAAC,MAAyB;AACjC,iBAAG,gBAAgB;AAAA,YACrB;AAAA,YACA,IAAI;AAAA,YACH,GAAG;AAAA;AAAA,QACN;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,eAAe,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-P34DI6BE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,97 @@
1
+ import {
2
+ TextField
3
+ } from "./chunk-UIIXVY6K.js";
4
+
5
+ // src/components/NumberField/NumberField.tsx
6
+ import classNames from "classnames/dedupe";
7
+ import { useCallback, useEffect, useRef } from "react";
8
+ import "@simplybusiness/mobius/src/components/NumberField/NumberField.css";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var NumberField = ({ ref, ...props }) => {
11
+ const {
12
+ minValue,
13
+ maxValue,
14
+ step,
15
+ defaultValue,
16
+ hideSpinButtons,
17
+ className,
18
+ ...otherProps
19
+ } = props;
20
+ const {
21
+ onFocus: customOnFocus,
22
+ onBlur: customOnBlur,
23
+ ...rest
24
+ } = otherProps;
25
+ const focusedInputRef = useRef(null);
26
+ const wheelHandler = useCallback((ev) => ev.preventDefault(), []);
27
+ useEffect(() => {
28
+ return () => {
29
+ focusedInputRef.current?.removeEventListener("wheel", wheelHandler);
30
+ focusedInputRef.current = null;
31
+ };
32
+ }, [wheelHandler]);
33
+ const containerClasses = classNames("mobius-number-field", className, {
34
+ "--hide-spin-buttons": hideSpinButtons
35
+ });
36
+ const handleBeforeInput = (event) => {
37
+ const { data } = event.nativeEvent;
38
+ if (step && Number.isInteger(step) && data === ".") {
39
+ event.preventDefault();
40
+ }
41
+ if (minValue && minValue >= 0 && data === "-") {
42
+ event.preventDefault();
43
+ }
44
+ };
45
+ const handleBlur = (event) => {
46
+ const { value } = event.target;
47
+ const numValue = parseFloat(value);
48
+ if (step && step > 1 && !isNaN(numValue)) {
49
+ const baseValue = minValue ?? 0;
50
+ const steps = Math.round((numValue - baseValue) / step);
51
+ const snappedValue = baseValue + steps * step;
52
+ if (snappedValue !== numValue) {
53
+ event.target.value = snappedValue.toString();
54
+ const changeEvent = new Event("change", { bubbles: true });
55
+ event.target.dispatchEvent(changeEvent);
56
+ const syntheticChangeEvent = {
57
+ ...event,
58
+ target: event.target,
59
+ currentTarget: event.currentTarget
60
+ };
61
+ otherProps.onChange?.(syntheticChangeEvent);
62
+ }
63
+ }
64
+ customOnBlur?.(event);
65
+ };
66
+ const forwardedProps = {
67
+ ...rest,
68
+ onFocus: (e) => {
69
+ const el = e.currentTarget;
70
+ focusedInputRef.current?.removeEventListener("wheel", wheelHandler);
71
+ focusedInputRef.current = el;
72
+ el.addEventListener("wheel", wheelHandler, { passive: false });
73
+ customOnFocus?.(e);
74
+ },
75
+ onBlur: (e) => handleBlur(e)
76
+ };
77
+ return /* @__PURE__ */ jsx(
78
+ TextField,
79
+ {
80
+ ...forwardedProps,
81
+ className: containerClasses,
82
+ onBeforeInput: handleBeforeInput,
83
+ type: "number",
84
+ min: minValue ?? void 0,
85
+ max: maxValue ?? void 0,
86
+ step,
87
+ ref,
88
+ defaultValue: defaultValue != null ? defaultValue?.toString() : defaultValue
89
+ }
90
+ );
91
+ };
92
+ NumberField.displayName = "NumberField";
93
+
94
+ export {
95
+ NumberField
96
+ };
97
+ //# sourceMappingURL=chunk-P5VEI574.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/NumberField/NumberField.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport { type RefAttributes, useCallback, useEffect, useRef } from \"react\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport \"./NumberField.css\";\n\nexport type NumberFieldElementType = TextFieldElementType;\n\nexport interface NumberFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"defaultValue\" | \"inputElementType\">,\n RefAttributes<NumberFieldElementType> {\n /** The smallest value allowed for the input. */\n minValue?: number;\n /** The largest value allowed for the input. */\n maxValue?: number;\n /** The amount that the input value changes with each increment or decrement \"tick\". */\n step?: number; // ??\n /** The default value for the input. */\n defaultValue?: number;\n /** Flag to hide the spin buttons. */\n hideSpinButtons?: boolean;\n}\n\nexport const NumberField = ({ ref, ...props }: NumberFieldProps) => {\n const {\n minValue,\n maxValue,\n step,\n defaultValue,\n hideSpinButtons,\n className,\n ...otherProps\n } = props;\n const {\n onFocus: customOnFocus,\n onBlur: customOnBlur,\n ...rest\n } = otherProps as Omit<TextFieldProps, \"onFocus\" | \"onBlur\"> & {\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n };\n\n const focusedInputRef = useRef<HTMLInputElement | null>(null);\n const wheelHandler = useCallback((ev: Event) => ev.preventDefault(), []);\n\n useEffect(() => {\n return () => {\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = null;\n };\n }, [wheelHandler]);\n\n const containerClasses = classNames(\"mobius-number-field\", className, {\n \"--hide-spin-buttons\": hideSpinButtons,\n });\n\n const handleBeforeInput = (\n event: React.FormEvent<NumberFieldElementType>,\n ) => {\n const { data } = event.nativeEvent as InputEvent;\n if (step && Number.isInteger(step) && data === \".\") {\n event.preventDefault();\n }\n if (minValue && minValue >= 0 && data === \"-\") {\n event.preventDefault();\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value } = event.target;\n const numValue = parseFloat(value);\n\n // On blur, snap to nearest valid step value if step is defined\n if (step && step > 1 && !isNaN(numValue)) {\n const baseValue = minValue ?? 0;\n const steps = Math.round((numValue - baseValue) / step);\n const snappedValue = baseValue + steps * step;\n\n // Only update if the value changed\n if (snappedValue !== numValue) {\n event.target.value = snappedValue.toString();\n // Trigger change event for the corrected value\n const changeEvent = new Event(\"change\", { bubbles: true });\n event.target.dispatchEvent(changeEvent);\n // Also call the onChange handler if provided\n const syntheticChangeEvent = {\n ...event,\n target: event.target,\n currentTarget: event.currentTarget,\n } as React.ChangeEvent<HTMLInputElement>;\n otherProps.onChange?.(syntheticChangeEvent);\n }\n }\n\n customOnBlur?.(event);\n };\n\n const forwardedProps: TextFieldProps = {\n ...rest,\n onFocus: e => {\n const el = e.currentTarget as HTMLInputElement;\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = el;\n el.addEventListener(\"wheel\", wheelHandler, { passive: false });\n customOnFocus?.(e as React.FocusEvent<HTMLInputElement>);\n },\n onBlur: e => handleBlur(e as React.FocusEvent<HTMLInputElement>),\n };\n\n return (\n <TextField\n {...forwardedProps}\n className={containerClasses}\n onBeforeInput={handleBeforeInput}\n type=\"number\"\n min={minValue ?? undefined}\n max={maxValue ?? undefined}\n step={step}\n ref={ref}\n defaultValue={\n defaultValue != null ? defaultValue?.toString() : defaultValue\n }\n />\n );\n};\n\nNumberField.displayName = \"NumberField\";\n"],
5
+ "mappings": ";;;;;AAEA,OAAO,gBAAgB;AAEvB,SAA6B,aAAa,WAAW,cAAc;AAMnE,OAAO;AA2GH;AAvFG,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAClE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,IAAI;AAKJ,QAAM,kBAAkB,OAAgC,IAAI;AAC5D,QAAM,eAAe,YAAY,CAAC,OAAc,GAAG,eAAe,GAAG,CAAC,CAAC;AAEvE,YAAU,MAAM;AACd,WAAO,MAAM;AACX,sBAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,mBAAmB,WAAW,uBAAuB,WAAW;AAAA,IACpE,uBAAuB;AAAA,EACzB,CAAC;AAED,QAAM,oBAAoB,CACxB,UACG;AACH,UAAM,EAAE,KAAK,IAAI,MAAM;AACvB,QAAI,QAAQ,OAAO,UAAU,IAAI,KAAK,SAAS,KAAK;AAClD,YAAM,eAAe;AAAA,IACvB;AACA,QAAI,YAAY,YAAY,KAAK,SAAS,KAAK;AAC7C,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,UAA8C;AAChE,UAAM,EAAE,MAAM,IAAI,MAAM;AACxB,UAAM,WAAW,WAAW,KAAK;AAGjC,QAAI,QAAQ,OAAO,KAAK,CAAC,MAAM,QAAQ,GAAG;AACxC,YAAM,YAAY,YAAY;AAC9B,YAAM,QAAQ,KAAK,OAAO,WAAW,aAAa,IAAI;AACtD,YAAM,eAAe,YAAY,QAAQ;AAGzC,UAAI,iBAAiB,UAAU;AAC7B,cAAM,OAAO,QAAQ,aAAa,SAAS;AAE3C,cAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC;AACzD,cAAM,OAAO,cAAc,WAAW;AAEtC,cAAM,uBAAuB;AAAA,UAC3B,GAAG;AAAA,UACH,QAAQ,MAAM;AAAA,UACd,eAAe,MAAM;AAAA,QACvB;AACA,mBAAW,WAAW,oBAAoB;AAAA,MAC5C;AAAA,IACF;AAEA,mBAAe,KAAK;AAAA,EACtB;AAEA,QAAM,iBAAiC;AAAA,IACrC,GAAG;AAAA,IACH,SAAS,OAAK;AACZ,YAAM,KAAK,EAAE;AACb,sBAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,sBAAgB,UAAU;AAC1B,SAAG,iBAAiB,SAAS,cAAc,EAAE,SAAS,MAAM,CAAC;AAC7D,sBAAgB,CAAuC;AAAA,IACzD;AAAA,IACA,QAAQ,OAAK,WAAW,CAAuC;AAAA,EACjE;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,MACX,eAAe;AAAA,MACf,MAAK;AAAA,MACL,KAAK,YAAY;AAAA,MACjB,KAAK,YAAY;AAAA,MACjB;AAAA,MACA;AAAA,MACA,cACE,gBAAgB,OAAO,cAAc,SAAS,IAAI;AAAA;AAAA,EAEtD;AAEJ;AAEA,YAAY,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,64 @@
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
+ TextAreaInput
12
+ } from "./chunk-BM4M36KU.js";
13
+ import {
14
+ useTextField
15
+ } from "./chunk-UYVF3QSW.js";
16
+ import {
17
+ useValidationClasses
18
+ } from "./chunk-DYOFXXZD.js";
19
+
20
+ // src/components/TextArea/TextArea.tsx
21
+ import classNames from "classnames/dedupe";
22
+ import "@simplybusiness/mobius/src/components/TextArea/TextArea.css";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ var TextArea = ({ ref, ...props }) => {
25
+ const {
26
+ isDisabled,
27
+ className,
28
+ errorMessage,
29
+ label,
30
+ isInvalid,
31
+ ...otherProps
32
+ } = props;
33
+ const { inputProps, labelProps, errorMessageProps } = useTextField(props);
34
+ const classes = classNames("mobius", "mobius-text-area", className);
35
+ const validationClasses = useValidationClasses({ isInvalid });
36
+ const inputClasses = classNames("mobius-text-area__input", validationClasses);
37
+ const labelClasses = classNames(
38
+ {
39
+ "--is-disabled": isDisabled
40
+ },
41
+ validationClasses
42
+ );
43
+ return /* @__PURE__ */ jsxs(Stack, { className: classes, gap: "xs", children: [
44
+ label && /* @__PURE__ */ jsx(Label, { ...labelProps, className: labelClasses, children: props.label }),
45
+ /* @__PURE__ */ jsx(
46
+ TextAreaInput,
47
+ {
48
+ ...otherProps,
49
+ ...inputProps,
50
+ ref,
51
+ className: inputClasses,
52
+ isDisabled,
53
+ "aria-invalid": errorMessage != null
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsx(ErrorMessage, { ...errorMessageProps, errorMessage })
57
+ ] });
58
+ };
59
+ TextArea.displayName = "TextArea";
60
+
61
+ export {
62
+ TextArea
63
+ };
64
+ //# sourceMappingURL=chunk-QPIA6BGW.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/TextArea/TextArea.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { TextAreaInput } from \"../TextAreaInput\";\nimport \"./TextArea.css\";\n\nexport type TextAreaElementType = HTMLTextAreaElement;\n\nexport interface TextAreaProps\n extends UseTextFieldProps, DOMProps, RefAttributes<TextAreaElementType> {\n className?: string;\n errorMessage?: string;\n}\n\nconst TextArea = ({ ref, ...props }: TextAreaProps) => {\n const {\n isDisabled,\n className,\n errorMessage,\n label,\n isInvalid,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField(props);\n\n // Set class name for atom, including interaction state\n const classes = classNames(\"mobius\", \"mobius-text-area\", className);\n const validationClasses = useValidationClasses({ isInvalid });\n const inputClasses = classNames(\"mobius-text-area__input\", validationClasses);\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n return (\n <Stack className={classes} gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {props.label}\n </Label>\n )}\n <TextAreaInput\n {...otherProps}\n {...inputProps}\n ref={ref}\n className={inputClasses}\n isDisabled={isDisabled}\n aria-invalid={errorMessage != null}\n />\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextArea.displayName = \"TextArea\";\nexport { TextArea };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAEA,OAAO,gBAAgB;AASvB,OAAO;AAkCH,SAEI,KAFJ;AAxBJ,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa,KAAK;AAGxE,QAAM,UAAU,WAAW,UAAU,oBAAoB,SAAS;AAClE,QAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,QAAM,eAAe,WAAW,2BAA2B,iBAAiB;AAC5E,QAAM,eAAe;AAAA,IACnB;AAAA,MACE,iBAAiB;AAAA,IACnB;AAAA,IACA;AAAA,EACF;AAEA,SACE,qBAAC,SAAM,WAAW,SAAS,KAAI,MAC5B;AAAA,aACC,oBAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,gBAAM,OACT;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACH,GAAG;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,gBAAc,gBAAgB;AAAA;AAAA,IAChC;AAAA,IACA,oBAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,KACnE;AAEJ;AAEA,SAAS,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-SZEFLEDA.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-TXB4BOHB.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,123 @@
1
+ import {
2
+ adornmentWithClassName
3
+ } from "./chunk-IM3I5CZL.js";
4
+ import {
5
+ ErrorMessage
6
+ } from "./chunk-UQVAEWY2.js";
7
+ import {
8
+ Stack
9
+ } from "./chunk-XH3OJQMW.js";
10
+ import {
11
+ Label
12
+ } from "./chunk-ZN7OWLZY.js";
13
+ import {
14
+ useTextField
15
+ } from "./chunk-UYVF3QSW.js";
16
+ import {
17
+ useValidationClasses
18
+ } from "./chunk-DYOFXXZD.js";
19
+
20
+ // src/components/TextField/TextField.tsx
21
+ import classNames from "classnames/dedupe";
22
+ import "@simplybusiness/mobius/src/components/TextField/TextField.css";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ var TextField = ({ ref, ...props }) => {
25
+ const {
26
+ isDisabled,
27
+ type = "text",
28
+ isInvalid,
29
+ className,
30
+ label,
31
+ errorMessage,
32
+ children,
33
+ isRequired,
34
+ prefixInside,
35
+ prefixOutside,
36
+ suffixInside,
37
+ suffixOutside,
38
+ autoComplete,
39
+ isReadOnly,
40
+ ...otherProps
41
+ } = props;
42
+ const resolvedAutoComplete = autoComplete ?? (type === "email" ? "email" : type === "tel" ? "tel" : void 0);
43
+ const { inputProps, labelProps, errorMessageProps } = useTextField({
44
+ ...props,
45
+ autoComplete: resolvedAutoComplete,
46
+ "aria-errormessage": errorMessage
47
+ });
48
+ const hidden = type === "hidden";
49
+ const validationClasses = useValidationClasses({ isInvalid });
50
+ const textfieldClasses = {
51
+ "--is-disabled": isDisabled,
52
+ "--is-required": typeof isRequired === "boolean" && isRequired,
53
+ "--is-optional": typeof isRequired === "boolean" && !isRequired,
54
+ "--is-hidden": hidden,
55
+ [className || ""]: true
56
+ };
57
+ const sharedClasses = classNames(validationClasses, textfieldClasses);
58
+ const labelClasses = classNames(
59
+ {
60
+ "--is-disabled": isDisabled
61
+ },
62
+ validationClasses
63
+ );
64
+ const containerClasses = classNames(
65
+ "mobius",
66
+ "mobius-text-field",
67
+ sharedClasses
68
+ );
69
+ const inputClasses = classNames(
70
+ "mobius",
71
+ "mobius-text-field__input",
72
+ sharedClasses
73
+ );
74
+ const inputWrapperClasses = classNames(
75
+ "mobius-text-field__input-wrapper",
76
+ sharedClasses
77
+ );
78
+ return /* @__PURE__ */ jsxs(Stack, { gap: "xs", className: containerClasses, children: [
79
+ label && !hidden && /* @__PURE__ */ jsx(Label, { ...labelProps, className: labelClasses, children: label }),
80
+ /* @__PURE__ */ jsxs("div", { className: "mobius-text-field__inner-container", children: [
81
+ adornmentWithClassName(
82
+ prefixOutside,
83
+ labelClasses,
84
+ "mobius-text-field__prefix-outside"
85
+ ),
86
+ /* @__PURE__ */ jsxs("div", { className: inputWrapperClasses, children: [
87
+ adornmentWithClassName(
88
+ prefixInside,
89
+ labelClasses,
90
+ "mobius-text-field__prefix-inside"
91
+ ),
92
+ /* @__PURE__ */ jsx(
93
+ "input",
94
+ {
95
+ ...otherProps,
96
+ ...inputProps,
97
+ ref,
98
+ type,
99
+ className: inputClasses
100
+ }
101
+ ),
102
+ adornmentWithClassName(
103
+ suffixInside,
104
+ labelClasses,
105
+ "mobius-text-field__suffix-inside"
106
+ )
107
+ ] }),
108
+ adornmentWithClassName(
109
+ suffixOutside,
110
+ labelClasses,
111
+ "mobius-text-field__suffix-outside"
112
+ )
113
+ ] }),
114
+ children && /* @__PURE__ */ jsx("div", { className: "mobius-text-field__children", children }),
115
+ /* @__PURE__ */ jsx(ErrorMessage, { ...errorMessageProps, errorMessage })
116
+ ] });
117
+ };
118
+ TextField.displayName = "TextField";
119
+
120
+ export {
121
+ TextField
122
+ };
123
+ //# sourceMappingURL=chunk-UIIXVY6K.js.map