@sproutsocial/seeds-react-numeral 1.0.0 → 1.0.2
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/.turbo/turbo-build.log +19 -19
- package/CHANGELOG.md +22 -0
- package/dist/esm/index.js +5 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +8 -11
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/tsconfig.json +7 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
yarn run v1.22.22
|
|
2
2
|
$ tsup --dts
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Done in
|
|
3
|
+
[34mCLI[39m Building entry: src/index.ts
|
|
4
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
5
|
+
[34mCLI[39m tsup v8.5.0
|
|
6
|
+
[34mCLI[39m Using tsup config: /home/runner/work/seeds/seeds/seeds-react/seeds-react-numeral/tsup.config.ts
|
|
7
|
+
[34mCLI[39m Target: es2022
|
|
8
|
+
[34mCLI[39m Cleaning output folder
|
|
9
|
+
[34mCJS[39m Build start
|
|
10
|
+
[34mESM[39m Build start
|
|
11
|
+
[32mCJS[39m [1mdist/index.js [22m[32m6.55 KB[39m
|
|
12
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m9.75 KB[39m
|
|
13
|
+
[32mCJS[39m ⚡️ Build success in 98ms
|
|
14
|
+
[32mESM[39m [1mdist/esm/index.js [22m[32m4.44 KB[39m
|
|
15
|
+
[32mESM[39m [1mdist/esm/index.js.map [22m[32m9.64 KB[39m
|
|
16
|
+
[32mESM[39m ⚡️ Build success in 99ms
|
|
17
|
+
[34mDTS[39m Build start
|
|
18
|
+
[32mDTS[39m ⚡️ Build success in 12578ms
|
|
19
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m1.29 KB[39m
|
|
20
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m1.29 KB[39m
|
|
21
|
+
Done in 15.73s.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @sproutsocial/seeds-react-numeral
|
|
2
2
|
|
|
3
|
+
## 1.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [22e1111]
|
|
8
|
+
- @sproutsocial/seeds-react-text@1.3.2
|
|
9
|
+
- @sproutsocial/seeds-react-theme@3.0.1
|
|
10
|
+
- @sproutsocial/seeds-react-tooltip@1.0.2
|
|
11
|
+
- @sproutsocial/seeds-react-visually-hidden@1.0.3
|
|
12
|
+
|
|
13
|
+
## 1.0.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 9fd8bac: Update dependencies to use semantic package version instead of wildcards
|
|
18
|
+
- Updated dependencies [9fd8bac]
|
|
19
|
+
- @sproutsocial/seeds-react-visually-hidden@1.0.2
|
|
20
|
+
- @sproutsocial/seeds-react-system-props@3.0.2
|
|
21
|
+
- @sproutsocial/seeds-react-tooltip@1.0.1
|
|
22
|
+
- @sproutsocial/seeds-react-theme@2.2.1
|
|
23
|
+
- @sproutsocial/seeds-react-text@1.3.1
|
|
24
|
+
|
|
3
25
|
## 1.0.0
|
|
4
26
|
|
|
5
27
|
### Major Changes
|
package/dist/esm/index.js
CHANGED
|
@@ -66,15 +66,12 @@ var getNumberFormatters = memoizer(_getNumberFormatters);
|
|
|
66
66
|
var getThreshold = (abbreviate) => {
|
|
67
67
|
if (typeof abbreviate === "number")
|
|
68
68
|
return Math.max(1e3, Math.abs(abbreviate));
|
|
69
|
-
if (abbreviate)
|
|
70
|
-
return DEFAULT_THRESHOLD;
|
|
69
|
+
if (abbreviate) return DEFAULT_THRESHOLD;
|
|
71
70
|
return Infinity;
|
|
72
71
|
};
|
|
73
72
|
var getMinMaxPrecision = (precision, format) => {
|
|
74
|
-
if (typeof precision === "number")
|
|
75
|
-
|
|
76
|
-
if (precision === "none")
|
|
77
|
-
return [0, MAX_PRECISION];
|
|
73
|
+
if (typeof precision === "number") return [precision, precision];
|
|
74
|
+
if (precision === "none") return [0, MAX_PRECISION];
|
|
78
75
|
return DefaultPrecisions[format];
|
|
79
76
|
};
|
|
80
77
|
var isValidNumber = (value) => {
|
|
@@ -145,10 +142,10 @@ var Numeral = (props) => {
|
|
|
145
142
|
var Numeral_default = Numeral;
|
|
146
143
|
|
|
147
144
|
// src/index.ts
|
|
148
|
-
var
|
|
145
|
+
var index_default = Numeral_default;
|
|
149
146
|
export {
|
|
150
147
|
Numeral_default as Numeral,
|
|
151
|
-
|
|
148
|
+
index_default as default,
|
|
152
149
|
formatNumeral
|
|
153
150
|
};
|
|
154
151
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Numeral.tsx","../../src/constants.ts","../../src/styles.ts","../../src/index.ts"],"sourcesContent":["import * as React from \"react\";\n// @ts-expect-error lru-memoize is not typed\nimport memoize from \"lru-memoize\";\nimport { EM_DASH } from \"./constants\";\nimport Tooltip from \"@sproutsocial/seeds-react-tooltip\";\nimport type { TypeTextProps } from \"@sproutsocial/seeds-react-text\";\nimport { VisuallyHidden } from \"@sproutsocial/seeds-react-visually-hidden\";\n\nimport {\n DEFAULT_THRESHOLD,\n MEMO_CACHE_SIZE,\n COMPARE_OBJECTS,\n MAX_PRECISION,\n ABBREV_PRECISION,\n DefaultPrecisions,\n} from \"./constants\";\nimport { AbbrContainer, Container } from \"./styles\";\nimport type { EnumNumeralFormat, TypeNumeralProps } from \"./NumeralTypes\";\n\ninterface TypeFormatOptions {\n locale: string;\n format: EnumNumeralFormat;\n currency: string;\n min: number;\n max: number;\n}\n\ninterface TypeFormatters {\n standard: Intl.NumberFormat;\n abbreviated: Intl.NumberFormat;\n}\n\ninterface TypeArgs {\n value: number;\n canAbbreviate: boolean;\n invalidNumberLabel?: string;\n ariaLabel?: string;\n options: TypeFormatOptions;\n qa: object | null | undefined;\n rest: Omit<TypeTextProps, \"children\">;\n}\n\nconst _getNumberFormatters = (options: TypeFormatOptions): TypeFormatters => {\n const { locale, format, currency, min, max } = options;\n const compactPrecision = min === max ? min : ABBREV_PRECISION;\n\n const _currency = format === \"currency\" ? currency : undefined;\n\n const standard: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n currency: _currency,\n };\n const compact: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: compactPrecision,\n maximumFractionDigits: compactPrecision,\n currency: _currency,\n notation: \"compact\",\n };\n // Safari 14.1 is currently throwing errors when trying to use the compact\n // options of NumberFormat\n // https://community.atlassian.com/t5/Trello-questions/Trello-stuck-at-loading-after-Safari-14-1-update-on-macOS-Mojave/qaq-p/1675577#M45687\n let abbreviated;\n\n try {\n abbreviated = new Intl.NumberFormat(locale, compact);\n } catch (error) {\n abbreviated = new Intl.NumberFormat(locale, standard);\n }\n\n return {\n standard: new Intl.NumberFormat(locale, standard),\n abbreviated,\n };\n};\n\n// Memoize to reduce the energy of creating new instances of Intl.NumberFormat\nconst memoizer = memoize(MEMO_CACHE_SIZE, COMPARE_OBJECTS);\nconst getNumberFormatters = memoizer(_getNumberFormatters);\n\nconst getThreshold = (abbreviate: boolean | number): number => {\n if (typeof abbreviate === \"number\")\n return Math.max(1000, Math.abs(abbreviate));\n if (abbreviate) return DEFAULT_THRESHOLD;\n return Infinity;\n};\n\nconst getMinMaxPrecision = (\n precision: TypeNumeralProps[\"precision\"],\n format: EnumNumeralFormat\n): [number, number] => {\n if (typeof precision === \"number\") return [precision, precision];\n if (precision === \"none\") return [0, MAX_PRECISION];\n return DefaultPrecisions[format];\n};\n\nconst isValidNumber = (value: unknown): boolean => {\n return typeof value === \"number\" && isFinite(value);\n};\n\nconst normalizeArgs = (props: TypeNumeralProps): TypeArgs => {\n const {\n number,\n locale = \"us-EN\",\n format = props.currency ? \"currency\" : \"decimal\",\n currency = \"USD\",\n abbreviate = true,\n invalidNumberLabel,\n precision,\n qa,\n ...rest\n } = props;\n const threshold = getThreshold(abbreviate);\n const [min, max] = getMinMaxPrecision(precision, format);\n\n const _number = number || 0;\n\n const value = _number * (format === \"percent\" ? 0.01 : 1);\n const canAbbreviate = Math.abs(_number) >= threshold;\n const options = {\n locale,\n format,\n currency,\n min,\n max,\n };\n\n return {\n value,\n canAbbreviate,\n invalidNumberLabel,\n options,\n qa,\n rest,\n };\n};\n\nconst getNumeral = ({\n returnType,\n props,\n}: {\n returnType: \"string\" | \"component\";\n props: TypeNumeralProps;\n}): string | React.ReactNode => {\n const isReturnTypeString = returnType === \"string\";\n const { value, canAbbreviate, invalidNumberLabel, options, qa, rest } =\n normalizeArgs(props);\n\n if (!isValidNumber(props.number)) {\n return isReturnTypeString ? (\n EM_DASH\n ) : (\n <>\n {invalidNumberLabel && (\n // Give screen readers something useful to read off + hide the em dash\n <VisuallyHidden>{invalidNumberLabel}</VisuallyHidden>\n )}\n <Container aria-hidden {...qa}>\n {EM_DASH}\n </Container>\n </>\n );\n }\n\n const formatters = getNumberFormatters(options);\n const fullText = formatters.standard.format(value);\n\n if (canAbbreviate) {\n const abbreviatedText = formatters.abbreviated.format(value);\n\n // The following are used to debug the skipped tests which are misbehaving!!!\n // console.log({ fullText, abbreviatedText });\n // console.log({ abbreviated: formatters.abbreviated.resolvedOptions() });\n // The following check is necessary because each locale may have differing thresholds\n // for which abbreviation begins.\n if (abbreviatedText !== fullText) {\n return isReturnTypeString ? (\n abbreviatedText\n ) : (\n <Tooltip content={fullText}>\n <AbbrContainer {...qa} {...rest}>\n {abbreviatedText}\n </AbbrContainer>\n </Tooltip>\n );\n }\n }\n\n return isReturnTypeString ? (\n fullText\n ) : (\n <Container {...qa} {...rest}>\n {fullText}\n </Container>\n );\n};\n\nexport const formatNumeral = (props: TypeNumeralProps): string => {\n return getNumeral({ returnType: \"string\", props }) as string;\n};\n\nconst Numeral = (props: TypeNumeralProps) => {\n return getNumeral({ returnType: \"component\", props });\n};\n\nexport default Numeral;\n","import type { EnumNumeralFormat } from \"./NumeralTypes\";\n\nexport const DEFAULT_THRESHOLD = 10000;\nexport const MEMO_CACHE_SIZE = 10;\nexport const COMPARE_OBJECTS = true;\nexport const MAX_PRECISION = 20;\nexport const ABBREV_PRECISION = 2;\nexport const DefaultPrecisions: {\n [key in EnumNumeralFormat]: [number, number];\n} = {\n decimal: [0, 2],\n percent: [0, 1],\n currency: [2, 2],\n};\n\nexport const EM_DASH = \"—\"; // shift + option + hyphen on a mac keyboard\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\n\nexport const Container = styled(Text)`\n font-variant-numeric: tabular-nums;\n`;\n\nexport const AbbrContainer = styled(Text)`\n font-variant-numeric: tabular-nums;\n border-bottom: 1px dotted\n ${(props) => props.theme.colors.container.border.base};\n`;\n","import Numeral, { formatNumeral } from \"./Numeral\";\n\nexport default Numeral;\nexport { Numeral };\nexport { formatNumeral };\nexport * from \"./NumeralTypes\";\n"],"mappings":";AAAA,OAAuB;AAEvB,OAAO,aAAa;;;ACAb,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,oBAET;AAAA,EACF,SAAS,CAAC,GAAG,CAAC;AAAA,EACd,SAAS,CAAC,GAAG,CAAC;AAAA,EACd,UAAU,CAAC,GAAG,CAAC;AACjB;AAEO,IAAM,UAAU;;;ADXvB,OAAO,aAAa;AAEpB,SAAS,sBAAsB;;;AEN/B,OAAO,YAAY;AACnB,OAAO,UAAU;AAEV,IAAM,YAAY,OAAO,IAAI;AAAA;AAAA;AAI7B,IAAM,gBAAgB,OAAO,IAAI;AAAA;AAAA;AAAA,MAGlC,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU,OAAO,IAAI;AAAA;;;AFgJnD,mBAGI,KAHJ;AAhHN,IAAM,uBAAuB,CAAC,YAA+C;AAC3E,QAAM,EAAE,QAAQ,QAAQ,UAAU,KAAK,IAAI,IAAI;AAC/C,QAAM,mBAAmB,QAAQ,MAAM,MAAM;AAE7C,QAAM,YAAY,WAAW,aAAa,WAAW;AAErD,QAAM,WAAqC;AAAA,IACzC,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,UAAU;AAAA,EACZ;AACA,QAAM,UAAoC;AAAA,IACxC,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAIA,MAAI;AAEJ,MAAI;AACF,kBAAc,IAAI,KAAK,aAAa,QAAQ,OAAO;AAAA,EACrD,SAAS,OAAO;AACd,kBAAc,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,UAAU,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAAA,IAChD;AAAA,EACF;AACF;AAGA,IAAM,WAAW,QAAQ,iBAAiB,eAAe;AACzD,IAAM,sBAAsB,SAAS,oBAAoB;AAEzD,IAAM,eAAe,CAAC,eAAyC;AAC7D,MAAI,OAAO,eAAe;AACxB,WAAO,KAAK,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;AAC5C,MAAI
|
|
1
|
+
{"version":3,"sources":["../../src/Numeral.tsx","../../src/constants.ts","../../src/styles.ts","../../src/index.ts"],"sourcesContent":["import * as React from \"react\";\n// @ts-expect-error lru-memoize is not typed\nimport memoize from \"lru-memoize\";\nimport { EM_DASH } from \"./constants\";\nimport Tooltip from \"@sproutsocial/seeds-react-tooltip\";\nimport type { TypeTextProps } from \"@sproutsocial/seeds-react-text\";\nimport { VisuallyHidden } from \"@sproutsocial/seeds-react-visually-hidden\";\n\nimport {\n DEFAULT_THRESHOLD,\n MEMO_CACHE_SIZE,\n COMPARE_OBJECTS,\n MAX_PRECISION,\n ABBREV_PRECISION,\n DefaultPrecisions,\n} from \"./constants\";\nimport { AbbrContainer, Container } from \"./styles\";\nimport type { EnumNumeralFormat, TypeNumeralProps } from \"./NumeralTypes\";\n\ninterface TypeFormatOptions {\n locale: string;\n format: EnumNumeralFormat;\n currency: string;\n min: number;\n max: number;\n}\n\ninterface TypeFormatters {\n standard: Intl.NumberFormat;\n abbreviated: Intl.NumberFormat;\n}\n\ninterface TypeArgs {\n value: number;\n canAbbreviate: boolean;\n invalidNumberLabel?: string;\n ariaLabel?: string;\n options: TypeFormatOptions;\n qa: object | null | undefined;\n rest: Omit<TypeTextProps, \"children\">;\n}\n\nconst _getNumberFormatters = (options: TypeFormatOptions): TypeFormatters => {\n const { locale, format, currency, min, max } = options;\n const compactPrecision = min === max ? min : ABBREV_PRECISION;\n\n const _currency = format === \"currency\" ? currency : undefined;\n\n const standard: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n currency: _currency,\n };\n const compact: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: compactPrecision,\n maximumFractionDigits: compactPrecision,\n currency: _currency,\n notation: \"compact\",\n };\n // Safari 14.1 is currently throwing errors when trying to use the compact\n // options of NumberFormat\n // https://community.atlassian.com/t5/Trello-questions/Trello-stuck-at-loading-after-Safari-14-1-update-on-macOS-Mojave/qaq-p/1675577#M45687\n let abbreviated;\n\n try {\n abbreviated = new Intl.NumberFormat(locale, compact);\n } catch (error) {\n abbreviated = new Intl.NumberFormat(locale, standard);\n }\n\n return {\n standard: new Intl.NumberFormat(locale, standard),\n abbreviated,\n };\n};\n\n// Memoize to reduce the energy of creating new instances of Intl.NumberFormat\nconst memoizer = memoize(MEMO_CACHE_SIZE, COMPARE_OBJECTS);\nconst getNumberFormatters = memoizer(_getNumberFormatters);\n\nconst getThreshold = (abbreviate: boolean | number): number => {\n if (typeof abbreviate === \"number\")\n return Math.max(1000, Math.abs(abbreviate));\n if (abbreviate) return DEFAULT_THRESHOLD;\n return Infinity;\n};\n\nconst getMinMaxPrecision = (\n precision: TypeNumeralProps[\"precision\"],\n format: EnumNumeralFormat\n): [number, number] => {\n if (typeof precision === \"number\") return [precision, precision];\n if (precision === \"none\") return [0, MAX_PRECISION];\n return DefaultPrecisions[format];\n};\n\nconst isValidNumber = (value: unknown): boolean => {\n return typeof value === \"number\" && isFinite(value);\n};\n\nconst normalizeArgs = (props: TypeNumeralProps): TypeArgs => {\n const {\n number,\n locale = \"us-EN\",\n format = props.currency ? \"currency\" : \"decimal\",\n currency = \"USD\",\n abbreviate = true,\n invalidNumberLabel,\n precision,\n qa,\n ...rest\n } = props;\n const threshold = getThreshold(abbreviate);\n const [min, max] = getMinMaxPrecision(precision, format);\n\n const _number = number || 0;\n\n const value = _number * (format === \"percent\" ? 0.01 : 1);\n const canAbbreviate = Math.abs(_number) >= threshold;\n const options = {\n locale,\n format,\n currency,\n min,\n max,\n };\n\n return {\n value,\n canAbbreviate,\n invalidNumberLabel,\n options,\n qa,\n rest,\n };\n};\n\nconst getNumeral = ({\n returnType,\n props,\n}: {\n returnType: \"string\" | \"component\";\n props: TypeNumeralProps;\n}): string | React.ReactNode => {\n const isReturnTypeString = returnType === \"string\";\n const { value, canAbbreviate, invalidNumberLabel, options, qa, rest } =\n normalizeArgs(props);\n\n if (!isValidNumber(props.number)) {\n return isReturnTypeString ? (\n EM_DASH\n ) : (\n <>\n {invalidNumberLabel && (\n // Give screen readers something useful to read off + hide the em dash\n <VisuallyHidden>{invalidNumberLabel}</VisuallyHidden>\n )}\n <Container aria-hidden {...qa}>\n {EM_DASH}\n </Container>\n </>\n );\n }\n\n const formatters = getNumberFormatters(options);\n const fullText = formatters.standard.format(value);\n\n if (canAbbreviate) {\n const abbreviatedText = formatters.abbreviated.format(value);\n\n // The following are used to debug the skipped tests which are misbehaving!!!\n // console.log({ fullText, abbreviatedText });\n // console.log({ abbreviated: formatters.abbreviated.resolvedOptions() });\n // The following check is necessary because each locale may have differing thresholds\n // for which abbreviation begins.\n if (abbreviatedText !== fullText) {\n return isReturnTypeString ? (\n abbreviatedText\n ) : (\n <Tooltip content={fullText}>\n <AbbrContainer {...qa} {...rest}>\n {abbreviatedText}\n </AbbrContainer>\n </Tooltip>\n );\n }\n }\n\n return isReturnTypeString ? (\n fullText\n ) : (\n <Container {...qa} {...rest}>\n {fullText}\n </Container>\n );\n};\n\nexport const formatNumeral = (props: TypeNumeralProps): string => {\n return getNumeral({ returnType: \"string\", props }) as string;\n};\n\nconst Numeral = (props: TypeNumeralProps) => {\n return getNumeral({ returnType: \"component\", props });\n};\n\nexport default Numeral;\n","import type { EnumNumeralFormat } from \"./NumeralTypes\";\n\nexport const DEFAULT_THRESHOLD = 10000;\nexport const MEMO_CACHE_SIZE = 10;\nexport const COMPARE_OBJECTS = true;\nexport const MAX_PRECISION = 20;\nexport const ABBREV_PRECISION = 2;\nexport const DefaultPrecisions: {\n [key in EnumNumeralFormat]: [number, number];\n} = {\n decimal: [0, 2],\n percent: [0, 1],\n currency: [2, 2],\n};\n\nexport const EM_DASH = \"—\"; // shift + option + hyphen on a mac keyboard\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\n\nexport const Container = styled(Text)`\n font-variant-numeric: tabular-nums;\n`;\n\nexport const AbbrContainer = styled(Text)`\n font-variant-numeric: tabular-nums;\n border-bottom: 1px dotted\n ${(props) => props.theme.colors.container.border.base};\n`;\n","import Numeral, { formatNumeral } from \"./Numeral\";\n\nexport default Numeral;\nexport { Numeral };\nexport { formatNumeral };\nexport * from \"./NumeralTypes\";\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -28,13 +28,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
30
|
// src/index.ts
|
|
31
|
-
var
|
|
32
|
-
__export(
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
33
|
Numeral: () => Numeral_default,
|
|
34
|
-
default: () =>
|
|
34
|
+
default: () => index_default,
|
|
35
35
|
formatNumeral: () => formatNumeral
|
|
36
36
|
});
|
|
37
|
-
module.exports = __toCommonJS(
|
|
37
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
38
|
|
|
39
39
|
// src/Numeral.tsx
|
|
40
40
|
var React = require("react");
|
|
@@ -104,15 +104,12 @@ var getNumberFormatters = memoizer(_getNumberFormatters);
|
|
|
104
104
|
var getThreshold = (abbreviate) => {
|
|
105
105
|
if (typeof abbreviate === "number")
|
|
106
106
|
return Math.max(1e3, Math.abs(abbreviate));
|
|
107
|
-
if (abbreviate)
|
|
108
|
-
return DEFAULT_THRESHOLD;
|
|
107
|
+
if (abbreviate) return DEFAULT_THRESHOLD;
|
|
109
108
|
return Infinity;
|
|
110
109
|
};
|
|
111
110
|
var getMinMaxPrecision = (precision, format) => {
|
|
112
|
-
if (typeof precision === "number")
|
|
113
|
-
|
|
114
|
-
if (precision === "none")
|
|
115
|
-
return [0, MAX_PRECISION];
|
|
111
|
+
if (typeof precision === "number") return [precision, precision];
|
|
112
|
+
if (precision === "none") return [0, MAX_PRECISION];
|
|
116
113
|
return DefaultPrecisions[format];
|
|
117
114
|
};
|
|
118
115
|
var isValidNumber = (value) => {
|
|
@@ -183,7 +180,7 @@ var Numeral = (props) => {
|
|
|
183
180
|
var Numeral_default = Numeral;
|
|
184
181
|
|
|
185
182
|
// src/index.ts
|
|
186
|
-
var
|
|
183
|
+
var index_default = Numeral_default;
|
|
187
184
|
// Annotate the CommonJS export names for ESM import in node:
|
|
188
185
|
0 && (module.exports = {
|
|
189
186
|
Numeral,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Numeral.tsx","../src/constants.ts","../src/styles.ts"],"sourcesContent":["import Numeral, { formatNumeral } from \"./Numeral\";\n\nexport default Numeral;\nexport { Numeral };\nexport { formatNumeral };\nexport * from \"./NumeralTypes\";\n","import * as React from \"react\";\n// @ts-expect-error lru-memoize is not typed\nimport memoize from \"lru-memoize\";\nimport { EM_DASH } from \"./constants\";\nimport Tooltip from \"@sproutsocial/seeds-react-tooltip\";\nimport type { TypeTextProps } from \"@sproutsocial/seeds-react-text\";\nimport { VisuallyHidden } from \"@sproutsocial/seeds-react-visually-hidden\";\n\nimport {\n DEFAULT_THRESHOLD,\n MEMO_CACHE_SIZE,\n COMPARE_OBJECTS,\n MAX_PRECISION,\n ABBREV_PRECISION,\n DefaultPrecisions,\n} from \"./constants\";\nimport { AbbrContainer, Container } from \"./styles\";\nimport type { EnumNumeralFormat, TypeNumeralProps } from \"./NumeralTypes\";\n\ninterface TypeFormatOptions {\n locale: string;\n format: EnumNumeralFormat;\n currency: string;\n min: number;\n max: number;\n}\n\ninterface TypeFormatters {\n standard: Intl.NumberFormat;\n abbreviated: Intl.NumberFormat;\n}\n\ninterface TypeArgs {\n value: number;\n canAbbreviate: boolean;\n invalidNumberLabel?: string;\n ariaLabel?: string;\n options: TypeFormatOptions;\n qa: object | null | undefined;\n rest: Omit<TypeTextProps, \"children\">;\n}\n\nconst _getNumberFormatters = (options: TypeFormatOptions): TypeFormatters => {\n const { locale, format, currency, min, max } = options;\n const compactPrecision = min === max ? min : ABBREV_PRECISION;\n\n const _currency = format === \"currency\" ? currency : undefined;\n\n const standard: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n currency: _currency,\n };\n const compact: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: compactPrecision,\n maximumFractionDigits: compactPrecision,\n currency: _currency,\n notation: \"compact\",\n };\n // Safari 14.1 is currently throwing errors when trying to use the compact\n // options of NumberFormat\n // https://community.atlassian.com/t5/Trello-questions/Trello-stuck-at-loading-after-Safari-14-1-update-on-macOS-Mojave/qaq-p/1675577#M45687\n let abbreviated;\n\n try {\n abbreviated = new Intl.NumberFormat(locale, compact);\n } catch (error) {\n abbreviated = new Intl.NumberFormat(locale, standard);\n }\n\n return {\n standard: new Intl.NumberFormat(locale, standard),\n abbreviated,\n };\n};\n\n// Memoize to reduce the energy of creating new instances of Intl.NumberFormat\nconst memoizer = memoize(MEMO_CACHE_SIZE, COMPARE_OBJECTS);\nconst getNumberFormatters = memoizer(_getNumberFormatters);\n\nconst getThreshold = (abbreviate: boolean | number): number => {\n if (typeof abbreviate === \"number\")\n return Math.max(1000, Math.abs(abbreviate));\n if (abbreviate) return DEFAULT_THRESHOLD;\n return Infinity;\n};\n\nconst getMinMaxPrecision = (\n precision: TypeNumeralProps[\"precision\"],\n format: EnumNumeralFormat\n): [number, number] => {\n if (typeof precision === \"number\") return [precision, precision];\n if (precision === \"none\") return [0, MAX_PRECISION];\n return DefaultPrecisions[format];\n};\n\nconst isValidNumber = (value: unknown): boolean => {\n return typeof value === \"number\" && isFinite(value);\n};\n\nconst normalizeArgs = (props: TypeNumeralProps): TypeArgs => {\n const {\n number,\n locale = \"us-EN\",\n format = props.currency ? \"currency\" : \"decimal\",\n currency = \"USD\",\n abbreviate = true,\n invalidNumberLabel,\n precision,\n qa,\n ...rest\n } = props;\n const threshold = getThreshold(abbreviate);\n const [min, max] = getMinMaxPrecision(precision, format);\n\n const _number = number || 0;\n\n const value = _number * (format === \"percent\" ? 0.01 : 1);\n const canAbbreviate = Math.abs(_number) >= threshold;\n const options = {\n locale,\n format,\n currency,\n min,\n max,\n };\n\n return {\n value,\n canAbbreviate,\n invalidNumberLabel,\n options,\n qa,\n rest,\n };\n};\n\nconst getNumeral = ({\n returnType,\n props,\n}: {\n returnType: \"string\" | \"component\";\n props: TypeNumeralProps;\n}): string | React.ReactNode => {\n const isReturnTypeString = returnType === \"string\";\n const { value, canAbbreviate, invalidNumberLabel, options, qa, rest } =\n normalizeArgs(props);\n\n if (!isValidNumber(props.number)) {\n return isReturnTypeString ? (\n EM_DASH\n ) : (\n <>\n {invalidNumberLabel && (\n // Give screen readers something useful to read off + hide the em dash\n <VisuallyHidden>{invalidNumberLabel}</VisuallyHidden>\n )}\n <Container aria-hidden {...qa}>\n {EM_DASH}\n </Container>\n </>\n );\n }\n\n const formatters = getNumberFormatters(options);\n const fullText = formatters.standard.format(value);\n\n if (canAbbreviate) {\n const abbreviatedText = formatters.abbreviated.format(value);\n\n // The following are used to debug the skipped tests which are misbehaving!!!\n // console.log({ fullText, abbreviatedText });\n // console.log({ abbreviated: formatters.abbreviated.resolvedOptions() });\n // The following check is necessary because each locale may have differing thresholds\n // for which abbreviation begins.\n if (abbreviatedText !== fullText) {\n return isReturnTypeString ? (\n abbreviatedText\n ) : (\n <Tooltip content={fullText}>\n <AbbrContainer {...qa} {...rest}>\n {abbreviatedText}\n </AbbrContainer>\n </Tooltip>\n );\n }\n }\n\n return isReturnTypeString ? (\n fullText\n ) : (\n <Container {...qa} {...rest}>\n {fullText}\n </Container>\n );\n};\n\nexport const formatNumeral = (props: TypeNumeralProps): string => {\n return getNumeral({ returnType: \"string\", props }) as string;\n};\n\nconst Numeral = (props: TypeNumeralProps) => {\n return getNumeral({ returnType: \"component\", props });\n};\n\nexport default Numeral;\n","import type { EnumNumeralFormat } from \"./NumeralTypes\";\n\nexport const DEFAULT_THRESHOLD = 10000;\nexport const MEMO_CACHE_SIZE = 10;\nexport const COMPARE_OBJECTS = true;\nexport const MAX_PRECISION = 20;\nexport const ABBREV_PRECISION = 2;\nexport const DefaultPrecisions: {\n [key in EnumNumeralFormat]: [number, number];\n} = {\n decimal: [0, 2],\n percent: [0, 1],\n currency: [2, 2],\n};\n\nexport const EM_DASH = \"—\"; // shift + option + hyphen on a mac keyboard\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\n\nexport const Container = styled(Text)`\n font-variant-numeric: tabular-nums;\n`;\n\nexport const AbbrContainer = styled(Text)`\n font-variant-numeric: tabular-nums;\n border-bottom: 1px dotted\n ${(props) => props.theme.colors.container.border.base};\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AAEvB,yBAAoB;;;ACAb,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,oBAET;AAAA,EACF,SAAS,CAAC,GAAG,CAAC;AAAA,EACd,SAAS,CAAC,GAAG,CAAC;AAAA,EACd,UAAU,CAAC,GAAG,CAAC;AACjB;AAEO,IAAM,UAAU;;;ADXvB,iCAAoB;AAEpB,yCAA+B;;;AEN/B,+BAAmB;AACnB,8BAAiB;AAEV,IAAM,gBAAY,yBAAAA,SAAO,wBAAAC,OAAI;AAAA;AAAA;AAI7B,IAAM,oBAAgB,yBAAAD,SAAO,wBAAAC,OAAI;AAAA;AAAA;AAAA,MAGlC,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU,OAAO,IAAI;AAAA;;;AFgJnD;AAhHN,IAAM,uBAAuB,CAAC,YAA+C;AAC3E,QAAM,EAAE,QAAQ,QAAQ,UAAU,KAAK,IAAI,IAAI;AAC/C,QAAM,mBAAmB,QAAQ,MAAM,MAAM;AAE7C,QAAM,YAAY,WAAW,aAAa,WAAW;AAErD,QAAM,WAAqC;AAAA,IACzC,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,UAAU;AAAA,EACZ;AACA,QAAM,UAAoC;AAAA,IACxC,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAIA,MAAI;AAEJ,MAAI;AACF,kBAAc,IAAI,KAAK,aAAa,QAAQ,OAAO;AAAA,EACrD,SAAS,OAAO;AACd,kBAAc,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,UAAU,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAAA,IAChD;AAAA,EACF;AACF;AAGA,IAAM,eAAW,mBAAAC,SAAQ,iBAAiB,eAAe;AACzD,IAAM,sBAAsB,SAAS,oBAAoB;AAEzD,IAAM,eAAe,CAAC,eAAyC;AAC7D,MAAI,OAAO,eAAe;AACxB,WAAO,KAAK,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;AAC5C,MAAI
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Numeral.tsx","../src/constants.ts","../src/styles.ts"],"sourcesContent":["import Numeral, { formatNumeral } from \"./Numeral\";\n\nexport default Numeral;\nexport { Numeral };\nexport { formatNumeral };\nexport * from \"./NumeralTypes\";\n","import * as React from \"react\";\n// @ts-expect-error lru-memoize is not typed\nimport memoize from \"lru-memoize\";\nimport { EM_DASH } from \"./constants\";\nimport Tooltip from \"@sproutsocial/seeds-react-tooltip\";\nimport type { TypeTextProps } from \"@sproutsocial/seeds-react-text\";\nimport { VisuallyHidden } from \"@sproutsocial/seeds-react-visually-hidden\";\n\nimport {\n DEFAULT_THRESHOLD,\n MEMO_CACHE_SIZE,\n COMPARE_OBJECTS,\n MAX_PRECISION,\n ABBREV_PRECISION,\n DefaultPrecisions,\n} from \"./constants\";\nimport { AbbrContainer, Container } from \"./styles\";\nimport type { EnumNumeralFormat, TypeNumeralProps } from \"./NumeralTypes\";\n\ninterface TypeFormatOptions {\n locale: string;\n format: EnumNumeralFormat;\n currency: string;\n min: number;\n max: number;\n}\n\ninterface TypeFormatters {\n standard: Intl.NumberFormat;\n abbreviated: Intl.NumberFormat;\n}\n\ninterface TypeArgs {\n value: number;\n canAbbreviate: boolean;\n invalidNumberLabel?: string;\n ariaLabel?: string;\n options: TypeFormatOptions;\n qa: object | null | undefined;\n rest: Omit<TypeTextProps, \"children\">;\n}\n\nconst _getNumberFormatters = (options: TypeFormatOptions): TypeFormatters => {\n const { locale, format, currency, min, max } = options;\n const compactPrecision = min === max ? min : ABBREV_PRECISION;\n\n const _currency = format === \"currency\" ? currency : undefined;\n\n const standard: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n currency: _currency,\n };\n const compact: Intl.NumberFormatOptions = {\n style: format,\n minimumFractionDigits: compactPrecision,\n maximumFractionDigits: compactPrecision,\n currency: _currency,\n notation: \"compact\",\n };\n // Safari 14.1 is currently throwing errors when trying to use the compact\n // options of NumberFormat\n // https://community.atlassian.com/t5/Trello-questions/Trello-stuck-at-loading-after-Safari-14-1-update-on-macOS-Mojave/qaq-p/1675577#M45687\n let abbreviated;\n\n try {\n abbreviated = new Intl.NumberFormat(locale, compact);\n } catch (error) {\n abbreviated = new Intl.NumberFormat(locale, standard);\n }\n\n return {\n standard: new Intl.NumberFormat(locale, standard),\n abbreviated,\n };\n};\n\n// Memoize to reduce the energy of creating new instances of Intl.NumberFormat\nconst memoizer = memoize(MEMO_CACHE_SIZE, COMPARE_OBJECTS);\nconst getNumberFormatters = memoizer(_getNumberFormatters);\n\nconst getThreshold = (abbreviate: boolean | number): number => {\n if (typeof abbreviate === \"number\")\n return Math.max(1000, Math.abs(abbreviate));\n if (abbreviate) return DEFAULT_THRESHOLD;\n return Infinity;\n};\n\nconst getMinMaxPrecision = (\n precision: TypeNumeralProps[\"precision\"],\n format: EnumNumeralFormat\n): [number, number] => {\n if (typeof precision === \"number\") return [precision, precision];\n if (precision === \"none\") return [0, MAX_PRECISION];\n return DefaultPrecisions[format];\n};\n\nconst isValidNumber = (value: unknown): boolean => {\n return typeof value === \"number\" && isFinite(value);\n};\n\nconst normalizeArgs = (props: TypeNumeralProps): TypeArgs => {\n const {\n number,\n locale = \"us-EN\",\n format = props.currency ? \"currency\" : \"decimal\",\n currency = \"USD\",\n abbreviate = true,\n invalidNumberLabel,\n precision,\n qa,\n ...rest\n } = props;\n const threshold = getThreshold(abbreviate);\n const [min, max] = getMinMaxPrecision(precision, format);\n\n const _number = number || 0;\n\n const value = _number * (format === \"percent\" ? 0.01 : 1);\n const canAbbreviate = Math.abs(_number) >= threshold;\n const options = {\n locale,\n format,\n currency,\n min,\n max,\n };\n\n return {\n value,\n canAbbreviate,\n invalidNumberLabel,\n options,\n qa,\n rest,\n };\n};\n\nconst getNumeral = ({\n returnType,\n props,\n}: {\n returnType: \"string\" | \"component\";\n props: TypeNumeralProps;\n}): string | React.ReactNode => {\n const isReturnTypeString = returnType === \"string\";\n const { value, canAbbreviate, invalidNumberLabel, options, qa, rest } =\n normalizeArgs(props);\n\n if (!isValidNumber(props.number)) {\n return isReturnTypeString ? (\n EM_DASH\n ) : (\n <>\n {invalidNumberLabel && (\n // Give screen readers something useful to read off + hide the em dash\n <VisuallyHidden>{invalidNumberLabel}</VisuallyHidden>\n )}\n <Container aria-hidden {...qa}>\n {EM_DASH}\n </Container>\n </>\n );\n }\n\n const formatters = getNumberFormatters(options);\n const fullText = formatters.standard.format(value);\n\n if (canAbbreviate) {\n const abbreviatedText = formatters.abbreviated.format(value);\n\n // The following are used to debug the skipped tests which are misbehaving!!!\n // console.log({ fullText, abbreviatedText });\n // console.log({ abbreviated: formatters.abbreviated.resolvedOptions() });\n // The following check is necessary because each locale may have differing thresholds\n // for which abbreviation begins.\n if (abbreviatedText !== fullText) {\n return isReturnTypeString ? (\n abbreviatedText\n ) : (\n <Tooltip content={fullText}>\n <AbbrContainer {...qa} {...rest}>\n {abbreviatedText}\n </AbbrContainer>\n </Tooltip>\n );\n }\n }\n\n return isReturnTypeString ? (\n fullText\n ) : (\n <Container {...qa} {...rest}>\n {fullText}\n </Container>\n );\n};\n\nexport const formatNumeral = (props: TypeNumeralProps): string => {\n return getNumeral({ returnType: \"string\", props }) as string;\n};\n\nconst Numeral = (props: TypeNumeralProps) => {\n return getNumeral({ returnType: \"component\", props });\n};\n\nexport default Numeral;\n","import type { EnumNumeralFormat } from \"./NumeralTypes\";\n\nexport const DEFAULT_THRESHOLD = 10000;\nexport const MEMO_CACHE_SIZE = 10;\nexport const COMPARE_OBJECTS = true;\nexport const MAX_PRECISION = 20;\nexport const ABBREV_PRECISION = 2;\nexport const DefaultPrecisions: {\n [key in EnumNumeralFormat]: [number, number];\n} = {\n decimal: [0, 2],\n percent: [0, 1],\n currency: [2, 2],\n};\n\nexport const EM_DASH = \"—\"; // shift + option + hyphen on a mac keyboard\n","import styled from \"styled-components\";\nimport Text from \"@sproutsocial/seeds-react-text\";\n\nexport const Container = styled(Text)`\n font-variant-numeric: tabular-nums;\n`;\n\nexport const AbbrContainer = styled(Text)`\n font-variant-numeric: tabular-nums;\n border-bottom: 1px dotted\n ${(props) => props.theme.colors.container.border.base};\n`;\n"],"mappings":"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","names":["styled","Text","memoize","Tooltip"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sproutsocial/seeds-react-numeral",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Seeds React Numeral",
|
|
5
5
|
"author": "Sprout Social, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"test:watch": "jest --watch --coverage=false"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@sproutsocial/seeds-react-theme": "
|
|
22
|
-
"@sproutsocial/seeds-react-system-props": "
|
|
23
|
-
"@sproutsocial/seeds-react-tooltip": "
|
|
24
|
-
"@sproutsocial/seeds-react-text": "
|
|
25
|
-
"@sproutsocial/seeds-react-visually-hidden": "
|
|
21
|
+
"@sproutsocial/seeds-react-theme": "^3.0.1",
|
|
22
|
+
"@sproutsocial/seeds-react-system-props": "^3.0.1",
|
|
23
|
+
"@sproutsocial/seeds-react-tooltip": "^1.0.2",
|
|
24
|
+
"@sproutsocial/seeds-react-text": "^1.3.2",
|
|
25
|
+
"@sproutsocial/seeds-react-visually-hidden": "^1.0.3",
|
|
26
26
|
"lru-memoize": "~1.0.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@sproutsocial/eslint-config-seeds": "*",
|
|
32
32
|
"react": "^18.0.0",
|
|
33
33
|
"styled-components": "^5.2.3",
|
|
34
|
-
"tsup": "^8.
|
|
34
|
+
"tsup": "^8.3.4",
|
|
35
35
|
"typescript": "^5.6.2",
|
|
36
36
|
"@sproutsocial/seeds-tsconfig": "*",
|
|
37
37
|
"@sproutsocial/seeds-testing": "*",
|