@d3plus/format 3.0.15 → 3.1.0
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/LICENSE +21 -0
- package/README.md +75 -27
- package/es/src/format.js +2 -7
- package/es/src/formatAbbreviate.js +13 -14
- package/es/src/formatDate.js +16 -18
- package/es/src/formatDefaultLocale.js +3 -5
- package/package.json +19 -11
- package/types/index.d.ts +4 -0
- package/types/src/format.d.ts +9 -0
- package/types/src/formatAbbreviate.d.ts +8 -0
- package/types/src/formatDate.d.ts +9 -0
- package/types/src/formatDefaultLocale.d.ts +6 -0
- package/umd/d3plus-format.full.js +89 -203
- package/umd/d3plus-format.full.js.map +1 -1
- package/umd/d3plus-format.full.min.js +69 -67
- package/umd/d3plus-format.js +33 -149
- package/umd/d3plus-format.js.map +1 -1
- package/umd/d3plus-format.min.js +26 -35
package/umd/d3plus-format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d3plus-format.js","sources":["../src/formatAbbreviate.js","../src/format.js","../src/formatDefaultLocale.js","../src/formatDate.js"],"sourcesContent":["import {formatLocale} from \"d3-format\";\nimport {formatLocale as defaultLocale} from \"@d3plus/locales\";\n\nconst round = (x, n) =>\n parseFloat(Math.round(x * Math.pow(10, n)) / Math.pow(10, n)).toFixed(n);\n\n/**\n * @private\n*/\nfunction formatSuffix(str, precision, suffixes) {\n let i = 0;\n let value = parseFloat(str.replace(\"−\", \"-\"), 10);\n if (value) {\n if (value < 0) value *= -1;\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n const d = suffixes[8 + i / 3];\n\n return {\n number: round(d.scale(value), precision),\n symbol: d.symbol\n };\n}\n\n/**\n * @private\n*/\nfunction parseSuffixes(d, i) {\n const k = Math.pow(10, Math.abs(8 - i) * 3);\n return {\n scale: i > 8 ? d => d / k : d => d * k,\n symbol: d\n };\n}\n\n\n/**\n @function formatAbbreviate\n @desc Formats a number to an appropriate number of decimal places and rounding, adding suffixes if applicable (ie. `1200000` to `\"1.2M\"`).\n @param {Number|String} n The number to be formatted.\n @param {Object|String} locale The locale config to be used. If *value* is an object, the function will format the numbers according the object. The object must include `suffixes`, `delimiter` and `currency` properties.\n @returns {String}\n*/\nexport default function(n, locale = \"en-US\", precision = undefined) {\n if (isFinite(n)) n *= 1;\n else return \"N/A\";\n\n const negative = n < 0;\n\n const length = n.toString().split(\".\")[0].replace(\"-\", \"\").length,\n localeConfig = typeof locale === \"object\" ? locale : defaultLocale[locale] || defaultLocale[\"en-US\"],\n suffixes = localeConfig.suffixes.map(parseSuffixes);\n\n const decimal = localeConfig.delimiters.decimal || \".\",\n separator = localeConfig.separator || \"\",\n thousands = localeConfig.delimiters.thousands || \",\";\n\n const d3plusFormatLocale = formatLocale({\n currency: localeConfig.currency || [\"$\", \"\"],\n decimal,\n grouping: localeConfig.grouping || [3],\n thousands\n });\n\n let val;\n if (precision) val = d3plusFormatLocale.format(precision)(n);\n else if (n === 0) val = \"0\";\n else if (length >= 3) {\n const f = formatSuffix(d3plusFormatLocale.format(\".3r\")(n), 2, suffixes);\n const num = parseFloat(f.number).toString().replace(\".\", decimal);\n const char = f.symbol;\n val = `${num}${separator}${char}`;\n }\n else if (length === 3) val = d3plusFormatLocale.format(\",f\")(n);\n else if (n < 1 && n > -1) val = d3plusFormatLocale.format(\".2g\")(n);\n else val = d3plusFormatLocale.format(\".3g\")(n);\n\n return `${negative && val.charAt(0) !== \"−\" ? \"−\" : \"\"}${val}`\n .replace(/−/g, \"-\") // replace new d3 default minus sign (−) to hyphen-minus (-)\n .replace(/(\\.[0]*[1-9]*)[0]*$/g, \"$1\") // removes any trailing zeros\n .replace(/\\.[0]*$/g, \"\"); // removes any trailing decimal point\n\n}\n","import abbreviate from \"./formatAbbreviate.js\";\nimport {format} from \"d3-format\";\n\n/**\n @function format\n @desc An extension to d3's [format](https://github.com/d3/d3-format#api-reference) function that adds more string formatting types and localizations.\n @param {String} specifier The string specifier used by the format function.\n @returns {Function}\n*/\nexport default specifier => {\n if (specifier === \".3~a\") return abbreviate;\n return format(specifier);\n};\n","import format from \"./format.js\";\nimport {formatDefaultLocale} from \"d3-format\";\n\n/**\n @function formatDefaultLocale\n @desc An extension to d3's [formatDefaultLocale](https://github.com/d3/d3-format#api-reference) function that allows setting the locale globally for formatters.\n @param {Object} definition The localization definition.\n @returns {Object}\n*/\nexport default definition => {\n const locale = formatDefaultLocale(definition);\n locale.format = format;\n return locale;\n};\n","import {timeYear, timeMonth, timeHour, timeMinute, timeSecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\n\n/**\n @function formatDate\n @desc A default set of date formatters, which takes into account both the interval in between in each data point but also the start/end data points.\n @param {Date} d The date string to be formatted.\n @param {Array} dataArray The full array of ordered Date Objects.\n @param {Function} [formatter = d3.timeFormat] An optional instance of d3.timeFormat to be used for localization.\n @returns {String}\n*/\nexport default function(d, dataArray, formatter = timeFormat) {\n\n const formatHour = formatter(\"%I %p\"),\n formatMillisecond = formatter(\".%L\"),\n formatMinute = formatter(\"%I:%M\"),\n formatMonth = formatter(\"%b\"),\n formatMonthDay = formatter(\"%b %-d\"),\n formatMonthDayYear = formatter(\"%b %-d, %Y\"),\n formatMonthYear = formatter(\"%b %Y\"),\n formatQuarter = formatter(\"Q%q\"),\n formatQuarterYear = formatter(\"Q%q %Y\"),\n formatSecond = formatter(\":%S\"),\n formatYear = formatter(\"%Y\");\n\n const labelIndex = dataArray.findIndex(a => +a === +d);\n const firstOrLast = labelIndex === 0 || labelIndex === dataArray.length - 1;\n const smallArray = dataArray.length <= 5;\n\n const [yearlySteps, monthlySteps, dailySteps, hourlySteps] = dataArray.reduce((arr, d, i) => {\n if (i) {\n arr[0].push(d.getFullYear() - dataArray[i - 1].getFullYear());\n arr[1].push(monthDiff(dataArray[i - 1], d));\n arr[2].push(Math.round((d - dataArray[i - 1]) / (1000 * 60 * 60 * 24)));\n arr[3].push(Math.round((d - dataArray[i - 1]) / (1000 * 60 * 60)));\n }\n return arr;\n }, [[], [], [], []]);\n\n return (\n yearlySteps.every(s => s >= 1 && !(s % 1)) // Yearly Data \n ? formatYear\n : monthlySteps.every(s => s >= 3 && !(s % 3)) // Quarterly Data\n ? +timeYear(d) === d || firstOrLast || smallArray ? formatQuarterYear : formatQuarter\n : monthlySteps.every(s => s >= 1 && !(s % 1)) // Monthly Data\n ? +timeYear(d) === d || firstOrLast || smallArray ? formatMonthYear : formatMonth \n : dailySteps.every(s => s >= 1 && !(s % 1)) // Daily Data\n ? +timeYear(d) === d || firstOrLast || smallArray ? formatMonthDayYear : formatMonthDay \n : hourlySteps.every(s => s >= 1 && !(s % 1)) // Hourly Data\n ? firstOrLast || smallArray ? formatMonthDayYear : +timeMonth(d) === d ? formatMonthDay : formatHour\n : timeSecond(d) < d ? formatMillisecond\n : timeMinute(d) < d ? formatSecond\n : timeHour(d) < d ? formatMinute : d\n )(d);\n\n}\n\n/**\n @function monthDiff\n @desc Returns the number of months between two Date objects\n @param {*} d1\n @param {*} d2\n @returns {Number} the number of months between the two Date objects\n @private\n*/\nfunction monthDiff(d1, d2) {\n let months;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth();\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n}\n"],"names":["round","x","n","parseFloat","Math","pow","toFixed","formatSuffix","str","precision","suffixes","i","value","replace","floor","log","LN10","max","min","d","number","scale","symbol","parseSuffixes","k","abs","locale","undefined","isFinite","negative","length","toString","split","localeConfig","defaultLocale","map","decimal","delimiters","separator","thousands","d3plusFormatLocale","formatLocale","currency","grouping","val","format","f","num","char","charAt","specifier","abbreviate","definition","formatDefaultLocale","dataArray","formatter","timeFormat","formatHour","formatMillisecond","formatMinute","formatMonth","formatMonthDay","formatMonthDayYear","formatMonthYear","formatQuarter","formatQuarterYear","formatSecond","formatYear","labelIndex","findIndex","a","firstOrLast","smallArray","yearlySteps","monthlySteps","dailySteps","hourlySteps","reduce","arr","push","getFullYear","monthDiff","every","s","timeYear","timeMonth","timeSecond","timeMinute","timeHour","d1","d2","months","getMonth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"d3plus-format.js","sources":["../src/formatAbbreviate.ts","../src/format.ts","../src/formatDefaultLocale.ts","../src/formatDate.ts"],"sourcesContent":["import {formatLocale} from \"d3-format\";\nimport {formatLocale as defaultLocale} from \"@d3plus/locales\";\nimport type {FormatLocaleDefinition} from \"@d3plus/locales\";\n\ninterface SuffixEntry {\n scale: (d: number) => number;\n symbol: string;\n}\n\nconst round = (x: number, n: number): string =>\n parseFloat(\n (Math.round(x * Math.pow(10, n)) / Math.pow(10, n)).toString(),\n ).toFixed(n);\n\n/**\n * @private\n */\nfunction formatSuffix(\n str: string,\n precision: number,\n suffixes: SuffixEntry[],\n): {number: string; symbol: string} {\n let i = 0;\n let value = parseFloat(str.replace(\"\\u2212\", \"-\"));\n if (value) {\n if (value < 0) value *= -1;\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n const d = suffixes[8 + i / 3];\n\n return {\n number: round(d.scale(value), precision),\n symbol: d.symbol,\n };\n}\n\n/**\n * @private\n */\nfunction parseSuffixes(d: string, i: number): SuffixEntry {\n const k = Math.pow(10, Math.abs(8 - i) * 3);\n return {\n scale: i > 8 ? (d: number) => d / k : (d: number) => d * k,\n symbol: d,\n };\n}\n\n/**\n Formats a number to an appropriate number of decimal places and rounding, adding suffixes if applicable (ie. `1200000` to `\"1.2M\"`).\n @param n The number to be formatted.\n @param locale The locale config to be used. If an object is provided, the function will format the numbers according to the object. The object must include `suffixes`, `delimiter` and `currency` properties.\n @param precision Number of significant digits to display.\n*/\nexport default function formatAbbreviate(\n n: number | string,\n locale: string | FormatLocaleDefinition = \"en-US\",\n precision?: string,\n): string {\n if (isFinite(n as number)) n = (n as number) * 1;\n else return \"N/A\";\n\n const negative = (n as number) < 0;\n\n const length = n.toString().split(\".\")[0].replace(\"-\", \"\").length,\n localeConfig: FormatLocaleDefinition =\n typeof locale === \"object\"\n ? locale\n : defaultLocale[locale] || defaultLocale[\"en-US\"],\n suffixes = localeConfig.suffixes.map(parseSuffixes);\n\n const decimal = localeConfig.delimiters.decimal || \".\",\n separator = localeConfig.separator || \"\",\n thousands = localeConfig.delimiters.thousands || \",\";\n\n const d3plusFormatLocale = formatLocale({\n currency: localeConfig.currency || [\"$\", \"\"],\n decimal,\n grouping: localeConfig.grouping || [3],\n thousands,\n });\n\n let val: string;\n if (precision) val = d3plusFormatLocale.format(precision)(n as number);\n else if (n === 0) val = \"0\";\n else if (length >= 3) {\n const f = formatSuffix(\n d3plusFormatLocale.format(\".3r\")(n as number),\n 2,\n suffixes,\n );\n const num = parseFloat(f.number).toString().replace(\".\", decimal);\n const char = f.symbol;\n val = `${num}${separator}${char}`;\n } else if (length === 3) val = d3plusFormatLocale.format(\",f\")(n as number);\n else if ((n as number) < 1 && (n as number) > -1)\n val = d3plusFormatLocale.format(\".2g\")(n as number);\n else val = d3plusFormatLocale.format(\".3g\")(n as number);\n\n return `${negative && val.charAt(0) !== \"\\u2212\" ? \"\\u2212\" : \"\"}${val}`\n .replace(/\\u2212/g, \"-\") // replace new d3 default minus sign (\\u2212) to hyphen-minus (-)\n .replace(/(\\.[0]*[1-9]*)[0]*$/g, \"$1\") // removes any trailing zeros\n .replace(/\\.[0]*$/g, \"\"); // removes any trailing decimal point\n}\n","import abbreviate from \"./formatAbbreviate.js\";\nimport {format} from \"d3-format\";\n\n/**\n An extension to d3's [format](https://github.com/d3/d3-format#api-reference) function that adds more string formatting types and localizations.\n @param specifier The string specifier used by the format function.\n*/\ntype Formatter = (n: number | string | {valueOf(): number}) => string;\n\nexport default function (specifier: string): Formatter {\n if (specifier === \".3~a\") return abbreviate as Formatter;\n return format(specifier) as Formatter;\n}\n","import format from \"./format.js\";\nimport {formatDefaultLocale} from \"d3-format\";\n\n/**\n An extension to d3's [formatDefaultLocale](https://github.com/d3/d3-format#api-reference) function that allows setting the locale globally for formatters.\n @param definition The localization definition.\n*/\nexport default function (\n definition: Parameters<typeof formatDefaultLocale>[0],\n): Record<string, unknown> {\n const locale = formatDefaultLocale(definition) as unknown as Record<\n string,\n unknown\n >;\n locale.format = format;\n return locale;\n}\n","import {timeYear, timeMonth, timeHour, timeMinute, timeSecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\n\ntype DateFormatter = (specifier: string) => (date: Date) => string;\n\n/**\n A default set of date formatters, which takes into account both the interval in between in each data point but also the start/end data points.\n @param d The date to format.\n @param dataArray The full array of ordered Date Objects.\n @param formatter Optional custom format string or function.\n*/\nexport default function formatDate(\n d: Date,\n dataArray: Date[],\n formatter: DateFormatter = timeFormat,\n): string {\n const formatHour = formatter(\"%I %p\"),\n formatMillisecond = formatter(\".%L\"),\n formatMinute = formatter(\"%I:%M\"),\n formatMonth = formatter(\"%b\"),\n formatMonthDay = formatter(\"%b %-d\"),\n formatMonthDayYear = formatter(\"%b %-d, %Y\"),\n formatMonthYear = formatter(\"%b %Y\"),\n formatQuarter = formatter(\"Q%q\"),\n formatQuarterYear = formatter(\"Q%q %Y\"),\n formatSecond = formatter(\":%S\"),\n formatYear = formatter(\"%Y\");\n\n const labelIndex = dataArray.findIndex(a => +a === +d);\n const firstOrLast = labelIndex === 0 || labelIndex === dataArray.length - 1;\n const smallArray = dataArray.length <= 5;\n\n const [yearlySteps, monthlySteps, dailySteps, hourlySteps] = dataArray.reduce<\n [number[], number[], number[], number[]]\n >(\n (arr, d, i) => {\n if (i) {\n arr[0].push(d.getFullYear() - dataArray[i - 1].getFullYear());\n arr[1].push(monthDiff(dataArray[i - 1], d));\n arr[2].push(\n Math.round((+d - +dataArray[i - 1]) / (1000 * 60 * 60 * 24)),\n );\n arr[3].push(Math.round((+d - +dataArray[i - 1]) / (1000 * 60 * 60)));\n }\n return arr;\n },\n [[], [], [], []],\n );\n\n return (\n yearlySteps.every(s => s >= 1 && !(s % 1)) // Yearly Data\n ? formatYear\n : monthlySteps.every(s => s >= 3 && !(s % 3)) // Quarterly Data\n ? +timeYear(d) === +d || firstOrLast || smallArray\n ? formatQuarterYear\n : formatQuarter\n : monthlySteps.every(s => s >= 1 && !(s % 1)) // Monthly Data\n ? +timeYear(d) === +d || firstOrLast || smallArray\n ? formatMonthYear\n : formatMonth\n : dailySteps.every(s => s >= 1 && !(s % 1)) // Daily Data\n ? +timeYear(d) === +d || firstOrLast || smallArray\n ? formatMonthDayYear\n : formatMonthDay\n : hourlySteps.every(s => s >= 1 && !(s % 1)) // Hourly Data\n ? firstOrLast || smallArray\n ? formatMonthDayYear\n : +timeMonth(d) === +d\n ? formatMonthDay\n : formatHour\n : timeSecond(d) < d\n ? formatMillisecond\n : timeMinute(d) < d\n ? formatSecond\n : timeHour(d) < d\n ? formatMinute\n : (_d: Date) => _d.toString()\n )(d);\n}\n\n/**\n Returns the number of months between two Date objects\n\n @returns {Number} the number of months between the two Date objects\n @private\n*/\nfunction monthDiff(d1: Date, d2: Date): number {\n let months: number;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth();\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n}\n"],"names":["round","x","n","parseFloat","Math","pow","toString","toFixed","formatSuffix","str","precision","suffixes","i","value","replace","floor","log","LN10","max","min","d","number","scale","symbol","parseSuffixes","k","abs","formatAbbreviate","locale","isFinite","negative","length","split","localeConfig","defaultLocale","map","decimal","delimiters","separator","thousands","d3plusFormatLocale","formatLocale","currency","grouping","val","format","f","num","char","charAt","specifier","abbreviate","definition","formatDefaultLocale","formatDate","dataArray","formatter","timeFormat","formatHour","formatMillisecond","formatMinute","formatMonth","formatMonthDay","formatMonthDayYear","formatMonthYear","formatQuarter","formatQuarterYear","formatSecond","formatYear","labelIndex","findIndex","a","firstOrLast","smallArray","yearlySteps","monthlySteps","dailySteps","hourlySteps","reduce","arr","push","getFullYear","monthDiff","every","s","timeYear","timeMonth","timeSecond","timeMinute","timeHour","_d","d1","d2","months","getMonth"],"mappings":"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"}
|
package/umd/d3plus-format.min.js
CHANGED
|
@@ -1,50 +1,41 @@
|
|
|
1
1
|
/*
|
|
2
|
-
@d3plus/format v3.0.
|
|
2
|
+
@d3plus/format v3.0.16
|
|
3
3
|
JavaScript formatters for localized numbers and dates.
|
|
4
4
|
Copyright (c) 2026 D3plus - https://d3plus.org
|
|
5
5
|
@license MIT
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-format"),require("@d3plus/locales"),require("d3-time"),require("d3-time-format")):"function"==typeof define&&define.amd?define("@d3plus/format",["exports","d3-format","@d3plus/locales","d3-time","d3-time-format"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).d3plus={},e.d3Format,e.locales,e.d3Time,e.d3TimeFormat)}(this,function(e,t,r,o,a){"use strict";
|
|
8
8
|
/**
|
|
9
9
|
* @private
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* @private
|
|
13
|
-
*/function d(e,t){let r=Math.pow(10,3*Math.abs(8-t));return{scale:8<t?e=>e/r:e=>e*r,symbol:e}}
|
|
10
|
+
*/
|
|
11
|
+
function n(e,t){const r=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?e=>e/r:e=>e*r,symbol:e}}
|
|
14
12
|
/**
|
|
15
|
-
|
|
16
|
-
@
|
|
17
|
-
@param
|
|
18
|
-
@param
|
|
19
|
-
|
|
20
|
-
*/function t(e,t="en-US",r=void 0){if(!isFinite(e))return"N/A";var o=(e*=1)<0,n=e.toString().split(".")[0].replace("-","").length,t="object"==typeof t?t:m.formatLocale[t]||m.formatLocale["en-US"],a=t.suffixes.map(d),i=t.delimiters.decimal||".",l=t.separator||"",f=t.delimiters.thousands||",",t=s.formatLocale({currency:t.currency||["$",""],decimal:i,grouping:t.grouping||[3],thousands:f});let u;return u=r?t.format(r)(e):0===e?"0":3<=n?(f=((e,t,r)=>{let o=0,n=parseFloat(e.replace("−","-"),10);return n&&(n<0&&(n*=-1),o=1+Math.floor(1e-12+Math.log(n)/Math.LN10),o=Math.max(-24,Math.min(24,3*Math.floor((o-1)/3)))),e=r[8+o/3],{number:c(e.scale(n),t),symbol:e.symbol}})(t.format(".3r")(e),2,a),""+parseFloat(f.number).toString().replace(".",i)+l+f.symbol):(3===n?t.format(",f"):e<1&&-1<e?t.format(".2g"):t.format(".3g"))(e),((o&&"−"!==u.charAt(0)?"−":"")+u).replace(/−/g,"-").replace(/(\.[0]*[1-9]*)[0]*$/g,"$1").replace(/\.[0]*$/g,"");// removes any trailing decimal point
|
|
21
|
-
}
|
|
13
|
+
Formats a number to an appropriate number of decimal places and rounding, adding suffixes if applicable (ie. `1200000` to `"1.2M"`).
|
|
14
|
+
@param n The number to be formatted.
|
|
15
|
+
@param locale The locale config to be used. If an object is provided, the function will format the numbers according to the object. The object must include `suffixes`, `delimiter` and `currency` properties.
|
|
16
|
+
@param precision Number of significant digits to display.
|
|
17
|
+
*/function i(e,o="en-US",a){if(!isFinite(e))return"N/A";const i=(e*=1)<0,l=e.toString().split(".")[0].replace("-","").length,u="object"==typeof o?o:r.formatLocale[o]||r.formatLocale["en-US"],f=u.suffixes.map(n),m=u.delimiters.decimal||".",s=u.separator||"",c=u.delimiters.thousands||",",d=t.formatLocale({currency:u.currency||["$",""],decimal:m,grouping:u.grouping||[3],thousands:c});let p;if(a)p=d.format(a)(e);else if(0===e)p="0";else if(l>=3){const t=
|
|
22
18
|
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/var r=e=>".3~a"===e?t:s.format(e);
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
function(e,t,r){let o=0,a=parseFloat(e.replace("−","-"));a&&(a<0&&(a*=-1),o=1+Math.floor(1e-12+Math.log(a)/Math.LN10),o=Math.max(-24,Math.min(24,3*Math.floor((o-1)/3))));const n=r[8+o/3];return{number:(i=n.scale(a),l=t,parseFloat((Math.round(i*Math.pow(10,l))/Math.pow(10,l)).toString()).toFixed(l)),symbol:n.symbol};var i,l}(d.format(".3r")(e),2,f);p=`${parseFloat(t.number).toString().replace(".",m)}${s}${t.symbol}`}else p=3===l?d.format(",f")(e):e<1&&e>-1?d.format(".2g")(e):d.format(".3g")(e);return`${i&&"−"!==p.charAt(0)?"−":""}${p}`.replace(/\u2212/g,"-").replace(/(\.[0]*[1-9]*)[0]*$/g,"$1").replace(/\.[0]*$/g,"");// removes any trailing decimal point
|
|
22
|
+
}function l(e){return".3~a"===e?i:t.format(e)}
|
|
28
23
|
/**
|
|
29
|
-
|
|
30
|
-
@
|
|
31
|
-
|
|
32
|
-
@returns {Object}
|
|
33
|
-
*/e.format=r,e.formatAbbreviate=t,e.formatDate=
|
|
24
|
+
An extension to d3's [formatDefaultLocale](https://github.com/d3/d3-format#api-reference) function that allows setting the locale globally for formatters.
|
|
25
|
+
@param definition The localization definition.
|
|
26
|
+
*/e.format=l,e.formatAbbreviate=i,e.formatDate=
|
|
34
27
|
/**
|
|
35
|
-
|
|
36
|
-
@
|
|
37
|
-
@param
|
|
38
|
-
@param
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*/function(t,i,e=v.timeFormat){var r=e("%I %p"),o=e(".%L"),n=e("%I:%M"),a=e("%b"),l=e("%b %-d"),f=e("%b %-d, %Y"),u=e("%b %Y"),s=e("Q%q"),m=e("Q%q %Y"),c=e(":%S"),e=e("%Y"),d=0===(d=i.findIndex(e=>+e==+t))||d===i.length-1,h=i.length<=5,[p,g,y,M]=i.reduce((e,t,r)=>{
|
|
28
|
+
A default set of date formatters, which takes into account both the interval in between in each data point but also the start/end data points.
|
|
29
|
+
@param d The date to format.
|
|
30
|
+
@param dataArray The full array of ordered Date Objects.
|
|
31
|
+
@param formatter Optional custom format string or function.
|
|
32
|
+
*/
|
|
33
|
+
function(e,t,r=a.timeFormat){const n=r("%I %p"),i=r(".%L"),l=r("%I:%M"),u=r("%b"),f=r("%b %-d"),m=r("%b %-d, %Y"),s=r("%b %Y"),c=r("Q%q"),d=r("Q%q %Y"),p=r(":%S"),h=r("%Y"),g=t.findIndex(t=>+t===+e),M=0===g||g===t.length-1,b=t.length<=5,[y,F,Y,$]=t.reduce((e,r,o)=>(o&&(e[0].push(r.getFullYear()-t[o-1].getFullYear()),e[1].push(
|
|
42
34
|
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@param {*} d1
|
|
46
|
-
@param {*} d2
|
|
35
|
+
Returns the number of months between two Date objects
|
|
36
|
+
|
|
47
37
|
@returns {Number} the number of months between the two Date objects
|
|
48
38
|
@private
|
|
49
|
-
*/
|
|
39
|
+
*/
|
|
40
|
+
function(e,t){let r;return r=12*(t.getFullYear()-e.getFullYear()),r-=e.getMonth(),r+=t.getMonth(),r<=0?0:r}(t[o-1],r)),e[2].push(Math.round((+r-+t[o-1])/864e5)),e[3].push(Math.round((+r-+t[o-1])/36e5))),e),[[],[],[],[]]);return(y.every(e=>e>=1&&!(e%1))?h:F.every(e=>e>=3&&!(e%3))?+o.timeYear(e)===+e||M||b?d:c:F.every(e=>e>=1&&!(e%1))?+o.timeYear(e)===+e||M||b?s:u:Y.every(e=>e>=1&&!(e%1))?+o.timeYear(e)===+e||M||b?m:f:$.every(e=>e>=1&&!(e%1))?M||b?m:+o.timeMonth(e)===+e?f:n:o.timeSecond(e)<e?i:o.timeMinute(e)<e?p:o.timeHour(e)<e?l:e=>e.toString())(e)},e.formatDefaultLocale=function(e){const r=t.formatDefaultLocale(e);return r.format=l,r}});
|
|
50
41
|
//# sourceMappingURL=d3plus-format.js.map
|