@simplybusiness/mobius 9.1.0 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/index.js +22 -18
  3. package/dist/cjs/index.js.map +4 -4
  4. package/dist/cjs/meta.json +15 -29
  5. package/dist/esm/{MaskedField-CX4GV6JS.js → MaskedField-FRCJBGMX.js} +2 -2
  6. package/dist/esm/chunk-YUDNS4SZ.js +4735 -0
  7. package/dist/esm/chunk-YUDNS4SZ.js.map +7 -0
  8. package/dist/esm/index.js +70 -4258
  9. package/dist/esm/index.js.map +4 -4
  10. package/dist/esm/meta.json +282 -236
  11. package/dist/tsconfig.build.tsbuildinfo +1 -0
  12. package/dist/types/index.d.ts +3 -1
  13. package/package.json +1 -1
  14. package/src/components/AddressLookup/AddressLookup.test.tsx +66 -0
  15. package/src/components/Combobox/Combobox.tsx +12 -2
  16. package/dist/esm/chunk-XUNHMVIS.js +0 -427
  17. package/dist/esm/chunk-XUNHMVIS.js.map +0 -7
  18. package/dist/esm/tsconfig.build.tsbuildinfo +0 -1
  19. package/dist/types/src/index.d.ts +0 -3
  20. package/dist/types/vitest.config.d.ts +0 -2
  21. /package/dist/esm/{MaskedField-CX4GV6JS.js.map → MaskedField-FRCJBGMX.js.map} +0 -0
  22. /package/dist/types/{src/components → components}/Accordion/Accordion.d.ts +0 -0
  23. /package/dist/types/{src/components → components}/Accordion/AccordionLink.d.ts +0 -0
  24. /package/dist/types/{src/components → components}/Accordion/AccordionList.d.ts +0 -0
  25. /package/dist/types/{src/components → components}/Accordion/index.d.ts +0 -0
  26. /package/dist/types/{src/components → components}/AddressLookup/AddressLookup.d.ts +0 -0
  27. /package/dist/types/{src/components → components}/AddressLookup/LoqateAddressLookupError.d.ts +0 -0
  28. /package/dist/types/{src/components → components}/AddressLookup/LoqateAddressLookupService.d.ts +0 -0
  29. /package/dist/types/{src/components → components}/AddressLookup/__mocks__/LoqateAddressLookupService.d.ts +0 -0
  30. /package/dist/types/{src/components → components}/AddressLookup/index.d.ts +0 -0
  31. /package/dist/types/{src/components → components}/AddressLookup/types.d.ts +0 -0
  32. /package/dist/types/{src/components → components}/AddressLookup/utils.d.ts +0 -0
  33. /package/dist/types/{src/components → components}/Alert/Alert.d.ts +0 -0
  34. /package/dist/types/{src/components → components}/Alert/index.d.ts +0 -0
  35. /package/dist/types/{src/components → components}/Box/Box.d.ts +0 -0
  36. /package/dist/types/{src/components → components}/Box/index.d.ts +0 -0
  37. /package/dist/types/{src/components → components}/Box/types.d.ts +0 -0
  38. /package/dist/types/{src/components → components}/Breadcrumbs/BreadcrumbItem.d.ts +0 -0
  39. /package/dist/types/{src/components → components}/Breadcrumbs/Breadcrumbs.d.ts +0 -0
  40. /package/dist/types/{src/components → components}/Breadcrumbs/index.d.ts +0 -0
  41. /package/dist/types/{src/components → components}/Button/Button.d.ts +0 -0
  42. /package/dist/types/{src/components → components}/Button/Loading.d.ts +0 -0
  43. /package/dist/types/{src/components → components}/Button/Success.d.ts +0 -0
  44. /package/dist/types/{src/components → components}/Button/index.d.ts +0 -0
  45. /package/dist/types/{src/components → components}/Checkbox/Checkbox.d.ts +0 -0
  46. /package/dist/types/{src/components → components}/Checkbox/CheckboxGroup.d.ts +0 -0
  47. /package/dist/types/{src/components → components}/Checkbox/index.d.ts +0 -0
  48. /package/dist/types/{src/components → components}/Checkbox/types.d.ts +0 -0
  49. /package/dist/types/{src/components → components}/Combobox/Combobox.d.ts +0 -0
  50. /package/dist/types/{src/components → components}/Combobox/Listbox.d.ts +0 -0
  51. /package/dist/types/{src/components → components}/Combobox/Option.d.ts +0 -0
  52. /package/dist/types/{src/components → components}/Combobox/fixtures.d.ts +0 -0
  53. /package/dist/types/{src/components → components}/Combobox/index.d.ts +0 -0
  54. /package/dist/types/{src/components → components}/Combobox/types.d.ts +0 -0
  55. /package/dist/types/{src/components → components}/Combobox/useComboboxHighlight.d.ts +0 -0
  56. /package/dist/types/{src/components → components}/Combobox/useComboboxOptions.d.ts +0 -0
  57. /package/dist/types/{src/components → components}/Combobox/utils.d.ts +0 -0
  58. /package/dist/types/{src/components → components}/Container/Container.d.ts +0 -0
  59. /package/dist/types/{src/components → components}/Container/index.d.ts +0 -0
  60. /package/dist/types/{src/components → components}/DateField/DateField.d.ts +0 -0
  61. /package/dist/types/{src/components → components}/DateField/index.d.ts +0 -0
  62. /package/dist/types/{src/components → components}/DateField/validation.d.ts +0 -0
  63. /package/dist/types/{src/components → components}/Divider/Divider.d.ts +0 -0
  64. /package/dist/types/{src/components → components}/Divider/index.d.ts +0 -0
  65. /package/dist/types/{src/components → components}/Drawer/Content.d.ts +0 -0
  66. /package/dist/types/{src/components → components}/Drawer/Drawer.d.ts +0 -0
  67. /package/dist/types/{src/components → components}/Drawer/DrawerContext.d.ts +0 -0
  68. /package/dist/types/{src/components → components}/Drawer/Header.d.ts +0 -0
  69. /package/dist/types/{src/components → components}/Drawer/index.d.ts +0 -0
  70. /package/dist/types/{src/components → components}/Drawer/types.d.ts +0 -0
  71. /package/dist/types/{src/components → components}/Drawer/useDrawer.d.ts +0 -0
  72. /package/dist/types/{src/components → components}/DropdownMenu/DropdownMenu.d.ts +0 -0
  73. /package/dist/types/{src/components → components}/DropdownMenu/Item.d.ts +0 -0
  74. /package/dist/types/{src/components → components}/DropdownMenu/index.d.ts +0 -0
  75. /package/dist/types/{src/components → components}/ErrorMessage/ErrorMessage.d.ts +0 -0
  76. /package/dist/types/{src/components → components}/ErrorMessage/index.d.ts +0 -0
  77. /package/dist/types/{src/components → components}/ExpandableText/ExpandableText.d.ts +0 -0
  78. /package/dist/types/{src/components → components}/ExpandableText/index.d.ts +0 -0
  79. /package/dist/types/{src/components → components}/Fieldset/Fieldset.d.ts +0 -0
  80. /package/dist/types/{src/components → components}/Fieldset/index.d.ts +0 -0
  81. /package/dist/types/{src/components → components}/Flex/Flex.d.ts +0 -0
  82. /package/dist/types/{src/components → components}/Flex/index.d.ts +0 -0
  83. /package/dist/types/{src/components → components}/Flex/propUtils.d.ts +0 -0
  84. /package/dist/types/{src/components → components}/Flex/types.d.ts +0 -0
  85. /package/dist/types/{src/components → components}/Grid/Grid.d.ts +0 -0
  86. /package/dist/types/{src/components → components}/Grid/Item.d.ts +0 -0
  87. /package/dist/types/{src/components → components}/Grid/index.d.ts +0 -0
  88. /package/dist/types/{src/components → components}/Icon/Icon.d.ts +0 -0
  89. /package/dist/types/{src/components → components}/Icon/index.d.ts +0 -0
  90. /package/dist/types/{src/components → components}/Icon/types.d.ts +0 -0
  91. /package/dist/types/{src/components → components}/Image/Image.d.ts +0 -0
  92. /package/dist/types/{src/components → components}/Image/index.d.ts +0 -0
  93. /package/dist/types/{src/components → components}/Label/Label.d.ts +0 -0
  94. /package/dist/types/{src/components → components}/Label/index.d.ts +0 -0
  95. /package/dist/types/{src/components → components}/Link/Link.d.ts +0 -0
  96. /package/dist/types/{src/components → components}/Link/index.d.ts +0 -0
  97. /package/dist/types/{src/components → components}/LinkButton/LinkButton.d.ts +0 -0
  98. /package/dist/types/{src/components → components}/LinkButton/index.d.ts +0 -0
  99. /package/dist/types/{src/components → components}/List/List.d.ts +0 -0
  100. /package/dist/types/{src/components → components}/List/ListItem.d.ts +0 -0
  101. /package/dist/types/{src/components → components}/List/index.d.ts +0 -0
  102. /package/dist/types/{src/components → components}/LoadingIndicator/LoadingIndicator.d.ts +0 -0
  103. /package/dist/types/{src/components → components}/LoadingIndicator/index.d.ts +0 -0
  104. /package/dist/types/{src/components → components}/Logo/Logo.d.ts +0 -0
  105. /package/dist/types/{src/components → components}/Logo/index.d.ts +0 -0
  106. /package/dist/types/{src/components → components}/MaskedField/MaskedField.d.ts +0 -0
  107. /package/dist/types/{src/components → components}/MaskedField/index.d.ts +0 -0
  108. /package/dist/types/{src/components → components}/Modal/Content.d.ts +0 -0
  109. /package/dist/types/{src/components → components}/Modal/Header.d.ts +0 -0
  110. /package/dist/types/{src/components → components}/Modal/Modal.d.ts +0 -0
  111. /package/dist/types/{src/components → components}/Modal/ModalContext.d.ts +0 -0
  112. /package/dist/types/{src/components → components}/Modal/index.d.ts +0 -0
  113. /package/dist/types/{src/components → components}/Modal/types.d.ts +0 -0
  114. /package/dist/types/{src/components → components}/Modal/useModal.d.ts +0 -0
  115. /package/dist/types/{src/components → components}/NumberField/NumberField.d.ts +0 -0
  116. /package/dist/types/{src/components → components}/NumberField/index.d.ts +0 -0
  117. /package/dist/types/{src/components → components}/Option/Option.d.ts +0 -0
  118. /package/dist/types/{src/components → components}/Option/index.d.ts +0 -0
  119. /package/dist/types/{src/components → components}/PasswordField/PasswordField.d.ts +0 -0
  120. /package/dist/types/{src/components → components}/PasswordField/ShowHideButton.d.ts +0 -0
  121. /package/dist/types/{src/components → components}/PasswordField/index.d.ts +0 -0
  122. /package/dist/types/{src/components → components}/Popover/Popover.d.ts +0 -0
  123. /package/dist/types/{src/components → components}/Popover/index.d.ts +0 -0
  124. /package/dist/types/{src/components → components}/Progress/Progress.d.ts +0 -0
  125. /package/dist/types/{src/components → components}/Progress/index.d.ts +0 -0
  126. /package/dist/types/{src/components → components}/Radio/Radio.d.ts +0 -0
  127. /package/dist/types/{src/components → components}/Radio/RadioGroup.d.ts +0 -0
  128. /package/dist/types/{src/components → components}/Radio/index.d.ts +0 -0
  129. /package/dist/types/{src/components → components}/SVG/SVG.d.ts +0 -0
  130. /package/dist/types/{src/components → components}/SVG/index.d.ts +0 -0
  131. /package/dist/types/{src/components → components}/Segment/Segment.d.ts +0 -0
  132. /package/dist/types/{src/components → components}/Segment/SegmentGroup.d.ts +0 -0
  133. /package/dist/types/{src/components → components}/Segment/index.d.ts +0 -0
  134. /package/dist/types/{src/components → components}/Select/Select.d.ts +0 -0
  135. /package/dist/types/{src/components → components}/Select/index.d.ts +0 -0
  136. /package/dist/types/{src/components → components}/Slider/Slider.d.ts +0 -0
  137. /package/dist/types/{src/components → components}/Slider/helpers.d.ts +0 -0
  138. /package/dist/types/{src/components → components}/Slider/index.d.ts +0 -0
  139. /package/dist/types/{src/components → components}/Stack/Stack.d.ts +0 -0
  140. /package/dist/types/{src/components → components}/Stack/index.d.ts +0 -0
  141. /package/dist/types/{src/components → components}/Switch/Switch.d.ts +0 -0
  142. /package/dist/types/{src/components → components}/Switch/index.d.ts +0 -0
  143. /package/dist/types/{src/components → components}/Table/Body.d.ts +0 -0
  144. /package/dist/types/{src/components → components}/Table/Cell.d.ts +0 -0
  145. /package/dist/types/{src/components → components}/Table/Foot.d.ts +0 -0
  146. /package/dist/types/{src/components → components}/Table/Head.d.ts +0 -0
  147. /package/dist/types/{src/components → components}/Table/HeaderCell.d.ts +0 -0
  148. /package/dist/types/{src/components → components}/Table/Row.d.ts +0 -0
  149. /package/dist/types/{src/components → components}/Table/Table.d.ts +0 -0
  150. /package/dist/types/{src/components → components}/Table/index.d.ts +0 -0
  151. /package/dist/types/{src/components → components}/Text/Text.d.ts +0 -0
  152. /package/dist/types/{src/components → components}/Text/index.d.ts +0 -0
  153. /package/dist/types/{src/components → components}/TextArea/TextArea.d.ts +0 -0
  154. /package/dist/types/{src/components → components}/TextArea/index.d.ts +0 -0
  155. /package/dist/types/{src/components → components}/TextAreaInput/TextAreaInput.d.ts +0 -0
  156. /package/dist/types/{src/components → components}/TextAreaInput/index.d.ts +0 -0
  157. /package/dist/types/{src/components → components}/TextField/TextField.d.ts +0 -0
  158. /package/dist/types/{src/components → components}/TextField/adornmentWithClassName.d.ts +0 -0
  159. /package/dist/types/{src/components → components}/TextField/index.d.ts +0 -0
  160. /package/dist/types/{src/components → components}/TextOrHTML/TextOrHTML.d.ts +0 -0
  161. /package/dist/types/{src/components → components}/TextOrHTML/index.d.ts +0 -0
  162. /package/dist/types/{src/components → components}/Title/Title.d.ts +0 -0
  163. /package/dist/types/{src/components → components}/Title/index.d.ts +0 -0
  164. /package/dist/types/{src/components → components}/Toast/Toast.d.ts +0 -0
  165. /package/dist/types/{src/components → components}/Toast/ToastOptionsDoc.d.ts +0 -0
  166. /package/dist/types/{src/components → components}/Toast/Toaster.d.ts +0 -0
  167. /package/dist/types/{src/components → components}/Toast/index.d.ts +0 -0
  168. /package/dist/types/{src/components → components}/Toast/state.d.ts +0 -0
  169. /package/dist/types/{src/components → components}/Toast/types.d.ts +0 -0
  170. /package/dist/types/{src/components → components}/Trust/Trust.d.ts +0 -0
  171. /package/dist/types/{src/components → components}/Trust/TrustpilotProvider.d.ts +0 -0
  172. /package/dist/types/{src/components → components}/Trust/constants.d.ts +0 -0
  173. /package/dist/types/{src/components → components}/Trust/index.d.ts +0 -0
  174. /package/dist/types/{src/components → components}/Trust/types.d.ts +0 -0
  175. /package/dist/types/{src/components → components}/VisuallyHidden/VisuallyHidden.d.ts +0 -0
  176. /package/dist/types/{src/components → components}/VisuallyHidden/index.d.ts +0 -0
  177. /package/dist/types/{src/components → components}/index.d.ts +0 -0
  178. /package/dist/types/{src/hooks → hooks}/index.d.ts +0 -0
  179. /package/dist/types/{src/hooks → hooks}/useBreakpoint/index.d.ts +0 -0
  180. /package/dist/types/{src/hooks → hooks}/useBreakpoint/useBreakpoint.d.ts +0 -0
  181. /package/dist/types/{src/hooks → hooks}/useButton/index.d.ts +0 -0
  182. /package/dist/types/{src/hooks → hooks}/useButton/useButton.d.ts +0 -0
  183. /package/dist/types/{src/hooks → hooks}/useDialog/index.d.ts +0 -0
  184. /package/dist/types/{src/hooks → hooks}/useDialog/useDialog.d.ts +0 -0
  185. /package/dist/types/{src/hooks → hooks}/useDialogPolyfill/index.d.ts +0 -0
  186. /package/dist/types/{src/hooks → hooks}/useDialogPolyfill/useDialogPolyfill.d.ts +0 -0
  187. /package/dist/types/{src/hooks → hooks}/useLabel/index.d.ts +0 -0
  188. /package/dist/types/{src/hooks → hooks}/useLabel/useLabel.d.ts +0 -0
  189. /package/dist/types/{src/hooks → hooks}/useTextField/index.d.ts +0 -0
  190. /package/dist/types/{src/hooks → hooks}/useTextField/types.d.ts +0 -0
  191. /package/dist/types/{src/hooks → hooks}/useTextField/useTextField.d.ts +0 -0
  192. /package/dist/types/{src/hooks → hooks}/useValidationClasses/index.d.ts +0 -0
  193. /package/dist/types/{src/hooks → hooks}/useValidationClasses/useValidationClasses.d.ts +0 -0
  194. /package/dist/types/{src/types → types}/dom.d.ts +0 -0
  195. /package/dist/types/{src/types → types}/events.d.ts +0 -0
  196. /package/dist/types/{src/types → types}/icon.d.ts +0 -0
  197. /package/dist/types/{src/types → types}/index.d.ts +0 -0
  198. /package/dist/types/{src/types → types}/size.d.ts +0 -0
  199. /package/dist/types/{src/utils → utils}/StoryContainer.d.ts +0 -0
  200. /package/dist/types/{src/utils → utils}/changeCSS.d.ts +0 -0
  201. /package/dist/types/{src/utils → utils}/colours.d.ts +0 -0
  202. /package/dist/types/{src/utils → utils}/delay.d.ts +0 -0
  203. /package/dist/types/{src/utils → utils}/excludeControls.d.ts +0 -0
  204. /package/dist/types/{src/utils → utils}/filterUndefinedProps.d.ts +0 -0
  205. /package/dist/types/{src/utils → utils}/getSpacingValue.d.ts +0 -0
  206. /package/dist/types/{src/utils → utils}/htmlDialogPolyfill.d.ts +0 -0
  207. /package/dist/types/{src/utils → utils}/index.d.ts +0 -0
  208. /package/dist/types/{src/utils → utils}/mergeRefs.d.ts +0 -0
  209. /package/dist/types/{src/utils → utils}/mockMatchMedia.d.ts +0 -0
  210. /package/dist/types/{src/utils → utils}/polyfill-tests.d.ts +0 -0
  211. /package/dist/types/{src/utils → utils}/sizeClasses.d.ts +0 -0
  212. /package/dist/types/{src/utils → utils}/sizeOptions.d.ts +0 -0
  213. /package/dist/types/{src/utils → utils}/spaceDelimitedList.d.ts +0 -0
