@simplybusiness/mobius 10.3.1 → 10.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/components/AddressLookup/AddressLookup.js +888 -5314
- package/dist/cjs/components/AddressLookup/AddressLookup.js.map +4 -4
- package/dist/cjs/components/AddressLookup/index.js +952 -5381
- package/dist/cjs/components/AddressLookup/index.js.map +4 -4
- package/dist/cjs/components/Alert/Alert.js +1 -1
- package/dist/cjs/components/Alert/Alert.js.map +2 -2
- package/dist/cjs/components/Alert/index.js +1 -1
- package/dist/cjs/components/Alert/index.js.map +2 -2
- package/dist/cjs/components/Checkbox/Checkbox.js +245 -5625
- package/dist/cjs/components/Checkbox/Checkbox.js.map +4 -4
- package/dist/cjs/components/Checkbox/CheckboxGroup.js +371 -5614
- package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +4 -4
- package/dist/cjs/components/Checkbox/index.js +377 -5619
- package/dist/cjs/components/Checkbox/index.js.map +4 -4
- package/dist/cjs/components/Combobox/Combobox.js +829 -5344
- package/dist/cjs/components/Combobox/Combobox.js.map +4 -4
- package/dist/cjs/components/Combobox/index.js +813 -5327
- package/dist/cjs/components/Combobox/index.js.map +4 -4
- package/dist/cjs/components/DateField/DateField.js +379 -5505
- package/dist/cjs/components/DateField/DateField.js.map +4 -4
- package/dist/cjs/components/DateField/index.js +383 -5508
- package/dist/cjs/components/DateField/index.js.map +4 -4
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js +120 -5643
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +4 -4
- package/dist/cjs/components/ErrorMessage/index.js +121 -5642
- package/dist/cjs/components/ErrorMessage/index.js.map +4 -4
- package/dist/cjs/components/ExpandableText/ExpandableText.js +511 -5604
- package/dist/cjs/components/ExpandableText/ExpandableText.js.map +4 -4
- package/dist/cjs/components/ExpandableText/index.js +512 -5604
- package/dist/cjs/components/ExpandableText/index.js.map +4 -4
- package/dist/cjs/components/MaskedField/MaskedField.js +394 -5511
- package/dist/cjs/components/MaskedField/MaskedField.js.map +4 -4
- package/dist/cjs/components/MaskedField/index.js +294 -5119
- package/dist/cjs/components/MaskedField/index.js.map +4 -4
- package/dist/cjs/components/NumberField/NumberField.js +357 -5523
- package/dist/cjs/components/NumberField/NumberField.js.map +4 -4
- package/dist/cjs/components/NumberField/index.js +358 -5523
- package/dist/cjs/components/NumberField/index.js.map +4 -4
- package/dist/cjs/components/PasswordField/PasswordField.js +330 -5511
- package/dist/cjs/components/PasswordField/PasswordField.js.map +4 -4
- package/dist/cjs/components/PasswordField/ShowHideButton.js +32 -5655
- package/dist/cjs/components/PasswordField/ShowHideButton.js.map +4 -4
- package/dist/cjs/components/PasswordField/index.js +332 -5512
- package/dist/cjs/components/PasswordField/index.js.map +4 -4
- package/dist/cjs/components/Radio/Radio.js +242 -5632
- package/dist/cjs/components/Radio/Radio.js.map +4 -4
- package/dist/cjs/components/Radio/RadioGroup.js +274 -5619
- package/dist/cjs/components/Radio/RadioGroup.js.map +4 -4
- package/dist/cjs/components/Radio/index.js +404 -5628
- package/dist/cjs/components/Radio/index.js.map +4 -4
- package/dist/cjs/components/Select/Select.js +233 -5588
- package/dist/cjs/components/Select/Select.js.map +4 -4
- package/dist/cjs/components/Select/index.js +234 -5588
- package/dist/cjs/components/Select/index.js.map +4 -4
- package/dist/cjs/components/TextArea/TextArea.js +229 -5531
- package/dist/cjs/components/TextArea/TextArea.js.map +4 -4
- package/dist/cjs/components/TextArea/index.js +230 -5531
- package/dist/cjs/components/TextArea/index.js.map +4 -4
- package/dist/cjs/components/TextField/TextField.js +265 -5522
- package/dist/cjs/components/TextField/TextField.js.map +4 -4
- package/dist/cjs/components/TextField/index.js +266 -5522
- package/dist/cjs/components/TextField/index.js.map +4 -4
- package/dist/cjs/components/TextOrHTML/TextOrHTML.js +1 -1
- package/dist/cjs/components/TextOrHTML/TextOrHTML.js.map +2 -2
- package/dist/cjs/components/TextOrHTML/index.js +1 -1
- package/dist/cjs/components/TextOrHTML/index.js.map +2 -2
- package/dist/cjs/components/index.js +4273 -5291
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/index.js +4304 -5334
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/meta.json +5692 -51487
- package/dist/esm/chunk-3O5DIIGS.js +1 -0
- package/dist/esm/chunk-3O5DIIGS.js.map +7 -0
- package/dist/esm/chunk-3PRSHEVX.js +1 -0
- package/dist/esm/chunk-3PRSHEVX.js.map +7 -0
- package/dist/esm/chunk-4NBLO5WK.js +54 -0
- package/dist/esm/chunk-4NBLO5WK.js.map +7 -0
- package/dist/esm/chunk-4WVJNNBK.js +157 -0
- package/dist/esm/chunk-4WVJNNBK.js.map +7 -0
- package/dist/esm/chunk-5L4G4VLM.js +1 -0
- package/dist/esm/chunk-5L4G4VLM.js.map +7 -0
- package/dist/esm/chunk-5OFXPT4J.js +135 -0
- package/dist/esm/chunk-5OFXPT4J.js.map +7 -0
- package/dist/esm/chunk-6O77SOOB.js +1 -0
- package/dist/esm/chunk-6O77SOOB.js.map +7 -0
- package/dist/esm/chunk-AFU7BFCD.js +151 -0
- package/dist/esm/chunk-AFU7BFCD.js.map +7 -0
- package/dist/esm/chunk-BGR2OTTR.js +1 -0
- package/dist/esm/chunk-BGR2OTTR.js.map +7 -0
- package/dist/esm/chunk-BIGO5EVC.js +1 -0
- package/dist/esm/chunk-BIGO5EVC.js.map +7 -0
- package/dist/esm/chunk-CUOVI2HT.js +1 -0
- package/dist/esm/chunk-CUOVI2HT.js.map +7 -0
- package/dist/esm/{chunk-HPUPB75I.js → chunk-DYTHXKMX.js} +2 -2
- package/dist/esm/chunk-DYTHXKMX.js.map +7 -0
- package/dist/esm/chunk-F4RQKLF7.js +1 -0
- package/dist/esm/chunk-F4RQKLF7.js.map +7 -0
- package/dist/esm/chunk-FKTDL7KO.js +355 -0
- package/dist/esm/chunk-FKTDL7KO.js.map +7 -0
- package/dist/esm/{chunk-NRU3WNV7.js → chunk-JNAQ76CR.js} +2 -2
- package/dist/esm/chunk-KQZ3MNK5.js +100 -0
- package/dist/esm/chunk-KQZ3MNK5.js.map +7 -0
- package/dist/esm/chunk-M2NDSQR5.js +106 -0
- package/dist/esm/chunk-M2NDSQR5.js.map +7 -0
- package/dist/esm/chunk-N4WQ6522.js +125 -0
- package/dist/esm/chunk-N4WQ6522.js.map +7 -0
- package/dist/esm/{chunk-CNOF66SV.js → chunk-NGNVAFBJ.js} +4 -4
- package/dist/esm/chunk-NOQ27VLY.js +1 -0
- package/dist/esm/chunk-NOQ27VLY.js.map +7 -0
- package/dist/esm/chunk-ONDOONBM.js +101 -0
- package/dist/esm/chunk-ONDOONBM.js.map +7 -0
- package/dist/esm/chunk-P34DI6BE.js +1 -0
- package/dist/esm/chunk-P34DI6BE.js.map +7 -0
- package/dist/esm/chunk-P5VEI574.js +97 -0
- package/dist/esm/chunk-P5VEI574.js.map +7 -0
- package/dist/esm/chunk-QPIA6BGW.js +64 -0
- package/dist/esm/chunk-QPIA6BGW.js.map +7 -0
- package/dist/esm/chunk-SZEFLEDA.js +1 -0
- package/dist/esm/chunk-SZEFLEDA.js.map +7 -0
- package/dist/esm/chunk-TXB4BOHB.js +1 -0
- package/dist/esm/chunk-TXB4BOHB.js.map +7 -0
- package/dist/esm/chunk-UIIXVY6K.js +123 -0
- package/dist/esm/chunk-UIIXVY6K.js.map +7 -0
- package/dist/esm/chunk-UQVAEWY2.js +44 -0
- package/dist/esm/chunk-UQVAEWY2.js.map +7 -0
- package/dist/esm/chunk-WC3D5GNN.js +29 -0
- package/dist/esm/chunk-WC3D5GNN.js.map +7 -0
- package/dist/esm/chunk-WNRO77YH.js +1 -0
- package/dist/esm/chunk-WNRO77YH.js.map +7 -0
- package/dist/esm/chunk-X6EPYQKX.js +96 -0
- package/dist/esm/chunk-X6EPYQKX.js.map +7 -0
- package/dist/esm/chunk-ZN5TRIVZ.js +41 -0
- package/dist/esm/chunk-ZN5TRIVZ.js.map +7 -0
- package/dist/esm/components/AddressLookup/AddressLookup.js +10 -107
- package/dist/esm/components/AddressLookup/index.js +11 -104
- package/dist/esm/components/Alert/Alert.js +2 -2
- package/dist/esm/components/Alert/index.js +2 -2
- package/dist/esm/components/Checkbox/Checkbox.js +4 -117
- package/dist/esm/components/Checkbox/CheckboxGroup.js +5 -115
- package/dist/esm/components/Checkbox/index.js +8 -115
- package/dist/esm/components/Combobox/Combobox.js +7 -108
- package/dist/esm/components/Combobox/index.js +9 -108
- package/dist/esm/components/DateField/DateField.js +7 -114
- package/dist/esm/components/DateField/index.js +8 -114
- package/dist/esm/components/ErrorMessage/ErrorMessage.js +2 -147
- package/dist/esm/components/ErrorMessage/index.js +3 -147
- package/dist/esm/components/ExpandableText/ExpandableText.js +2 -109
- package/dist/esm/components/ExpandableText/index.js +3 -109
- package/dist/esm/components/MaskedField/MaskedField.js +6 -115
- package/dist/esm/components/MaskedField/MaskedField.js.map +1 -1
- package/dist/esm/components/MaskedField/index.js +7 -115
- package/dist/esm/components/NumberField/NumberField.js +7 -115
- package/dist/esm/components/NumberField/index.js +8 -115
- package/dist/esm/components/PasswordField/PasswordField.js +8 -115
- package/dist/esm/components/PasswordField/ShowHideButton.js +1 -149
- package/dist/esm/components/PasswordField/index.js +9 -115
- package/dist/esm/components/Radio/Radio.js +4 -145
- package/dist/esm/components/Radio/RadioGroup.js +4 -115
- package/dist/esm/components/Radio/index.js +8 -116
- package/dist/esm/components/Select/Select.js +4 -115
- package/dist/esm/components/Select/index.js +5 -115
- package/dist/esm/components/Slider/Slider.js +2 -2
- package/dist/esm/components/Slider/index.js +2 -2
- package/dist/esm/components/TextArea/TextArea.js +4 -113
- package/dist/esm/components/TextArea/index.js +5 -113
- package/dist/esm/components/TextField/TextField.js +5 -115
- package/dist/esm/components/TextField/index.js +6 -115
- package/dist/esm/components/TextOrHTML/TextOrHTML.js +1 -1
- package/dist/esm/components/TextOrHTML/index.js +1 -1
- package/dist/esm/components/index.js +83 -46
- package/dist/esm/index.js +83 -41
- package/dist/esm/meta.json +6905 -19124
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/ErrorMessage/ErrorMessage.tsx +1 -1
- package/src/components/ExpandableText/ExpandableText.tsx +3 -1
- package/src/components/PasswordField/ShowHideButton.tsx +1 -1
- package/src/components/TextOrHTML/TextOrHTML.test.tsx +18 -0
- package/src/components/TextOrHTML/TextOrHTML.tsx +2 -1
- package/dist/esm/chunk-HPUPB75I.js.map +0 -7
- package/dist/esm/chunk-M7LTJZQU.js +0 -1606
- package/dist/esm/chunk-M7LTJZQU.js.map +0 -7
- /package/dist/esm/{chunk-NRU3WNV7.js.map → chunk-JNAQ76CR.js.map} +0 -0
- /package/dist/esm/{chunk-CNOF66SV.js.map → chunk-NGNVAFBJ.js.map} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { error } from "@simplybusiness/icons";
|
|
2
2
|
import classNames from "classnames/dedupe";
|
|
3
|
-
import { TextOrHTML } from "../..";
|
|
4
3
|
import { Icon } from "../Icon";
|
|
4
|
+
import { TextOrHTML } from "../TextOrHTML";
|
|
5
5
|
import "./ErrorMessage.css";
|
|
6
6
|
|
|
7
7
|
export interface ErrorMessageProps {
|
|
@@ -4,8 +4,10 @@ import classNames from "classnames/dedupe";
|
|
|
4
4
|
import type React from "react";
|
|
5
5
|
import type { RefAttributes } from "react";
|
|
6
6
|
import { useEffect, useId, useRef, useState } from "react";
|
|
7
|
-
import {
|
|
7
|
+
import { useBreakpoint } from "../../hooks";
|
|
8
8
|
import type { DOMProps } from "../../types";
|
|
9
|
+
import { Accordion } from "../Accordion";
|
|
10
|
+
import { TextOrHTML } from "../TextOrHTML";
|
|
9
11
|
import type { AccordionProps } from "../Accordion/Accordion";
|
|
10
12
|
import type { TextProps } from "../Text/Text";
|
|
11
13
|
import "./ExpandableText.css";
|
|
@@ -183,6 +183,24 @@ describe("TextOrHTML", () => {
|
|
|
183
183
|
expect(element).toHaveTextContent("This is bold text");
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
+
it("decodes HTML entities in text that contains no HTML tags with autoDetect", () => {
|
|
187
|
+
const entities = [
|
|
188
|
+
{ text: "before & after", expected: "before & after" },
|
|
189
|
+
{ text: "before < after", expected: "before < after" },
|
|
190
|
+
{ text: "before > after", expected: "before > after" },
|
|
191
|
+
{ text: "before ' after", expected: "before ' after" },
|
|
192
|
+
{ text: "before " after", expected: 'before " after' },
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
for (const { text, expected } of entities) {
|
|
196
|
+
const { unmount } = render(
|
|
197
|
+
<TextOrHTML text={text} autoDetect data-testid="test" />,
|
|
198
|
+
);
|
|
199
|
+
expect(screen.getByTestId("test")).toHaveTextContent(expected);
|
|
200
|
+
unmount();
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
186
204
|
it("detects HTML with leading whitespace", () => {
|
|
187
205
|
const { container } = render(
|
|
188
206
|
<TextOrHTML text=" <div>Indented HTML</div>" autoDetect />,
|
|
@@ -7,7 +7,8 @@ import { Text, getElementType } from "../Text/Text";
|
|
|
7
7
|
export type HTMLElementType = "span" | "div";
|
|
8
8
|
|
|
9
9
|
const isBlockHTML = (text: string) => /^\s*<[a-z]/i.test(text);
|
|
10
|
-
const containsHTML = (text: string) =>
|
|
10
|
+
const containsHTML = (text: string) =>
|
|
11
|
+
/<[a-z/]/i.test(text) || /&(?:#\d+|#x[\da-f]+|[a-z]\w*);/i.test(text); // tag or entity
|
|
11
12
|
|
|
12
13
|
const buildTextClasses = (
|
|
13
14
|
textProps: Omit<TextProps, "children">,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/TextOrHTML/TextOrHTML.tsx"],
|
|
4
|
-
"sourcesContent": ["import classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport { useMemo } from \"react\";\nimport type { TextElementType, TextProps } from \"../Text/Text\";\nimport { Text, getElementType } from \"../Text/Text\";\n\nexport type HTMLElementType = \"span\" | \"div\";\n\nconst isBlockHTML = (text: string) => /^\\s*<[a-z]/i.test(text);\nconst containsHTML = (text: string) => /<[a-z/]/i.test(text);\n\nconst buildTextClasses = (\n textProps: Omit<TextProps, \"children\">,\n htmlClassName?: string,\n) => {\n const { variant, elementType, spacing, className } = textProps;\n const variantType = variant || getElementType(variant, elementType);\n return classNames(\n \"mobius\",\n \"mobius-text\",\n { [`--is-${variantType}`]: variantType },\n { [`--has-line-height-${spacing}`]: spacing },\n className,\n htmlClassName,\n );\n};\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 /** If true, auto-detects whether text is HTML or plain text to determine wrapping and element type */\n autoDetect?: boolean;\n}\n\nconst TextOrHTML = ({\n ref,\n text,\n htmlClassName,\n htmlElementType,\n textWrapper = false,\n autoDetect = false,\n ...textProps\n}: TextOrHTMLProps) => {\n const textIsBlockHTML = autoDetect && isBlockHTML(text);\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 // Non-block text with autoDetect: render directly on a Text-equivalent element,\n // avoiding unnecessary <span> nesting inside <p>.\n if (autoDetect && !textIsBlockHTML) {\n const { variant, spacing, elementType, className, ...domProps } = textProps;\n const Element = getElementType(variant, elementType);\n const classes = buildTextClasses(textProps, htmlClassName);\n\n return containsHTML(text) ? (\n <Element\n ref={ref}\n {...domProps}\n className={classes}\n dangerouslySetInnerHTML={dangerousHTML}\n />\n ) : (\n <Element ref={ref} {...domProps} className={classes}>\n {text}\n </Element>\n );\n }\n\n const DangerousComponent =\n htmlElementType ?? (textIsBlockHTML ? \"div\" : \"span\");\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": ";;;;;;AAAA,OAAO,gBAAgB;AAEvB,SAAS,eAAe;AA8DlB;AAxDN,IAAM,cAAc,CAAC,SAAiB,cAAc,KAAK,IAAI;AAC7D,IAAM,eAAe,CAAC,SAAiB,WAAW,KAAK,IAAI;AAE3D,IAAM,mBAAmB,CACvB,WACA,kBACG;AACH,QAAM,EAAE,SAAS,aAAa,SAAS,UAAU,IAAI;AACrD,QAAM,cAAc,WAAW,eAAe,SAAS,WAAW;AAClE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,EAAE,CAAC,QAAQ,WAAW,EAAE,GAAG,YAAY;AAAA,IACvC,EAAE,CAAC,qBAAqB,OAAO,EAAE,GAAG,QAAQ;AAAA,IAC5C;AAAA,IACA;AAAA,EACF;AACF;AAgBA,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA,EACb,GAAG;AACL,MAAuB;AACrB,QAAM,kBAAkB,cAAc,YAAY,IAAI;AAItD,QAAM,gBAAgB,QAAQ,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAI9D,MAAI,cAAc,CAAC,iBAAiB;AAClC,UAAM,EAAE,SAAS,SAAS,aAAa,WAAW,GAAG,SAAS,IAAI;AAClE,UAAM,UAAU,eAAe,SAAS,WAAW;AACnD,UAAM,UAAU,iBAAiB,WAAW,aAAa;AAEzD,WAAO,aAAa,IAAI,IACtB;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ,WAAW;AAAA,QACX,yBAAyB;AAAA;AAAA,IAC3B,IAEA,oBAAC,WAAQ,KAAW,GAAG,UAAU,WAAW,SACzC,gBACH;AAAA,EAEJ;AAEA,QAAM,qBACJ,oBAAoB,kBAAkB,QAAQ;AAChD,QAAM,mBACJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,yBAAyB;AAAA;AAAA,EAC3B;AAGF,MAAI,aAAa;AACf,WACE,oBAAC,QAAK,KAAW,GAAG,WACjB,4BACH;AAAA,EAEJ;AAEA,SAAO;AACT;AAEA,WAAW,cAAc;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|