@erpsquad/common 1.8.7 → 1.8.9
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/dist/_virtual/ArrowDropDown/index.esm.js +5 -0
- package/dist/_virtual/ArrowDropDown/index.esm.js.map +1 -0
- package/dist/_virtual/ArrowDropDown/index.js +2 -0
- package/dist/_virtual/ArrowDropDown/index.js.map +1 -0
- package/dist/_virtual/ArrowDropUp/index.esm.js +5 -0
- package/dist/_virtual/ArrowDropUp/index.esm.js.map +1 -0
- package/dist/_virtual/ArrowDropUp/index.js +2 -0
- package/dist/_virtual/ArrowDropUp/index.js.map +1 -0
- package/dist/components/Dashboard/dashboard-card/index.esm.js +17 -0
- package/dist/components/Dashboard/dashboard-card/index.esm.js.map +1 -0
- package/dist/components/Dashboard/dashboard-card/index.js +6 -0
- package/dist/components/Dashboard/dashboard-card/index.js.map +1 -0
- package/dist/components/Dashboard/dashboard-header/index.esm.js +68 -0
- package/dist/components/Dashboard/dashboard-header/index.esm.js.map +1 -0
- package/dist/components/Dashboard/dashboard-header/index.js +7 -0
- package/dist/components/Dashboard/dashboard-header/index.js.map +1 -0
- package/dist/components/activityLog/activity-log/index.esm.js +104 -0
- package/dist/components/activityLog/activity-log/index.esm.js.map +1 -0
- package/dist/components/activityLog/activity-log/index.js +14 -0
- package/dist/components/activityLog/activity-log/index.js.map +1 -0
- package/dist/components/charts/ChartLegends/index.esm.js +31 -0
- package/dist/components/charts/ChartLegends/index.esm.js.map +1 -0
- package/dist/components/charts/ChartLegends/index.js +5 -0
- package/dist/components/charts/ChartLegends/index.js.map +1 -0
- package/dist/components/charts/areaLinerChart/index.esm.js +110 -0
- package/dist/components/charts/areaLinerChart/index.esm.js.map +1 -0
- package/dist/components/charts/areaLinerChart/index.js +4 -0
- package/dist/components/charts/areaLinerChart/index.js.map +1 -0
- package/dist/components/charts/bar-chart/bar-chart/index.esm.js +85 -0
- package/dist/components/charts/bar-chart/bar-chart/index.esm.js.map +1 -0
- package/dist/components/charts/bar-chart/bar-chart/index.js +2 -0
- package/dist/components/charts/bar-chart/bar-chart/index.js.map +1 -0
- package/dist/components/charts/barChart/barChart/index.esm.js +147 -0
- package/dist/components/charts/barChart/barChart/index.esm.js.map +1 -0
- package/dist/components/charts/barChart/barChart/index.js +2 -0
- package/dist/components/charts/barChart/barChart/index.js.map +1 -0
- package/dist/components/charts/barLineChart/barLinechart/index.esm.js +193 -0
- package/dist/components/charts/barLineChart/barLinechart/index.esm.js.map +1 -0
- package/dist/components/charts/barLineChart/barLinechart/index.js +11 -0
- package/dist/components/charts/barLineChart/barLinechart/index.js.map +1 -0
- package/dist/components/charts/donut-chart/donut-chart/index.esm.js +85 -0
- package/dist/components/charts/donut-chart/donut-chart/index.esm.js.map +1 -0
- package/dist/components/charts/donut-chart/donut-chart/index.js +6 -0
- package/dist/components/charts/donut-chart/donut-chart/index.js.map +1 -0
- package/dist/components/charts/donutChart/DonutChart/index.esm.js +96 -0
- package/dist/components/charts/donutChart/DonutChart/index.esm.js.map +1 -0
- package/dist/components/charts/donutChart/DonutChart/index.js +5 -0
- package/dist/components/charts/donutChart/DonutChart/index.js.map +1 -0
- package/dist/components/charts/groupBarChart/GroupBarChart/index.esm.js +92 -0
- package/dist/components/charts/groupBarChart/GroupBarChart/index.esm.js.map +1 -0
- package/dist/components/charts/groupBarChart/GroupBarChart/index.js +2 -0
- package/dist/components/charts/groupBarChart/GroupBarChart/index.js.map +1 -0
- package/dist/components/charts/line-chart/area-lineChart/index.esm.js +55 -0
- package/dist/components/charts/line-chart/area-lineChart/index.esm.js.map +1 -0
- package/dist/components/charts/line-chart/area-lineChart/index.js +2 -0
- package/dist/components/charts/line-chart/area-lineChart/index.js.map +1 -0
- package/dist/components/charts/line-chart/line-chart/index.esm.js +108 -0
- package/dist/components/charts/line-chart/line-chart/index.esm.js.map +1 -0
- package/dist/components/charts/line-chart/line-chart/index.js +2 -0
- package/dist/components/charts/line-chart/line-chart/index.js.map +1 -0
- package/dist/components/charts/multiLineChart/multi-line-chart/index.esm.js +100 -0
- package/dist/components/charts/multiLineChart/multi-line-chart/index.esm.js.map +1 -0
- package/dist/components/charts/multiLineChart/multi-line-chart/index.js +2 -0
- package/dist/components/charts/multiLineChart/multi-line-chart/index.js.map +1 -0
- package/dist/components/filter/filter/index.esm.js +1 -1
- package/dist/components/filter/filter/index.js +6 -6
- package/dist/components/grid/custom-grid-card/custom-grid-card/index.esm.js +131 -0
- package/dist/components/grid/custom-grid-card/custom-grid-card/index.esm.js.map +1 -0
- package/dist/components/grid/custom-grid-card/custom-grid-card/index.js +11 -0
- package/dist/components/grid/custom-grid-card/custom-grid-card/index.js.map +1 -0
- package/dist/components/grid/grid-card/grid-card/index.esm.js +102 -0
- package/dist/components/grid/grid-card/grid-card/index.esm.js.map +1 -0
- package/dist/components/grid/grid-card/grid-card/index.js +12 -0
- package/dist/components/grid/grid-card/grid-card/index.js.map +1 -0
- package/dist/components/grid/grid-wrapper/grid-wrapper/index.esm.js +17 -0
- package/dist/components/grid/grid-wrapper/grid-wrapper/index.esm.js.map +1 -0
- package/dist/components/grid/grid-wrapper/grid-wrapper/index.js +5 -0
- package/dist/components/grid/grid-wrapper/grid-wrapper/index.js.map +1 -0
- package/dist/components/index.d.ts +54 -12
- package/dist/components/index.esm.js +479 -431
- package/dist/components/index.esm.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/material-table/material-table/index.esm.js +2 -2
- package/dist/components/material-table/material-table/index.js +4 -4
- package/dist/components/mulitline/multiline/index.esm.js +62 -0
- package/dist/components/mulitline/multiline/index.esm.js.map +1 -0
- package/dist/components/mulitline/multiline/index.js +13 -0
- package/dist/components/mulitline/multiline/index.js.map +1 -0
- package/dist/components/reports/dynamic-report/dynamic-report/index.esm.js +472 -0
- package/dist/components/reports/dynamic-report/dynamic-report/index.esm.js.map +1 -0
- package/dist/components/reports/dynamic-report/dynamic-report/index.js +8 -0
- package/dist/components/reports/dynamic-report/dynamic-report/index.js.map +1 -0
- package/dist/components/reports/dynamic-report/dynamic-rows/index.esm.js +201 -0
- package/dist/components/reports/dynamic-report/dynamic-rows/index.esm.js.map +1 -0
- package/dist/components/reports/dynamic-report/dynamic-rows/index.js +6 -0
- package/dist/components/reports/dynamic-report/dynamic-rows/index.js.map +1 -0
- package/dist/components/rfq-response/item-response-details/index.esm.js +91 -0
- package/dist/components/rfq-response/item-response-details/index.esm.js.map +1 -0
- package/dist/components/rfq-response/item-response-details/index.js +9 -0
- package/dist/components/rfq-response/item-response-details/index.js.map +1 -0
- package/dist/constants/index.d.ts +4 -1
- package/dist/constants/index.esm.js +2 -0
- package/dist/constants/index.esm.js.map +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/index.esm.js +571 -523
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/node_modules/@mui/icons-material/ArrowDropDown/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropDown/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropDown/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropDown/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropUp/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropUp/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropUp/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/ArrowDropUp/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/ascending/index.esm.js +7 -0
- package/dist/node_modules/d3-array/src/ascending/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/ascending/index.js +2 -0
- package/dist/node_modules/d3-array/src/ascending/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisect/index.esm.js +11 -0
- package/dist/node_modules/d3-array/src/bisect/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisect/index.js +2 -0
- package/dist/node_modules/d3-array/src/bisect/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisector/index.esm.js +48 -0
- package/dist/node_modules/d3-array/src/bisector/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisector/index.js +2 -0
- package/dist/node_modules/d3-array/src/bisector/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/descending/index.esm.js +7 -0
- package/dist/node_modules/d3-array/src/descending/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/descending/index.js +2 -0
- package/dist/node_modules/d3-array/src/descending/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/max/index.esm.js +22 -0
- package/dist/node_modules/d3-array/src/max/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/max/index.js +2 -0
- package/dist/node_modules/d3-array/src/max/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/min/index.esm.js +22 -0
- package/dist/node_modules/d3-array/src/min/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/min/index.js +2 -0
- package/dist/node_modules/d3-array/src/min/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/number/index.esm.js +7 -0
- package/dist/node_modules/d3-array/src/number/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/number/index.js +2 -0
- package/dist/node_modules/d3-array/src/number/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/range/index.esm.js +12 -0
- package/dist/node_modules/d3-array/src/range/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/range/index.js +2 -0
- package/dist/node_modules/d3-array/src/range/index.js.map +1 -0
- package/dist/node_modules/d3-array/src/ticks/index.esm.js +52 -0
- package/dist/node_modules/d3-array/src/ticks/index.esm.js.map +1 -0
- package/dist/node_modules/d3-array/src/ticks/index.js +2 -0
- package/dist/node_modules/d3-array/src/ticks/index.js.map +1 -0
- package/dist/node_modules/d3-axis/src/axis/index.esm.js +99 -0
- package/dist/node_modules/d3-axis/src/axis/index.esm.js.map +1 -0
- package/dist/node_modules/d3-axis/src/axis/index.js +2 -0
- package/dist/node_modules/d3-axis/src/axis/index.js.map +1 -0
- package/dist/node_modules/d3-axis/src/identity/index.esm.js +7 -0
- package/dist/node_modules/d3-axis/src/identity/index.esm.js.map +1 -0
- package/dist/node_modules/d3-axis/src/identity/index.js +2 -0
- package/dist/node_modules/d3-axis/src/identity/index.js.map +1 -0
- package/dist/node_modules/d3-color/src/color/index.esm.js +339 -0
- package/dist/node_modules/d3-color/src/color/index.esm.js.map +1 -0
- package/dist/node_modules/d3-color/src/color/index.js +2 -0
- package/dist/node_modules/d3-color/src/color/index.js.map +1 -0
- package/dist/node_modules/d3-color/src/define/index.esm.js +14 -0
- package/dist/node_modules/d3-color/src/define/index.esm.js.map +1 -0
- package/dist/node_modules/d3-color/src/define/index.js +2 -0
- package/dist/node_modules/d3-color/src/define/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/defaultLocale/index.esm.js +21 -0
- package/dist/node_modules/d3-format/src/defaultLocale/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/defaultLocale/index.js +2 -0
- package/dist/node_modules/d3-format/src/defaultLocale/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/exponent/index.esm.js +8 -0
- package/dist/node_modules/d3-format/src/exponent/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/exponent/index.js +2 -0
- package/dist/node_modules/d3-format/src/exponent/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatDecimal/index.esm.js +16 -0
- package/dist/node_modules/d3-format/src/formatDecimal/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatDecimal/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatDecimal/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatGroup/index.esm.js +16 -0
- package/dist/node_modules/d3-format/src/formatGroup/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatGroup/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatGroup/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatNumerals/index.esm.js +11 -0
- package/dist/node_modules/d3-format/src/formatNumerals/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatNumerals/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatNumerals/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto/index.esm.js +13 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatRounded/index.esm.js +11 -0
- package/dist/node_modules/d3-format/src/formatRounded/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatRounded/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatRounded/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatSpecifier/index.esm.js +38 -0
- package/dist/node_modules/d3-format/src/formatSpecifier/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatSpecifier/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatSpecifier/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTrim/index.esm.js +22 -0
- package/dist/node_modules/d3-format/src/formatTrim/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTrim/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatTrim/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTypes/index.esm.js +22 -0
- package/dist/node_modules/d3-format/src/formatTypes/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTypes/index.js +2 -0
- package/dist/node_modules/d3-format/src/formatTypes/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/identity/index.esm.js +7 -0
- package/dist/node_modules/d3-format/src/identity/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/identity/index.js +2 -0
- package/dist/node_modules/d3-format/src/identity/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/locale/index.esm.js +83 -0
- package/dist/node_modules/d3-format/src/locale/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/locale/index.js +2 -0
- package/dist/node_modules/d3-format/src/locale/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionFixed/index.esm.js +8 -0
- package/dist/node_modules/d3-format/src/precisionFixed/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionFixed/index.js +2 -0
- package/dist/node_modules/d3-format/src/precisionFixed/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionPrefix/index.esm.js +8 -0
- package/dist/node_modules/d3-format/src/precisionPrefix/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionPrefix/index.js +2 -0
- package/dist/node_modules/d3-format/src/precisionPrefix/index.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionRound/index.esm.js +9 -0
- package/dist/node_modules/d3-format/src/precisionRound/index.esm.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionRound/index.js +2 -0
- package/dist/node_modules/d3-format/src/precisionRound/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/array/index.esm.js +14 -0
- package/dist/node_modules/d3-interpolate/src/array/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/array/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/array/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/color/index.esm.js +25 -0
- package/dist/node_modules/d3-interpolate/src/color/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/color/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/color/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/constant/index.esm.js +5 -0
- package/dist/node_modules/d3-interpolate/src/constant/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/constant/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/constant/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/date/index.esm.js +10 -0
- package/dist/node_modules/d3-interpolate/src/date/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/date/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/date/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/number/index.esm.js +9 -0
- package/dist/node_modules/d3-interpolate/src/number/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/number/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/number/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/numberArray/index.esm.js +16 -0
- package/dist/node_modules/d3-interpolate/src/numberArray/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/numberArray/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/numberArray/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/object/index.esm.js +21 -0
- package/dist/node_modules/d3-interpolate/src/object/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/object/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/object/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/rgb/index.esm.js +21 -0
- package/dist/node_modules/d3-interpolate/src/rgb/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/rgb/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/rgb/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/round/index.esm.js +9 -0
- package/dist/node_modules/d3-interpolate/src/round/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/round/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/round/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/string/index.esm.js +44 -0
- package/dist/node_modules/d3-interpolate/src/string/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/string/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/string/index.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/value/index.esm.js +17 -0
- package/dist/node_modules/d3-interpolate/src/value/index.esm.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/value/index.js +2 -0
- package/dist/node_modules/d3-interpolate/src/value/index.js.map +1 -0
- package/dist/node_modules/d3-path/src/path/index.esm.js +89 -0
- package/dist/node_modules/d3-path/src/path/index.esm.js.map +1 -0
- package/dist/node_modules/d3-path/src/path/index.js +2 -0
- package/dist/node_modules/d3-path/src/path/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/band/index.esm.js +71 -0
- package/dist/node_modules/d3-scale/src/band/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/band/index.js +2 -0
- package/dist/node_modules/d3-scale/src/band/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/constant/index.esm.js +9 -0
- package/dist/node_modules/d3-scale/src/constant/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/constant/index.js +2 -0
- package/dist/node_modules/d3-scale/src/constant/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/continuous/index.esm.js +96 -0
- package/dist/node_modules/d3-scale/src/continuous/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/continuous/index.js +2 -0
- package/dist/node_modules/d3-scale/src/continuous/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/init/index.esm.js +17 -0
- package/dist/node_modules/d3-scale/src/init/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/init/index.js +2 -0
- package/dist/node_modules/d3-scale/src/init/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/linear/index.esm.js +62 -0
- package/dist/node_modules/d3-scale/src/linear/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/linear/index.js +2 -0
- package/dist/node_modules/d3-scale/src/linear/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/number/index.esm.js +7 -0
- package/dist/node_modules/d3-scale/src/number/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/number/index.js +2 -0
- package/dist/node_modules/d3-scale/src/number/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/ordinal/index.esm.js +39 -0
- package/dist/node_modules/d3-scale/src/ordinal/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/ordinal/index.js +2 -0
- package/dist/node_modules/d3-scale/src/ordinal/index.js.map +1 -0
- package/dist/node_modules/d3-scale/src/tickFormat/index.esm.js +35 -0
- package/dist/node_modules/d3-scale/src/tickFormat/index.esm.js.map +1 -0
- package/dist/node_modules/d3-scale/src/tickFormat/index.js +2 -0
- package/dist/node_modules/d3-scale/src/tickFormat/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/array/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/array/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/array/index.js +2 -0
- package/dist/node_modules/d3-selection/src/array/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/constant/index.esm.js +9 -0
- package/dist/node_modules/d3-selection/src/constant/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/constant/index.js +2 -0
- package/dist/node_modules/d3-selection/src/constant/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/creator/index.esm.js +21 -0
- package/dist/node_modules/d3-selection/src/creator/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/creator/index.js +2 -0
- package/dist/node_modules/d3-selection/src/creator/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/matcher/index.esm.js +15 -0
- package/dist/node_modules/d3-selection/src/matcher/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/matcher/index.js +2 -0
- package/dist/node_modules/d3-selection/src/matcher/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/namespace/index.esm.js +10 -0
- package/dist/node_modules/d3-selection/src/namespace/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/namespace/index.js +2 -0
- package/dist/node_modules/d3-selection/src/namespace/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/namespaces/index.esm.js +13 -0
- package/dist/node_modules/d3-selection/src/namespaces/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/namespaces/index.js +2 -0
- package/dist/node_modules/d3-selection/src/namespaces/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/pointer/index.esm.js +23 -0
- package/dist/node_modules/d3-selection/src/pointer/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/pointer/index.js +2 -0
- package/dist/node_modules/d3-selection/src/pointer/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/select/index.esm.js +8 -0
- package/dist/node_modules/d3-selection/src/select/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/select/index.js +2 -0
- package/dist/node_modules/d3-selection/src/select/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/append/index.esm.js +11 -0
- package/dist/node_modules/d3-selection/src/selection/append/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/append/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/append/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/attr/index.esm.js +47 -0
- package/dist/node_modules/d3-selection/src/selection/attr/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/attr/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/attr/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/call/index.esm.js +10 -0
- package/dist/node_modules/d3-selection/src/selection/call/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/call/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/call/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/classed/index.esm.js +65 -0
- package/dist/node_modules/d3-selection/src/selection/classed/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/classed/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/classed/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/clone/index.esm.js +15 -0
- package/dist/node_modules/d3-selection/src/selection/clone/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/clone/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/clone/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/data/index.esm.js +77 -0
- package/dist/node_modules/d3-selection/src/selection/data/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/data/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/data/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/datum/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/selection/datum/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/datum/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/datum/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/dispatch/index.esm.js +29 -0
- package/dist/node_modules/d3-selection/src/selection/dispatch/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/dispatch/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/dispatch/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/each/index.esm.js +12 -0
- package/dist/node_modules/d3-selection/src/selection/each/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/each/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/each/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/empty/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/selection/empty/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/empty/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/empty/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/enter/index.esm.js +32 -0
- package/dist/node_modules/d3-selection/src/selection/enter/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/enter/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/enter/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/exit/index.esm.js +9 -0
- package/dist/node_modules/d3-selection/src/selection/exit/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/exit/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/exit/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/filter/index.esm.js +17 -0
- package/dist/node_modules/d3-selection/src/selection/filter/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/filter/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/filter/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/html/index.esm.js +21 -0
- package/dist/node_modules/d3-selection/src/selection/html/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/html/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/html/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/index/index.esm.js +85 -0
- package/dist/node_modules/d3-selection/src/selection/index/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/index/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/index/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/insert/index.esm.js +15 -0
- package/dist/node_modules/d3-selection/src/selection/insert/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/insert/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/insert/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/iterator/index.esm.js +11 -0
- package/dist/node_modules/d3-selection/src/selection/iterator/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/iterator/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/iterator/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/join/index.esm.js +20 -0
- package/dist/node_modules/d3-selection/src/selection/join/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/join/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/join/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/lower/index.esm.js +10 -0
- package/dist/node_modules/d3-selection/src/selection/lower/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/lower/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/lower/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/merge/index.esm.js +19 -0
- package/dist/node_modules/d3-selection/src/selection/merge/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/merge/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/merge/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/node/index.esm.js +13 -0
- package/dist/node_modules/d3-selection/src/selection/node/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/node/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/node/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/nodes/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/selection/nodes/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/nodes/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/nodes/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/on/index.esm.js +65 -0
- package/dist/node_modules/d3-selection/src/selection/on/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/on/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/on/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/order/index.esm.js +15 -0
- package/dist/node_modules/d3-selection/src/selection/order/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/order/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/order/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/property/index.esm.js +24 -0
- package/dist/node_modules/d3-selection/src/selection/property/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/property/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/property/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/raise/index.esm.js +10 -0
- package/dist/node_modules/d3-selection/src/selection/raise/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/raise/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/raise/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/remove/index.esm.js +11 -0
- package/dist/node_modules/d3-selection/src/selection/remove/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/remove/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/remove/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/select/index.esm.js +18 -0
- package/dist/node_modules/d3-selection/src/selection/select/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/select/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/select/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectAll/index.esm.js +25 -0
- package/dist/node_modules/d3-selection/src/selection/selectAll/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectAll/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/selectAll/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectChild/index.esm.js +17 -0
- package/dist/node_modules/d3-selection/src/selection/selectChild/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectChild/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/selectChild/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectChildren/index.esm.js +17 -0
- package/dist/node_modules/d3-selection/src/selection/selectChildren/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/selectChildren/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/selectChildren/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/size/index.esm.js +9 -0
- package/dist/node_modules/d3-selection/src/selection/size/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/size/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/size/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/sort/index.esm.js +23 -0
- package/dist/node_modules/d3-selection/src/selection/sort/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/sort/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/sort/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/sparse/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/selection/sparse/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/sparse/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/sparse/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/style/index.esm.js +29 -0
- package/dist/node_modules/d3-selection/src/selection/style/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/style/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/style/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/text/index.esm.js +21 -0
- package/dist/node_modules/d3-selection/src/selection/text/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selection/text/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selection/text/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selector/index.esm.js +11 -0
- package/dist/node_modules/d3-selection/src/selector/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selector/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selector/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selectorAll/index.esm.js +12 -0
- package/dist/node_modules/d3-selection/src/selectorAll/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/selectorAll/index.js +2 -0
- package/dist/node_modules/d3-selection/src/selectorAll/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/sourceEvent/index.esm.js +9 -0
- package/dist/node_modules/d3-selection/src/sourceEvent/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/sourceEvent/index.js +2 -0
- package/dist/node_modules/d3-selection/src/sourceEvent/index.js.map +1 -0
- package/dist/node_modules/d3-selection/src/window/index.esm.js +7 -0
- package/dist/node_modules/d3-selection/src/window/index.esm.js.map +1 -0
- package/dist/node_modules/d3-selection/src/window/index.js +2 -0
- package/dist/node_modules/d3-selection/src/window/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/arc/index.esm.js +134 -0
- package/dist/node_modules/d3-shape/src/arc/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/arc/index.js +2 -0
- package/dist/node_modules/d3-shape/src/arc/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/area/index.esm.js +82 -0
- package/dist/node_modules/d3-shape/src/area/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/area/index.js +2 -0
- package/dist/node_modules/d3-shape/src/area/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/array/index.esm.js +7 -0
- package/dist/node_modules/d3-shape/src/array/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/array/index.js +2 -0
- package/dist/node_modules/d3-shape/src/array/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/constant/index.esm.js +9 -0
- package/dist/node_modules/d3-shape/src/constant/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/constant/index.js +2 -0
- package/dist/node_modules/d3-shape/src/constant/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linear/index.esm.js +39 -0
- package/dist/node_modules/d3-shape/src/curve/linear/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linear/index.js +2 -0
- package/dist/node_modules/d3-shape/src/curve/linear/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/monotone/index.esm.js +76 -0
- package/dist/node_modules/d3-shape/src/curve/monotone/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/monotone/index.js +2 -0
- package/dist/node_modules/d3-shape/src/curve/monotone/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/descending/index.esm.js +7 -0
- package/dist/node_modules/d3-shape/src/descending/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/descending/index.js +2 -0
- package/dist/node_modules/d3-shape/src/descending/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/identity/index.esm.js +7 -0
- package/dist/node_modules/d3-shape/src/identity/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/identity/index.js +2 -0
- package/dist/node_modules/d3-shape/src/identity/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/line/index.esm.js +42 -0
- package/dist/node_modules/d3-shape/src/line/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/line/index.js +2 -0
- package/dist/node_modules/d3-shape/src/line/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/math/index.esm.js +33 -0
- package/dist/node_modules/d3-shape/src/math/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/math/index.js +2 -0
- package/dist/node_modules/d3-shape/src/math/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/path/index.esm.js +20 -0
- package/dist/node_modules/d3-shape/src/path/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/path/index.js +2 -0
- package/dist/node_modules/d3-shape/src/path/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/pie/index.esm.js +56 -0
- package/dist/node_modules/d3-shape/src/pie/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/pie/index.js +2 -0
- package/dist/node_modules/d3-shape/src/pie/index.js.map +1 -0
- package/dist/node_modules/d3-shape/src/point/index.esm.js +11 -0
- package/dist/node_modules/d3-shape/src/point/index.esm.js.map +1 -0
- package/dist/node_modules/d3-shape/src/point/index.js +2 -0
- package/dist/node_modules/d3-shape/src/point/index.js.map +1 -0
- package/dist/node_modules/internmap/src/index/index.esm.js +44 -0
- package/dist/node_modules/internmap/src/index/index.esm.js.map +1 -0
- package/dist/node_modules/internmap/src/index/index.js +2 -0
- package/dist/node_modules/internmap/src/index/index.js.map +1 -0
- package/dist/style.css +2 -2
- package/dist/views/template-editor/components/EditorHeader/index.esm.js +1 -1
- package/dist/views/template-editor/components/EditorHeader/index.js +3 -3
- package/dist/views/template-editor/utils/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=;/* empty css */;/* empty css */var n=,/* empty css */s=,/* empty css */l=,/* empty css */a=,/* empty css */d=,/* empty css */o=,/* empty css */i=,/* empty css */c=,/* empty css */u=,/* empty css */h=,/* empty css */f=;/* empty css */exports.default=({data:p,height:x=400,margin:m={top:20,right:30,bottom:30,left:50},bars:y,lines:g,line:j=!0,showGrid:v=!0,barColors:b,lineColors:k})=>{var w;const q=t.useRef(null),_=t.useRef(null),$=t.useRef(null),[C,R]=t.useState(null),[A,E]=t.useState(0),L=e=>c.format(".2s")(e).replace("k","K"),M=p.length>y.length,B=M?Math.max(60*p.length,A):A;return t.useEffect(()=>{const e=_.current,t=new ResizeObserver(e=>{if(e[0]){const t=e[0].contentRect.width;E(t)}});return e&&t.observe(e),()=>{e&&t.unobserve(e)}},[]),t.useEffect(()=>{if(0===A)return;const e=n.default(p,e=>Math.max(...y.map(t=>e[t.field]),...g.map(t=>e[t.field])))??0,t=s.default(p,e=>Math.min(...y.map(t=>e[t.field]),...g.map(t=>e[t.field])))??0,r=o.default(q.current),d=B-m.left-m.right,c=e||t?x-m.top-m.bottom:0,w=l.default().domain(p.map(e=>e.month)).range([0,d]).padding(.3),_=a.default().domain([t,e]).nice().range([c,0]);r.selectAll("*").remove();const C=r.append("g").attr("transform",`translate(${m.left},${m.top})`);C.append("g").call(i.axisLeft(_).tickFormat(L)).call(e=>e.select(".domain").remove()).select(".domain").attr("stroke","none"),C.append("g").attr("transform",`translate(0,${c})`).call(i.axisBottom(w)).selectAll(".tick text").attr("text-anchor","middle").select(".domain").attr("stroke","none"),v&&C.selectAll(".grid-line").data(_.ticks()).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",d).attr("y1",e=>_(e)).attr("y2",e=>_(e)).style("stroke","#ddd").style("stroke-dasharray","8,8").style("stroke-width",1),j&&C.selectAll(".grid-line-2").data(_.ticks()).enter().append("line").attr("class","grid-line-2").attr("x1",0).attr("x2",d).attr("y1",e=>_(e)).attr("y2",e=>_(e)).style("stroke","#ddd").style("stroke-dasharray","8,8").style("stroke-width",1),y.forEach((e,t)=>{C.selectAll(`.bar-${e.field}`).data(p).enter().append("rect").attr("class",`bar bar-${e.field}`).attr("x",e=>w(e.month)??0).attr("y",t=>t[e.field]>=0?_(t[e.field]):_(0)).attr("rx",5).attr("ry",5).attr("width",w.bandwidth()/y.length).attr("height",t=>Math.abs(_(t[e.field])-_(0))).attr("fill",b[t]).attr("transform",`translate(${t*w.bandwidth()/y.length}, 0)`).on("mouseover",function(e,t){var r;const[n,s]=u.default(e,q.current),l=(null==(r=$.current)?void 0:r.scrollLeft)||0;R({x:n+m.left-l,y:s+m.top,content:t})}).on("mouseout",()=>R(null))}),g.forEach((e,t)=>{const r=h.default().x(e=>(w(e.month)??0)+w.bandwidth()/2).y(t=>_(t[e.field])).curve(f.monotoneX);C.append("path").datum(p).attr("fill","none").attr("stroke",k[t]).attr("stroke-width",2).attr("d",r).on("mouseover",function(t){var r;const[n]=u.default(t,q.current),s=w.domain().find(e=>{const t=w(e)??0;return n>=t&&n<=t+w.bandwidth()});if(s){const t=p.find(e=>e.month===s);if(t){const s=(null==(r=$.current)?void 0:r.scrollLeft)||0;R({x:n+m.left-s,y:_(t[e.field])+m.top,content:t})}}}).on("mouseout",()=>R(null))})},[p,A,B,j,x,m,y,g,v,b,k]),/* @__PURE__ */e.jsx("div",{ref:_,style:{width:"100%",height:"100%"},children:/* @__PURE__ */e.jsxs("div",{style:{position:"relative"},children:[
|
|
2
|
+
/* @__PURE__ */e.jsx("div",{ref:$,style:{width:"100%",overflowX:M?"auto":"hidden",overflowY:"hidden"},children:/* @__PURE__ */e.jsx("svg",{ref:q,width:B,height:x,viewBox:`0 0 ${B} ${x}`,style:{display:"block"}})}),C&&/* @__PURE__ */e.jsx("div",{style:{position:"absolute",left:C.x,top:C.y,pointerEvents:"none",backgroundColor:"white",zIndex:"99999",border:"none",padding:"5px",borderRadius:"3px",transform:"translate(-50%, -100%)"},children:/* @__PURE__ */e.jsxs(d.default,{children:[
|
|
3
|
+
/* @__PURE__ */e.jsx("div",{style:{background:"#F3F2F2",padding:"10px"},children:/* @__PURE__ */e.jsx(r.Typography,{type:"s4",style:{whiteSpace:"noWrap",width:"200px",color:"#232529"},children:null==(w=C.content)?void 0:w.month})}),
|
|
4
|
+
/* @__PURE__ */e.jsxs(d.default,{sx:{p:1.5,display:"flex",flexDirection:"column",gap:1.5},children:[y.map((t,n)=>/* @__PURE__ */e.jsxs(d.default,{sx:{display:"flex",gap:1.5,alignItems:"center"},children:[
|
|
5
|
+
/* @__PURE__ */e.jsx("div",{className:"circle",style:{backgroundColor:b[n]}}),
|
|
6
|
+
/* @__PURE__ */e.jsxs(r.Typography,{type:"s5",color:"theme.secondary.900",children:[t.label,": ",
|
|
7
|
+
/* @__PURE__ */e.jsxs("span",{style:{fontWeight:600},children:["$ ",C.content[t.field]]})]})]},`bar-${n}`)),g.map((t,n)=>/* @__PURE__ */e.jsxs(d.default,{sx:{display:"flex",gap:1.5,alignItems:"center"},children:[
|
|
8
|
+
/* @__PURE__ */e.jsx("div",{className:"circle",style:{backgroundColor:k[n]}}),
|
|
9
|
+
/* @__PURE__ */e.jsxs(r.Typography,{type:"s5",color:"theme.secondary.900",children:[t.label,": ",
|
|
10
|
+
/* @__PURE__ */e.jsxs("span",{style:{fontWeight:600},children:["$ ",C.content[t.field]]})]})]},`line-${n}`))]})]})})]})})};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/charts/barLineChart/barLinechart.tsx"],"sourcesContent":["import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\nimport { Box, /* List, ListItem */ } from '@mui/material';\nimport Typography from '../../typography/typography';\nimport './barLineChart.scss';\n\ninterface DataPoint {\n [key: string]: string | number;\n}\n\ninterface ChartField {\n field: string;\n color: string;\n label: string;\n}\n\nexport interface IBarLineChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n margin?: { top: number; right: number; bottom: number; left: number };\n bars: ChartField[];\n lines: ChartField[];\n line?: boolean;\n showGrid?: boolean;\n barColors?: any[];\n lineColors?: any[];\n}\n\nconst BarLineChart: React.FC<IBarLineChartProps> = ({\n data,\n height = 400,\n margin = { top: 20, right: 30, bottom: 30, left: 50 },\n bars,\n lines,\n line = true,\n showGrid = true,\n barColors,\n lineColors\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [tooltip, setTooltip] = useState<{ x: number; y: number; content: DataPoint } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n const formatNumber = (num: number) => d3.format('.2s')(num).replace('k', 'K');\n\n const needsHorizontalScroll = data.length > bars.length;\n const minBarWidth = 60\n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(data.length * minBarWidth, containerWidth)\n : containerWidth;\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, [])\n \n useEffect(() => {\n if (containerWidth === 0) return;\n const yMax = d3.max(data, d => {\n return Math.max(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n const yMin = d3.min(data, d => {\n return Math.min(\n ...bars.map(bar => d[bar.field] as number),\n ...lines.map(line => d[line.field] as number)\n );\n }) ?? 0;\n\n const svg = d3.select(svgRef.current);\n const innerWidth = calculatedChartWidth - margin.left - margin.right;\n const innerHeight = yMax || yMin ? height - margin.top - margin.bottom : 0;\n\n const x = d3.scaleBand()\n .domain(data.map(d => d.month as string))\n .range([0, innerWidth])\n .padding(0.3);\n\n const y = d3.scaleLinear()\n .domain([yMin, yMax])\n .nice()\n .range([innerHeight, 0]);\n\n svg.selectAll('*').remove();\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`);\n\n // Y axis\n const yAxis = g.append('g')\n .call(d3.axisLeft(y).tickFormat(formatNumber))\n .call(g => g.select('.domain').remove());\n yAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // X axis\n const xAxis = g.append('g')\n .attr('transform', `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .selectAll('.tick text')\n .attr('text-anchor', 'middle');\n xAxis.select(\".domain\").attr(\"stroke\", \"none\")\n \n // Render grid lines if applicable\n if (showGrid) {\n g.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1);\n }\n \n // Render grid lines if applicable\n if (line) {\n g.selectAll('.grid-line-2')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line-2')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '8,8') // Dotted line\n .style('stroke-width', 1)\n }\n\n // Draw bars for bar chart\n bars.forEach((bar, i) => {\n g.selectAll(`.bar-${bar.field}`)\n .data(data)\n .enter()\n .append('rect')\n .attr('class', `bar bar-${bar.field}`)\n .attr('x', d => x(d.month as string) ?? 0)\n .attr('y', d => d[bar.field] >= 0 ? y(d[bar.field]) : y(0)) // Positive bars above y(0), negative bars below\n .attr(\"rx\", 5)\n .attr(\"ry\", 5)\n .attr('width', x.bandwidth() / bars.length)\n .attr('height', d => {\n return Math.abs(y(d[bar.field]) - y(0)); // Absolute height from y(0)\n })\n .attr('fill', barColors[i])\n .attr('transform', `translate(${(i * x.bandwidth()) / bars.length}, 0)`)\n .on('mouseover', function (event, d) {\n const [xPos, yPos] = d3.pointer(event, svgRef.current);\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({ \n x: xPos + margin.left - scrollLeft, \n y: yPos + margin.top, \n content: d \n });\n })\n .on('mouseout', () => setTooltip(null));\n });\n \n // Draw lines for line chart\n lines.forEach((line, index) => {\n const lineGenerator = d3.line<DataPoint>()\n .x(d => (x(d.month as string) ?? 0) + x.bandwidth() / 2) // Calculate x position for each data point\n .y(d => y(d[line.field] as number))\n .curve(d3.curveMonotoneX);\n\n g.append('path')\n .datum(data)\n .attr('fill', 'none')\n .attr('stroke', lineColors[index])\n .attr('stroke-width', 2)\n .attr('d', lineGenerator)\n .on('mouseover', function (event) {\n const [xPos] = d3.pointer(event, svgRef.current);\n const month = x.domain().find((month) => {\n const monthPosition = x(month as string) ?? 0;\n return xPos >= monthPosition && xPos <= monthPosition + x.bandwidth();\n });\n\n if (month) {\n const closestDataPoint = data.find(d => d.month === month);\n if (closestDataPoint) {\n const scrollLeft = scrollContainerRef.current?.scrollLeft || 0;\n setTooltip({\n x: xPos + margin.left - scrollLeft,\n y: y(closestDataPoint[line.field]) + margin.top,\n content: closestDataPoint\n });\n }\n }\n })\n .on('mouseout', () => setTooltip(null));\n });\n }, [data, containerWidth, calculatedChartWidth, line, height, margin, bars, lines, showGrid, barColors, lineColors]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n {tooltip && (\n <div\n style={{\n position: 'absolute',\n left: tooltip.x,\n top: tooltip.y,\n pointerEvents: 'none',\n backgroundColor: 'white',\n zIndex: '99999',\n border: 'none',\n padding: '5px',\n borderRadius: '3px',\n transform: 'translate(-50%, -100%)'\n }}\n >\n <Box>\n <div style={{ background: '#F3F2F2', padding: '10px' }}>\n <Typography type='s4' style={{ whiteSpace: 'noWrap', width: '200px', color: '#232529' }}>{tooltip.content?.month}</Typography>\n </div>\n <Box sx={{ p: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n\n {bars.map((bar, index) => (\n <Box key={`bar-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: barColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {bar.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[bar.field]}</span>\n </Typography>\n </Box>\n ))}\n {lines.map((line, index) => (\n <Box key={`line-${index}`} sx={{ display: 'flex', gap: 1.5, alignItems: 'center' }}>\n <div className=\"circle\" style={{ backgroundColor: lineColors[index] }} />\n <Typography type='s5' color='theme.secondary.900'>\n {line.label}: <span style={{ fontWeight: 600 }}>$ {tooltip.content[line.field]}</span>\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n \n </div>\n )\n }\n </div>\n </div>\n );\n};\n\nexport default BarLineChart;"],"names":["data","height","margin","top","right","bottom","left","bars","lines","line","showGrid","barColors","lineColors","svgRef","useRef","wrapperRef","scrollContainerRef","tooltip","setTooltip","useState","containerWidth","setContainerWidth","formatNumber","num","d3.format","replace","needsHorizontalScroll","length","calculatedChartWidth","Math","max","useEffect","wrapper","current","resizeObserver","ResizeObserver","entries","newWidth","contentRect","width","observe","unobserve","yMax","d3.max","d","map","bar","field","yMin","d3.min","min","svg","d3.select","innerWidth","innerHeight","x","d3.scaleBand","domain","month","range","padding","y","d3.scaleLinear","nice","selectAll","remove","g","append","attr","call","d3.axisLeft","tickFormat","select","d3.axisBottom","ticks","enter","style","forEach","i","bandwidth","abs","on","event","xPos","yPos","d3.pointer","scrollLeft","_a","content","index","lineGenerator","d3.line","curve","d3.curveMonotoneX","datum","find","monthPosition","closestDataPoint","ref","children","jsxs","position","jsx","overflowX","overflowY","viewBox","display","pointerEvents","backgroundColor","zIndex","border","borderRadius","transform","Box","background","Typography","type","whiteSpace","color","sx","p","flexDirection","gap","alignItems","className","label","fontWeight"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect } from "react";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { Typography } from "../../../typography/typography/index.esm.js";
|
|
5
|
+
import select from "../../../../node_modules/d3-selection/src/select/index.esm.js";
|
|
6
|
+
import pie from "../../../../node_modules/d3-shape/src/pie/index.esm.js";
|
|
7
|
+
import arc from "../../../../node_modules/d3-shape/src/arc/index.esm.js";
|
|
8
|
+
const defaultColors = [
|
|
9
|
+
"#5BCE97",
|
|
10
|
+
"#B3D8E2",
|
|
11
|
+
"#F5F6F5",
|
|
12
|
+
"#AE6B9E",
|
|
13
|
+
"#CBD49A",
|
|
14
|
+
"#EEE0B3"
|
|
15
|
+
];
|
|
16
|
+
const getSingleNumberFromString = (str) => {
|
|
17
|
+
if (typeof str === "number") {
|
|
18
|
+
return str;
|
|
19
|
+
}
|
|
20
|
+
const match = (str == null ? void 0 : str.match(/\d.+/)) || null;
|
|
21
|
+
return match ? Number(match[0]) : 0;
|
|
22
|
+
};
|
|
23
|
+
const DonutChart = ({
|
|
24
|
+
data,
|
|
25
|
+
height = 140,
|
|
26
|
+
width = 140,
|
|
27
|
+
isUserDashbord,
|
|
28
|
+
legend = true,
|
|
29
|
+
direction = "horizontal",
|
|
30
|
+
totalUsers,
|
|
31
|
+
total = isUserDashbord ? totalUsers : "2.4 GB",
|
|
32
|
+
colors = defaultColors,
|
|
33
|
+
titleProps = {},
|
|
34
|
+
valueProps = {}
|
|
35
|
+
}) => {
|
|
36
|
+
const svgRef = useRef(null);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!svgRef.current) return;
|
|
39
|
+
const svg = select(svgRef.current);
|
|
40
|
+
svg.selectAll("*").remove();
|
|
41
|
+
const margin = 6;
|
|
42
|
+
const outerRadius = Math.min(width, height) / 2 - margin;
|
|
43
|
+
const innerRadius = Math.min(width, height) / 2 - margin * 2;
|
|
44
|
+
const g = svg.append("g").attr("transform", `translate(${width / 2}, ${height / 2})`);
|
|
45
|
+
const pie$1 = pie().value((d) => getSingleNumberFromString(d.value));
|
|
46
|
+
const path = arc().outerRadius(outerRadius).innerRadius(innerRadius);
|
|
47
|
+
const pies = g.selectAll(".arc").data(pie$1(data)).enter().append("g").attr("class", "arc");
|
|
48
|
+
pies.append("path").attr("d", path).attr("fill", (d, i) => {
|
|
49
|
+
return colors[i % colors.length];
|
|
50
|
+
});
|
|
51
|
+
g.append("text").attr("text-anchor", "middle").attr("font-size", "18px").attr("font-weight", "600").attr("alignment-baseline", `central`).html(total);
|
|
52
|
+
}, [colors, data, height, total, width]);
|
|
53
|
+
if (!legend) {
|
|
54
|
+
return /* @__PURE__ */ jsx("svg", { ref: svgRef, width, height });
|
|
55
|
+
}
|
|
56
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: `donut-chart-container ${direction}`, children: [
|
|
57
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("svg", { ref: svgRef, width, height }) }),
|
|
58
|
+
/* @__PURE__ */ jsx("div", { className: "donut-chart-legend", children: data && data.map((d, i) => {
|
|
59
|
+
return /* @__PURE__ */ jsxs(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
className: "legend",
|
|
63
|
+
style: { borderLeft: `0.188rem solid ${colors[i]}` },
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx("div", { className: "legend-title", children: /* @__PURE__ */ jsx(Typography, { type: "s5", color: "theme.secondary.800", ...titleProps, children: d.label }) }),
|
|
66
|
+
/* @__PURE__ */ jsx("div", { className: "legend-value", children: /* @__PURE__ */ jsx(
|
|
67
|
+
Typography,
|
|
68
|
+
{
|
|
69
|
+
type: "s5",
|
|
70
|
+
weight: "medium",
|
|
71
|
+
color: "theme.secondary.1000",
|
|
72
|
+
children: /* @__PURE__ */ jsx(Typography, { type: "s5", color: "theme.secondary.1000", weight: "bold", ...valueProps, children: d.value })
|
|
73
|
+
}
|
|
74
|
+
) })
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
d.label
|
|
78
|
+
);
|
|
79
|
+
}) })
|
|
80
|
+
] }) });
|
|
81
|
+
};
|
|
82
|
+
export {
|
|
83
|
+
DonutChart as default
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../../src/components/charts/donut-chart/donut-chart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n colors ?:Array<string>;\n titleProps?:any\n valueProps?:any \n isUserDashbord ?: boolean \n totalUsers ? : any \n}\n\nconst defaultColors = [\n \"#5BCE97\",\n \"#B3D8E2\",\n \"#F5F6F5\",\n \"#AE6B9E\",\n \"#CBD49A\",\n \"#EEE0B3\",\n];\n\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n\tdata,\n\theight = 140,\n\twidth = 140,\n isUserDashbord , \n\tlegend = true,\n\tdirection = 'horizontal' ,\n totalUsers , \n\ttotal = isUserDashbord ? totalUsers : \"2.4 GB\",\n colors = defaultColors,\n titleProps={},\n valueProps={}, \n\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n const innerRadius = Math.min(width, height) / 2 - margin * 2;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n //@ts-expect-error not applicable\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value));\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius);\n\n const pies = g\n .selectAll(\".arc\")\n //@ts-expect-error not applicable\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n pies\n .append(\"path\")\n //@ts-expect-error not applicable\n .attr(\"d\", path)\n //@ts-expect-error not applicable\n .attr(\"fill\", (d: DataPoint, i: number) => {\n return colors[i % colors.length]});\n\n\n // const words = total.split(' '); // Split the text into words\n // const lineHeight = 22; // Define the line height\n // const maxCharsPerLine = 15; // Define the maximum number of characters per line\n\n // let currentLine = '';\n // let lineNumber = 0;\n\n // const textElement =\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n // .text(total);\n\n // words.forEach((word) => {\n // \tconst tempLine = currentLine + word + ' ';\n\n // \t// Check if the line exceeds the max character count\n // \tif (tempLine.length > maxCharsPerLine && currentLine.length > 0) {\n // \t\ttextElement\n // \t\t\t.append('tspan')\n // \t\t\t.attr('x', 0)\n // \t\t\t.attr('y', lineHeight * lineNumber)\n // \t\t\t.text(currentLine.trim());\n\n // \t\tcurrentLine = word + ' ';\n // \t\tlineNumber++;\n // \t} else {\n // \t\tcurrentLine = tempLine;\n // \t}\n // });\n\n // // Add the last line\n // textElement\n // \t.append('tspan')\n // \t.attr('x', 0)\n // \t.attr('y', lineHeight * lineNumber)\n // \t.text(currentLine.trim());\n }, [colors, data, height, total, width]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n <div className=\"donut-chart-legend\">\n {data && data.map((d: DataPoint, i: number) => {\n return (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${colors[i]}` }}\n >\n <div className=\"legend-title\">\n <Typography type=\"s5\" color=\"theme.secondary.800\" {...titleProps}>\n {d.label}\n </Typography>\n </div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n >\n <Typography type=\"s5\" color=\"theme.secondary.1000\" weight=\"bold\" {...valueProps}>\n {d.value}\n </Typography>\n </Typography>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n};\n\nexport default DonutChart;\n"],"names":["d3.select","pie","d3.pie","d3.arc"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");;/* empty css */var r=,/* empty css */s=,/* empty css */a=,/* empty css */l=;/* empty css */const n=["#5BCE97","#B3D8E2","#F5F6F5","#AE6B9E","#CBD49A","#EEE0B3"];exports.default=({data:d,height:i=140,width:o=140,isUserDashbord:c,legend:h=!0,direction:u="horizontal",totalUsers:p,total:m=(c?p:"2.4 GB"),colors:g=n,titleProps:x={},valueProps:j={}})=>{const y=t.useRef(null);return t.useEffect(()=>{if(!y.current)return;const e=s.default(y.current);e.selectAll("*").remove();const t=Math.min(o,i)/2-6,r=Math.min(o,i)/2-12,n=e.append("g").attr("transform",`translate(${o/2}, ${i/2})`),c=a.default().value(e=>(e=>{if("number"==typeof e)return e;const t=(null==e?void 0:e.match(/\d.+/))||null;return t?Number(t[0]):0})(e.value)),h=l.default().outerRadius(t).innerRadius(r);n.selectAll(".arc").data(c(d)).enter().append("g").attr("class","arc").append("path").attr("d",h).attr("fill",(e,t)=>g[t%g.length]),n.append("text").attr("text-anchor","middle").attr("font-size","18px").attr("font-weight","600").attr("alignment-baseline","central").html(m)},[g,d,i,m,o]),h?/* @__PURE__ */e.jsx(e.Fragment,{children:/* @__PURE__ */e.jsxs("div",{className:`donut-chart-container ${u}`,children:[
|
|
2
|
+
/* @__PURE__ */e.jsx("div",{children:/* @__PURE__ */e.jsx("svg",{ref:y,width:o,height:i})}),
|
|
3
|
+
/* @__PURE__ */e.jsx("div",{className:"donut-chart-legend",children:d&&d.map((t,s)=>/* @__PURE__ */e.jsxs("div",{className:"legend",style:{borderLeft:`0.188rem solid ${g[s]}`},children:[
|
|
4
|
+
/* @__PURE__ */e.jsx("div",{className:"legend-title",children:/* @__PURE__ */e.jsx(r.Typography,{type:"s5",color:"theme.secondary.800",...x,children:t.label})}),
|
|
5
|
+
/* @__PURE__ */e.jsx("div",{className:"legend-value",children:/* @__PURE__ */e.jsx(r.Typography,{type:"s5",weight:"medium",color:"theme.secondary.1000",children:/* @__PURE__ */e.jsx(r.Typography,{type:"s5",color:"theme.secondary.1000",weight:"bold",...j,children:t.value})})})]},t.label))})]})}):/* @__PURE__ */e.jsx("svg",{ref:y,width:o,height:i})};
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/charts/donut-chart/donut-chart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n colors ?:Array<string>;\n titleProps?:any\n valueProps?:any \n isUserDashbord ?: boolean \n totalUsers ? : any \n}\n\nconst defaultColors = [\n \"#5BCE97\",\n \"#B3D8E2\",\n \"#F5F6F5\",\n \"#AE6B9E\",\n \"#CBD49A\",\n \"#EEE0B3\",\n];\n\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n\tdata,\n\theight = 140,\n\twidth = 140,\n isUserDashbord , \n\tlegend = true,\n\tdirection = 'horizontal' ,\n totalUsers , \n\ttotal = isUserDashbord ? totalUsers : \"2.4 GB\",\n colors = defaultColors,\n titleProps={},\n valueProps={}, \n\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n const innerRadius = Math.min(width, height) / 2 - margin * 2;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n //@ts-expect-error not applicable\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value));\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius);\n\n const pies = g\n .selectAll(\".arc\")\n //@ts-expect-error not applicable\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n pies\n .append(\"path\")\n //@ts-expect-error not applicable\n .attr(\"d\", path)\n //@ts-expect-error not applicable\n .attr(\"fill\", (d: DataPoint, i: number) => {\n return colors[i % colors.length]});\n\n\n // const words = total.split(' '); // Split the text into words\n // const lineHeight = 22; // Define the line height\n // const maxCharsPerLine = 15; // Define the maximum number of characters per line\n\n // let currentLine = '';\n // let lineNumber = 0;\n\n // const textElement =\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n // .text(total);\n\n // words.forEach((word) => {\n // \tconst tempLine = currentLine + word + ' ';\n\n // \t// Check if the line exceeds the max character count\n // \tif (tempLine.length > maxCharsPerLine && currentLine.length > 0) {\n // \t\ttextElement\n // \t\t\t.append('tspan')\n // \t\t\t.attr('x', 0)\n // \t\t\t.attr('y', lineHeight * lineNumber)\n // \t\t\t.text(currentLine.trim());\n\n // \t\tcurrentLine = word + ' ';\n // \t\tlineNumber++;\n // \t} else {\n // \t\tcurrentLine = tempLine;\n // \t}\n // });\n\n // // Add the last line\n // textElement\n // \t.append('tspan')\n // \t.attr('x', 0)\n // \t.attr('y', lineHeight * lineNumber)\n // \t.text(currentLine.trim());\n }, [colors, data, height, total, width]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n <div className=\"donut-chart-legend\">\n {data && data.map((d: DataPoint, i: number) => {\n return (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${colors[i]}` }}\n >\n <div className=\"legend-title\">\n <Typography type=\"s5\" color=\"theme.secondary.800\" {...titleProps}>\n {d.label}\n </Typography>\n </div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n >\n <Typography type=\"s5\" color=\"theme.secondary.1000\" weight=\"bold\" {...valueProps}>\n {d.value}\n </Typography>\n </Typography>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n};\n\nexport default DonutChart;\n"],"names":["defaultColors","data","height","width","isUserDashbord","legend","direction","totalUsers","total","colors","titleProps","valueProps","svgRef","useRef","useEffect","current","svg","d3.select","selectAll","remove","outerRadius","Math","min","innerRadius","margin","g","append","attr","pie","d3.pie","value","d","str","match","Number","getSingleNumberFromString","path","d3.arc","enter","i","length","html","children","jsxs","className","jsx","ref","map","style","borderLeft","Typography","type","color","label","weight"],"mappings":"kaAwBA,MAAMA,EAAgB,CACpB,UACA,UACA,UACA,UACA,UACA,2BAW4C,EAC7CC,OACAC,SAAS,IACTC,QAAQ,IACPC,iBACDC,UAAS,EACTC,YAAY,aACXC,aACDC,SAASJ,EAAiBG,EAAa,UACtCE,SAAST,EACTU,aAAW,CAAA,EACXC,aAAW,CAAA,MAGX,MAAMC,EAASC,EAAAA,OAAsB,MAmFrC,OAjFAC,EAAAA,UAAU,KACR,IAAKF,EAAOG,QAAS,OAErB,MAAMC,EAAMC,EAAAA,QAAUL,EAAOG,SAE7BC,EAAIE,UAAU,KAAKC,SAEnB,MAEMC,EAAcC,KAAKC,IAAInB,EAAOD,GAAU,EAF/B,EAGTqB,EAAcF,KAAKC,IAAInB,EAAOD,GAAU,EAAIsB,GAE5CC,EAAIT,EACPU,OAAO,KACPC,KAAK,YAAa,aAAaxB,EAAQ,MAAMD,EAAS,MAEnD0B,EAAMC,EAAAA,UAETC,MAAOC,GA1CoB,CAACC,IACjC,GAAmB,iBAARA,EACT,OAAOA,EAET,MAAMC,GAAQ,MAAAD,OAAA,EAAAA,EAAKC,MAAM,UAAW,KACpC,OAAOA,EAAQC,OAAOD,EAAM,IAAM,GAqCLE,CAA0BJ,EAAED,QAEjDM,EAAOC,EAAAA,UAASjB,YAAYA,GAAaG,YAAYA,GAE9CE,EACVP,UAAU,QAEVjB,KAAK2B,EAAI3B,IACTqC,QACAZ,OAAO,KACPC,KAAK,QAAS,OAGdD,OAAO,QAEPC,KAAK,IAAKS,GAEVT,KAAK,OAAQ,CAACI,EAAcQ,IACpB9B,EAAO8B,EAAI9B,EAAO+B,SAW7Bf,EAAEC,OAAO,QACNC,KAAK,cAAe,UACpBA,KAAK,YAAa,QAClBA,KAAK,cAAe,OACpBA,KAAK,qBAAsB,WAC3Bc,KAAKjC,IA2BP,CAACC,EAAQR,EAAMC,EAAQM,EAAOL,IAE5BE,mCAMDqC,wBAAAC,EAAAA,KAAC,MAAA,CAAIC,UAAW,yBAAyBtC,IACvCoC,SAAA;eAAAG,EAAAA,IAAC,OACCH,wBAAAG,EAAAA,IAAC,MAAA,CAAIC,IAAKlC,EAAQT,QAAcD;eAElC2C,EAAAA,IAAC,OAAID,UAAU,qBACZF,YAAQzC,EAAK8C,IAAI,CAAChB,EAAcQ,mBAE7BI,EAAAA,KAAC,MAAA,CACCC,UAAU,SAEVI,MAAO,CAAEC,WAAY,kBAAkBxC,EAAO8B,MAE9CG,SAAA;eAAAG,EAAAA,IAAC,MAAA,CAAID,UAAU,eACfF,wBAAAG,EAAAA,IAACK,EAAAA,WAAA,CAAWC,KAAK,KAAKC,MAAM,yBAA0B1C,EACnDgC,SAAAX,EAAEsB;iBAGLR,IAAC,MAAA,CAAID,UAAU,eACbF,wBAAAG,EAAAA,IAACK,EAAAA,WAAA,CACCC,KAAK,KACLG,OAAO,SACPF,MAAM,uBAENV,wBAAAG,EAAAA,IAACK,EAAAA,WAAA,CAAWC,KAAK,KAAKC,MAAM,uBAAuBE,OAAO,UAAW3C,EAClE+B,SAAAX,EAAED,cAfJC,EAAEsB,8BAdZR,EAAAA,IAAC,MAAA,CAAIC,IAAKlC,EAAQT,QAAcD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect } from "react";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { Typography } from "../../../typography/typography/index.esm.js";
|
|
5
|
+
import { useAuth } from "../../../../hooks/useAuth/index.esm.js";
|
|
6
|
+
import select from "../../../../node_modules/d3-selection/src/select/index.esm.js";
|
|
7
|
+
import pie from "../../../../node_modules/d3-shape/src/pie/index.esm.js";
|
|
8
|
+
import arc from "../../../../node_modules/d3-shape/src/arc/index.esm.js";
|
|
9
|
+
const formatNumber = (num, defaultCurrencySymbol = "") => {
|
|
10
|
+
if (num >= 1e6) {
|
|
11
|
+
return `${defaultCurrencySymbol} ${(num / 1e6).toFixed(1)} M`;
|
|
12
|
+
} else if (num >= 1e5) {
|
|
13
|
+
return `${defaultCurrencySymbol} ${(num / 1e5).toFixed(1)} L`;
|
|
14
|
+
} else if (num >= 1e3) {
|
|
15
|
+
return `${(num / 1e3).toFixed(1)} K`;
|
|
16
|
+
} else {
|
|
17
|
+
return `${defaultCurrencySymbol} ${num.toFixed(2)}`;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const getSingleNumberFromString = (str) => {
|
|
21
|
+
if (typeof str === "number") {
|
|
22
|
+
return str;
|
|
23
|
+
}
|
|
24
|
+
const match = (str == null ? void 0 : str.match(/\d.+/)) || null;
|
|
25
|
+
return match ? Number(match[0]) : 0;
|
|
26
|
+
};
|
|
27
|
+
const DonutChart = ({
|
|
28
|
+
data,
|
|
29
|
+
height = 140,
|
|
30
|
+
width = 140,
|
|
31
|
+
legend = true,
|
|
32
|
+
direction = "vertical",
|
|
33
|
+
total = "300",
|
|
34
|
+
donutThickerValue,
|
|
35
|
+
CustomLegends,
|
|
36
|
+
title = ""
|
|
37
|
+
}) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const svgRef = useRef(null);
|
|
40
|
+
const { user } = useAuth();
|
|
41
|
+
const defaultCurrencySymbol = ((_a = user == null ? void 0 : user.currency_data) == null ? void 0 : _a.symbol) || "";
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!svgRef.current) return;
|
|
44
|
+
const svg = select(svgRef.current);
|
|
45
|
+
svg.selectAll("*").remove();
|
|
46
|
+
const margin = 6;
|
|
47
|
+
const outerRadius = Math.min(width, height) / 2 - margin;
|
|
48
|
+
let innerRadius = Math.min(width, height) / 2 - margin * 2;
|
|
49
|
+
if (donutThickerValue) {
|
|
50
|
+
innerRadius = outerRadius - donutThickerValue;
|
|
51
|
+
}
|
|
52
|
+
const g = svg.append("g").attr("transform", `translate(${width / 2}, ${height / 2})`);
|
|
53
|
+
const pie$1 = pie().value((d) => getSingleNumberFromString(d.value)).padAngle(0);
|
|
54
|
+
const path = arc().outerRadius(outerRadius).innerRadius(innerRadius);
|
|
55
|
+
const pies = g.selectAll(".arc").data(pie$1(data)).enter().append("g").attr("class", "arc");
|
|
56
|
+
pies.append("path").attr("d", path).attr("fill", (d) => {
|
|
57
|
+
var _a2;
|
|
58
|
+
return (_a2 = d == null ? void 0 : d.data) == null ? void 0 : _a2.color;
|
|
59
|
+
}).attr("stroke", "none");
|
|
60
|
+
g.append("text").attr("text-anchor", "middle").attr("font-size", "18px").attr("font-weight", "600").attr("alignment-baseline", `central`).html(total);
|
|
61
|
+
g.append("text").attr("text-anchor", "middle").attr("maring-top", "20px").attr("font-size", "13px").attr("font-weight", "600").attr("dy", "2em").attr("color", "#7B7C7F").html(title);
|
|
62
|
+
}, [data, height, total, width, defaultCurrencySymbol, donutThickerValue, CustomLegends, title]);
|
|
63
|
+
if (!legend) {
|
|
64
|
+
return /* @__PURE__ */ jsx("svg", { ref: svgRef, width, height });
|
|
65
|
+
}
|
|
66
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: `donut-chart-container ${direction}`, children: [
|
|
67
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("svg", { ref: svgRef, width, height }) }),
|
|
68
|
+
CustomLegends ? /* @__PURE__ */ jsx(CustomLegends, { data }) : /* @__PURE__ */ jsx("div", { className: "donut-legend", children: /* @__PURE__ */ jsx("div", { className: `donut-chart-legend ${direction}`, children: data.map((d) => /* @__PURE__ */ jsxs(
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
className: "legend",
|
|
72
|
+
style: { borderLeft: `0.188rem solid ${d.color}` },
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsx("div", { className: "legend-title", style: { color: `${d.labelColor}` }, children: d.label }),
|
|
75
|
+
/* @__PURE__ */ jsx("div", { className: "legend-value", children: /* @__PURE__ */ jsx(
|
|
76
|
+
Typography,
|
|
77
|
+
{
|
|
78
|
+
type: "s5",
|
|
79
|
+
weight: "medium",
|
|
80
|
+
color: d.valueColor,
|
|
81
|
+
style: {
|
|
82
|
+
whiteSpace: "nowrap"
|
|
83
|
+
},
|
|
84
|
+
children: formatNumber(d.value, defaultCurrencySymbol)
|
|
85
|
+
}
|
|
86
|
+
) })
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
d.label
|
|
90
|
+
)) }) })
|
|
91
|
+
] }) });
|
|
92
|
+
};
|
|
93
|
+
export {
|
|
94
|
+
DonutChart as default
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../../src/components/charts/donutChart/DonutChart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\nimport { useAuth } from \"../../../hooks/useAuth\";\n\ninterface DataPoint {\n label: string;\n value: number;\n\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n donutThickerValue?: number\n CustomLegends?: React.FC<{ data: DataPoint[] }>;\n title: string\n}\n\nconst formatNumber = (num: number, defaultCurrencySymbol: string = ''): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n data,\n height = 140,\n width = 140,\n legend = true,\n direction = \"vertical\",\n total = \"300\",\n donutThickerValue,\n CustomLegends,\n title = ''\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n let innerRadius = Math.min(width, height) / 2 - margin * 2;\n if (donutThickerValue) {\n innerRadius = outerRadius - donutThickerValue;\n }\n\n\n\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value)).padAngle(0);\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius)\n\n const pies = g\n .selectAll(\".arc\")\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n\n pies\n .append(\"path\")\n .attr(\"d\", path)\n .attr(\"fill\", (d: DataPoint) => d?.data?.color).attr(\"stroke\", \"none\");\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr('maring-top', \"20px\")\n .attr(\"font-size\", \"13px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"dy\", \"2em\")\n .attr(\"color\", \"#7B7C7F\")\n .html(title);\n\n }, [data, height, total, width, defaultCurrencySymbol, donutThickerValue, CustomLegends, title]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n\n\n {CustomLegends ? (\n <CustomLegends data={data} /> // Render the custom component\n ) : (\n <div className='donut-legend'>\n <div className={`donut-chart-legend ${direction}`}>\n {data.map((d: DataPoint) => (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${d.color}` }}\n >\n <div className=\"legend-title\" style={{ color: `${d.labelColor}` }}>{d.label}</div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={d.valueColor}\n style={{\n whiteSpace: 'nowrap'\n }}\n >\n {formatNumber(d.value, defaultCurrencySymbol)}\n </Typography>\n </div>\n </div>\n ))\n }\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport default DonutChart;\n"],"names":["d3.select","pie","d3.pie","d3.arc","_a"],"mappings":";;;;;;;;AAwBA,MAAM,eAAe,CAAC,KAAa,wBAAgC,OAAe;AAChF,MAAI,OAAO,KAAW;AACpB,WAAO,GAAG,qBAAqB,KAAK,MAAM,KAAW,QAAQ,CAAC,CAAC;AAAA,EACjE,WAAW,OAAO,KAAS;AACzB,WAAO,GAAG,qBAAqB,KAAK,MAAM,KAAS,QAAQ,CAAC,CAAC;AAAA,EAC/D,WAAW,OAAO,KAAO;AACvB,WAAO,IAAI,MAAM,KAAO,QAAQ,CAAC,CAAC;AAAA,EACpC,OAAO;AACL,WAAO,GAAG,qBAAqB,IAAI,IAAI,QAAQ,CAAC,CAAC;AAAA,EACnD;AACF;AACA,MAAM,4BAA4B,CAAC,QAAQ;AACzC,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,SAAQ,2BAAK,MAAM,YAAW;AACpC,SAAO,QAAQ,OAAO,MAAM,CAAC,CAAC,IAAI;AACpC;AAEA,MAAM,aAAwC,CAAC;AAAA,EAC7C;AAAA,EACA,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAQ;AACV,MAAM;;AACJ,QAAM,SAAS,OAAsB,IAAI;AACzC,QAAM,EAAE,KAAA,IAAS,QAAA;AACjB,QAAM,0BAAwB,kCAAM,kBAAN,mBAAqB,WAAU;AAC7D,YAAU,MAAM;AACd,QAAI,CAAC,OAAO,QAAS;AAErB,UAAM,MAAMA,OAAU,OAAO,OAAO;AAEpC,QAAI,UAAU,GAAG,EAAE,OAAA;AAEnB,UAAM,SAAS;AAEf,UAAM,cAAc,KAAK,IAAI,OAAO,MAAM,IAAI,IAAI;AAClD,QAAI,cAAc,KAAK,IAAI,OAAO,MAAM,IAAI,IAAI,SAAS;AACzD,QAAI,mBAAmB;AACrB,oBAAc,cAAc;AAAA,IAC9B;AAKA,UAAM,IAAI,IACP,OAAO,GAAG,EACV,KAAK,aAAa,aAAa,QAAQ,CAAC,KAAK,SAAS,CAAC,GAAG;AAC7D,UAAMC,QAAMC,MAET,MAAM,CAAC,MAAiB,0BAA0B,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;AAEzE,UAAM,OAAOC,MAAS,YAAY,WAAW,EAAE,YAAY,WAAW;AAEtE,UAAM,OAAO,EACV,UAAU,MAAM,EAChB,KAAKF,MAAI,IAAI,CAAC,EACd,QACA,OAAO,GAAG,EACV,KAAK,SAAS,KAAK;AAGtB,SACG,OAAO,MAAM,EACb,KAAK,KAAK,IAAI,EACd,KAAK,QAAQ,CAAC;;AAAiB,cAAAG,MAAA,uBAAG,SAAH,gBAAAA,IAAS;AAAA,KAAK,EAAE,KAAK,UAAU,MAAM;AACvE,MAAE,OAAO,MAAM,EACZ,KAAK,eAAe,QAAQ,EAC5B,KAAK,aAAa,MAAM,EACxB,KAAK,eAAe,KAAK,EACzB,KAAK,sBAAsB,SAAS,EACpC,KAAK,KAAK;AACb,MAAE,OAAO,MAAM,EACZ,KAAK,eAAe,QAAQ,EAC5B,KAAK,cAAc,MAAM,EACzB,KAAK,aAAa,MAAM,EACxB,KAAK,eAAe,KAAK,EACzB,KAAK,MAAM,KAAK,EAChB,KAAK,SAAS,SAAS,EACvB,KAAK,KAAK;AAAA,EAEf,GAAG,CAAC,MAAM,QAAQ,OAAO,OAAO,uBAAuB,mBAAmB,eAAe,KAAK,CAAC;AAE/F,MAAI,CAAC,QAAQ;AACX,WAAO,oBAAC,OAAA,EAAI,KAAK,QAAQ,OAAc,QAAgB;AAAA,EACzD;AAEA,yCAEI,UAAA,qBAAC,OAAA,EAAI,WAAW,yBAAyB,SAAS,IAChD,UAAA;AAAA,IAAA,oBAAC,SACC,UAAA,oBAAC,OAAA,EAAI,KAAK,QAAQ,OAAc,QAAgB,EAAA,CAClD;AAAA,IAGC,gBACC,oBAAC,eAAA,EAAc,MAAY,IAE3B,oBAAC,SAAI,WAAU,gBACb,UAAA,oBAAC,OAAA,EAAI,WAAW,sBAAsB,SAAS,IAC5C,UAAA,KAAK,IAAI,CAAC,MACT;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAEV,OAAO,EAAE,YAAY,kBAAkB,EAAE,KAAK,GAAA;AAAA,QAE9C,UAAA;AAAA,UAAA,oBAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,OAAO,GAAG,EAAE,UAAU,GAAA,GAAO,UAAA,EAAE,OAAM;AAAA,UAC5E,oBAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,OAAO,EAAE;AAAA,cACT,OAAO;AAAA,gBACL,YAAY;AAAA,cAAA;AAAA,cAGb,UAAA,aAAa,EAAE,OAAO,qBAAqB;AAAA,YAAA;AAAA,UAAA,EAC9C,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAfK,EAAE;AAAA,IAAA,CAiBV,GAEH,EAAA,CACF;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");;/* empty css */var r=,/* empty css */a=,/* empty css */l=,/* empty css */n=,/* empty css */d=;/* empty css */const s=(e,t="")=>e>=1e6?`${t} ${(e/1e6).toFixed(1)} M`:e>=1e5?`${t} ${(e/1e5).toFixed(1)} L`:e>=1e3?`${(e/1e3).toFixed(1)} K`:`${t} ${e.toFixed(2)}`;exports.default=({data:i,height:o=140,width:c=140,legend:u=!0,direction:h="vertical",total:p="300",donutThickerValue:x,CustomLegends:m,title:v=""})=>{var g;const f=t.useRef(null),{user:j}=a.useAuth(),y=(null==(g=null==j?void 0:j.currency_data)?void 0:g.symbol)||"";return t.useEffect(()=>{if(!f.current)return;const e=l.default(f.current);e.selectAll("*").remove();const t=Math.min(c,o)/2-6;let r=Math.min(c,o)/2-12;x&&(r=t-x);const a=e.append("g").attr("transform",`translate(${c/2}, ${o/2})`),s=n.default().value(e=>(e=>{if("number"==typeof e)return e;const t=(null==e?void 0:e.match(/\d.+/))||null;return t?Number(t[0]):0})(e.value)).padAngle(0),u=d.default().outerRadius(t).innerRadius(r);a.selectAll(".arc").data(s(i)).enter().append("g").attr("class","arc").append("path").attr("d",u).attr("fill",e=>{var t;return null==(t=null==e?void 0:e.data)?void 0:t.color}).attr("stroke","none"),a.append("text").attr("text-anchor","middle").attr("font-size","18px").attr("font-weight","600").attr("alignment-baseline","central").html(p),a.append("text").attr("text-anchor","middle").attr("maring-top","20px").attr("font-size","13px").attr("font-weight","600").attr("dy","2em").attr("color","#7B7C7F").html(v)},[i,o,p,c,y,x,m,v]),u?/* @__PURE__ */e.jsx(e.Fragment,{children:/* @__PURE__ */e.jsxs("div",{className:`donut-chart-container ${h}`,children:[
|
|
2
|
+
/* @__PURE__ */e.jsx("div",{children:/* @__PURE__ */e.jsx("svg",{ref:f,width:c,height:o})}),m?/* @__PURE__ */e.jsx(m,{data:i}):/* @__PURE__ */e.jsx("div",{className:"donut-legend",children:/* @__PURE__ */e.jsx("div",{className:`donut-chart-legend ${h}`,children:i.map(t=>/* @__PURE__ */e.jsxs("div",{className:"legend",style:{borderLeft:`0.188rem solid ${t.color}`},children:[
|
|
3
|
+
/* @__PURE__ */e.jsx("div",{className:"legend-title",style:{color:`${t.labelColor}`},children:t.label}),
|
|
4
|
+
/* @__PURE__ */e.jsx("div",{className:"legend-value",children:/* @__PURE__ */e.jsx(r.Typography,{type:"s5",weight:"medium",color:t.valueColor,style:{whiteSpace:"nowrap"},children:s(t.value,y)})})]},t.label))})})]})}):/* @__PURE__ */e.jsx("svg",{ref:f,width:c,height:o})};
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/charts/donutChart/DonutChart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./donut-chart.scss\";\nimport Typography from \"../../typography/typography\";\nimport { useAuth } from \"../../../hooks/useAuth\";\n\ninterface DataPoint {\n label: string;\n value: number;\n\n}\n\ninterface DonutChartProps {\n data: DataPoint[];\n width?: number;\n height?: number;\n legend?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n total?: string;\n donutThickerValue?: number\n CustomLegends?: React.FC<{ data: DataPoint[] }>;\n title: string\n}\n\nconst formatNumber = (num: number, defaultCurrencySymbol: string = ''): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\nconst getSingleNumberFromString = (str) => {\n if (typeof str === \"number\") {\n return str;\n }\n const match = str?.match(/\\d.+/) || null;\n return match ? Number(match[0]) : 0;\n};\n\nconst DonutChart: React.FC<DonutChartProps> = ({\n data,\n height = 140,\n width = 140,\n legend = true,\n direction = \"vertical\",\n total = \"300\",\n donutThickerValue,\n CustomLegends,\n title = ''\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n useEffect(() => {\n if (!svgRef.current) return;\n\n const svg = d3.select(svgRef.current);\n\n svg.selectAll(\"*\").remove();\n\n const margin = 6;\n\n const outerRadius = Math.min(width, height) / 2 - margin;\n let innerRadius = Math.min(width, height) / 2 - margin * 2;\n if (donutThickerValue) {\n innerRadius = outerRadius - donutThickerValue;\n }\n\n\n\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2}, ${height / 2})`);\n const pie = d3\n .pie()\n .value((d: DataPoint) => getSingleNumberFromString(d.value)).padAngle(0);\n\n const path = d3.arc().outerRadius(outerRadius).innerRadius(innerRadius)\n\n const pies = g\n .selectAll(\".arc\")\n .data(pie(data))\n .enter()\n .append(\"g\")\n .attr(\"class\", \"arc\");\n\n\n pies\n .append(\"path\")\n .attr(\"d\", path)\n .attr(\"fill\", (d: DataPoint) => d?.data?.color).attr(\"stroke\", \"none\");\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", \"18px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"alignment-baseline\", `central`)\n .html(total);\n g.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr('maring-top', \"20px\")\n .attr(\"font-size\", \"13px\")\n .attr(\"font-weight\", \"600\")\n .attr(\"dy\", \"2em\")\n .attr(\"color\", \"#7B7C7F\")\n .html(title);\n\n }, [data, height, total, width, defaultCurrencySymbol, donutThickerValue, CustomLegends, title]);\n\n if (!legend) {\n return <svg ref={svgRef} width={width} height={height}></svg>;\n }\n\n return (\n <>\n <div className={`donut-chart-container ${direction}`}>\n <div>\n <svg ref={svgRef} width={width} height={height}></svg>\n </div>\n\n\n {CustomLegends ? (\n <CustomLegends data={data} /> // Render the custom component\n ) : (\n <div className='donut-legend'>\n <div className={`donut-chart-legend ${direction}`}>\n {data.map((d: DataPoint) => (\n <div\n className=\"legend\"\n key={d.label}\n style={{ borderLeft: `0.188rem solid ${d.color}` }}\n >\n <div className=\"legend-title\" style={{ color: `${d.labelColor}` }}>{d.label}</div>\n <div className=\"legend-value\">\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={d.valueColor}\n style={{\n whiteSpace: 'nowrap'\n }}\n >\n {formatNumber(d.value, defaultCurrencySymbol)}\n </Typography>\n </div>\n </div>\n ))\n }\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport default DonutChart;\n"],"names":["formatNumber","num","defaultCurrencySymbol","toFixed","data","height","width","legend","direction","total","donutThickerValue","CustomLegends","title","svgRef","useRef","user","useAuth","_a","currency_data","symbol","useEffect","current","svg","d3.select","selectAll","remove","outerRadius","Math","min","innerRadius","margin","g","append","attr","pie","d3.pie","value","d","str","match","Number","getSingleNumberFromString","padAngle","path","d3.arc","enter","color","html","children","jsxs","className","jsx","ref","map","style","borderLeft","labelColor","label","Typography","type","weight","valueColor","whiteSpace"],"mappings":"kdAwBA,MAAMA,EAAe,CAACC,EAAaC,EAAgC,KAC7DD,GAAO,IACF,GAAGC,MAA0BD,EAAM,KAAWE,QAAQ,OACpDF,GAAO,IACT,GAAGC,MAA0BD,EAAM,KAASE,QAAQ,OAClDF,GAAO,IACT,IAAIA,EAAM,KAAOE,QAAQ,OAEzB,GAAGD,KAAyBD,EAAIE,QAAQ,qBAWL,EAC5CC,OACAC,SAAS,IACTC,QAAQ,IACRC,UAAS,EACTC,YAAY,WACZC,QAAQ,MACRC,oBACAC,gBACAC,QAAQ,aAER,MAAMC,EAASC,EAAAA,OAAsB,OAC/BC,KAAEA,GAASC,YACXd,GAAwB,OAAAe,EAAA,MAAAF,OAAA,EAAAA,EAAMG,oBAAN,EAAAD,EAAqBE,SAAU,GAyD7D,OAxDAC,EAAAA,UAAU,KACR,IAAKP,EAAOQ,QAAS,OAErB,MAAMC,EAAMC,EAAAA,QAAUV,EAAOQ,SAE7BC,EAAIE,UAAU,KAAKC,SAEnB,MAEMC,EAAcC,KAAKC,IAAItB,EAAOD,GAAU,EAF/B,EAGf,IAAIwB,EAAcF,KAAKC,IAAItB,EAAOD,GAAU,EAAIyB,GAC5CpB,IACFmB,EAAcH,EAAchB,GAM9B,MAAMqB,EAAIT,EACPU,OAAO,KACPC,KAAK,YAAa,aAAa3B,EAAQ,MAAMD,EAAS,MACnD6B,EAAMC,EAAAA,UAETC,MAAOC,GA7CoB,CAACC,IACjC,GAAmB,iBAARA,EACT,OAAOA,EAET,MAAMC,GAAQ,MAAAD,OAAA,EAAAA,EAAKC,MAAM,UAAW,KACpC,OAAOA,EAAQC,OAAOD,EAAM,IAAM,GAwCLE,CAA0BJ,EAAED,QAAQM,SAAS,GAElEC,EAAOC,EAAAA,UAASlB,YAAYA,GAAaG,YAAYA,GAE9CE,EACVP,UAAU,QACVpB,KAAK8B,EAAI9B,IACTyC,QACAb,OAAO,KACPC,KAAK,QAAS,OAIdD,OAAO,QACPC,KAAK,IAAKU,GACVV,KAAK,OAASI,UAAiB,OAAA,OAAApB,EAAA,MAAAoB,OAAA,EAAAA,EAAGjC,WAAH,EAAAa,EAAS6B,QAAOb,KAAK,SAAU,QACjEF,EAAEC,OAAO,QACNC,KAAK,cAAe,UACpBA,KAAK,YAAa,QAClBA,KAAK,cAAe,OACpBA,KAAK,qBAAsB,WAC3Bc,KAAKtC,GACRsB,EAAEC,OAAO,QACNC,KAAK,cAAe,UACpBA,KAAK,aAAc,QACnBA,KAAK,YAAa,QAClBA,KAAK,cAAe,OACpBA,KAAK,KAAM,OACXA,KAAK,QAAS,WACdc,KAAKnC,IAEP,CAACR,EAAMC,EAAQI,EAAOH,EAAOJ,EAAuBQ,EAAmBC,EAAeC,IAEpFL,mCAMDyC,wBAAAC,EAAAA,KAAC,MAAA,CAAIC,UAAW,yBAAyB1C,IACvCwC,SAAA;eAAAG,EAAAA,IAAC,OACCH,wBAAAG,EAAAA,IAAC,MAAA,CAAIC,IAAKvC,EAAQP,QAAcD,aAIjCM,iBACCwC,EAAAA,IAACxC,EAAA,CAAcP,wBAEf+C,EAAAA,IAAC,OAAID,UAAU,eACbF,wBAAAG,MAAC,MAAA,CAAID,UAAW,sBAAsB1C,IACnCwC,SAAA5C,EAAKiD,IAAKhB,kBACTY,EAAAA,KAAC,MAAA,CACCC,UAAU,SAEVI,MAAO,CAAEC,WAAY,kBAAkBlB,EAAES,SAEzCE,SAAA;iBAAAG,IAAC,MAAA,CAAID,UAAU,eAAeI,MAAO,CAAER,MAAO,GAAGT,EAAEmB,cAAiBR,SAAAX,EAAEoB;iBACtEN,IAAC,MAAA,CAAID,UAAU,eACbF,wBAAAG,EAAAA,IAACO,EAAAA,WAAA,CACCC,KAAK,KACLC,OAAO,SACPd,MAAOT,EAAEwB,WACTP,MAAO,CACLQ,WAAY,UAGbd,SAAAhD,EAAaqC,EAAED,MAAOlC,SAbtBmC,EAAEoB,gCAnBdN,EAAAA,IAAC,MAAA,CAAIC,IAAKvC,EAAQP,QAAcD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState, useMemo, useEffect } from "react";
|
|
3
|
+
import { useAuth } from "../../../../hooks/useAuth/index.esm.js";
|
|
4
|
+
import band from "../../../../node_modules/d3-scale/src/band/index.esm.js";
|
|
5
|
+
import linear from "../../../../node_modules/d3-scale/src/linear/index.esm.js";
|
|
6
|
+
import max from "../../../../node_modules/d3-array/src/max/index.esm.js";
|
|
7
|
+
import select from "../../../../node_modules/d3-selection/src/select/index.esm.js";
|
|
8
|
+
import { axisBottom, axisLeft } from "../../../../node_modules/d3-axis/src/axis/index.esm.js";
|
|
9
|
+
import { format } from "../../../../node_modules/d3-format/src/defaultLocale/index.esm.js";
|
|
10
|
+
const formatNumber = (num, symbol) => {
|
|
11
|
+
return `${symbol} ${format(".2s")(num).replace("k", "K")}`;
|
|
12
|
+
};
|
|
13
|
+
const GroupedBarChart = ({
|
|
14
|
+
chartData,
|
|
15
|
+
height = 500,
|
|
16
|
+
barWidth = 40,
|
|
17
|
+
margin = { top: 40, right: 20, bottom: 40, left: 50 },
|
|
18
|
+
line = false
|
|
19
|
+
}) => {
|
|
20
|
+
var _a;
|
|
21
|
+
const svgRef = useRef(null);
|
|
22
|
+
const wrapperRef = useRef(null);
|
|
23
|
+
const scrollContainerRef = useRef(null);
|
|
24
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
25
|
+
const maxValue = useMemo(() => Math.max(...chartData.map((d) => d.data.map((v) => v.value)).flat()), [chartData]);
|
|
26
|
+
const needsHorizontalScroll = chartData.length > 12;
|
|
27
|
+
const minGroupWidth = 120;
|
|
28
|
+
const calculatedChartWidth = needsHorizontalScroll ? Math.max(chartData.length * minGroupWidth, containerWidth) : containerWidth;
|
|
29
|
+
const { user } = useAuth();
|
|
30
|
+
const defaultCurrencySymbol = ((_a = user == null ? void 0 : user.currency_data) == null ? void 0 : _a.symbol) || "";
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const wrapper = wrapperRef.current;
|
|
33
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
34
|
+
if (entries[0]) {
|
|
35
|
+
const newWidth = entries[0].contentRect.width;
|
|
36
|
+
setContainerWidth(newWidth);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
if (wrapper) {
|
|
40
|
+
resizeObserver.observe(wrapper);
|
|
41
|
+
}
|
|
42
|
+
return () => {
|
|
43
|
+
if (wrapper) {
|
|
44
|
+
resizeObserver.unobserve(wrapper);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}, []);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (containerWidth === 0) return;
|
|
50
|
+
const chartWidth = calculatedChartWidth - margin.left - margin.right;
|
|
51
|
+
const chartHeight = maxValue ? height - margin.top - margin.bottom : 0;
|
|
52
|
+
select(svgRef.current).selectAll("*").remove();
|
|
53
|
+
const svg = select(svgRef.current).attr("height", height).append("g").attr("transform", `translate(${margin.left}, ${maxValue ? margin.top : height - 50})`);
|
|
54
|
+
const x0 = band().domain(chartData.map((d) => d.month)).range([0, chartWidth]).padding(0.2);
|
|
55
|
+
const x1 = band().domain(["Total Transaction", "Total Value", "Average Value"]).range([0, x0.bandwidth()]).padding(0.1);
|
|
56
|
+
const y = linear().domain([0, max(chartData, (d) => max(d.data, (data) => data.value))]).nice().range([chartHeight, 0]);
|
|
57
|
+
const xAxis = svg.append("g").attr("class", "x-axis").attr("transform", `translate(0, ${chartHeight})`).call(axisBottom(x0).tickPadding(20));
|
|
58
|
+
const yAxis = svg.append("g").attr("class", "y-axis").call(axisLeft(y).tickPadding(10).tickFormat((d) => formatNumber(d, defaultCurrencySymbol)));
|
|
59
|
+
yAxis.select(".domain").attr("stroke", "none");
|
|
60
|
+
xAxis.select(".domain").attr("stroke", "none");
|
|
61
|
+
if (line) {
|
|
62
|
+
svg.selectAll(".grid-line").data(y.ticks()).enter().append("line").attr("class", "grid-line").attr("x1", 0).attr("x2", chartWidth).attr("y1", (d) => y(d)).attr("y2", (d) => y(d)).style("stroke", "#ddd").style("stroke-dasharray", "3,3").style("stroke-width", 1);
|
|
63
|
+
}
|
|
64
|
+
const monthGroups = svg.selectAll(".month-group").data(chartData).enter().append("g").attr("class", "month-group").attr("transform", (d) => `translate(${x0(d.month)}, 0)`);
|
|
65
|
+
monthGroups.selectAll("rect").data((d) => d.data).enter().append("rect").attr("x", (d) => x1(d.type) + (x1.bandwidth() - barWidth) / 2).attr("y", (d) => y(d.value)).attr("width", barWidth).attr("height", (d) => chartHeight - y(d.value)).attr("fill", (d) => d.color).attr("rx", 5).attr("ry", 5);
|
|
66
|
+
}, [chartData, barWidth, height, calculatedChartWidth, containerWidth, line, margin, defaultCurrencySymbol, maxValue]);
|
|
67
|
+
return /* @__PURE__ */ jsx("div", { ref: wrapperRef, style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx("div", { style: { position: "relative" }, children: /* @__PURE__ */ jsx(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
ref: scrollContainerRef,
|
|
71
|
+
style: {
|
|
72
|
+
width: "100%",
|
|
73
|
+
overflowX: needsHorizontalScroll ? "auto" : "hidden",
|
|
74
|
+
overflowY: "hidden"
|
|
75
|
+
},
|
|
76
|
+
children: /* @__PURE__ */ jsx(
|
|
77
|
+
"svg",
|
|
78
|
+
{
|
|
79
|
+
ref: svgRef,
|
|
80
|
+
width: calculatedChartWidth,
|
|
81
|
+
height,
|
|
82
|
+
viewBox: `0 0 ${calculatedChartWidth} ${height}`,
|
|
83
|
+
style: { display: "block" }
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
) }) });
|
|
88
|
+
};
|
|
89
|
+
export {
|
|
90
|
+
GroupedBarChart as default
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../../src/components/charts/groupBarChart/GroupBarChart.tsx"],"sourcesContent":["import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport { useAuth } from '../../../hooks/useAuth';\n\nexport interface IGroupChartProps {\n chartData: any[],\n height?: number,\n margin?: any,\n barWidth?: number,\n line?: boolean\n}\n\nconst formatNumber = (num: number, symbol) => {\n return `${symbol} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n};\n\nconst GroupedBarChart = ({ \n chartData, \n height = 500, \n barWidth = 40, \n margin = { top: 40, right: 20, bottom: 40, left: 50 }, \n line = false \n}: IGroupChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const maxValue = useMemo(() => Math.max(...chartData.map((d) => d.data.map(v=>v.value)).flat()), [chartData]);\n\n const needsHorizontalScroll = chartData.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(chartData.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n if (containerWidth === 0) return; \n \n const chartWidth = calculatedChartWidth - margin.left - margin.right;\n const chartHeight = maxValue ? height - margin.top - margin.bottom : 0;\n \n d3.select(svgRef.current).selectAll('*').remove();\n \n const svg = d3.select(svgRef.current)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${margin.left}, ${maxValue ? margin.top : height-50})`);\n\n const x0 = d3.scaleBand()\n .domain(chartData.map(d => d.month))\n .range([0, chartWidth])\n .padding(0.2);\n\n const x1 = d3.scaleBand()\n .domain(['Total Transaction', 'Total Value', 'Average Value'])\n .range([0, x0.bandwidth()])\n .padding(0.1);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(chartData, d => d3.max(d.data, data => data.value))])\n .nice()\n .range([chartHeight, 0]);\n\n const xAxis = svg.append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(0, ${chartHeight})`)\n .call(d3.axisBottom(x0).tickPadding(20));\n \n const yAxis = svg.append('g')\n .attr('class', 'y-axis')\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) => formatNumber(d, defaultCurrencySymbol)));\n\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n if (line) {\n svg.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '3,3') // Dotted line\n .style('stroke-width', 1);\n }\n\n const monthGroups = svg.selectAll('.month-group')\n .data(chartData)\n .enter()\n .append('g')\n .attr('class', 'month-group')\n .attr('transform', d => `translate(${x0(d.month)}, 0)`);\n\n monthGroups.selectAll('rect')\n .data(d => d.data)\n .enter()\n .append('rect')\n .attr('x', d => x1(d.type) + (x1.bandwidth() - barWidth) / 2)\n .attr('y', d => y(d.value))\n .attr('width', barWidth)\n .attr('height', d => chartHeight - y(d.value))\n .attr('fill', d => d.color)\n .attr('rx', 5)\n .attr('ry', 5);\n\n }, [chartData, barWidth, height, calculatedChartWidth, containerWidth, line, margin, defaultCurrencySymbol, maxValue]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default GroupedBarChart;"],"names":["d3.format","d3.select","d3.scaleBand","d3.scaleLinear","d3.max","d3.axisBottom","d3.axisLeft"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe,CAAC,KAAa,WAAW;AAC1C,SAAO,GAAG,MAAM,IAAIA,OAAU,KAAK,EAAE,GAAG,EAAE,QAAQ,KAAK,GAAG,CAAC;AAC/D;AAEA,MAAM,kBAAkB,CAAC;AAAA,EACrB;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS,EAAE,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,MAAM,GAAA;AAAA,EACjD,OAAO;AACX,MAAwB;;AACpB,QAAM,SAAS,OAAsB,IAAI;AACzC,QAAM,aAAa,OAAuB,IAAI;AAC9C,QAAM,qBAAqB,OAAuB,IAAI;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAiB,CAAC;AAE9D,QAAM,WAAW,QAAQ,MAAM,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAA,MAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC;AAE5G,QAAM,wBAAwB,UAAU,SAAS;AACjD,QAAM,gBAAgB;AACtB,QAAM,uBAAuB,wBACvB,KAAK,IAAI,UAAU,SAAS,eAAe,cAAc,IACzD;AAEN,QAAM,EAAE,KAAA,IAAS,QAAA;AACjB,QAAM,0BAAwB,kCAAM,kBAAN,mBAAqB,WAAU;AAE7D,YAAU,MAAM;AACZ,UAAM,UAAU,WAAW;AAE3B,UAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACnD,UAAI,QAAQ,CAAC,GAAG;AACZ,cAAM,WAAW,QAAQ,CAAC,EAAE,YAAY;AACxC,0BAAkB,QAAQ;AAAA,MAC9B;AAAA,IACJ,CAAC;AAED,QAAI,SAAS;AACT,qBAAe,QAAQ,OAAO;AAAA,IAClC;AAEA,WAAO,MAAM;AACT,UAAI,SAAS;AACT,uBAAe,UAAU,OAAO;AAAA,MACpC;AAAA,IACJ;AAAA,EACJ,GAAG,CAAA,CAAE;AAEL,YAAU,MAAM;AACZ,QAAI,mBAAmB,EAAG;AAE1B,UAAM,aAAa,uBAAuB,OAAO,OAAO,OAAO;AAC/D,UAAM,cAAc,WAAW,SAAS,OAAO,MAAM,OAAO,SAAS;AAErEC,WAAU,OAAO,OAAO,EAAE,UAAU,GAAG,EAAE,OAAA;AAEzC,UAAM,MAAMA,OAAU,OAAO,OAAO,EAC/B,KAAK,UAAU,MAAM,EACrB,OAAO,GAAG,EACV,KAAK,aAAa,aAAa,OAAO,IAAI,KAAK,WAAW,OAAO,MAAM,SAAO,EAAE,GAAG;AAExF,UAAM,KAAKC,OACN,OAAO,UAAU,IAAI,CAAA,MAAK,EAAE,KAAK,CAAC,EAClC,MAAM,CAAC,GAAG,UAAU,CAAC,EACrB,QAAQ,GAAG;AAEhB,UAAM,KAAKA,OACN,OAAO,CAAC,qBAAqB,eAAe,eAAe,CAAC,EAC5D,MAAM,CAAC,GAAG,GAAG,UAAA,CAAW,CAAC,EACzB,QAAQ,GAAG;AAEhB,UAAM,IAAIC,SACL,OAAO,CAAC,GAAGC,IAAO,WAAW,CAAA,MAAKA,IAAO,EAAE,MAAM,CAAA,SAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EACtE,KAAA,EACA,MAAM,CAAC,aAAa,CAAC,CAAC;AAE3B,UAAM,QAAQ,IAAI,OAAO,GAAG,EACvB,KAAK,SAAS,QAAQ,EACtB,KAAK,aAAa,gBAAgB,WAAW,GAAG,EAChD,KAAKC,WAAc,EAAE,EAAE,YAAY,EAAE,CAAC;AAE3C,UAAM,QAAQ,IAAI,OAAO,GAAG,EACvB,KAAK,SAAS,QAAQ,EACtB,KAAKC,SAAY,CAAC,EAAE,YAAY,EAAE,EAAE,WAAW,CAAC,MAAW,aAAa,GAAG,qBAAqB,CAAC,CAAC;AAEvG,UAAM,OAAO,SAAS,EAAE,KAAK,UAAU,MAAM;AAC7C,UAAM,OAAO,SAAS,EAAE,KAAK,UAAU,MAAM;AAE7C,QAAI,MAAM;AACN,UAAI,UAAU,YAAY,EACrB,KAAK,EAAE,OAAO,EACd,MAAA,EACA,OAAO,MAAM,EACb,KAAK,SAAS,WAAW,EACzB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,UAAU,EACrB,KAAK,MAAM,OAAK,EAAE,CAAC,CAAC,EACpB,KAAK,MAAM,CAAA,MAAK,EAAE,CAAC,CAAC,EACpB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,KAAK,EAC/B,MAAM,gBAAgB,CAAC;AAAA,IAChC;AAEA,UAAM,cAAc,IAAI,UAAU,cAAc,EAC3C,KAAK,SAAS,EACd,MAAA,EACA,OAAO,GAAG,EACV,KAAK,SAAS,aAAa,EAC3B,KAAK,aAAa,CAAA,MAAK,aAAa,GAAG,EAAE,KAAK,CAAC,MAAM;AAE1D,gBAAY,UAAU,MAAM,EACvB,KAAK,CAAA,MAAK,EAAE,IAAI,EAChB,MAAA,EACA,OAAO,MAAM,EACb,KAAK,KAAK,CAAA,MAAK,GAAG,EAAE,IAAI,KAAK,GAAG,UAAA,IAAc,YAAY,CAAC,EAC3D,KAAK,KAAK,CAAA,MAAK,EAAE,EAAE,KAAK,CAAC,EACzB,KAAK,SAAS,QAAQ,EACtB,KAAK,UAAU,CAAA,MAAK,cAAc,EAAE,EAAE,KAAK,CAAC,EAC5C,KAAK,QAAQ,CAAA,MAAK,EAAE,KAAK,EACzB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC;AAAA,EAErB,GAAG,CAAC,WAAW,UAAU,QAAQ,sBAAsB,gBAAgB,MAAM,QAAQ,uBAAuB,QAAQ,CAAC;AAErH,6BACK,OAAA,EAAI,KAAK,YAAY,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA,GAClD,UAAA,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,cACpB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAK;AAAA,MACD,OAAO;AAAA,QACH,OAAO;AAAA,QACP,WAAW,wBAAwB,SAAS;AAAA,QAC5C,WAAW;AAAA,MAAA;AAAA,MAGnB,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAK;AAAA,UACL,OAAO;AAAA,UACP;AAAA,UACA,SAAS,OAAO,oBAAoB,IAAI,MAAM;AAAA,UAC9C,OAAO,EAAE,SAAS,QAAA;AAAA,QAAQ;AAAA,MAAA;AAAA,IAC9B;AAAA,EAAA,GAER,EAAA,CACJ;AAER;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),a=require("../../../../hooks/useAuth/index.js"),r=require("../../../../node_modules/d3-scale/src/band/index.js"),s=require("../../../../node_modules/d3-scale/src/linear/index.js"),l=require("../../../../node_modules/d3-array/src/max/index.js"),d=require("../../../../node_modules/d3-selection/src/select/index.js"),n=require("../../../../node_modules/d3-axis/src/axis/index.js"),i=require("../../../../node_modules/d3-format/src/defaultLocale/index.js");exports.default=({chartData:o,height:u=500,barWidth:c=40,margin:h={top:40,right:20,bottom:40,left:50},line:f=!1})=>{var m;const p=t.useRef(null),x=t.useRef(null),g=t.useRef(null),[v,y]=t.useState(0),j=t.useMemo(()=>Math.max(...o.map(e=>e.data.map(e=>e.value)).flat()),[o]),b=o.length>12,k=b?Math.max(120*o.length,v):v,{user:w}=a.useAuth(),q=(null==(m=null==w?void 0:w.currency_data)?void 0:m.symbol)||"";return t.useEffect(()=>{const e=x.current,t=new ResizeObserver(e=>{if(e[0]){const t=e[0].contentRect.width;y(t)}});return e&&t.observe(e),()=>{e&&t.unobserve(e)}},[]),t.useEffect(()=>{if(0===v)return;const e=k-h.left-h.right,t=j?u-h.top-h.bottom:0;d.default(p.current).selectAll("*").remove();const a=d.default(p.current).attr("height",u).append("g").attr("transform",`translate(${h.left}, ${j?h.top:u-50})`),m=r.default().domain(o.map(e=>e.month)).range([0,e]).padding(.2),x=r.default().domain(["Total Transaction","Total Value","Average Value"]).range([0,m.bandwidth()]).padding(.1),g=s.default().domain([0,l.default(o,e=>l.default(e.data,e=>e.value))]).nice().range([t,0]),y=a.append("g").attr("class","x-axis").attr("transform",`translate(0, ${t})`).call(n.axisBottom(m).tickPadding(20));a.append("g").attr("class","y-axis").call(n.axisLeft(g).tickPadding(10).tickFormat(e=>{return t=e,`${q} ${i.format(".2s")(t).replace("k","K")}`;var t})).select(".domain").attr("stroke","none"),y.select(".domain").attr("stroke","none"),f&&a.selectAll(".grid-line").data(g.ticks()).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",e).attr("y1",e=>g(e)).attr("y2",e=>g(e)).style("stroke","#ddd").style("stroke-dasharray","3,3").style("stroke-width",1),a.selectAll(".month-group").data(o).enter().append("g").attr("class","month-group").attr("transform",e=>`translate(${m(e.month)}, 0)`).selectAll("rect").data(e=>e.data).enter().append("rect").attr("x",e=>x(e.type)+(x.bandwidth()-c)/2).attr("y",e=>g(e.value)).attr("width",c).attr("height",e=>t-g(e.value)).attr("fill",e=>e.color).attr("rx",5).attr("ry",5)},[o,c,u,k,v,f,h,q,j]),/* @__PURE__ */e.jsx("div",{ref:x,style:{width:"100%",height:"100%"},children:/* @__PURE__ */e.jsx("div",{style:{position:"relative"},children:/* @__PURE__ */e.jsx("div",{ref:g,style:{width:"100%",overflowX:b?"auto":"hidden",overflowY:"hidden"},children:/* @__PURE__ */e.jsx("svg",{ref:p,width:k,height:u,viewBox:`0 0 ${k} ${u}`,style:{display:"block"}})})})})};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/charts/groupBarChart/GroupBarChart.tsx"],"sourcesContent":["import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport { useAuth } from '../../../hooks/useAuth';\n\nexport interface IGroupChartProps {\n chartData: any[],\n height?: number,\n margin?: any,\n barWidth?: number,\n line?: boolean\n}\n\nconst formatNumber = (num: number, symbol) => {\n return `${symbol} ${d3.format(\".2s\")(num).replace('k', 'K')}`;\n};\n\nconst GroupedBarChart = ({ \n chartData, \n height = 500, \n barWidth = 40, \n margin = { top: 40, right: 20, bottom: 40, left: 50 }, \n line = false \n}: IGroupChartProps) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const maxValue = useMemo(() => Math.max(...chartData.map((d) => d.data.map(v=>v.value)).flat()), [chartData]);\n\n const needsHorizontalScroll = chartData.length > 12;\n const minGroupWidth = 120; \n const calculatedChartWidth = needsHorizontalScroll \n ? Math.max(chartData.length * minGroupWidth, containerWidth)\n : containerWidth;\n\n const { user } = useAuth();\n const defaultCurrencySymbol = user?.currency_data?.symbol || '';\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (entries[0]) {\n const newWidth = entries[0].contentRect.width;\n setContainerWidth(newWidth);\n }\n });\n\n if (wrapper) {\n resizeObserver.observe(wrapper);\n }\n\n return () => {\n if (wrapper) {\n resizeObserver.unobserve(wrapper);\n }\n };\n }, []);\n\n useEffect(() => {\n if (containerWidth === 0) return; \n \n const chartWidth = calculatedChartWidth - margin.left - margin.right;\n const chartHeight = maxValue ? height - margin.top - margin.bottom : 0;\n \n d3.select(svgRef.current).selectAll('*').remove();\n \n const svg = d3.select(svgRef.current)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${margin.left}, ${maxValue ? margin.top : height-50})`);\n\n const x0 = d3.scaleBand()\n .domain(chartData.map(d => d.month))\n .range([0, chartWidth])\n .padding(0.2);\n\n const x1 = d3.scaleBand()\n .domain(['Total Transaction', 'Total Value', 'Average Value'])\n .range([0, x0.bandwidth()])\n .padding(0.1);\n\n const y = d3.scaleLinear()\n .domain([0, d3.max(chartData, d => d3.max(d.data, data => data.value))])\n .nice()\n .range([chartHeight, 0]);\n\n const xAxis = svg.append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(0, ${chartHeight})`)\n .call(d3.axisBottom(x0).tickPadding(20));\n \n const yAxis = svg.append('g')\n .attr('class', 'y-axis')\n .call(d3.axisLeft(y).tickPadding(10).tickFormat((d: any) => formatNumber(d, defaultCurrencySymbol)));\n\n yAxis.select(\".domain\").attr(\"stroke\", \"none\");\n xAxis.select(\".domain\").attr(\"stroke\", \"none\");\n \n if (line) {\n svg.selectAll('.grid-line')\n .data(y.ticks())\n .enter()\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => y(d))\n .attr('y2', d => y(d))\n .style('stroke', '#ddd')\n .style('stroke-dasharray', '3,3') // Dotted line\n .style('stroke-width', 1);\n }\n\n const monthGroups = svg.selectAll('.month-group')\n .data(chartData)\n .enter()\n .append('g')\n .attr('class', 'month-group')\n .attr('transform', d => `translate(${x0(d.month)}, 0)`);\n\n monthGroups.selectAll('rect')\n .data(d => d.data)\n .enter()\n .append('rect')\n .attr('x', d => x1(d.type) + (x1.bandwidth() - barWidth) / 2)\n .attr('y', d => y(d.value))\n .attr('width', barWidth)\n .attr('height', d => chartHeight - y(d.value))\n .attr('fill', d => d.color)\n .attr('rx', 5)\n .attr('ry', 5);\n\n }, [chartData, barWidth, height, calculatedChartWidth, containerWidth, line, margin, defaultCurrencySymbol, maxValue]);\n\n return (\n <div ref={wrapperRef} style={{ width: '100%', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <div \n ref={scrollContainerRef}\n style={{ \n width: '100%', \n overflowX: needsHorizontalScroll ? 'auto' : 'hidden',\n overflowY: 'hidden'\n }}\n >\n <svg \n ref={svgRef} \n width={calculatedChartWidth} \n height={height} \n viewBox={`0 0 ${calculatedChartWidth} ${height}`}\n style={{ display: 'block' }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default GroupedBarChart;"],"names":["chartData","height","barWidth","margin","top","right","bottom","left","line","svgRef","useRef","wrapperRef","scrollContainerRef","containerWidth","setContainerWidth","useState","maxValue","useMemo","Math","max","map","d","data","v","value","flat","needsHorizontalScroll","length","calculatedChartWidth","user","useAuth","defaultCurrencySymbol","_a","currency_data","symbol","useEffect","wrapper","current","resizeObserver","ResizeObserver","entries","newWidth","contentRect","width","observe","unobserve","chartWidth","chartHeight","d3.select","selectAll","remove","svg","attr","append","x0","d3.scaleBand","domain","month","range","padding","x1","bandwidth","y","d3.scaleLinear","d3.max","nice","xAxis","call","d3.axisBottom","tickPadding","d3.axisLeft","tickFormat","formatNumber","num","d3.format","replace","select","ticks","enter","style","type","color","ref","children","jsx","position","overflowX","overflowY","viewBox","display"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState, useEffect } from "react";
|
|
3
|
+
import linear from "../../../../node_modules/d3-scale/src/linear/index.esm.js";
|
|
4
|
+
import max from "../../../../node_modules/d3-array/src/max/index.esm.js";
|
|
5
|
+
import select from "../../../../node_modules/d3-selection/src/select/index.esm.js";
|
|
6
|
+
import line from "../../../../node_modules/d3-shape/src/line/index.esm.js";
|
|
7
|
+
import area from "../../../../node_modules/d3-shape/src/area/index.esm.js";
|
|
8
|
+
const AreaLineChart = ({
|
|
9
|
+
data,
|
|
10
|
+
width = "100%",
|
|
11
|
+
// Default to responsive width
|
|
12
|
+
height = 200,
|
|
13
|
+
// Set a default numeric height
|
|
14
|
+
lineColor = "#ADE7CB",
|
|
15
|
+
lineFillColor = "#EBF9F2",
|
|
16
|
+
...rest
|
|
17
|
+
}) => {
|
|
18
|
+
const svgRef = useRef(null);
|
|
19
|
+
const containerRef = useRef(null);
|
|
20
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
23
|
+
if (containerRef.current) {
|
|
24
|
+
setContainerWidth(containerRef.current.clientWidth);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
if (containerRef.current) {
|
|
28
|
+
resizeObserver.observe(containerRef.current);
|
|
29
|
+
setContainerWidth(containerRef.current.clientWidth);
|
|
30
|
+
}
|
|
31
|
+
return () => resizeObserver.disconnect();
|
|
32
|
+
}, []);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (containerWidth === 0) return;
|
|
35
|
+
const svg = select(svgRef.current);
|
|
36
|
+
svg.selectAll("*").remove();
|
|
37
|
+
const margin = { top: 5, left: 0, right: 0 };
|
|
38
|
+
const chartWidth = containerWidth - margin.left - margin.right;
|
|
39
|
+
const chartHeight = height;
|
|
40
|
+
const x = linear().domain([0, data.length - 1]).range([0, chartWidth]);
|
|
41
|
+
const y = linear().domain([0, max(data, (d) => d.value) || 1]).range([chartHeight, 0]);
|
|
42
|
+
const line$1 = line().x((_, i) => x(i)).y((d) => y(d.value));
|
|
43
|
+
const area$1 = area().x((_, i) => x(i)).y0(chartHeight).y1((d) => y(d.value));
|
|
44
|
+
const chart = svg.append("g").attr("transform", `translate(${margin.left},${margin.top})`);
|
|
45
|
+
chart.append("path").datum(data).attr("class", "line").attr("d", line$1).style("fill", "none").style("stroke", lineColor).style("stroke-width", 5);
|
|
46
|
+
chart.append("path").datum(data).attr("class", "area").attr("d", area$1).style("fill", lineFillColor);
|
|
47
|
+
chart.selectAll(".domain").remove();
|
|
48
|
+
chart.selectAll(".tick line").remove();
|
|
49
|
+
}, [data, height, lineColor, lineFillColor, containerWidth]);
|
|
50
|
+
return /* @__PURE__ */ jsx("div", { ref: containerRef, style: { width, height }, children: /* @__PURE__ */ jsx("svg", { ref: svgRef, width: "100%", height: "100%", ...rest }) });
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
AreaLineChart as default
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../../src/components/charts/line-chart/area-lineChart.tsx"],"sourcesContent":["import React, { useRef, useEffect, useState } from \"react\";\nimport * as d3 from \"d3\";\n\ninterface DataPoint {\n label: string;\n value: number;\n}\n\ninterface LineChartProps {\n data: DataPoint[];\n width?: number | string; // Accept string for percentage width\n height?: number | string;\n lineColor?: string;\n lineFillColor?: string;\n}\n\nconst AreaLineChart: React.FC<LineChartProps> = ({\n data,\n width = \"100%\", // Default to responsive width\n height = 200, // Set a default numeric height\n lineColor = \"#ADE7CB\",\n lineFillColor = \"#EBF9F2\",\n ...rest\n}) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const containerRef = useRef<HTMLDivElement>(null); // Reference to the container\n const [containerWidth, setContainerWidth] = useState(0);\n\n useEffect(() => {\n // Set up ResizeObserver to track container width\n const resizeObserver = new ResizeObserver(() => {\n if (containerRef.current) {\n setContainerWidth(containerRef.current.clientWidth);\n }\n });\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n setContainerWidth(containerRef.current.clientWidth);\n }\n\n return () => resizeObserver.disconnect();\n }, []);\n\n useEffect(() => {\n if (containerWidth === 0) return; // Skip rendering until we have a valid width\n\n const svg = d3.select(svgRef.current);\n svg.selectAll(\"*\").remove(); // Clear previous content\n\n const margin = { top: 5, left: 0, right: 0, bottom: 5 };\n const chartWidth = containerWidth - margin.left - margin.right; // Use container width\n const chartHeight = height as number;\n\n const x = d3\n .scaleLinear()\n .domain([0, data.length - 1])\n .range([0, chartWidth]);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(data, (d: DataPoint) => d.value) || 1]) // Fallback for empty data\n .range([chartHeight, 0]);\n\n const line = d3\n .line<DataPoint>()\n .x((_, i) => x(i))\n .y((d) => y(d.value));\n\n const area = d3\n .area<DataPoint>()\n .x((_, i) => x(i))\n .y0(chartHeight)\n .y1((d) => y(d.value));\n\n const chart = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n chart\n .append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line)\n .style(\"fill\", \"none\")\n .style(\"stroke\", lineColor)\n .style(\"stroke-width\", 5);\n\n chart\n .append(\"path\")\n .datum(data)\n .attr(\"class\", \"area\")\n .attr(\"d\", area)\n .style(\"fill\", lineFillColor);\n\n chart.selectAll(\".domain\").remove();\n chart.selectAll(\".tick line\").remove();\n }, [data, height, lineColor, lineFillColor, containerWidth]);\n\n return (\n <div ref={containerRef} style={{ width: width, height: height }}>\n <svg ref={svgRef} width=\"100%\" height=\"100%\" {...rest}></svg>\n </div>\n );\n};\n\nexport default AreaLineChart;\n"],"names":["d3.select","d3.scaleLinear","d3.max","line","d3.line","area","d3.area"],"mappings":";;;;;;;AAgBA,MAAM,gBAA0C,CAAC;AAAA,EAC/C;AAAA,EACA,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,GAAG;AACL,MAAM;AACJ,QAAM,SAAS,OAAsB,IAAI;AACzC,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,CAAC;AAEtD,YAAU,MAAM;AAEd,UAAM,iBAAiB,IAAI,eAAe,MAAM;AAC9C,UAAI,aAAa,SAAS;AACxB,0BAAkB,aAAa,QAAQ,WAAW;AAAA,MACpD;AAAA,IACF,CAAC;AAED,QAAI,aAAa,SAAS;AACxB,qBAAe,QAAQ,aAAa,OAAO;AAC3C,wBAAkB,aAAa,QAAQ,WAAW;AAAA,IACpD;AAEA,WAAO,MAAM,eAAe,WAAA;AAAA,EAC9B,GAAG,CAAA,CAAE;AAEL,YAAU,MAAM;AACd,QAAI,mBAAmB,EAAG;AAE1B,UAAM,MAAMA,OAAU,OAAO,OAAO;AACpC,QAAI,UAAU,GAAG,EAAE,OAAA;AAEnB,UAAM,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,EAAa;AACtD,UAAM,aAAa,iBAAiB,OAAO,OAAO,OAAO;AACzD,UAAM,cAAc;AAEpB,UAAM,IAAIC,OACP,EACA,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAC3B,MAAM,CAAC,GAAG,UAAU,CAAC;AAExB,UAAM,IAAIA,SAEP,OAAO,CAAC,GAAGC,IAAO,MAAM,CAAC,MAAiB,EAAE,KAAK,KAAK,CAAC,CAAC,EACxD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,UAAMC,SAAOC,KACV,EACA,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAChB,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;AAEtB,UAAMC,SAAOC,OAEV,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAChB,GAAG,WAAW,EACd,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;AAEvB,UAAM,QAAQ,IACX,OAAO,GAAG,EACV,KAAK,aAAa,aAAa,OAAO,IAAI,IAAI,OAAO,GAAG,GAAG;AAE9D,UACG,OAAO,MAAM,EACb,MAAM,IAAI,EACV,KAAK,SAAS,MAAM,EACpB,KAAK,KAAKH,MAAI,EACd,MAAM,QAAQ,MAAM,EACpB,MAAM,UAAU,SAAS,EACzB,MAAM,gBAAgB,CAAC;AAE1B,UACG,OAAO,MAAM,EACb,MAAM,IAAI,EACV,KAAK,SAAS,MAAM,EACpB,KAAK,KAAKE,MAAI,EACd,MAAM,QAAQ,aAAa;AAE9B,UAAM,UAAU,SAAS,EAAE,OAAA;AAC3B,UAAM,UAAU,YAAY,EAAE,OAAA;AAAA,EAChC,GAAG,CAAC,MAAM,QAAQ,WAAW,eAAe,cAAc,CAAC;AAE3D,6BACG,OAAA,EAAI,KAAK,cAAc,OAAO,EAAE,OAAc,OAAA,GAC7C,8BAAC,OAAA,EAAI,KAAK,QAAQ,OAAM,QAAO,QAAO,QAAQ,GAAG,MAAM,GACzD;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("../../../../node_modules/d3-scale/src/linear/index.js"),l=require("../../../../node_modules/d3-array/src/max/index.js"),s=require("../../../../node_modules/d3-selection/src/select/index.js"),n=require("../../../../node_modules/d3-shape/src/line/index.js"),a=require("../../../../node_modules/d3-shape/src/area/index.js");exports.default=({data:d,width:i="100%",height:u=200,lineColor:c="#ADE7CB",lineFillColor:o="#EBF9F2",...f})=>{const h=t.useRef(null),m=t.useRef(null),[p,x]=t.useState(0);return t.useEffect(()=>{const e=new ResizeObserver(()=>{m.current&&x(m.current.clientWidth)});return m.current&&(e.observe(m.current),x(m.current.clientWidth)),()=>e.disconnect()},[]),t.useEffect(()=>{if(0===p)return;const e=s.default(h.current);e.selectAll("*").remove();const t=p-0-0,i=u,f=r.default().domain([0,d.length-1]).range([0,t]),m=r.default().domain([0,l.default(d,e=>e.value)||1]).range([i,0]),x=n.default().x((e,t)=>f(t)).y(e=>m(e.value)),v=a.default().x((e,t)=>f(t)).y0(i).y1(e=>m(e.value)),y=e.append("g").attr("transform","translate(0,5)");y.append("path").datum(d).attr("class","line").attr("d",x).style("fill","none").style("stroke",c).style("stroke-width",5),y.append("path").datum(d).attr("class","area").attr("d",v).style("fill",o),y.selectAll(".domain").remove(),y.selectAll(".tick line").remove()},[d,u,c,o,p]),/* @__PURE__ */e.jsx("div",{ref:m,style:{width:i,height:u},children:/* @__PURE__ */e.jsx("svg",{ref:h,width:"100%",height:"100%",...f})})};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|