@@ -6,6 +6,37 @@ import { LoqateAddressLookupService } from "./LoqateAddressLookupService";
6
6
  // Ensure Vitest uses the mock from the __mocks__ directory
7
7
  vi.mock("./__mocks__/LoqateAddressLookupService");
8
8
 
9
+ const containerSearchResult = {
10
+ Items: [
11
+ {
12
+ Id: "GB|RM|ENG|container-id",
13
+ Type: "BuildingNumber",
14
+ Text: "99 Gresham Street",
15
+ Highlight: "0-2,3-8",
16
+ Description: "London, EC2V 7NG - 3 Addresses",
17
+ },
18
+ ],
19
+ };
20
+
21
+ const subAddressResults = {
22
+ Items: [
23
+ {
24
+ Id: "GB|RM|A|first",
25
+ Type: "Address",
26
+ Text: "First Floor",
27
+ Description: "99 Gresham Street, London",
28
+ Highlight: "",
29
+ },
30
+ {
31
+ Id: "GB|RM|A|second",
32
+ Type: "Address",
33
+ Text: "Second Floor",
34
+ Description: "99 Gresham Street, London",
35
+ Highlight: "",
36
+ },
37
+ ],
38
+ };
39
+
9
40
  describe("AddressLookup", () => {
10
41
  let addressLookupService: LoqateAddressLookupService;
11
42
 
@@ -193,6 +224,41 @@ describe("AddressLookup", () => {
193
224
  expect(onError).toHaveBeenCalledWith(error);
194
225
  });
195
226
 
227
+ it("should show sub-addresses after selecting a container type option, without error", async () => {
228
+ vi.spyOn(addressLookupService, "search").mockResolvedValue(
229
+ containerSearchResult,
230
+ );
231
+ vi.spyOn(addressLookupService, "findById").mockResolvedValue(
232
+ subAddressResults,
233
+ );
234
+
235
+ render(
236
+ <AddressLookup
237
+ addressLookupService={addressLookupService}
238
+ label="Find address"
239
+ delay={0}
240
+ />,
241
+ );
242
+
243
+ const input = screen.getByRole("combobox");
244
+ await userEvent.type(input, "99G");
245
+
246
+ const containerOption = await screen.findByText(
247
+ "99 Gresham Street, London, EC2V 7NG - 3 Addresses",
248
+ );
249
+ await userEvent.click(containerOption);
250
+
251
+ expect(
252
+ screen.queryByText("Please select an option from the list"),
253
+ ).not.toBeInTheDocument();
254
+ expect(
255
+ await screen.findByText("First Floor, 99 Gresham Street, London"),
256
+ ).toBeInTheDocument();
257
+ expect(
258
+ screen.getByText("Second Floor, 99 Gresham Street, London"),
259
+ ).toBeInTheDocument();
260
+ });
261
+
196
262
  it("should call onOptionsDisplayed when valid results are displayed", async () => {
197
263
  vi.spyOn(addressLookupService, "search").mockResolvedValueOnce({
198
264
  Items: [
@@ -1,8 +1,8 @@
1
+ import { useOnUnmount } from "@simplybusiness/mobius-hooks";
1
2
  import classNames from "classnames/dedupe";
2
3
  import type React from "react";
3
4
  import type { FocusEvent } from "react";
4
5
  import { useEffect, useId, useRef, useState } from "react";
5
- import { useOnUnmount } from "@simplybusiness/mobius-hooks";
6
6
  import { useBreakpoint } from "../../hooks";
7
7
  import { TextField } from "../TextField";
8
8
  import { VisuallyHidden } from "../VisuallyHidden";
@@ -175,12 +175,22 @@ const ComboboxInner = <T extends ComboboxOption>({
175
175
  option.callback &&
176
176
  typeof option.callback === "function"
177
177
  ) {
178
+ justSelectedRef.current = true;
178
179
  setTimeout(() => {
179
180
  if (inputRef && typeof inputRef !== "function" && inputRef.current) {
180
181
  inputRef.current.focus();
181
182
  }
182
183
  }, 0);
183
- updateFilteredOptions(option.callback());
184
+ const callbackPromise = option.callback();
185
+ updateFilteredOptions(callbackPromise);
186
+ callbackPromise
187
+ .then(() => {
188
+ setIsOpen(true);
189
+ setIsChanging(true);
190
+ })
191
+ .catch(() => {
192
+ // error handled inside updateFilteredOptions via setError
193
+ });
184
194
  return;
185
195
  }
186
196
 
@@ -1,427 +0,0 @@
1
- var __typeError = (msg) => {
2
- throw TypeError(msg);
3
- };
4
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
-
9
- // src/components/Icon/Icon.tsx
10
- import classNames from "classnames/dedupe";
11
- import { jsx, jsxs } from "react/jsx-runtime";
12
- var ICON_PREFIX = "mobius-icon";
13
- var capitaliseFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1);
14
- function Icon({
15
- ref,
16
- icon,
17
- className,
18
- size = "xs",
19
- color,
20
- fixedWidth,
21
- spin,
22
- spinReverse,
23
- title,
24
- ...otherProps
25
- }) {
26
- if (!icon) {
27
- throw new Error("Must specify icon object");
28
- }
29
- const classes = classNames(
30
- "mobius",
31
- "mobius-icon",
32
- `svg-inline--${ICON_PREFIX}`,
33
- `--size-${size}`,
34
- className,
35
- {
36
- [`${ICON_PREFIX}-fw`]: fixedWidth,
37
- [`${ICON_PREFIX}-spin`]: spin || spinReverse,
38
- [`${ICON_PREFIX}-spin-reverse`]: spinReverse
39
- }
40
- );
41
- const { iconName, width, height, svgPathData } = icon;
42
- const formattedIconName = iconName.split("-").join(" ");
43
- const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;
44
- const titleText = title || defaultTitle;
45
- return /* @__PURE__ */ jsxs(
46
- "svg",
47
- {
48
- ref,
49
- focusable: "false",
50
- "data-icon": iconName,
51
- className: classes,
52
- role: "img",
53
- xmlns: "http://www.w3.org/2000/svg",
54
- viewBox: `0 0 ${width} ${height}`,
55
- style: { color },
56
- ...otherProps,
57
- children: [
58
- /* @__PURE__ */ jsx("title", { children: titleText }),
59
- /* @__PURE__ */ jsx("path", { fill: "currentColor", d: svgPathData })
60
- ]
61
- }
62
- );
63
- }
64
-
65
- // src/hooks/useLabel/useLabel.tsx
66
- import { useId, useRef } from "react";
67
- function useLabel({
68
- id: providedId,
69
- label,
70
- "aria-label": ariaLabel,
71
- "aria-labelledby": ariaLabelledby,
72
- labelElementType = "label"
73
- }) {
74
- let labelProps = {};
75
- let fieldProps = {};
76
- const hasWarnedAboutMissingLabels = useRef(false);
77
- const fallbackId = useId();
78
- const id = providedId || fallbackId;
79
- const labelId = useId();
80
- if (label) {
81
- ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;
82
- labelProps = {
83
- id: labelId,
84
- htmlFor: labelElementType === "label" ? id : void 0
85
- };
86
- } else if (!ariaLabelledby && !ariaLabel && !hasWarnedAboutMissingLabels.current) {
87
- hasWarnedAboutMissingLabels.current = true;
88
- console.warn(
89
- "If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility"
90
- );
91
- }
92
- fieldProps = {
93
- id,
94
- "aria-label": ariaLabel,
95
- "aria-labelledby": ariaLabelledby
96
- };
97
- return {
98
- labelProps,
99
- fieldProps
100
- };
101
- }
102
-
103
- // src/hooks/useTextField/useTextField.tsx
104
- import { useId as useId2 } from "react";
105
-
106
- // src/utils/spaceDelimitedList.ts
107
- function spaceDelimitedList(list) {
108
- return list.filter(Boolean).join(" ") || void 0;
109
- }
110
-
111
- // src/hooks/useTextField/useTextField.tsx
112
- function useTextField(props) {
113
- const {
114
- isDisabled = false,
115
- isReadOnly = false,
116
- isRequired = false,
117
- inputElementType = "input"
118
- } = props;
119
- const { labelProps, fieldProps } = useLabel(props);
120
- const descriptionId = useId2();
121
- const descriptionProps = { id: descriptionId };
122
- const errorMessageId = useId2();
123
- const errorMessageProps = { id: errorMessageId };
124
- const ariaDescribedBy = spaceDelimitedList([
125
- props.description && descriptionId,
126
- props.errorMessage && errorMessageId,
127
- props["aria-describedby"]
128
- ]);
129
- return {
130
- descriptionProps,
131
- errorMessageProps,
132
- labelProps,
133
- inputProps: {
134
- defaultValue: props.defaultValue,
135
- value: props.value,
136
- onChange: props.onChange,
137
- disabled: isDisabled,
138
- readOnly: isReadOnly,
139
- required: isRequired,
140
- "aria-required": isRequired === true ? true : void 0,
141
- "aria-invalid": props.isInvalid,
142
- "aria-describedby": ariaDescribedBy,
143
- "aria-errormessage": props["aria-errormessage"],
144
- role: props.role,
145
- type: inputElementType === "input" ? props.type : void 0,
146
- pattern: inputElementType === "input" ? props.pattern : void 0,
147
- autoComplete: props.autoComplete,
148
- maxLength: props.maxLength,
149
- minLength: props.minLength,
150
- name: props.name,
151
- placeholder: props.placeholder,
152
- inputMode: props.inputMode,
153
- // Clipboard events
154
- onCopy: props.onCopy,
155
- onCut: props.onCut,
156
- onPaste: props.onPaste,
157
- // Composition events
158
- onCompositionEnd: props.onCompositionEnd,
159
- onCompositionStart: props.onCompositionStart,
160
- onCompositionUpdate: props.onCompositionUpdate,
161
- // Selection events
162
- onSelect: props.onSelect,
163
- // Input events
164
- onBeforeInput: props.onBeforeInput,
165
- onInput: props.onInput,
166
- // Focus events
167
- onFocus: props.onFocus,
168
- onBlur: props.onBlur,
169
- ...fieldProps
170
- }
171
- };
172
- }
173
-
174
- // src/hooks/useValidationClasses/useValidationClasses.ts
175
- var useValidationClasses = (props) => {
176
- const { isInvalid } = props;
177
- if (isInvalid) {
178
- return "--is-invalid";
179
- }
180
- if (isInvalid === false) {
181
- return "--is-valid";
182
- }
183
- return "";
184
- };
185
-
186
- // src/components/ErrorMessage/ErrorMessage.tsx
187
- import { error } from "@simplybusiness/icons";
188
- import classNames7 from "classnames/dedupe";
189
-
190
- // src/components/TextField/TextField.tsx
191
- import classNames5 from "classnames/dedupe";
192
-
193
- // src/components/Label/Label.tsx
194
- import classNames2 from "classnames/dedupe";
195
- import { jsx as jsx2 } from "react/jsx-runtime";
196
- var Label = ({ ref, ...props }) => {
197
- const { elementType: Element = "label", children, ...otherProps } = props;
198
- const classes = classNames2("mobius", "mobius-label", props.className);
199
- otherProps.className = classes;
200
- return /* @__PURE__ */ jsx2(Element, { ref, ...otherProps, className: classes, children });
201
- };
202
- Label.displayName = "Label";
203
-
204
- // src/components/Stack/Stack.tsx
205
- import classNames3 from "classnames/dedupe";
206
- import { jsx as jsx3 } from "react/jsx-runtime";
207
- var Stack = ({ ref, ...props }) => {
208
- const { elementType: Element = "div", gap, ...otherProps } = props;
209
- const classes = classNames3(
210
- "mobius",
211
- "mobius-stack",
212
- {
213
- [`--gap-${gap}`]: gap
214
- },
215
- otherProps.className
216
- );
217
- return /* @__PURE__ */ jsx3(Element, { ref, ...otherProps, className: classes });
218
- };
219
- Stack.displayName = "Stack";
220
-
221
- // src/components/TextField/adornmentWithClassName.ts
222
- import classNames4 from "classnames/dedupe";
223
- import { cloneElement } from "react";
224
- var adornmentWithClassName = (component, validationClasses, className) => {
225
- if (!component) return null;
226
- return cloneElement(component, {
227
- className: classNames4(
228
- component.props.className,
229
- validationClasses,
230
- className
231
- )
232
- });
233
- };
234
-
235
- // src/components/TextField/TextField.tsx
236
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
237
- var TextField = ({ ref, ...props }) => {
238
- const {
239
- isDisabled,
240
- type = "text",
241
- isInvalid,
242
- className,
243
- label,
244
- errorMessage,
245
- children,
246
- isRequired,
247
- prefixInside,
248
- prefixOutside,
249
- suffixInside,
250
- suffixOutside,
251
- isReadOnly,
252
- ...otherProps
253
- } = props;
254
- const { inputProps, labelProps, errorMessageProps } = useTextField({
255
- ...props,
256
- "aria-errormessage": errorMessage
257
- });
258
- const hidden = type === "hidden";
259
- const validationClasses = useValidationClasses({ isInvalid });
260
- const textfieldClasses = {
261
- "--is-disabled": isDisabled,
262
- "--is-required": typeof isRequired === "boolean" && isRequired,
263
- "--is-optional": typeof isRequired === "boolean" && !isRequired,
264
- "--is-hidden": hidden,
265
- [className || ""]: true
266
- };
267
- const sharedClasses = classNames5(validationClasses, textfieldClasses);
268
- const labelClasses = classNames5(
269
- {
270
- "--is-disabled": isDisabled
271
- },
272
- validationClasses
273
- );
274
- const containerClasses = classNames5(
275
- "mobius",
276
- "mobius-text-field",
277
- sharedClasses
278
- );
279
- const inputClasses = classNames5(
280
- "mobius",
281
- "mobius-text-field__input",
282
- sharedClasses
283
- );
284
- const inputWrapperClasses = classNames5(
285
- "mobius-text-field__input-wrapper",
286
- sharedClasses
287
- );
288
- return /* @__PURE__ */ jsxs2(Stack, { gap: "xs", className: containerClasses, children: [
289
- label && !hidden && /* @__PURE__ */ jsx4(Label, { ...labelProps, className: labelClasses, children: label }),
290
- /* @__PURE__ */ jsxs2("div", { className: "mobius-text-field__inner-container", children: [
291
- adornmentWithClassName(
292
- prefixOutside,
293
- labelClasses,
294
- "mobius-text-field__prefix-outside"
295
- ),
296
- /* @__PURE__ */ jsxs2("div", { className: inputWrapperClasses, children: [
297
- adornmentWithClassName(
298
- prefixInside,
299
- labelClasses,
300
- "mobius-text-field__prefix-inside"
301
- ),
302
- /* @__PURE__ */ jsx4(
303
- "input",
304
- {
305
- ...otherProps,
306
- ...inputProps,
307
- ref,
308
- type,
309
- className: inputClasses
310
- }
311
- ),
312
- adornmentWithClassName(
313
- suffixInside,
314
- labelClasses,
315
- "mobius-text-field__suffix-inside"
316
- )
317
- ] }),
318
- adornmentWithClassName(
319
- suffixOutside,
320
- labelClasses,
321
- "mobius-text-field__suffix-outside"
322
- )
323
- ] }),
324
- children && /* @__PURE__ */ jsx4("div", { className: "mobius-text-field__children", children }),
325
- /* @__PURE__ */ jsx4(ErrorMessage, { ...errorMessageProps, errorMessage })
326
- ] });
327
- };
328
- TextField.displayName = "TextField";
329
-
330
- // src/components/Text/Text.tsx
331
- import classNames6 from "classnames/dedupe";
332
- import { jsx as jsx5 } from "react/jsx-runtime";
333
- var getElementType = (variant, elementType) => {
334
- if (variant) {
335
- return ["h1", "h2", "h3", "h4"].includes(variant) ? variant : "p";
336
- }
337
- return elementType || "p";
338
- };
339
- var Text = ({ ref, elementType: Component = "p", ...props }) => {
340
- const { variant, className, spacing, ...otherProps } = props;
341
- const elementType = getElementType(variant, Component);
342
- const variantType = variant || elementType;
343
- const classes = classNames6(
344
- "mobius",
345
- "mobius-text",
346
- { [`--is-${variantType}`]: variantType },
347
- { [`--has-line-height-${spacing}`]: spacing },
348
- className
349
- );
350
- return /* @__PURE__ */ jsx5(Component, { ref, ...otherProps, className: classes });
351
- };
352
- Text.displayName = "Text";
353
-
354
- // src/components/TextOrHTML/TextOrHTML.tsx
355
- import { useMemo } from "react";
356
- import { jsx as jsx6 } from "react/jsx-runtime";
357
- var TextOrHTML = ({
358
- ref,
359
- text,
360
- htmlClassName,
361
- htmlElementType = "span",
362
- textWrapper = false,
363
- ...textProps
364
- }) => {
365
- const DangerousComponent = htmlElementType;
366
- const dangerousHTML = useMemo(() => ({ __html: text }), [text]);
367
- const dangerousElement = /* @__PURE__ */ jsx6(
368
- DangerousComponent,
369
- {
370
- className: htmlClassName,
371
- dangerouslySetInnerHTML: dangerousHTML
372
- }
373
- );
374
- if (textWrapper) {
375
- return /* @__PURE__ */ jsx6(Text, { ref, ...textProps, children: dangerousElement });
376
- }
377
- return dangerousElement;
378
- };
379
- TextOrHTML.displayName = "TextOrHTML";
380
-
381
- // src/components/ErrorMessage/ErrorMessage.tsx
382
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
383
- var ErrorMessage = ({
384
- id,
385
- errorMessage,
386
- className
387
- }) => {
388
- const classes = classNames7("mobius", "mobius-error-message", className);
389
- if (!errorMessage) return null;
390
- return /* @__PURE__ */ jsxs3("div", { id, className: classes, "data-testid": "ErrorMessage", role: "alert", children: [
391
- /* @__PURE__ */ jsx7(
392
- Icon,
393
- {
394
- icon: error,
395
- className: "mobius-error-message__icon",
396
- "aria-hidden": "true"
397
- }
398
- ),
399
- /* @__PURE__ */ jsx7(
400
- TextOrHTML,
401
- {
402
- elementType: "span",
403
- className: "mobius-error-message__text",
404
- text: errorMessage
405
- }
406
- )
407
- ] });
408
- };
409
- ErrorMessage.displayName = "ErrorMessage";
410
-
411
- export {
412
- __privateGet,
413
- __privateAdd,
414
- __privateSet,
415
- spaceDelimitedList,
416
- Icon,
417
- useLabel,
418
- useTextField,
419
- useValidationClasses,
420
- ErrorMessage,
421
- Label,
422
- Stack,
423
- TextField,
424
- Text,
425
- TextOrHTML
426
- };
427
- //# sourceMappingURL=chunk-XUNHMVIS.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Icon/Icon.tsx", "../../src/hooks/useLabel/useLabel.tsx", "../../src/hooks/useTextField/useTextField.tsx", "../../src/utils/spaceDelimitedList.ts", "../../src/hooks/useValidationClasses/useValidationClasses.ts", "../../src/components/ErrorMessage/ErrorMessage.tsx", "../../src/components/TextField/TextField.tsx", "../../src/components/Label/Label.tsx", "../../src/components/Stack/Stack.tsx", "../../src/components/TextField/adornmentWithClassName.ts", "../../src/components/Text/Text.tsx", "../../src/components/TextOrHTML/TextOrHTML.tsx"],
4
- "sourcesContent": ["import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { LabelHTMLAttributes } from \"react\";\nimport { useId, useRef } from \"react\";\n\nexport type UseLabelProps = {\n id?: string | undefined;\n label?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n labelElementType?: \"label\" | \"span\" | undefined;\n};\n\nexport type UseLabelReturn = {\n labelProps: {\n id?: string | undefined;\n } & LabelHTMLAttributes<HTMLLabelElement>;\n fieldProps: LabellingProps;\n};\n\nexport type LabellingProps = {\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-details\"?: string | undefined;\n};\n\nexport function useLabel({\n id: providedId,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n labelElementType = \"label\",\n}: UseLabelProps) {\n let labelProps: UseLabelReturn[\"labelProps\"] = {};\n let fieldProps: UseLabelReturn[\"fieldProps\"] = {};\n\n const hasWarnedAboutMissingLabels = useRef(false);\n\n const fallbackId = useId();\n const id = providedId || fallbackId;\n const labelId = useId();\n\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === \"label\" ? id : undefined,\n };\n } else if (\n !ariaLabelledby &&\n !ariaLabel &&\n !hasWarnedAboutMissingLabels.current\n ) {\n hasWarnedAboutMissingLabels.current = true;\n console.warn(\n \"If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility\",\n );\n }\n\n fieldProps = {\n id,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n };\n\n return {\n labelProps,\n fieldProps,\n };\n}\n", "import { useId } from \"react\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useLabel } from \"../useLabel/useLabel\";\nimport type { UseTextFieldProps, UseTextFieldReturn } from \"./types\";\n\nexport function useTextField(props: UseTextFieldProps): UseTextFieldReturn {\n const {\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n inputElementType = \"input\",\n } = props;\n const { labelProps, fieldProps } = useLabel(props);\n\n const descriptionId = useId();\n const descriptionProps = { id: descriptionId };\n\n const errorMessageId = useId();\n const errorMessageProps = { id: errorMessageId };\n\n const ariaDescribedBy = spaceDelimitedList([\n props.description && descriptionId,\n props.errorMessage && errorMessageId,\n props[\"aria-describedby\"],\n ]);\n\n return {\n descriptionProps,\n errorMessageProps,\n labelProps,\n inputProps: {\n defaultValue: props.defaultValue,\n value: props.value,\n onChange: props.onChange,\n disabled: isDisabled,\n readOnly: isReadOnly,\n required: isRequired,\n \"aria-required\": isRequired === true ? true : undefined,\n \"aria-invalid\": props.isInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-errormessage\": props[\"aria-errormessage\"],\n role: props.role,\n\n type: inputElementType === \"input\" ? props.type : undefined,\n pattern: inputElementType === \"input\" ? props.pattern : undefined,\n\n autoComplete: props.autoComplete,\n maxLength: props.maxLength,\n minLength: props.minLength,\n name: props.name,\n placeholder: props.placeholder,\n inputMode: props.inputMode,\n\n // Clipboard events\n onCopy: props.onCopy,\n onCut: props.onCut,\n onPaste: props.onPaste,\n\n // Composition events\n onCompositionEnd: props.onCompositionEnd,\n onCompositionStart: props.onCompositionStart,\n onCompositionUpdate: props.onCompositionUpdate,\n\n // Selection events\n onSelect: props.onSelect,\n\n // Input events\n onBeforeInput: props.onBeforeInput,\n onInput: props.onInput,\n\n // Focus events\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n\n ...fieldProps,\n },\n };\n}\n", "export function spaceDelimitedList(\n list: (string | null | undefined)[],\n): string | undefined {\n return list.filter(Boolean).join(\" \") || undefined;\n}\n", "import type { Validation } from \"../../types\";\n\nexport type GetValidationClassesProps = Pick<Validation, \"isInvalid\">;\n\nexport const useValidationClasses = (props: GetValidationClassesProps) => {\n const { isInvalid } = props;\n\n if (isInvalid) {\n return \"--is-invalid\";\n }\n\n if (isInvalid === false) {\n return \"--is-valid\";\n }\n\n return \"\";\n};\n", "import { error } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport { TextOrHTML } from \"../..\";\nimport { Icon } from \"../Icon\";\n\nexport interface ErrorMessageProps {\n errorMessage?: string;\n id?: string;\n className?: string;\n}\n\nexport const ErrorMessage = ({\n id,\n errorMessage,\n className,\n}: ErrorMessageProps) => {\n const classes = classNames(\"mobius\", \"mobius-error-message\", className);\n\n if (!errorMessage) return null;\n\n return (\n <div id={id} className={classes} data-testid=\"ErrorMessage\" role=\"alert\">\n <Icon\n icon={error}\n className=\"mobius-error-message__icon\"\n aria-hidden=\"true\"\n />\n <TextOrHTML\n elementType=\"span\"\n className=\"mobius-error-message__text\"\n text={errorMessage}\n />\n </div>\n );\n};\n\nErrorMessage.displayName = \"ErrorMessage\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextField = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n\n isReadOnly,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextField.displayName = \"TextField\";\nexport { TextField };\n", "import type React from \"react\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type LabelElementType = HTMLLabelElement;\nexport type IntrinsicLabel = Omit<\n React.JSX.IntrinsicElements[\"label\"],\n \"css\" | \"color\" | \"ref\"\n>;\n\nexport interface LabelProps\n extends IntrinsicLabel, DOMProps, RefAttributes<LabelElementType> {\n children?: ReactNode;\n className?: string;\n elementType?: \"label\" | \"span\";\n}\n\nconst Label = ({ ref, ...props }: LabelProps) => {\n const { elementType: Element = \"label\", children, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-label\", props.className);\n otherProps.className = classes;\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n {children}\n </Element>\n );\n};\n\nLabel.displayName = \"Label\";\nexport { Label };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport type React from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SpacingType } from \"../../types\";\n\nexport type StackElementType = HTMLDivElement;\n\nexport interface StackProps extends DOMProps, RefAttributes<StackElementType> {\n children?: ReactNode;\n /** How big a gap between items */\n gap?: SpacingType;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n}\n\nexport type StackRef = Ref<StackElementType>;\n\nexport const Stack = ({ ref, ...props }: StackProps) => {\n const { elementType: Element = \"div\", gap, ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-stack\",\n {\n [`--gap-${gap}`]: gap,\n },\n otherProps.className,\n );\n\n return <Element ref={ref} {...otherProps} className={classes} />;\n};\n\nStack.displayName = \"Stack\";\n", "import classNames from \"classnames/dedupe\";\nimport type { ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\n\nexport const adornmentWithClassName = (\n component?: ReactElement,\n validationClasses?: string,\n className?: string,\n) => {\n if (!component) return null;\n\n return cloneElement(component, {\n className: classNames(\n (component.props as { className?: string }).className,\n validationClasses,\n className,\n ),\n } as { className: string });\n};\n", "import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type TextElementType = HTMLHeadingElement | HTMLParagraphElement;\nexport type TextVariantType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"body\"\n | \"small\"\n | \"legal\";\nexport type ElementType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"p\" | \"span\";\nexport interface TextProps extends DOMProps, RefAttributes<TextElementType> {\n /** HTML element for the text */\n elementType?: ElementType;\n /** Specify font size override */\n variant?: TextVariantType;\n /** Specify compact line height override */\n spacing?: \"loose\" | \"tight\";\n /** Custom class name for setting specific CSS */\n className?: string;\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst getElementType = (\n variant: TextVariantType | undefined,\n elementType: ElementType | undefined,\n) => {\n if (variant) {\n return [\"h1\", \"h2\", \"h3\", \"h4\"].includes(variant) ? variant : \"p\";\n }\n return elementType || \"p\";\n};\n\nconst Text = ({ ref, elementType: Component = \"p\", ...props }: TextProps) => {\n // Remove non-DOM props from element\n const { variant, className, spacing, ...otherProps } = props;\n\n // If a variant is supplied, set the class name and element type\n const elementType = getElementType(variant, Component);\n const variantType = variant || elementType;\n const classes = classNames(\n \"mobius\",\n \"mobius-text\",\n { [`--is-${variantType}`]: variantType },\n { [`--has-line-height-${spacing}`]: spacing },\n className,\n );\n\n return <Component ref={ref} {...otherProps} className={classes} />;\n};\n\nText.displayName = \"Text\";\nexport { Text };\n", "import type { RefAttributes } from \"react\";\nimport { useMemo } from \"react\";\nimport type { TextElementType, TextProps } from \"../Text/Text\";\nimport { Text } from \"../Text/Text\";\n\nexport type HTMLElementType = \"span\" | \"div\";\n\nexport interface TextOrHTMLProps\n extends Omit<TextProps, \"children\">, RefAttributes<TextElementType> {\n /** HTML string to be rendered with dangerouslySetInnerHTML */\n text: string;\n /** Custom class name for the dangerous HTML element */\n htmlClassName?: string;\n /** HTML element type for the dangerous HTML element */\n htmlElementType?: HTMLElementType;\n /** If true, wraps the dangerous HTML element inside a Text component */\n textWrapper?: boolean;\n}\n\nconst TextOrHTML = ({\n ref,\n text,\n htmlClassName,\n htmlElementType = \"span\",\n textWrapper = false,\n ...textProps\n}: TextOrHTMLProps) => {\n const DangerousComponent = htmlElementType;\n\n // Memoize the dangerouslySetInnerHTML object to prevent unnecessary re-renders\n // See: https://github.com/facebook/react/issues/31660\n const dangerousHTML = useMemo(() => ({ __html: text }), [text]);\n\n const dangerousElement = (\n <DangerousComponent\n className={htmlClassName}\n dangerouslySetInnerHTML={dangerousHTML}\n />\n );\n\n if (textWrapper) {\n return (\n <Text ref={ref} {...textProps}>\n {dangerousElement}\n </Text>\n );\n }\n\n return dangerousElement;\n};\n\nTextOrHTML.displayName = \"TextOrHTML\";\nexport { TextOrHTML };\n"],
5
- "mappings": "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",
6
- "names": ["useId", "useId", "classNames", "classNames", "classNames", "jsx", "classNames", "jsx", "classNames", "jsx", "jsxs", "classNames", "classNames", "jsx", "jsx", "jsx", "jsxs", "classNames"]
7
- }