react-muscle-stats 1.0.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/README.md +73 -0
- package/dist/components/MuscleRadar/index.cjs.js +84 -0
- package/dist/components/MuscleRadar/index.cjs.js.map +1 -0
- package/dist/components/MuscleRadar/index.d.ts +43 -0
- package/dist/components/MuscleRadar/index.d.ts.map +1 -0
- package/dist/components/MuscleRadar/index.es.js +83 -0
- package/dist/components/MuscleRadar/index.es.js.map +1 -0
- package/dist/components/MuscleRadar/normalization.cjs.js +100 -0
- package/dist/components/MuscleRadar/normalization.cjs.js.map +1 -0
- package/dist/components/MuscleRadar/normalization.d.ts +21 -0
- package/dist/components/MuscleRadar/normalization.d.ts.map +1 -0
- package/dist/components/MuscleRadar/normalization.es.js +99 -0
- package/dist/components/MuscleRadar/normalization.es.js.map +1 -0
- package/dist/components/MuscleVisualizer/index.cjs.js +49 -0
- package/dist/components/MuscleVisualizer/index.cjs.js.map +1 -0
- package/dist/components/MuscleVisualizer/index.d.ts +32 -0
- package/dist/components/MuscleVisualizer/index.d.ts.map +1 -0
- package/dist/components/MuscleVisualizer/index.es.js +48 -0
- package/dist/components/MuscleVisualizer/index.es.js.map +1 -0
- package/dist/components/MuscleVisualizer/svgs.cjs.js +2274 -0
- package/dist/components/MuscleVisualizer/svgs.cjs.js.map +1 -0
- package/dist/components/MuscleVisualizer/svgs.d.ts +2 -0
- package/dist/components/MuscleVisualizer/svgs.d.ts.map +1 -0
- package/dist/components/MuscleVisualizer/svgs.es.js +2274 -0
- package/dist/components/MuscleVisualizer/svgs.es.js.map +1 -0
- package/dist/components/OneRepMaxChart/index.cjs.js +132 -0
- package/dist/components/OneRepMaxChart/index.cjs.js.map +1 -0
- package/dist/components/OneRepMaxChart/index.d.ts +30 -0
- package/dist/components/OneRepMaxChart/index.d.ts.map +1 -0
- package/dist/components/OneRepMaxChart/index.es.js +127 -0
- package/dist/components/OneRepMaxChart/index.es.js.map +1 -0
- package/dist/components/VolumeChart/index.cjs.js +155 -0
- package/dist/components/VolumeChart/index.cjs.js.map +1 -0
- package/dist/components/VolumeChart/index.d.ts +30 -0
- package/dist/components/VolumeChart/index.d.ts.map +1 -0
- package/dist/components/VolumeChart/index.es.js +150 -0
- package/dist/components/VolumeChart/index.es.js.map +1 -0
- package/dist/index.cjs.js +16 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +8 -0
- package/dist/utils/math.cjs.js +16 -0
- package/dist/utils/math.cjs.js.map +1 -0
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.es.js +16 -0
- package/dist/utils/math.es.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","names":[],"sources":["../../../src/components/VolumeChart/index.tsx"],"sourcesContent":["import type { CSSProperties } from 'react';\r\nimport {\r\n AreaChart,\r\n Area,\r\n XAxis,\r\n YAxis,\r\n Tooltip,\r\n ResponsiveContainer,\r\n type TooltipProps,\r\n} from 'recharts';\r\n\r\nexport interface VolumeDataPoint {\r\n /** Date string displayed on the X axis. */\r\n date: string;\r\n /** Total volume (sets × reps × weight). */\r\n volume: number;\r\n}\r\n\r\nexport interface VolumeChartProps {\r\n /** Array of data points to plot. */\r\n data: VolumeDataPoint[];\r\n /** Primary fill / stroke colour for the area (default: `'#00C49F'`). */\r\n fillColor?: string;\r\n /** Weight unit shown in the tooltip (default: `'lbs'`). */\r\n unit?: 'lbs' | 'kg';\r\n /** Width of the responsive container (default: `'100%'`). */\r\n width?: string | number;\r\n /** Height of the responsive container (default: `300`). */\r\n height?: number;\r\n /** Optional inline styles for the outer wrapper. */\r\n style?: CSSProperties;\r\n /** Optional CSS class name for the outer wrapper. */\r\n className?: string;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Helpers */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/** Formats large numbers with a \"k\" suffix (e.g. 12 500 → \"12.5k\"). */\r\nfunction formatVolumeTick(value: number): string {\r\n if (value >= 1000) {\r\n const k = value / 1000;\r\n // Drop the decimal when it's a whole number (e.g. 10k not 10.0k)\r\n return `${Number.isInteger(k) ? k : k.toFixed(1)}k`;\r\n }\r\n return String(value);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Custom dark-mode tooltip */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst tooltipWrapperStyle: CSSProperties = {\r\n backgroundColor: '#1e1e2f',\r\n border: '1px solid #3a3a5c',\r\n borderRadius: 8,\r\n padding: '8px 12px',\r\n color: '#fff',\r\n fontSize: 13,\r\n lineHeight: 1.4,\r\n};\r\n\r\nfunction VolumeTooltip({\r\n active,\r\n payload,\r\n label,\r\n unit,\r\n}: TooltipProps<number, string> & { unit: string }) {\r\n if (!active || !payload?.length) return null;\r\n const vol = payload[0].value as number;\r\n return (\r\n <div style={tooltipWrapperStyle}>\r\n <p style={{ margin: 0, fontWeight: 600 }}>{label}</p>\r\n <p style={{ margin: 0, opacity: 0.85 }}>\r\n {vol.toLocaleString()} {unit}\r\n </p>\r\n </div>\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Empty-state fallback */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst emptyStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: '#888',\r\n fontSize: 14,\r\n height: 200,\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Component */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/**\r\n * A Recharts `<AreaChart>` with a fading gradient fill for tracking\r\n * training volume over time. Inspired by the Hevy app.\r\n */\r\nexport function VolumeChart({\r\n data,\r\n fillColor = '#00C49F',\r\n unit = 'lbs',\r\n width = '100%',\r\n height = 300,\r\n style,\r\n className,\r\n}: VolumeChartProps) {\r\n if (data.length === 0) {\r\n return (\r\n <div className={className} style={{ ...emptyStyle, ...style }}>\r\n No volume data available\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={className} style={{ width, ...style }}>\r\n <ResponsiveContainer width=\"100%\" height={height}>\r\n <AreaChart data={data} margin={{ top: 10, right: 20, bottom: 0, left: 0 }}>\r\n <defs>\r\n <linearGradient id=\"colorVolume\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\r\n <stop offset=\"5%\" stopColor={fillColor} stopOpacity={0.4} />\r\n <stop offset=\"95%\" stopColor={fillColor} stopOpacity={0.02} />\r\n </linearGradient>\r\n </defs>\r\n\r\n <XAxis\r\n dataKey=\"date\"\r\n axisLine={false}\r\n tickLine={false}\r\n tick={{ fontSize: 11, fill: '#aaa' }}\r\n />\r\n <YAxis\r\n axisLine={false}\r\n tickLine={false}\r\n tick={{ fontSize: 11, fill: '#aaa' }}\r\n tickFormatter={formatVolumeTick}\r\n />\r\n <Tooltip\r\n content={<VolumeTooltip unit={unit} />}\r\n cursor={{ stroke: '#555', strokeDasharray: '4 4' }}\r\n />\r\n <Area\r\n type=\"monotone\"\r\n dataKey=\"volume\"\r\n stroke={fillColor}\r\n strokeWidth={2}\r\n fill=\"url(#colorVolume)\"\r\n dot={{ r: 3, fill: fillColor, stroke: '#fff', strokeWidth: 1.5 }}\r\n activeDot={{ r: 6, fill: fillColor, stroke: '#fff', strokeWidth: 2 }}\r\n />\r\n </AreaChart>\r\n </ResponsiveContainer>\r\n </div>\r\n );\r\n}\r\n\r\nexport default VolumeChart;\r\n"],"mappings":";;;AAwCA,SAAS,iBAAiB,OAAuB;AAC/C,KAAI,SAAS,KAAM;EACjB,MAAM,IAAI,QAAQ;AAElB,SAAO,GAAG,OAAO,UAAU,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC;;AAEnD,QAAO,OAAO,MAAM;;AAOtB,IAAM,sBAAqC;CACzC,iBAAiB;CACjB,QAAQ;CACR,cAAc;CACd,SAAS;CACT,OAAO;CACP,UAAU;CACV,YAAY;CACb;AAED,SAAS,cAAc,EACrB,QACA,SACA,OACA,QACkD;AAClD,KAAI,CAAC,UAAU,CAAC,SAAS,OAAQ,QAAO;CACxC,MAAM,MAAM,QAAQ,GAAG;AACvB,QACE,qBAAC,OAAD;EAAK,OAAO;YAAZ,CACE,oBAAC,KAAD;GAAG,OAAO;IAAE,QAAQ;IAAG,YAAY;IAAK;aAAG;GAAU,CAAA,EACrD,qBAAC,KAAD;GAAG,OAAO;IAAE,QAAQ;IAAG,SAAS;IAAM;aAAtC;IACG,IAAI,gBAAgB;IAAC;IAAE;IACtB;KACA;;;AAQV,IAAM,aAA4B;CAChC,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,OAAO;CACP,UAAU;CACV,QAAQ;CACT;;;;;AAUD,SAAgB,YAAY,EAC1B,MACA,YAAY,WACZ,OAAO,OACP,QAAQ,QACR,SAAS,KACT,OACA,aACmB;AACnB,KAAI,KAAK,WAAW,EAClB,QACE,oBAAC,OAAD;EAAgB;EAAW,OAAO;GAAE,GAAG;GAAY,GAAG;GAAO;YAAE;EAEzD,CAAA;AAIV,QACE,oBAAC,OAAD;EAAgB;EAAW,OAAO;GAAE;GAAO,GAAG;GAAO;YACnD,oBAAC,qBAAD;GAAqB,OAAM;GAAe;aACxC,qBAAC,WAAD;IAAiB;IAAM,QAAQ;KAAE,KAAK;KAAI,OAAO;KAAI,QAAQ;KAAG,MAAM;KAAG;cAAzE;KACE,oBAAC,QAAD,EAAA,UACE,qBAAC,kBAAD;MAAgB,IAAG;MAAc,IAAG;MAAI,IAAG;MAAI,IAAG;MAAI,IAAG;gBAAzD,CACE,oBAAC,QAAD;OAAM,QAAO;OAAK,WAAW;OAAW,aAAa;OAAO,CAAA,EAC5D,oBAAC,QAAD;OAAM,QAAO;OAAM,WAAW;OAAW,aAAa;OAAQ,CAAA,CAC/C;SACZ,CAAA;KAEP,oBAAC,OAAD;MACE,SAAQ;MACR,UAAU;MACV,UAAU;MACV,MAAM;OAAE,UAAU;OAAI,MAAM;OAAQ;MACpC,CAAA;KACF,oBAAC,OAAD;MACE,UAAU;MACV,UAAU;MACV,MAAM;OAAE,UAAU;OAAI,MAAM;OAAQ;MACpC,eAAe;MACf,CAAA;KACF,oBAAC,SAAD;MACE,SAAS,oBAAC,eAAD,EAAqB,MAAQ,CAAA;MACtC,QAAQ;OAAE,QAAQ;OAAQ,iBAAiB;OAAO;MAClD,CAAA;KACF,oBAAC,MAAD;MACE,MAAK;MACL,SAAQ;MACR,QAAQ;MACR,aAAa;MACb,MAAK;MACL,KAAK;OAAE,GAAG;OAAG,MAAM;OAAW,QAAQ;OAAQ,aAAa;OAAK;MAChE,WAAW;OAAE,GAAG;OAAG,MAAM;OAAW,QAAQ;OAAQ,aAAa;OAAG;MACpE,CAAA;KACQ;;GACQ,CAAA;EAClB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_svgs = require("./components/MuscleVisualizer/svgs.cjs.js");
|
|
3
|
+
const require_components_MuscleVisualizer_index = require("./components/MuscleVisualizer/index.cjs.js");
|
|
4
|
+
const require_normalization = require("./components/MuscleRadar/normalization.cjs.js");
|
|
5
|
+
const require_components_MuscleRadar_index = require("./components/MuscleRadar/index.cjs.js");
|
|
6
|
+
const require_components_OneRepMaxChart_index = require("./components/OneRepMaxChart/index.cjs.js");
|
|
7
|
+
const require_components_VolumeChart_index = require("./components/VolumeChart/index.cjs.js");
|
|
8
|
+
const require_math = require("./utils/math.cjs.js");
|
|
9
|
+
exports.MUSCLE_STANDARDS = require_normalization.MUSCLE_STANDARDS;
|
|
10
|
+
exports.MUSCLE_SVGS = require_svgs.MUSCLE_SVGS;
|
|
11
|
+
exports.MuscleRadar = require_components_MuscleRadar_index.MuscleRadar;
|
|
12
|
+
exports.MuscleVisualizer = require_components_MuscleVisualizer_index.MuscleVisualizer;
|
|
13
|
+
exports.OneRepMaxChart = require_components_OneRepMaxChart_index.OneRepMaxChart;
|
|
14
|
+
exports.VolumeChart = require_components_VolumeChart_index.VolumeChart;
|
|
15
|
+
exports.calculate1RM = require_math.calculate1RM;
|
|
16
|
+
exports.calculateDevelopmentScore = require_normalization.calculateDevelopmentScore;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { MuscleVisualizer } from './components/MuscleVisualizer';
|
|
2
|
+
export type { MuscleVisualizerProps, Gender as MuscleVisualizerGender, View, } from './components/MuscleVisualizer';
|
|
3
|
+
export { MuscleRadar } from './components/MuscleRadar';
|
|
4
|
+
export type { MuscleRadarProps, BodyMeasurements, } from './components/MuscleRadar';
|
|
5
|
+
export { OneRepMaxChart } from './components/OneRepMaxChart';
|
|
6
|
+
export type { OneRepMaxChartProps, OneRepMaxDataPoint, } from './components/OneRepMaxChart';
|
|
7
|
+
export { VolumeChart } from './components/VolumeChart';
|
|
8
|
+
export type { VolumeChartProps, VolumeDataPoint, } from './components/VolumeChart';
|
|
9
|
+
export { MUSCLE_SVGS } from './components/MuscleVisualizer/svgs';
|
|
10
|
+
export { MUSCLE_STANDARDS, calculateDevelopmentScore, } from './components/MuscleRadar/normalization';
|
|
11
|
+
export type { Gender, MuscleStandards } from './components/MuscleRadar/normalization';
|
|
12
|
+
export { calculate1RM } from './utils/math';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EACV,qBAAqB,EACrB,MAAM,IAAI,sBAAsB,EAChC,IAAI,GACL,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MUSCLE_SVGS } from "./components/MuscleVisualizer/svgs.es.js";
|
|
2
|
+
import { MuscleVisualizer } from "./components/MuscleVisualizer/index.es.js";
|
|
3
|
+
import { MUSCLE_STANDARDS, calculateDevelopmentScore } from "./components/MuscleRadar/normalization.es.js";
|
|
4
|
+
import { MuscleRadar } from "./components/MuscleRadar/index.es.js";
|
|
5
|
+
import { OneRepMaxChart } from "./components/OneRepMaxChart/index.es.js";
|
|
6
|
+
import { VolumeChart } from "./components/VolumeChart/index.es.js";
|
|
7
|
+
import { calculate1RM } from "./utils/math.es.js";
|
|
8
|
+
export { MUSCLE_STANDARDS, MUSCLE_SVGS, MuscleRadar, MuscleVisualizer, OneRepMaxChart, VolumeChart, calculate1RM, calculateDevelopmentScore };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimates the one-rep max (1RM) using the **Brzycki formula**.
|
|
3
|
+
*
|
|
4
|
+
* Formula: `weight × (36 / (37 − reps))`
|
|
5
|
+
*
|
|
6
|
+
* @param weight - The weight lifted.
|
|
7
|
+
* @param reps - The number of repetitions performed (must be ≥ 1).
|
|
8
|
+
* @returns The estimated 1RM rounded to the nearest integer.
|
|
9
|
+
*/
|
|
10
|
+
function calculate1RM(weight, reps) {
|
|
11
|
+
if (reps === 1) return weight;
|
|
12
|
+
return Math.round(weight * (36 / (37 - reps)));
|
|
13
|
+
}
|
|
14
|
+
exports.calculate1RM = calculate1RM;
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=math.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.cjs.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\r\n * Estimates the one-rep max (1RM) using the **Brzycki formula**.\r\n *\r\n * Formula: `weight × (36 / (37 − reps))`\r\n *\r\n * @param weight - The weight lifted.\r\n * @param reps - The number of repetitions performed (must be ≥ 1).\r\n * @returns The estimated 1RM rounded to the nearest integer.\r\n */\r\nexport function calculate1RM(weight: number, reps: number): number {\r\n if (reps === 1) return weight;\r\n return Math.round(weight * (36 / (37 - reps)));\r\n}\r\n"],"mappings":";;;;;;;;;AASA,SAAgB,aAAa,QAAgB,MAAsB;AACjE,KAAI,SAAS,EAAG,QAAO;AACvB,QAAO,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimates the one-rep max (1RM) using the **Brzycki formula**.
|
|
3
|
+
*
|
|
4
|
+
* Formula: `weight × (36 / (37 − reps))`
|
|
5
|
+
*
|
|
6
|
+
* @param weight - The weight lifted.
|
|
7
|
+
* @param reps - The number of repetitions performed (must be ≥ 1).
|
|
8
|
+
* @returns The estimated 1RM rounded to the nearest integer.
|
|
9
|
+
*/
|
|
10
|
+
export declare function calculate1RM(weight: number, reps: number): number;
|
|
11
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimates the one-rep max (1RM) using the **Brzycki formula**.
|
|
3
|
+
*
|
|
4
|
+
* Formula: `weight × (36 / (37 − reps))`
|
|
5
|
+
*
|
|
6
|
+
* @param weight - The weight lifted.
|
|
7
|
+
* @param reps - The number of repetitions performed (must be ≥ 1).
|
|
8
|
+
* @returns The estimated 1RM rounded to the nearest integer.
|
|
9
|
+
*/
|
|
10
|
+
function calculate1RM(weight, reps) {
|
|
11
|
+
if (reps === 1) return weight;
|
|
12
|
+
return Math.round(weight * (36 / (37 - reps)));
|
|
13
|
+
}
|
|
14
|
+
export { calculate1RM };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=math.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.es.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\r\n * Estimates the one-rep max (1RM) using the **Brzycki formula**.\r\n *\r\n * Formula: `weight × (36 / (37 − reps))`\r\n *\r\n * @param weight - The weight lifted.\r\n * @param reps - The number of repetitions performed (must be ≥ 1).\r\n * @returns The estimated 1RM rounded to the nearest integer.\r\n */\r\nexport function calculate1RM(weight: number, reps: number): number {\r\n if (reps === 1) return weight;\r\n return Math.round(weight * (36 / (37 - reps)));\r\n}\r\n"],"mappings":";;;;;;;;;AASA,SAAgB,aAAa,QAAgB,MAAsB;AACjE,KAAI,SAAS,EAAG,QAAO;AACvB,QAAO,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO"}
|
package/package.json
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "react-muscle-stats",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "React components for muscle visualization and body measurement radar charts",
|
|
6
|
+
"main": "dist/index.cjs.js",
|
|
7
|
+
"module": "dist/index.es.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.es.js",
|
|
12
|
+
"require": "./dist/index.cjs.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./MuscleVisualizer": {
|
|
16
|
+
"import": "./dist/components/MuscleVisualizer/index.es.js",
|
|
17
|
+
"require": "./dist/components/MuscleVisualizer/index.cjs.js",
|
|
18
|
+
"types": "./dist/components/MuscleVisualizer/index.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./MuscleRadar": {
|
|
21
|
+
"import": "./dist/components/MuscleRadar/index.es.js",
|
|
22
|
+
"require": "./dist/components/MuscleRadar/index.cjs.js",
|
|
23
|
+
"types": "./dist/components/MuscleRadar/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./OneRepMaxChart": {
|
|
26
|
+
"import": "./dist/components/OneRepMaxChart/index.es.js",
|
|
27
|
+
"require": "./dist/components/OneRepMaxChart/index.cjs.js",
|
|
28
|
+
"types": "./dist/components/OneRepMaxChart/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./VolumeChart": {
|
|
31
|
+
"import": "./dist/components/VolumeChart/index.es.js",
|
|
32
|
+
"require": "./dist/components/VolumeChart/index.cjs.js",
|
|
33
|
+
"types": "./dist/components/VolumeChart/index.d.ts"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"scripts": {
|
|
41
|
+
"dev": "vite",
|
|
42
|
+
"build": "tsc -p tsconfig.build.json && vite build",
|
|
43
|
+
"lint": "eslint .",
|
|
44
|
+
"preview": "vite preview"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
48
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
49
|
+
"recharts": "^2.0.0"
|
|
50
|
+
},
|
|
51
|
+
"peerDependenciesMeta": {
|
|
52
|
+
"recharts": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.39.1",
|
|
58
|
+
"@types/node": "^24.10.1",
|
|
59
|
+
"@types/react": "^19.2.7",
|
|
60
|
+
"@types/react-dom": "^19.2.3",
|
|
61
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
62
|
+
"eslint": "^9.39.1",
|
|
63
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
64
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
65
|
+
"globals": "^16.5.0",
|
|
66
|
+
"react": "^19.2.0",
|
|
67
|
+
"react-dom": "^19.2.0",
|
|
68
|
+
"recharts": "^2.15.3",
|
|
69
|
+
"typescript": "~5.9.3",
|
|
70
|
+
"typescript-eslint": "^8.48.0",
|
|
71
|
+
"vite": "^8.0.0-beta.13",
|
|
72
|
+
"vite-plugin-dts": "^4.5.4"
|
|
73
|
+
},
|
|
74
|
+
"overrides": {
|
|
75
|
+
"vite": "^8.0.0-beta.13"
|
|
76
|
+
},
|
|
77
|
+
"keywords": [
|
|
78
|
+
"react",
|
|
79
|
+
"muscle",
|
|
80
|
+
"fitness",
|
|
81
|
+
"visualization",
|
|
82
|
+
"svg",
|
|
83
|
+
"radar",
|
|
84
|
+
"body-measurements"
|
|
85
|
+
],
|
|
86
|
+
"license": "MIT"
|
|
87
|
+
}
|