@grafana/components 0.0.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.
- package/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/cjs/css/components.css +298 -0
- package/dist/cjs/index.cjs +3914 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +132 -0
- package/dist/esm/_virtual/hoist-non-react-statics.cjs.js +4 -0
- package/dist/esm/_virtual/hoist-non-react-statics.cjs.js.map +1 -0
- package/dist/esm/_virtual/index.js +4 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/react-is.development.js +4 -0
- package/dist/esm/_virtual/react-is.development.js.map +1 -0
- package/dist/esm/_virtual/react-is.production.min.js +4 -0
- package/dist/esm/_virtual/react-is.production.min.js.map +1 -0
- package/dist/esm/components/ColorModeProvider/ColorModeProvider.js +25 -0
- package/dist/esm/components/ColorModeProvider/ColorModeProvider.js.map +1 -0
- package/dist/esm/components/ComparisonBadge/ComparisonBadge.js +74 -0
- package/dist/esm/components/ComparisonBadge/ComparisonBadge.js.map +1 -0
- package/dist/esm/components/ComparisonBadge/ComparisonBadge.styles.js +112 -0
- package/dist/esm/components/ComparisonBadge/ComparisonBadge.styles.js.map +1 -0
- package/dist/esm/components/ComparisonTooltip/ComparisonTooltip.js +41 -0
- package/dist/esm/components/ComparisonTooltip/ComparisonTooltip.js.map +1 -0
- package/dist/esm/components/ComparisonTooltip/ComparisonTooltip.styles.js +61 -0
- package/dist/esm/components/ComparisonTooltip/ComparisonTooltip.styles.js.map +1 -0
- package/dist/esm/components/Popover/Popover.js +120 -0
- package/dist/esm/components/Popover/Popover.js.map +1 -0
- package/dist/esm/components/Popover/Popover.styles.js +30 -0
- package/dist/esm/components/Popover/Popover.styles.js.map +1 -0
- package/dist/esm/css/components.css +298 -0
- package/dist/esm/index.d.ts +132 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/utils/comparison.js +34 -0
- package/dist/esm/utils/comparison.js.map +1 -0
- package/dist/esm/utils/formatters.js +29 -0
- package/dist/esm/utils/formatters.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const formatNumber = (value, options = {}) => {
|
|
2
|
+
const { decimals = 2, compactThreshold = 1e3, precise = false } = options;
|
|
3
|
+
if (value === "loading") {
|
|
4
|
+
return "";
|
|
5
|
+
}
|
|
6
|
+
const num = typeof value === "string" ? parseFloat(value) : value;
|
|
7
|
+
if (isNaN(num)) {
|
|
8
|
+
return "N/A";
|
|
9
|
+
}
|
|
10
|
+
const abs = Math.abs(num);
|
|
11
|
+
if (!precise && abs >= compactThreshold) {
|
|
12
|
+
const sign = num < 0 ? "-" : "";
|
|
13
|
+
const absNum = Math.abs(num);
|
|
14
|
+
if (absNum >= 1e9) {
|
|
15
|
+
return `${sign}${(absNum / 1e9).toFixed(1)}b`;
|
|
16
|
+
} else if (absNum >= 1e6) {
|
|
17
|
+
return `${sign}${(absNum / 1e6).toFixed(1)}m`;
|
|
18
|
+
} else if (absNum >= 1e3) {
|
|
19
|
+
return `${sign}${(absNum / 1e3).toFixed(1)}k`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return num.toLocaleString("en-US", {
|
|
23
|
+
minimumFractionDigits: decimals,
|
|
24
|
+
maximumFractionDigits: decimals
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { formatNumber };
|
|
29
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sources":["../../../src/utils/formatters.ts"],"sourcesContent":["/**\n * Number formatting options\n */\nexport interface FormatNumberOptions {\n /** Decimal places (default: 2) */\n decimals?: number;\n /** Threshold for compact formatting (default: 1000) */\n compactThreshold?: number;\n /** Never use compact formatting (for precise displays) */\n precise?: boolean;\n}\n\n/**\n * Format numbers with optional compact notation (k, m, b)\n * Components handle their own prefixes/suffixes ($ or %)\n *\n * @param value - The number to format (or 'loading' state)\n * @param options - Formatting options\n * @returns Formatted number string (no prefixes/suffixes)\n *\n * @example\n * formatNumber(1234) // \"1.2k\"\n * formatNumber(1234, { precise: true }) // \"1,234.00\"\n * formatNumber(1234, { decimals: 0 }) // \"1k\"\n * formatNumber(999) // \"999.00\"\n */\nexport const formatNumber = (\n value: number | string | 'loading',\n options: FormatNumberOptions = {},\n): string => {\n const { decimals = 2, compactThreshold = 1000, precise = false } = options;\n\n if (value === 'loading') {\n return '';\n }\n\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) {\n return 'N/A';\n }\n\n const abs = Math.abs(num);\n\n // Use compact notation if above threshold and not precise\n if (!precise && abs >= compactThreshold) {\n const sign = num < 0 ? '-' : '';\n const absNum = Math.abs(num);\n // Always use 1 decimal place for compact notation for consistency\n if (absNum >= 1000000000) {\n return `${sign}${(absNum / 1000000000).toFixed(1)}b`;\n } else if (absNum >= 1000000) {\n return `${sign}${(absNum / 1000000).toFixed(1)}m`;\n } else if (absNum >= 1000) {\n return `${sign}${(absNum / 1000).toFixed(1)}k`;\n }\n }\n\n // Standard formatting with specified decimal places\n return num.toLocaleString('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n};\n"],"names":[],"mappings":"AA0BO,MAAM,YAAA,GAAe,CAC1B,KAAA,EACA,OAAA,GAA+B,EAAC,KACrB;AACX,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,mBAAmB,GAAA,EAAM,OAAA,GAAU,OAAM,GAAI,OAAA;AAEnE,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAM,OAAO,KAAA,KAAU,QAAA,GAAW,UAAA,CAAW,KAAK,CAAA,GAAI,KAAA;AAC5D,EAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAGxB,EAAA,IAAI,CAAC,OAAA,IAAW,GAAA,IAAO,gBAAA,EAAkB;AACvC,IAAA,MAAM,IAAA,GAAO,GAAA,GAAM,CAAA,GAAI,GAAA,GAAM,EAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAE3B,IAAA,IAAI,UAAU,GAAA,EAAY;AACxB,MAAA,OAAO,GAAG,IAAI,CAAA,EAAA,CAAI,SAAS,GAAA,EAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IACnD,CAAA,MAAA,IAAW,UAAU,GAAA,EAAS;AAC5B,MAAA,OAAO,GAAG,IAAI,CAAA,EAAA,CAAI,SAAS,GAAA,EAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAChD,CAAA,MAAA,IAAW,UAAU,GAAA,EAAM;AACzB,MAAA,OAAO,GAAG,IAAI,CAAA,EAAA,CAAI,SAAS,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAC7C;AAAA,EACF;AAGA,EAAA,OAAO,GAAA,CAAI,eAAe,OAAA,EAAS;AAAA,IACjC,qBAAA,EAAuB,QAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA;AACH;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": "Grafana Labs",
|
|
3
|
+
"name": "@grafana/components",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"version": "0.0.1",
|
|
6
|
+
"description": "Product Design Engineering Components for Grafana",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "http://github.com/grafana/components.git"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"grafana",
|
|
13
|
+
"plugins",
|
|
14
|
+
"typescript"
|
|
15
|
+
],
|
|
16
|
+
"type": "module",
|
|
17
|
+
"main": "dist/cjs/index.cjs",
|
|
18
|
+
"module": "dist/esm/index.js",
|
|
19
|
+
"types": "dist/cjs/index.d.cts",
|
|
20
|
+
"exports": {
|
|
21
|
+
"./package.json": "./package.json",
|
|
22
|
+
".": {
|
|
23
|
+
"import": {
|
|
24
|
+
"types": "./dist/esm/index.d.ts",
|
|
25
|
+
"default": "./dist/esm/index.js"
|
|
26
|
+
},
|
|
27
|
+
"require": {
|
|
28
|
+
"types": "./dist/cjs/index.d.cts",
|
|
29
|
+
"default": "./dist/cjs/index.cjs"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"./dist/css/*.css": {
|
|
33
|
+
"import": "./dist/css/*.css",
|
|
34
|
+
"require": "./dist/css/*.css"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"README.md",
|
|
40
|
+
"dist",
|
|
41
|
+
"package.json"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"lint": "eslint --ext .js,.ts src/",
|
|
45
|
+
"typecheck": "tsc --emitDeclarationOnly false --noEmit",
|
|
46
|
+
"clean": "rimraf ./dist ./compiled",
|
|
47
|
+
"build": "yarn clean && yarn build:ts && yarn build:js",
|
|
48
|
+
"build:ts": "tsc -p ./tsconfig.build.json",
|
|
49
|
+
"build:js": "rollup -c rollup.config.ts --configPlugin esbuild",
|
|
50
|
+
"build:publish": "yarn lint && yarn test && yarn build && npm publish",
|
|
51
|
+
"npm:publish": "npm publish",
|
|
52
|
+
"storybook": "storybook dev -p 6006",
|
|
53
|
+
"build-storybook": "storybook build"
|
|
54
|
+
},
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"sideEffects": false,
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=24.5.0",
|
|
61
|
+
"npm": "please-use-yarn",
|
|
62
|
+
"yarn": ">= 1.22.0"
|
|
63
|
+
},
|
|
64
|
+
"packageManager": "yarn@1.22.22",
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@auto-it/omit-commits": "^11.3.0",
|
|
67
|
+
"@auto-it/released": "^11.3.0",
|
|
68
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
69
|
+
"@eslint/js": "^9.37.0",
|
|
70
|
+
"@grafana/design-tokens": "^0.0.23",
|
|
71
|
+
"@grafana/eslint-config": "^9.0.0",
|
|
72
|
+
"@grafana/tsconfig": "^2.0.1",
|
|
73
|
+
"@rollup/plugin-commonjs": "^29",
|
|
74
|
+
"@rollup/plugin-eslint": "^9.2.0",
|
|
75
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
76
|
+
"@storybook/react": "^10.0.8",
|
|
77
|
+
"@storybook/react-vite": "^10.0.8",
|
|
78
|
+
"@stylistic/eslint-plugin-ts": "^4.4.1",
|
|
79
|
+
"@types/node": "^24.9.2",
|
|
80
|
+
"@types/react": "^18",
|
|
81
|
+
"@typescript-eslint/eslint-plugin": "^8.46.3",
|
|
82
|
+
"@typescript-eslint/parser": "^8.46.3",
|
|
83
|
+
"auto": "^11.3.0",
|
|
84
|
+
"esbuild": "^0.25.12",
|
|
85
|
+
"eslint": "^9.37.0",
|
|
86
|
+
"eslint-config-prettier": "^10.1.8",
|
|
87
|
+
"eslint-plugin-jsdoc": "^61.1.12",
|
|
88
|
+
"eslint-plugin-n": "^17.23.1",
|
|
89
|
+
"eslint-plugin-react": "^7.37.5",
|
|
90
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
91
|
+
"lint-staged": "^16.2.6",
|
|
92
|
+
"postcss": "^8.2.15",
|
|
93
|
+
"prettier": "^3.6.2",
|
|
94
|
+
"react": "^18.0.0",
|
|
95
|
+
"react-dom": "^18.0.0",
|
|
96
|
+
"rimraf": "^6.1.2",
|
|
97
|
+
"rollup": "^4.52.5",
|
|
98
|
+
"rollup-plugin-dts": "^6.2.3",
|
|
99
|
+
"rollup-plugin-esbuild": "^6.2.1",
|
|
100
|
+
"rollup-plugin-node-externals": "^8.0.0",
|
|
101
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
102
|
+
"storybook": "^10.0.8",
|
|
103
|
+
"typescript": "~5.9.3",
|
|
104
|
+
"typescript-eslint": "^8.46.1",
|
|
105
|
+
"vite": "^7.2.4"
|
|
106
|
+
},
|
|
107
|
+
"dependencies": {
|
|
108
|
+
"@emotion/css": "^11.13.5",
|
|
109
|
+
"@floating-ui/react": "^0.27.16",
|
|
110
|
+
"@grafana/data": "^12.3.0",
|
|
111
|
+
"@grafana/ui": "^12.3.0",
|
|
112
|
+
"react-useportal": "^1.0.19"
|
|
113
|
+
},
|
|
114
|
+
"peerDependencies": {
|
|
115
|
+
"react": "^18.0.0",
|
|
116
|
+
"react-dom": "^18.0.0"
|
|
117
|
+
}
|
|
118
|
+
}
|