@kyndryl-design-system/shidoka-charts 2.5.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_virtual/_tslib.js +1 -1
- package/common/config/chartTypes/bubble.js.map +1 -1
- package/common/config/chartTypes/bubbleMap.js.map +1 -1
- package/common/config/chartTypes/choropleth.js.map +1 -1
- package/common/config/chartTypes/matrix.js +1 -1
- package/common/config/chartTypes/matrix.js.map +1 -1
- package/common/config/chartTypes/treemap.js.map +1 -1
- package/common/config/chartTypes/violin.js.map +1 -1
- package/common/config/globalOptionsNonRadial.js.map +1 -1
- package/common/helpers/boxplotViolinTableRenderer.d.ts +3 -3
- package/common/helpers/helpers.d.ts +23 -23
- package/common/helpers/helpers.d.ts.map +1 -1
- package/common/helpers/helpers.js.map +1 -1
- package/common/legend/getLegendData.js.map +1 -1
- package/common/legend/htmlRenderer.js.map +1 -1
- package/common/plugins/doughnutLabel.js.map +1 -1
- package/common/plugins/gradientLegend.js.map +1 -1
- package/common/plugins/htmlLegendPlugin.d.ts +34 -34
- package/components/chart/chart.d.ts +168 -168
- package/components/chart/chart.d.ts.map +1 -1
- package/components/chart/chart.js +44 -44
- package/components/chart/chart.js.map +1 -1
- package/components/chart/chart.scss.js +34 -12
- package/components/chart/chart.scss.js.map +1 -1
- package/components/chart/index.d.ts +1 -1
- package/external/@babel/runtime/helpers/esm/createClass.js +1 -1
- package/external/@babel/runtime/helpers/esm/createClass.js.map +1 -1
- package/external/@babel/runtime/helpers/esm/createForOfIteratorHelper.js +1 -1
- package/external/@babel/runtime/helpers/esm/createForOfIteratorHelper.js.map +1 -1
- package/external/@babel/runtime/helpers/esm/createSuper.js.map +1 -1
- package/external/@babel/runtime/helpers/esm/isNativeReflectConstruct.js.map +1 -1
- package/external/@babel/runtime/helpers/esm/toPrimitive.js +1 -1
- package/external/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -1
- package/external/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -1
- package/external/@kurkle/color/dist/color.esm.js.map +1 -1
- package/external/@lit/reactive-element/css-tag.js +1 -1
- package/external/@lit/reactive-element/css-tag.js.map +1 -1
- package/external/@lit/reactive-element/decorators/base.js +1 -1
- package/external/@lit/reactive-element/decorators/base.js.map +1 -1
- package/external/@lit/reactive-element/decorators/custom-element.js +1 -1
- package/external/@lit/reactive-element/decorators/custom-element.js.map +1 -1
- package/external/@lit/reactive-element/decorators/property.js +2 -2
- package/external/@lit/reactive-element/decorators/property.js.map +1 -1
- package/external/@lit/reactive-element/decorators/query.js +2 -2
- package/external/@lit/reactive-element/decorators/query.js.map +1 -1
- package/external/@lit/reactive-element/decorators/state.js +1 -1
- package/external/@lit/reactive-element/decorators/state.js.map +1 -1
- package/external/@lit/reactive-element/reactive-element.js +1 -1
- package/external/@lit/reactive-element/reactive-element.js.map +1 -1
- package/external/@sgratzl/boxplots/build/index.js.map +1 -1
- package/external/@sgratzl/chartjs-chart-boxplot/build/index.js +1 -1
- package/external/@sgratzl/chartjs-chart-boxplot/build/index.js.map +1 -1
- package/external/chart.js/dist/chart.js +2 -2
- package/external/chart.js/dist/chart.js.map +1 -1
- package/external/chart.js/dist/chunks/helpers.segment.js +1 -1
- package/external/chart.js/dist/chunks/helpers.segment.js.map +1 -1
- package/external/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js +2 -2
- package/external/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js.map +1 -1
- package/external/chartjs-chart-geo/build/index.js +1 -1
- package/external/chartjs-chart-geo/build/index.js.map +1 -1
- package/external/chartjs-chart-matrix/dist/chartjs-chart-matrix.esm.js.map +1 -1
- package/external/chartjs-chart-treemap/dist/chartjs-chart-treemap.esm.js +2 -2
- package/external/chartjs-chart-treemap/dist/chartjs-chart-treemap.esm.js.map +1 -1
- package/external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js +2 -2
- package/external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js.map +1 -1
- package/external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js +2 -2
- package/external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js.map +1 -1
- package/external/d3-array/src/fsum.js.map +1 -1
- package/external/d3-array/src/range.js.map +1 -1
- package/external/d3-color/src/color.js.map +1 -1
- package/external/d3-color/src/cubehelix.js +1 -1
- package/external/d3-color/src/cubehelix.js.map +1 -1
- package/external/d3-geo/src/cartesian.js +1 -1
- package/external/d3-geo/src/circle.js +1 -1
- package/external/d3-geo/src/circle.js.map +1 -1
- package/external/d3-geo/src/clip/antimeridian.js.map +1 -1
- package/external/d3-geo/src/clip/buffer.js.map +1 -1
- package/external/d3-geo/src/clip/circle.js +1 -1
- package/external/d3-geo/src/clip/circle.js.map +1 -1
- package/external/d3-geo/src/clip/index.js.map +1 -1
- package/external/d3-geo/src/clip/line.js.map +1 -1
- package/external/d3-geo/src/clip/rectangle.js.map +1 -1
- package/external/d3-geo/src/clip/rejoin.js.map +1 -1
- package/external/d3-geo/src/compose.js.map +1 -1
- package/external/d3-geo/src/contains.js.map +1 -1
- package/external/d3-geo/src/graticule.js.map +1 -1
- package/external/d3-geo/src/length.js +1 -1
- package/external/d3-geo/src/math.js.map +1 -1
- package/external/d3-geo/src/path/area.js +1 -1
- package/external/d3-geo/src/path/area.js.map +1 -1
- package/external/d3-geo/src/path/bounds.js +1 -1
- package/external/d3-geo/src/path/bounds.js.map +1 -1
- package/external/d3-geo/src/path/centroid.js +1 -1
- package/external/d3-geo/src/path/centroid.js.map +1 -1
- package/external/d3-geo/src/path/index.js.map +1 -1
- package/external/d3-geo/src/path/measure.js +1 -1
- package/external/d3-geo/src/path/measure.js.map +1 -1
- package/external/d3-geo/src/path/string.js.map +1 -1
- package/external/d3-geo/src/polygonContains.js +1 -1
- package/external/d3-geo/src/polygonContains.js.map +1 -1
- package/external/d3-geo/src/projection/albers.js.map +1 -1
- package/external/d3-geo/src/projection/albersUsa.js.map +1 -1
- package/external/d3-geo/src/projection/azimuthal.js +1 -1
- package/external/d3-geo/src/projection/azimuthal.js.map +1 -1
- package/external/d3-geo/src/projection/azimuthalEqualArea.js +1 -1
- package/external/d3-geo/src/projection/conic.js.map +1 -1
- package/external/d3-geo/src/projection/conicConformal.js +1 -1
- package/external/d3-geo/src/projection/conicConformal.js.map +1 -1
- package/external/d3-geo/src/projection/conicEqualArea.js +1 -1
- package/external/d3-geo/src/projection/conicEqualArea.js.map +1 -1
- package/external/d3-geo/src/projection/conicEquidistant.js +1 -1
- package/external/d3-geo/src/projection/conicEquidistant.js.map +1 -1
- package/external/d3-geo/src/projection/cylindricalEqualArea.js +1 -1
- package/external/d3-geo/src/projection/cylindricalEqualArea.js.map +1 -1
- package/external/d3-geo/src/projection/equalEarth.js +1 -1
- package/external/d3-geo/src/projection/equalEarth.js.map +1 -1
- package/external/d3-geo/src/projection/gnomonic.js +1 -1
- package/external/d3-geo/src/projection/index.js.map +1 -1
- package/external/d3-geo/src/projection/mercator.js +1 -1
- package/external/d3-geo/src/projection/mercator.js.map +1 -1
- package/external/d3-geo/src/projection/naturalEarth1.js.map +1 -1
- package/external/d3-geo/src/projection/orthographic.js +1 -1
- package/external/d3-geo/src/projection/resample.js +1 -1
- package/external/d3-geo/src/projection/resample.js.map +1 -1
- package/external/d3-geo/src/projection/stereographic.js +1 -1
- package/external/d3-geo/src/projection/transverseMercator.js +1 -1
- package/external/d3-geo/src/projection/transverseMercator.js.map +1 -1
- package/external/d3-geo/src/rotation.js +1 -1
- package/external/d3-geo/src/rotation.js.map +1 -1
- package/external/d3-geo/src/stream.js.map +1 -1
- package/external/d3-geo/src/transform.js.map +1 -1
- package/external/d3-interpolate/src/basis.js.map +1 -1
- package/external/d3-interpolate/src/color.js.map +1 -1
- package/external/d3-interpolate/src/cubehelix.js.map +1 -1
- package/external/d3-interpolate/src/rgb.js.map +1 -1
- package/external/d3-scale-chromatic/src/sequential-multi/cividis.js.map +1 -1
- package/external/d3-scale-chromatic/src/sequential-multi/cubehelix.js.map +1 -1
- package/external/d3-scale-chromatic/src/sequential-multi/rainbow.js.map +1 -1
- package/external/d3-scale-chromatic/src/sequential-multi/viridis.js.map +1 -1
- package/external/date-fns/esm/_lib/defaultOptions/index.js.map +1 -1
- package/external/date-fns/esm/_lib/format/formatters/index.js +1 -1
- package/external/date-fns/esm/_lib/format/formatters/index.js.map +1 -1
- package/external/date-fns/esm/_lib/format/lightFormatters/index.js.map +1 -1
- package/external/date-fns/esm/_lib/format/longFormatters/index.js.map +1 -1
- package/external/date-fns/esm/_lib/protectedTokens/index.js.map +1 -1
- package/external/date-fns/esm/compareAsc/index.js.map +1 -1
- package/external/date-fns/esm/differenceInDays/index.js.map +1 -1
- package/external/date-fns/esm/differenceInHours/index.js +1 -1
- package/external/date-fns/esm/differenceInHours/index.js.map +1 -1
- package/external/date-fns/esm/differenceInMinutes/index.js +1 -1
- package/external/date-fns/esm/differenceInMinutes/index.js.map +1 -1
- package/external/date-fns/esm/differenceInMonths/index.js.map +1 -1
- package/external/date-fns/esm/differenceInQuarters/index.js +1 -1
- package/external/date-fns/esm/differenceInQuarters/index.js.map +1 -1
- package/external/date-fns/esm/differenceInSeconds/index.js +1 -1
- package/external/date-fns/esm/differenceInSeconds/index.js.map +1 -1
- package/external/date-fns/esm/differenceInWeeks/index.js +1 -1
- package/external/date-fns/esm/differenceInWeeks/index.js.map +1 -1
- package/external/date-fns/esm/endOfWeek/index.js +1 -1
- package/external/date-fns/esm/endOfWeek/index.js.map +1 -1
- package/external/date-fns/esm/locale/_lib/buildFormatLongFn/index.js.map +1 -1
- package/external/date-fns/esm/locale/_lib/buildLocalizeFn/index.js.map +1 -1
- package/external/date-fns/esm/locale/_lib/buildMatchFn/index.js.map +1 -1
- package/external/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/_lib/formatDistance/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/_lib/formatLong/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/_lib/formatRelative/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/_lib/localize/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/_lib/match/index.js.map +1 -1
- package/external/date-fns/esm/locale/en-US/index.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/Setter.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DateParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/EraParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISODayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalDayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MinuteParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MonthParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/QuarterParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/SecondParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/YearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/utils.js.map +1 -1
- package/external/date-fns/esm/parse/index.js.map +1 -1
- package/external/date-fns/esm/parseISO/index.js.map +1 -1
- package/external/deepmerge-ts/dist/node/index.js.map +1 -1
- package/external/lit-element/lit-element.js +1 -1
- package/external/lit-element/lit-element.js.map +1 -1
- package/external/lit-html/directive.js +1 -1
- package/external/lit-html/directive.js.map +1 -1
- package/external/lit-html/directives/class-map.js +2 -2
- package/external/lit-html/directives/class-map.js.map +1 -1
- package/external/lit-html/directives/unsafe-html.js +2 -2
- package/external/lit-html/directives/unsafe-html.js.map +1 -1
- package/external/lit-html/lit-html.js +1 -1
- package/external/lit-html/lit-html.js.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +27 -45
- package/external/@lit/reactive-element/decorators/query-assigned-elements.js +0 -7
- package/external/@lit/reactive-element/decorators/query-assigned-elements.js.map +0 -1
package/_virtual/_tslib.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function e(e,r,
|
|
1
|
+
function e(e,t,r,n,o,i){function a(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var c,s=n.kind,f="getter"===s?"get":"setter"===s?"set":"value",u=!t&&e?n.static?e:e.prototype:null,l=t||(u?Object.getOwnPropertyDescriptor(u,n.name):{}),p=!1,d=r.length-1;d>=0;d--){var w={};for(var h in n)w[h]="access"===h?{}:n[h];for(var h in n.access)w.access[h]=n.access[h];w.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");i.push(a(e||null))};var v=(0,r[d])("accessor"===s?{get:l.get,set:l.set}:l[f],w);if("accessor"===s){if(void 0===v)continue;if(null===v||"object"!=typeof v)throw new TypeError("Object expected");(c=a(v.get))&&(l.get=c),(c=a(v.set))&&(l.set=c),(c=a(v.init))&&o.unshift(c)}else(c=a(v))&&("field"===s?o.unshift(c):l[f]=c)}u&&Object.defineProperty(u,n.name,l),p=!0}function t(e,t,r){for(var n=arguments.length>2,o=0;o<t.length;o++)r=n?t[o].call(e,r):t[o].call(e);return n?r:void 0}function r(e,t,r){return Object.defineProperty(e,"name",{configurable:!0,value:t})}function n(e,t,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(e):n?n.value:t.get(e)}function o(e,t,r,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(e,r):o?o.value=r:t.set(e,r),r}"function"==typeof SuppressedError&&SuppressedError;export{n as __classPrivateFieldGet,o as __classPrivateFieldSet,e as __esDecorate,t as __runInitializers,r as __setFunctionName};
|
|
2
2
|
//# sourceMappingURL=_tslib.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubble.js","sources":["../../../../src/common/config/chartTypes/bubble.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\n\nexport const type = 'bubble';\n\nexport const options = () => {\n return {};\n};\n\nexport const datasetOptions = (ctx, index) => {\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'categorical'\n );\n const ColorCycles = Math.floor(index / (Colors.length - 1));\n const Index =\n index > Colors.length - 1\n ? index - (Colors.length - 1) * ColorCycles\n : index;\n\n return {\n backgroundColor: Colors[Index] + '80', // 50% opacity\n borderColor: Colors[index],\n };\n};\n"],"names":["type","options","datasetOptions","ctx","index","Colors","getComputedColorPalette","colorPalette","ColorCycles","Math","floor","length","backgroundColor","borderColor"],"mappings":"8DAEY,MAACA,EAAO,SAEPC,EAAU,KACd,
|
|
1
|
+
{"version":3,"file":"bubble.js","sources":["../../../../src/common/config/chartTypes/bubble.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\n\nexport const type = 'bubble';\n\nexport const options = () => {\n return {};\n};\n\nexport const datasetOptions = (ctx, index) => {\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'categorical'\n );\n const ColorCycles = Math.floor(index / (Colors.length - 1));\n const Index =\n index > Colors.length - 1\n ? index - (Colors.length - 1) * ColorCycles\n : index;\n\n return {\n backgroundColor: Colors[Index] + '80', // 50% opacity\n borderColor: Colors[index],\n };\n};\n"],"names":["type","options","datasetOptions","ctx","index","Colors","getComputedColorPalette","colorPalette","ColorCycles","Math","floor","length","backgroundColor","borderColor"],"mappings":"8DAEY,MAACA,EAAO,SAEPC,EAAU,KACd,CAAE,GAGEC,EAAiB,CAACC,EAAKC,KAClC,MAAMC,EAASC,EACbH,EAAIF,QAAQM,cAAgB,eAExBC,EAAcC,KAAKC,MAAMN,GAASC,EAAOM,OAAS,IAMxD,MAAO,CACLC,gBAAiBP,EALjBD,EAAQC,EAAOM,OAAS,EACpBP,GAASC,EAAOM,OAAS,GAAKH,EAC9BJ,GAG6B,KACjCS,YAAaR,EAAOD,GACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubbleMap.js","sources":["../../../../src/common/config/chartTypes/bubbleMap.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'bubbleMap';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n const LabelColor = getTokenThemeVal('--kd-color-text-variant-inversed');\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'categorical'\n );\n const BubbleColor = getTokenThemeVal('--kd-color-data-viz-level-secondary');\n const LegendTicksColor = getTokenThemeVal('--kd-color-border-variants-light');\n\n return {\n outlineBorderWidth: 0.5,\n outlineBorderColor: BorderColor,\n outlineBackgroundColor: BubbleColor,\n backgroundColor: Colors[0], // + '80', // 50% opacity\n plugins: {\n legend: {\n display: false,\n },\n datalabels: {\n font: {\n size: 12,\n weight: 'bold',\n },\n color: LabelColor,\n // display: 'auto',\n display: function (context) {\n const Value = context.dataset.data[context.dataIndex].value;\n const Range = context.chart.scales.size._range;\n const Avg = (Range.min + Range.max) / 2;\n\n return Value > Avg ? 'auto' : false;\n },\n align: 'center',\n anchor: 'center',\n formatter: function (entry) {\n return entry.value;\n },\n },\n },\n scales: {\n projection: {\n axis: 'x',\n projection: 'naturalEarth1',\n },\n x: {\n display: false,\n },\n y: {\n display: false,\n },\n size: {\n axis: 'x',\n grid: {\n color: LegendTicksColor,\n },\n border: {\n color: LegendTicksColor,\n },\n },\n },\n };\n};\n\nexport const datasetOptions = () => {\n return {};\n};\n"],"names":["type","options","ctx","BorderColor","getTokenThemeVal","LabelColor","Colors","getComputedColorPalette","colorPalette","BubbleColor","LegendTicksColor","outlineBorderWidth","outlineBorderColor","outlineBackgroundColor","backgroundColor","plugins","legend","display","datalabels","font","size","weight","color","context","Value","dataset","data","dataIndex","value","Range","chart","scales","_range","min","max","align","anchor","formatter","entry","projection","axis","x","y","grid","border","datasetOptions"],"mappings":"yLAGY,MAACA,EAAO,YAEPC,EAAWC,IACtB,MAAMC,EAAcC,EAAiB,sCAC/BC,EAAaD,EAAiB,oCAC9BE,EAASC,EACbL,EAAID,QAAQO,cAAgB,eAExBC,EAAcL,EAAiB,uCAC/BM,EAAmBN,EAAiB,oCAE1C,MAAO,CACLO,mBAAoB,GACpBC,mBAAoBT,EACpBU,uBAAwBJ,EACxBK,gBAAiBR,EAAO,GACxBS,QAAS,CACPC,OAAQ,CACNC,SAAS,GAEXC,WAAY,CACVC,KAAM,CACJC,KAAM,GACNC,OAAQ,QAEVC,MAAOjB,EAEPY,QAAS,SAAUM,GACjB,MAAMC,EAAQD,EAAQE,QAAQC,KAAKH,EAAQI,WAAWC,MAChDC,EAAQN,EAAQO,MAAMC,OAAOX,KAAKY,OAGxC,OAAOR,GAFMK,EAAMI,IAAMJ,EAAMK,KAAO,GAEjB,MACtB,EACDC,MAAO,SACPC,OAAQ,SACRC,UAAW,SAAUC,GACnB,OAAOA,EAAMV,KACd,IAGLG,OAAQ,CACNQ,WAAY,CACVC,KAAM,IACND,WAAY,iBAEdE,EAAG,CACDxB,SAAS,GAEXyB,EAAG,CACDzB,SAAS,GAEXG,KAAM,CACJoB,KAAM,IACNG,KAAM,CACJrB,MAAOZ,GAETkC,OAAQ,CACNtB,MAAOZ,KAId,EAGUmC,EAAiB,KACrB"}
|
|
1
|
+
{"version":3,"file":"bubbleMap.js","sources":["../../../../src/common/config/chartTypes/bubbleMap.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'bubbleMap';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n const LabelColor = getTokenThemeVal('--kd-color-text-variant-inversed');\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'categorical'\n );\n const BubbleColor = getTokenThemeVal('--kd-color-data-viz-level-secondary');\n const LegendTicksColor = getTokenThemeVal('--kd-color-border-variants-light');\n\n return {\n outlineBorderWidth: 0.5,\n outlineBorderColor: BorderColor,\n outlineBackgroundColor: BubbleColor,\n backgroundColor: Colors[0], // + '80', // 50% opacity\n plugins: {\n legend: {\n display: false,\n },\n datalabels: {\n font: {\n size: 12,\n weight: 'bold',\n },\n color: LabelColor,\n // display: 'auto',\n display: function (context) {\n const Value = context.dataset.data[context.dataIndex].value;\n const Range = context.chart.scales.size._range;\n const Avg = (Range.min + Range.max) / 2;\n\n return Value > Avg ? 'auto' : false;\n },\n align: 'center',\n anchor: 'center',\n formatter: function (entry) {\n return entry.value;\n },\n },\n },\n scales: {\n projection: {\n axis: 'x',\n projection: 'naturalEarth1',\n },\n x: {\n display: false,\n },\n y: {\n display: false,\n },\n size: {\n axis: 'x',\n grid: {\n color: LegendTicksColor,\n },\n border: {\n color: LegendTicksColor,\n },\n },\n },\n };\n};\n\nexport const datasetOptions = () => {\n return {};\n};\n"],"names":["type","options","ctx","BorderColor","getTokenThemeVal","LabelColor","Colors","getComputedColorPalette","colorPalette","BubbleColor","LegendTicksColor","outlineBorderWidth","outlineBorderColor","outlineBackgroundColor","backgroundColor","plugins","legend","display","datalabels","font","size","weight","color","context","Value","dataset","data","dataIndex","value","Range","chart","scales","_range","min","max","align","anchor","formatter","entry","projection","axis","x","y","grid","border","datasetOptions"],"mappings":"yLAGY,MAACA,EAAO,YAEPC,EAAWC,IACtB,MAAMC,EAAcC,EAAiB,sCAC/BC,EAAaD,EAAiB,oCAC9BE,EAASC,EACbL,EAAID,QAAQO,cAAgB,eAExBC,EAAcL,EAAiB,uCAC/BM,EAAmBN,EAAiB,oCAE1C,MAAO,CACLO,mBAAoB,GACpBC,mBAAoBT,EACpBU,uBAAwBJ,EACxBK,gBAAiBR,EAAO,GACxBS,QAAS,CACPC,OAAQ,CACNC,SAAS,GAEXC,WAAY,CACVC,KAAM,CACJC,KAAM,GACNC,OAAQ,QAEVC,MAAOjB,EAEPY,QAAS,SAAUM,GACjB,MAAMC,EAAQD,EAAQE,QAAQC,KAAKH,EAAQI,WAAWC,MAChDC,EAAQN,EAAQO,MAAMC,OAAOX,KAAKY,OAGxC,OAAOR,GAFMK,EAAMI,IAAMJ,EAAMK,KAAO,GAEjB,MACtB,EACDC,MAAO,SACPC,OAAQ,SACRC,UAAW,SAAUC,GACnB,OAAOA,EAAMV,KACd,IAGLG,OAAQ,CACNQ,WAAY,CACVC,KAAM,IACND,WAAY,iBAEdE,EAAG,CACDxB,SAAS,GAEXyB,EAAG,CACDzB,SAAS,GAEXG,KAAM,CACJoB,KAAM,IACNG,KAAM,CACJrB,MAAOZ,GAETkC,OAAQ,CACNtB,MAAOZ,KAId,EAGUmC,EAAiB,KACrB,CAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choropleth.js","sources":["../../../../src/common/config/chartTypes/choropleth.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'choropleth';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n const LegendTicksColor = getTokenThemeVal('--kd-color-border-variants-light');\n\n return {\n borderWidth: 0.5,\n borderColor: BorderColor,\n plugins: {\n legend: {\n display: false,\n },\n },\n scales: {\n projection: {\n axis: 'x',\n projection: 'naturalEarth1',\n },\n x: {\n display: false,\n },\n y: {\n display: false,\n },\n color: {\n axis: 'x',\n interpolate: (value) => {\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'sequential01'\n );\n const Index = Math.round(value * (Colors.length - 1));\n return Colors[Index];\n },\n grid: {\n color: LegendTicksColor,\n },\n border: {\n color: LegendTicksColor,\n },\n },\n },\n };\n};\n\nexport const datasetOptions = () => {\n return {};\n};\n"],"names":["type","options","ctx","BorderColor","getTokenThemeVal","LegendTicksColor","borderWidth","borderColor","plugins","legend","display","scales","projection","axis","x","y","color","interpolate","value","Colors","getComputedColorPalette","colorPalette","Math","round","length","grid","border","datasetOptions"],"mappings":"yLAGY,MAACA,EAAO,aAEPC,EAAWC,IACtB,MAAMC,EAAcC,EAAiB,sCAC/BC,EAAmBD,EAAiB,oCAE1C,MAAO,CACLE,YAAa,GACbC,YAAaJ,EACbK,QAAS,CACPC,OAAQ,CACNC,SAAS,IAGbC,OAAQ,CACNC,WAAY,CACVC,KAAM,IACND,WAAY,iBAEdE,EAAG,CACDJ,SAAS,GAEXK,EAAG,CACDL,SAAS,GAEXM,MAAO,CACLH,KAAM,IACNI,YAAcC,IACZ,MAAMC,EAASC,EACblB,EAAID,QAAQoB,cAAgB,gBAG9B,OAAOF,EADOG,KAAKC,MAAML,GAASC,EAAOK,OAAS,IAC9B,EAEtBC,KAAM,CACJT,MAAOX,GAETqB,OAAQ,CACNV,MAAOX,KAId,EAGUsB,EAAiB,KACrB"}
|
|
1
|
+
{"version":3,"file":"choropleth.js","sources":["../../../../src/common/config/chartTypes/choropleth.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'choropleth';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n const LegendTicksColor = getTokenThemeVal('--kd-color-border-variants-light');\n\n return {\n borderWidth: 0.5,\n borderColor: BorderColor,\n plugins: {\n legend: {\n display: false,\n },\n },\n scales: {\n projection: {\n axis: 'x',\n projection: 'naturalEarth1',\n },\n x: {\n display: false,\n },\n y: {\n display: false,\n },\n color: {\n axis: 'x',\n interpolate: (value) => {\n const Colors = getComputedColorPalette(\n ctx.options.colorPalette || 'sequential01'\n );\n const Index = Math.round(value * (Colors.length - 1));\n return Colors[Index];\n },\n grid: {\n color: LegendTicksColor,\n },\n border: {\n color: LegendTicksColor,\n },\n },\n },\n };\n};\n\nexport const datasetOptions = () => {\n return {};\n};\n"],"names":["type","options","ctx","BorderColor","getTokenThemeVal","LegendTicksColor","borderWidth","borderColor","plugins","legend","display","scales","projection","axis","x","y","color","interpolate","value","Colors","getComputedColorPalette","colorPalette","Math","round","length","grid","border","datasetOptions"],"mappings":"yLAGY,MAACA,EAAO,aAEPC,EAAWC,IACtB,MAAMC,EAAcC,EAAiB,sCAC/BC,EAAmBD,EAAiB,oCAE1C,MAAO,CACLE,YAAa,GACbC,YAAaJ,EACbK,QAAS,CACPC,OAAQ,CACNC,SAAS,IAGbC,OAAQ,CACNC,WAAY,CACVC,KAAM,IACND,WAAY,iBAEdE,EAAG,CACDJ,SAAS,GAEXK,EAAG,CACDL,SAAS,GAEXM,MAAO,CACLH,KAAM,IACNI,YAAcC,IACZ,MAAMC,EAASC,EACblB,EAAID,QAAQoB,cAAgB,gBAG9B,OAAOF,EADOG,KAAKC,MAAML,GAASC,EAAOK,OAAS,IAC9B,EAEtBC,KAAM,CACJT,MAAOX,GAETqB,OAAQ,CACNV,MAAOX,KAId,EAGUsB,EAAiB,KACrB,CAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getComputedColorPalette as t}from"../colorPalettes.js";const e="matrix",i=(t,e={})=>{const{xAxis:i,yAxis:l,xKey:o="x",yKey:a="y",valueKey:n="value"}=e;if(!(i&&l&&Array.isArray(i)&&Array.isArray(l)))throw new Error("xAxis and yAxis must be provided as arrays");const r=[],s=new Map;t.forEach((t=>{const e=`${t[o]}-${t[a]}`;s.set(e,t[n])}));for(let t=1;t<=l.length;t++)for(let e=1;e<=i.length;e++){const o=l[t-1],a=`${i[e-1]}-${o}`,n=s.has(a)?s.get(a):void 0;r.push({x:e,y:t,value:n})}return r};let l=!1;function o(t){l=!!t}function a(){return!!l||!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullscreenElement||document.msFullscreenElement)}function n(t,e){if(!t||"string"!=typeof t||!t.startsWith("#"))return`rgba(204, 204, 204, ${isNaN(e)?.7:e})`;const i=isNaN(e)?.7:e,{r:l,g:o,b:a}=function(t){if(!t||"string"!=typeof t||!t.startsWith("#")||t.length<7)return{r:0,g:0,b:0};const e=parseInt(t.slice(1,3),16),i=parseInt(t.slice(3,5),16),l=parseInt(t.slice(5,7),16);return{r:isNaN(e)?0:e,g:isNaN(i)?0:i,b:isNaN(l)?0:l}}(t);return`rgba(${l}, ${o}, ${a}, ${i})`}function r(t,e,i=50,l=15,o=1,a){if(!e||!Array.isArray(e)||0===e.length)return`rgba(204, 204, 204, ${o})`;if(
|
|
1
|
+
import{getComputedColorPalette as t}from"../colorPalettes.js";const e="matrix",i=(t,e={})=>{const{xAxis:i,yAxis:l,xKey:o="x",yKey:a="y",valueKey:n="value"}=e;if(!(i&&l&&Array.isArray(i)&&Array.isArray(l)))throw new Error("xAxis and yAxis must be provided as arrays");const r=[],s=new Map;t.forEach((t=>{const e=`${t[o]}-${t[a]}`;s.set(e,t[n])}));for(let t=1;t<=l.length;t++)for(let e=1;e<=i.length;e++){const o=l[t-1],a=`${i[e-1]}-${o}`,n=s.has(a)?s.get(a):void 0;r.push({x:e,y:t,value:n})}return r};let l=!1;function o(t){l=!!t}function a(){return!!l||!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullscreenElement||document.msFullscreenElement)}function n(t,e){if(!t||"string"!=typeof t||!t.startsWith("#"))return`rgba(204, 204, 204, ${isNaN(e)?.7:e})`;const i=isNaN(e)?.7:e,{r:l,g:o,b:a}=function(t){if(!t||"string"!=typeof t||!t.startsWith("#")||t.length<7)return{r:0,g:0,b:0};const e=parseInt(t.slice(1,3),16),i=parseInt(t.slice(3,5),16),l=parseInt(t.slice(5,7),16);return{r:isNaN(e)?0:e,g:isNaN(i)?0:i,b:isNaN(l)?0:l}}(t);return`rgba(${l}, ${o}, ${a}, ${i})`}function r(t,e,i=50,l=15,o=1,a){if(!e||!Array.isArray(e)||0===e.length)return`rgba(204, 204, 204, ${o})`;if(a.toLowerCase().includes("divergent")){const i=-100,l=100,a=Math.floor(e.length/2);if(t<=0){const l=(t-i)/(0-i),r=Math.round(l*a);return n(e[Math.min(r,a)],o)}{const i=t/l,r=a+Math.round(i*(e.length-a-1));return n(e[Math.min(r,e.length-1)],o)}}{const i=0,l=(t-i)/(100-i),a=Math.round(l*(e.length-1));return n(e[Math.min(a,e.length-1)],o)}}const s={id:"gradientLegend",afterDraw(t,e,i){if(!i||!i.display)return;const l=i.colors||t.options.plugins?.gradientLegend?.colors||t.options.colorScale?.colors||t.data?.datasets?.[0]?._colorPalette;if(!l||!l.length)return;const o=t.ctx,a=t.chartArea,r=(i.paletteKey||"").toLowerCase().includes("divergent"),s=t.options.colorScale||{},c=s.min??(r?-100:0),d=s.neutral??(r?0:50),g=s.max??100,h={position:i.position||"bottom",width:i.width||Math.min(400,.8*a.width),height:i.height||20,margin:i.margin||10,borderRadius:i.borderRadius||4,gradientBorderRadius:1,title:i.title||"",titleFontSize:i.titleFontSize||12,labelFontSize:i.labelFontSize||12,labelMargin:i.labelMargin||5,opacity:"number"==typeof i.opacity?i.opacity:.7,...i};let u,p;"bottom"===h.position?(u=a.left+(a.width-h.width)/2,p=a.bottom+h.margin):"top"===h.position?(u=a.left+(a.width-h.width)/2,p=a.top-h.margin-h.height):"bottom-left"===h.position?(u=a.left-70,p=a.bottom+70):(u=a.left+(a.width-h.width)/2,p=a.bottom+h.margin);const f=o.createLinearGradient(u,p,u+h.width,p),b=l.findIndex((t=>t.toLowerCase().includes("neutral")));if(b>0){const t=l.slice(0,b),e=l[b],i=l.slice(b+1);t.forEach(((e,i)=>{const l=t.length>1?i/(t.length-1)*.5:0;f.addColorStop(l,n(e,h.opacity))})),f.addColorStop(.5,n(e,h.opacity)),i.forEach(((t,e)=>{const l=.5+(i.length>1?e/(i.length-1)*.5:0);f.addColorStop(l,n(t,h.opacity))}))}else l.forEach(((t,e)=>{f.addColorStop(e/(l.length-1),n(t,h.opacity))}));function m(t,e,i,l,a){o.beginPath(),o.moveTo(t+a,e),o.lineTo(t+i-a,e),o.arcTo(t+i,e,t+i,e+a,a),o.lineTo(t+i,e+l-a),o.arcTo(t+i,e+l,t+i-a,e+l,a),o.lineTo(t+a,e+l),o.arcTo(t,e+l,t,e+l-a,a),o.lineTo(t,e+a),o.arcTo(t,e,t+a,e,a),o.closePath()}h.title&&(o.font=`500 ${h.titleFontSize}px ${t.options.font?.family||"Arial"}`,o.textAlign="left",o.textBaseline="bottom",o.fillStyle=t.options.color||"#666",o.fillText(h.title,u,p-h.labelMargin)),o.fillStyle="#fff",m(u,p,h.width,h.height,h.borderRadius),o.fill(),o.fillStyle=f,m(u,p,h.width,h.height,h.gradientBorderRadius),o.fill(),o.font=`${h.labelFontSize}px ${t.options.font?.family||"Arial"}`,o.fillStyle=t.options.color||"#666";const y=t=>t.toString();o.textAlign="left",o.textBaseline="top",o.fillText(y(c),u,p+h.height+h.labelMargin),l.length>=3&&void 0!==d&&(o.textAlign="center",o.fillText(y(d),u+h.width/2,p+h.height+h.labelMargin)),o.textAlign="right",o.fillText(y(g),u+h.width,p+h.height+h.labelMargin)}},c=e=>{const i=e?.datasets?.[0],l=(i?.data??[]).map((t=>"number"==typeof t.value?t.value:void 0)).filter((t=>void 0!==t)),o=e.options?.colorPalette||"sequential02",n=t(o),r=l.length?Math.min(...l):0,s=l.length?Math.max(...l):0,c=o.toLowerCase().includes("divergent")?0:50,d=e.options?.plugins?.gradientLegend?.display;return{responsive:!1,maintainAspectRatio:!0,aspectRatio:2,layout:{padding:d?{bottom:35}:{bottom:0}},plugins:{tooltip:{callbacks:{title:()=>"",label(t){const i=t.dataset.data[t.dataIndex];return[`${e.labels.y?.[i.y-1]||e.labels[i.y-1]} - ${e.labels.x?.[i.x-1]||e.labels[i.x-1]}`,`Value: ${i.value??"N/A"}`]}}},legend:{display:!1},gradientLegend:{display:d,position:"bottom-left",title:e.options?.plugins?.gradientLegend?.title||"",margin:0,height:15,width:280,opacity:.8,colors:n,paletteKey:o,legendLabels:[r,c,s]}},colorPalette:n,colorScale:{min:r,neutral:c,max:s,colors:n},scales:{x:{grid:{display:!1},min:1,max:e.labels.x?.length??e.labels?.length??3,offset:!0,ticks:{autoSkip:!1,maxTicksLimit:15,callback:t=>e.labels.x?.[t-1]??e.labels?.[t-1]??"",padding:function(){return a()?30:20}},afterFit(t){d&&(t.height-=10)}},y:{grid:{display:!1},min:1,max:e.labels.y?.length??e.labels?.length??3,ticks:{autoSkip:!1,maxTicksLimit:15,callback:t=>e.labels.y?.[t-1]??e.labels?.[t-1]??"",padding:function(){return a()?15:8}}}}}},d=e=>{const i=e.options?.colorPalette||"categorical",l=t(i),o=e.labels.x?.length??e.labels?.length??3,n=e.labels.y?.length??e.labels?.length??3;return{borderWidth:0,borderColor:"transparent",width({chart:t}){const e=(t.chartArea?.width??0)/o-2;return e>0?e:1},height({chart:t}){const e=t.chartArea?.height??0,i=e/n-0;return a()?e/11.75:Math.min(i,60)},backgroundColor:({raw:t})=>void 0!==t?.value?r(t.value,l,50,15,.8,i):"rgba(204, 204, 204, 0.8)",hoverBackgroundColor:({raw:t})=>void 0!==t?.value?r(t.value,l,50,15,1,i):"#999"}};var g={options:c,datasetOptions:d,plugins:[s]};export{i as createMatrixData,d as datasetOptions,g as default,c as options,o as setMatrixFullscreen,e as type};
|
|
2
2
|
//# sourceMappingURL=matrix.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix.js","sources":["../../../../src/common/config/chartTypes/matrix.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\n\nexport const type = 'matrix';\n\nexport const createMatrixData = (data, options = {}) => {\n const { xAxis, yAxis, xKey = 'x', yKey = 'y', valueKey = 'value' } = options;\n\n if (!xAxis || !yAxis || !Array.isArray(xAxis) || !Array.isArray(yAxis)) {\n throw new Error('xAxis and yAxis must be provided as arrays');\n }\n\n const matrixData = [];\n const dataMap = new Map();\n\n data.forEach((item) => {\n const xValue = item[xKey];\n const yValue = item[yKey];\n const key = `${xValue}-${yValue}`;\n dataMap.set(key, item[valueKey]);\n });\n\n for (let y = 1; y <= yAxis.length; y++) {\n for (let x = 1; x <= xAxis.length; x++) {\n const yValue = yAxis[y - 1];\n const xValue = xAxis[x - 1];\n const key = `${xValue}-${yValue}`;\n const value = dataMap.has(key) ? dataMap.get(key) : undefined;\n matrixData.push({ x, y, value });\n }\n }\n\n return matrixData;\n};\n\nconst defaultOpacity = 0.8;\n\nlet isMatrixFullscreen = false;\n\nexport function setMatrixFullscreen(state) {\n isMatrixFullscreen = !!state;\n}\n\nfunction isFullScreen() {\n if (isMatrixFullscreen) {\n return true;\n }\n\n return !!(\n document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullscreenElement ||\n document.msFullscreenElement\n );\n}\n\nfunction parseColor(hex) {\n if (\n !hex ||\n typeof hex !== 'string' ||\n !hex.startsWith('#') ||\n hex.length < 7\n ) {\n return { r: 0, g: 0, b: 0 };\n }\n\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return { r: isNaN(r) ? 0 : r, g: isNaN(g) ? 0 : g, b: isNaN(b) ? 0 : b };\n}\n\nfunction getColorWithOpacity(color, opacity) {\n if (!color || typeof color !== 'string' || !color.startsWith('#')) {\n return `rgba(204, 204, 204, ${!isNaN(opacity) ? opacity : 0.7})`;\n }\n\n const finalOpacity = !isNaN(opacity) ? opacity : 0.7;\n const { r, g, b } = parseColor(color);\n return `rgba(${r}, ${g}, ${b}, ${finalOpacity})`;\n}\n\nfunction getPresetSymmetricColor(\n value,\n colors,\n neutral = 50,\n band = 15,\n opacity = 1,\n paletteKey\n) {\n if (!colors || !Array.isArray(colors) || colors.length === 0) {\n return `rgba(204, 204, 204, ${opacity})`;\n }\n\n const key = paletteKey || '';\n if (key.toLowerCase().includes('divergent')) {\n const minVal = -100;\n const maxVal = 100;\n const neutralIndex = Math.floor(colors.length / 2);\n if (value <= 0) {\n const ratio = (value - minVal) / (0 - minVal);\n const idx = Math.round(ratio * neutralIndex);\n return getColorWithOpacity(colors[Math.min(idx, neutralIndex)], opacity);\n } else {\n const ratio = value / maxVal;\n const idx =\n neutralIndex + Math.round(ratio * (colors.length - neutralIndex - 1));\n return getColorWithOpacity(\n colors[Math.min(idx, colors.length - 1)],\n opacity\n );\n }\n } else {\n const minVal = 0;\n const maxVal = 100;\n const ratio = (value - minVal) / (maxVal - minVal);\n const idx = Math.round(ratio * (colors.length - 1));\n return getColorWithOpacity(\n colors[Math.min(idx, colors.length - 1)],\n opacity\n );\n }\n}\n\nconst gradientLegendPlugin = {\n id: 'gradientLegend',\n afterDraw(chart, args, options) {\n if (!options || !options.display) return;\n const Colors =\n options.colors ||\n chart.options.plugins?.gradientLegend?.colors ||\n chart.options.colorScale?.colors ||\n chart.data?.datasets?.[0]?._colorPalette;\n if (!Colors || !Colors.length) return;\n\n const ctx = chart.ctx;\n const chartArea = chart.chartArea;\n const paletteKey = options.paletteKey || '';\n const isDivergentPalette = paletteKey.toLowerCase().includes('divergent');\n const computedScale = chart.options.colorScale || {};\n const minVal = computedScale.min ?? (isDivergentPalette ? -100 : 0);\n const neutralVal = computedScale.neutral ?? (isDivergentPalette ? 0 : 50);\n const maxVal = computedScale.max ?? (isDivergentPalette ? 100 : 100);\n\n const legendOptions = {\n position: options.position || 'bottom',\n width: options.width || Math.min(400, chartArea.width * 0.8),\n height: options.height || 20,\n margin: options.margin || 10,\n borderRadius: options.borderRadius || 4,\n gradientBorderRadius: 1,\n title: options.title || '',\n titleFontSize: options.titleFontSize || 12,\n labelFontSize: options.labelFontSize || 12,\n labelMargin: options.labelMargin || 5,\n opacity: typeof options.opacity === 'number' ? options.opacity : 0.7,\n ...options,\n };\n\n let x, y;\n if (legendOptions.position === 'bottom') {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.bottom + legendOptions.margin;\n } else if (legendOptions.position === 'top') {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.top - legendOptions.margin - legendOptions.height;\n } else if (legendOptions.position === 'bottom-left') {\n x = chartArea.left - 70;\n y = chartArea.bottom + 70;\n } else {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.bottom + legendOptions.margin;\n }\n\n const gradient = ctx.createLinearGradient(x, y, x + legendOptions.width, y);\n const neutralIndex = Colors.findIndex((c) =>\n c.toLowerCase().includes('neutral')\n );\n if (neutralIndex > 0) {\n const negativeColors = Colors.slice(0, neutralIndex);\n const neutralColor = Colors[neutralIndex];\n const positiveColors = Colors.slice(neutralIndex + 1);\n negativeColors.forEach((color, i) => {\n const t =\n negativeColors.length > 1\n ? (i / (negativeColors.length - 1)) * 0.5\n : 0;\n gradient.addColorStop(\n t,\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n gradient.addColorStop(\n 0.5,\n getColorWithOpacity(neutralColor, legendOptions.opacity)\n );\n positiveColors.forEach((color, i) => {\n const t =\n 0.5 +\n (positiveColors.length > 1\n ? (i / (positiveColors.length - 1)) * 0.5\n : 0);\n gradient.addColorStop(\n t,\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n } else {\n Colors.forEach((color, i) => {\n gradient.addColorStop(\n i / (Colors.length - 1),\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n }\n\n if (legendOptions.title) {\n ctx.font = `500 ${legendOptions.titleFontSize}px ${\n chart.options.font?.family || 'Arial'\n }`;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'bottom';\n ctx.fillStyle = chart.options.color || '#666';\n ctx.fillText(legendOptions.title, x, y - legendOptions.labelMargin);\n }\n\n function drawRoundedRect(xx, yy, w, h, radius) {\n ctx.beginPath();\n ctx.moveTo(xx + radius, yy);\n ctx.lineTo(xx + w - radius, yy);\n ctx.arcTo(xx + w, yy, xx + w, yy + radius, radius);\n ctx.lineTo(xx + w, yy + h - radius);\n ctx.arcTo(xx + w, yy + h, xx + w - radius, yy + h, radius);\n ctx.lineTo(xx + radius, yy + h);\n ctx.arcTo(xx, yy + h, xx, yy + h - radius, radius);\n ctx.lineTo(xx, yy + radius);\n ctx.arcTo(xx, yy, xx + radius, yy, radius);\n ctx.closePath();\n }\n\n ctx.fillStyle = '#fff';\n drawRoundedRect(\n x,\n y,\n legendOptions.width,\n legendOptions.height,\n legendOptions.borderRadius\n );\n ctx.fill();\n\n ctx.fillStyle = gradient;\n drawRoundedRect(\n x,\n y,\n legendOptions.width,\n legendOptions.height,\n legendOptions.gradientBorderRadius\n );\n ctx.fill();\n\n ctx.font = `${legendOptions.labelFontSize}px ${\n chart.options.font?.family || 'Arial'\n }`;\n ctx.fillStyle = chart.options.color || '#666';\n const formatValue = (val) => val.toString();\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(\n formatValue(minVal),\n x,\n y + legendOptions.height + legendOptions.labelMargin\n );\n\n if (Colors.length >= 3 && neutralVal !== undefined) {\n ctx.textAlign = 'center';\n ctx.fillText(\n formatValue(neutralVal),\n x + legendOptions.width / 2,\n y + legendOptions.height + legendOptions.labelMargin\n );\n }\n\n ctx.textAlign = 'right';\n ctx.fillText(\n formatValue(maxVal),\n x + legendOptions.width,\n y + legendOptions.height + legendOptions.labelMargin\n );\n },\n};\n\nexport const options = (ctx) => {\n const ds = ctx?.datasets?.[0];\n const data = ds?.data ?? [];\n const allValues = data\n .map((d) => (typeof d.value === 'number' ? d.value : undefined))\n .filter((v) => v !== undefined);\n\n const paletteKey = ctx.options?.colorPalette || 'sequential02';\n const Colors = getComputedColorPalette(paletteKey);\n const minValue = allValues.length ? Math.min(...allValues) : 0;\n const maxValue = allValues.length ? Math.max(...allValues) : 0;\n const isDivergent = paletteKey.toLowerCase().includes('divergent');\n const computedNeutral = isDivergent ? 0 : 50;\n const legendEnabled = ctx.options?.plugins?.gradientLegend?.display;\n const legendPadding = legendEnabled ? { bottom: 35 } : { bottom: 0 };\n\n return {\n responsive: false,\n maintainAspectRatio: true,\n aspectRatio: 2,\n layout: { padding: legendPadding },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n const v = context.dataset.data[context.dataIndex];\n const rowLabel = ctx.labels.y?.[v.y - 1] || ctx.labels[v.y - 1];\n const colLabel = ctx.labels.x?.[v.x - 1] || ctx.labels[v.x - 1];\n return [`${rowLabel} - ${colLabel}`, `Value: ${v.value ?? 'N/A'}`];\n },\n },\n },\n legend: { display: false },\n gradientLegend: {\n display: legendEnabled,\n position: 'bottom-left',\n title: ctx.options?.plugins?.gradientLegend?.title || '',\n margin: 0,\n height: 15,\n width: 280,\n opacity: defaultOpacity,\n colors: Colors,\n paletteKey,\n legendLabels: [minValue, computedNeutral, maxValue],\n },\n },\n colorPalette: Colors,\n colorScale: {\n min: minValue,\n neutral: computedNeutral,\n max: maxValue,\n colors: Colors,\n },\n scales: {\n x: {\n grid: { display: false },\n min: 1,\n max: ctx.labels.x?.length ?? ctx.labels?.length ?? 3,\n offset: true,\n ticks: {\n autoSkip: false,\n maxTicksLimit: 15,\n callback: (value) =>\n ctx.labels.x?.[value - 1] ?? ctx.labels?.[value - 1] ?? '',\n padding: function () {\n return isFullScreen() ? 30 : 20;\n },\n },\n afterFit(scale) {\n if (legendEnabled) {\n scale.height -= 10;\n }\n },\n },\n y: {\n grid: { display: false },\n min: 1,\n max: ctx.labels.y?.length ?? ctx.labels?.length ?? 3,\n ticks: {\n autoSkip: false,\n maxTicksLimit: 15,\n callback: (value) =>\n ctx.labels.y?.[value - 1] ?? ctx.labels?.[value - 1] ?? '',\n padding: function () {\n return isFullScreen() ? 15 : 8;\n },\n },\n },\n },\n };\n};\n\nexport const datasetOptions = (ctx) => {\n const paletteKey = ctx.options?.colorPalette || 'categorical';\n const Colors = getComputedColorPalette(paletteKey);\n const numCols = ctx.labels.x?.length ?? ctx.labels?.length ?? 3;\n const numRows = ctx.labels.y?.length ?? ctx.labels?.length ?? 3;\n\n return {\n borderWidth: 0,\n borderColor: 'transparent',\n width({ chart }) {\n const gap = 2;\n const totalWidth = chart.chartArea?.width ?? 0;\n const cellWidth = totalWidth / numCols - gap;\n return cellWidth > 0 ? cellWidth : 1;\n },\n height({ chart }) {\n const gap = 0;\n const totalHeight = chart.chartArea?.height ?? 0;\n const cellHeight = totalHeight / numRows - gap;\n return isFullScreen() ? totalHeight / 11.75 : Math.min(cellHeight, 60);\n },\n backgroundColor({ raw }) {\n if (raw?.value !== undefined) {\n return getPresetSymmetricColor(\n raw.value,\n Colors,\n 50,\n 15,\n defaultOpacity,\n paletteKey\n );\n }\n return 'rgba(204, 204, 204, 0.8)';\n },\n hoverBackgroundColor({ raw }) {\n if (raw?.value !== undefined) {\n return getPresetSymmetricColor(\n raw.value,\n Colors,\n 50,\n 15,\n 1,\n paletteKey\n );\n }\n return '#999';\n },\n };\n};\n\nexport default {\n options,\n datasetOptions,\n plugins: [gradientLegendPlugin],\n};\n"],"names":["type","createMatrixData","data","options","xAxis","yAxis","xKey","yKey","valueKey","Array","isArray","Error","matrixData","dataMap","Map","forEach","item","key","set","y","length","x","yValue","value","has","get","undefined","push","isMatrixFullscreen","setMatrixFullscreen","state","isFullScreen","document","fullscreenElement","webkitFullscreenElement","mozFullscreenElement","msFullscreenElement","getColorWithOpacity","color","opacity","startsWith","isNaN","finalOpacity","r","g","b","hex","parseInt","slice","parseColor","getPresetSymmetricColor","colors","neutral","band","paletteKey","toLowerCase","includes","minVal","maxVal","neutralIndex","Math","floor","ratio","idx","round","min","gradientLegendPlugin","id","afterDraw","chart","args","display","Colors","plugins","gradientLegend","colorScale","datasets","_colorPalette","ctx","chartArea","isDivergentPalette","computedScale","neutralVal","max","legendOptions","position","width","height","margin","borderRadius","gradientBorderRadius","title","titleFontSize","labelFontSize","labelMargin","left","bottom","top","gradient","createLinearGradient","findIndex","c","negativeColors","neutralColor","positiveColors","i","t","addColorStop","drawRoundedRect","xx","yy","w","h","radius","beginPath","moveTo","lineTo","arcTo","closePath","font","family","textAlign","textBaseline","fillStyle","fillText","fill","formatValue","val","toString","ds","allValues","map","d","filter","v","colorPalette","getComputedColorPalette","minValue","maxValue","computedNeutral","legendEnabled","responsive","maintainAspectRatio","aspectRatio","layout","padding","tooltip","callbacks","label","context","dataset","dataIndex","labels","legend","legendLabels","scales","grid","offset","ticks","autoSkip","maxTicksLimit","callback","afterFit","scale","datasetOptions","numCols","numRows","borderWidth","borderColor","cellWidth","totalHeight","cellHeight","backgroundColor","raw","hoverBackgroundColor","matrix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"matrix.js","sources":["../../../../src/common/config/chartTypes/matrix.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\n\nexport const type = 'matrix';\n\nexport const createMatrixData = (data, options = {}) => {\n const { xAxis, yAxis, xKey = 'x', yKey = 'y', valueKey = 'value' } = options;\n\n if (!xAxis || !yAxis || !Array.isArray(xAxis) || !Array.isArray(yAxis)) {\n throw new Error('xAxis and yAxis must be provided as arrays');\n }\n\n const matrixData = [];\n const dataMap = new Map();\n\n data.forEach((item) => {\n const xValue = item[xKey];\n const yValue = item[yKey];\n const key = `${xValue}-${yValue}`;\n dataMap.set(key, item[valueKey]);\n });\n\n for (let y = 1; y <= yAxis.length; y++) {\n for (let x = 1; x <= xAxis.length; x++) {\n const yValue = yAxis[y - 1];\n const xValue = xAxis[x - 1];\n const key = `${xValue}-${yValue}`;\n const value = dataMap.has(key) ? dataMap.get(key) : undefined;\n matrixData.push({ x, y, value });\n }\n }\n\n return matrixData;\n};\n\nconst defaultOpacity = 0.8;\n\nlet isMatrixFullscreen = false;\n\nexport function setMatrixFullscreen(state) {\n isMatrixFullscreen = !!state;\n}\n\nfunction isFullScreen() {\n if (isMatrixFullscreen) {\n return true;\n }\n\n return !!(\n document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullscreenElement ||\n document.msFullscreenElement\n );\n}\n\nfunction parseColor(hex) {\n if (\n !hex ||\n typeof hex !== 'string' ||\n !hex.startsWith('#') ||\n hex.length < 7\n ) {\n return { r: 0, g: 0, b: 0 };\n }\n\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return { r: isNaN(r) ? 0 : r, g: isNaN(g) ? 0 : g, b: isNaN(b) ? 0 : b };\n}\n\nfunction getColorWithOpacity(color, opacity) {\n if (!color || typeof color !== 'string' || !color.startsWith('#')) {\n return `rgba(204, 204, 204, ${!isNaN(opacity) ? opacity : 0.7})`;\n }\n\n const finalOpacity = !isNaN(opacity) ? opacity : 0.7;\n const { r, g, b } = parseColor(color);\n return `rgba(${r}, ${g}, ${b}, ${finalOpacity})`;\n}\n\nfunction getPresetSymmetricColor(\n value,\n colors,\n neutral = 50,\n band = 15,\n opacity = 1,\n paletteKey\n) {\n if (!colors || !Array.isArray(colors) || colors.length === 0) {\n return `rgba(204, 204, 204, ${opacity})`;\n }\n\n const key = paletteKey || '';\n if (key.toLowerCase().includes('divergent')) {\n const minVal = -100;\n const maxVal = 100;\n const neutralIndex = Math.floor(colors.length / 2);\n if (value <= 0) {\n const ratio = (value - minVal) / (0 - minVal);\n const idx = Math.round(ratio * neutralIndex);\n return getColorWithOpacity(colors[Math.min(idx, neutralIndex)], opacity);\n } else {\n const ratio = value / maxVal;\n const idx =\n neutralIndex + Math.round(ratio * (colors.length - neutralIndex - 1));\n return getColorWithOpacity(\n colors[Math.min(idx, colors.length - 1)],\n opacity\n );\n }\n } else {\n const minVal = 0;\n const maxVal = 100;\n const ratio = (value - minVal) / (maxVal - minVal);\n const idx = Math.round(ratio * (colors.length - 1));\n return getColorWithOpacity(\n colors[Math.min(idx, colors.length - 1)],\n opacity\n );\n }\n}\n\nconst gradientLegendPlugin = {\n id: 'gradientLegend',\n afterDraw(chart, args, options) {\n if (!options || !options.display) return;\n const Colors =\n options.colors ||\n chart.options.plugins?.gradientLegend?.colors ||\n chart.options.colorScale?.colors ||\n chart.data?.datasets?.[0]?._colorPalette;\n if (!Colors || !Colors.length) return;\n\n const ctx = chart.ctx;\n const chartArea = chart.chartArea;\n const paletteKey = options.paletteKey || '';\n const isDivergentPalette = paletteKey.toLowerCase().includes('divergent');\n const computedScale = chart.options.colorScale || {};\n const minVal = computedScale.min ?? (isDivergentPalette ? -100 : 0);\n const neutralVal = computedScale.neutral ?? (isDivergentPalette ? 0 : 50);\n const maxVal = computedScale.max ?? (isDivergentPalette ? 100 : 100);\n\n const legendOptions = {\n position: options.position || 'bottom',\n width: options.width || Math.min(400, chartArea.width * 0.8),\n height: options.height || 20,\n margin: options.margin || 10,\n borderRadius: options.borderRadius || 4,\n gradientBorderRadius: 1,\n title: options.title || '',\n titleFontSize: options.titleFontSize || 12,\n labelFontSize: options.labelFontSize || 12,\n labelMargin: options.labelMargin || 5,\n opacity: typeof options.opacity === 'number' ? options.opacity : 0.7,\n ...options,\n };\n\n let x, y;\n if (legendOptions.position === 'bottom') {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.bottom + legendOptions.margin;\n } else if (legendOptions.position === 'top') {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.top - legendOptions.margin - legendOptions.height;\n } else if (legendOptions.position === 'bottom-left') {\n x = chartArea.left - 70;\n y = chartArea.bottom + 70;\n } else {\n x = chartArea.left + (chartArea.width - legendOptions.width) / 2;\n y = chartArea.bottom + legendOptions.margin;\n }\n\n const gradient = ctx.createLinearGradient(x, y, x + legendOptions.width, y);\n const neutralIndex = Colors.findIndex((c) =>\n c.toLowerCase().includes('neutral')\n );\n if (neutralIndex > 0) {\n const negativeColors = Colors.slice(0, neutralIndex);\n const neutralColor = Colors[neutralIndex];\n const positiveColors = Colors.slice(neutralIndex + 1);\n negativeColors.forEach((color, i) => {\n const t =\n negativeColors.length > 1\n ? (i / (negativeColors.length - 1)) * 0.5\n : 0;\n gradient.addColorStop(\n t,\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n gradient.addColorStop(\n 0.5,\n getColorWithOpacity(neutralColor, legendOptions.opacity)\n );\n positiveColors.forEach((color, i) => {\n const t =\n 0.5 +\n (positiveColors.length > 1\n ? (i / (positiveColors.length - 1)) * 0.5\n : 0);\n gradient.addColorStop(\n t,\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n } else {\n Colors.forEach((color, i) => {\n gradient.addColorStop(\n i / (Colors.length - 1),\n getColorWithOpacity(color, legendOptions.opacity)\n );\n });\n }\n\n if (legendOptions.title) {\n ctx.font = `500 ${legendOptions.titleFontSize}px ${\n chart.options.font?.family || 'Arial'\n }`;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'bottom';\n ctx.fillStyle = chart.options.color || '#666';\n ctx.fillText(legendOptions.title, x, y - legendOptions.labelMargin);\n }\n\n function drawRoundedRect(xx, yy, w, h, radius) {\n ctx.beginPath();\n ctx.moveTo(xx + radius, yy);\n ctx.lineTo(xx + w - radius, yy);\n ctx.arcTo(xx + w, yy, xx + w, yy + radius, radius);\n ctx.lineTo(xx + w, yy + h - radius);\n ctx.arcTo(xx + w, yy + h, xx + w - radius, yy + h, radius);\n ctx.lineTo(xx + radius, yy + h);\n ctx.arcTo(xx, yy + h, xx, yy + h - radius, radius);\n ctx.lineTo(xx, yy + radius);\n ctx.arcTo(xx, yy, xx + radius, yy, radius);\n ctx.closePath();\n }\n\n ctx.fillStyle = '#fff';\n drawRoundedRect(\n x,\n y,\n legendOptions.width,\n legendOptions.height,\n legendOptions.borderRadius\n );\n ctx.fill();\n\n ctx.fillStyle = gradient;\n drawRoundedRect(\n x,\n y,\n legendOptions.width,\n legendOptions.height,\n legendOptions.gradientBorderRadius\n );\n ctx.fill();\n\n ctx.font = `${legendOptions.labelFontSize}px ${\n chart.options.font?.family || 'Arial'\n }`;\n ctx.fillStyle = chart.options.color || '#666';\n const formatValue = (val) => val.toString();\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(\n formatValue(minVal),\n x,\n y + legendOptions.height + legendOptions.labelMargin\n );\n\n if (Colors.length >= 3 && neutralVal !== undefined) {\n ctx.textAlign = 'center';\n ctx.fillText(\n formatValue(neutralVal),\n x + legendOptions.width / 2,\n y + legendOptions.height + legendOptions.labelMargin\n );\n }\n\n ctx.textAlign = 'right';\n ctx.fillText(\n formatValue(maxVal),\n x + legendOptions.width,\n y + legendOptions.height + legendOptions.labelMargin\n );\n },\n};\n\nexport const options = (ctx) => {\n const ds = ctx?.datasets?.[0];\n const data = ds?.data ?? [];\n const allValues = data\n .map((d) => (typeof d.value === 'number' ? d.value : undefined))\n .filter((v) => v !== undefined);\n\n const paletteKey = ctx.options?.colorPalette || 'sequential02';\n const Colors = getComputedColorPalette(paletteKey);\n const minValue = allValues.length ? Math.min(...allValues) : 0;\n const maxValue = allValues.length ? Math.max(...allValues) : 0;\n const isDivergent = paletteKey.toLowerCase().includes('divergent');\n const computedNeutral = isDivergent ? 0 : 50;\n const legendEnabled = ctx.options?.plugins?.gradientLegend?.display;\n const legendPadding = legendEnabled ? { bottom: 35 } : { bottom: 0 };\n\n return {\n responsive: false,\n maintainAspectRatio: true,\n aspectRatio: 2,\n layout: { padding: legendPadding },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n const v = context.dataset.data[context.dataIndex];\n const rowLabel = ctx.labels.y?.[v.y - 1] || ctx.labels[v.y - 1];\n const colLabel = ctx.labels.x?.[v.x - 1] || ctx.labels[v.x - 1];\n return [`${rowLabel} - ${colLabel}`, `Value: ${v.value ?? 'N/A'}`];\n },\n },\n },\n legend: { display: false },\n gradientLegend: {\n display: legendEnabled,\n position: 'bottom-left',\n title: ctx.options?.plugins?.gradientLegend?.title || '',\n margin: 0,\n height: 15,\n width: 280,\n opacity: defaultOpacity,\n colors: Colors,\n paletteKey,\n legendLabels: [minValue, computedNeutral, maxValue],\n },\n },\n colorPalette: Colors,\n colorScale: {\n min: minValue,\n neutral: computedNeutral,\n max: maxValue,\n colors: Colors,\n },\n scales: {\n x: {\n grid: { display: false },\n min: 1,\n max: ctx.labels.x?.length ?? ctx.labels?.length ?? 3,\n offset: true,\n ticks: {\n autoSkip: false,\n maxTicksLimit: 15,\n callback: (value) =>\n ctx.labels.x?.[value - 1] ?? ctx.labels?.[value - 1] ?? '',\n padding: function () {\n return isFullScreen() ? 30 : 20;\n },\n },\n afterFit(scale) {\n if (legendEnabled) {\n scale.height -= 10;\n }\n },\n },\n y: {\n grid: { display: false },\n min: 1,\n max: ctx.labels.y?.length ?? ctx.labels?.length ?? 3,\n ticks: {\n autoSkip: false,\n maxTicksLimit: 15,\n callback: (value) =>\n ctx.labels.y?.[value - 1] ?? ctx.labels?.[value - 1] ?? '',\n padding: function () {\n return isFullScreen() ? 15 : 8;\n },\n },\n },\n },\n };\n};\n\nexport const datasetOptions = (ctx) => {\n const paletteKey = ctx.options?.colorPalette || 'categorical';\n const Colors = getComputedColorPalette(paletteKey);\n const numCols = ctx.labels.x?.length ?? ctx.labels?.length ?? 3;\n const numRows = ctx.labels.y?.length ?? ctx.labels?.length ?? 3;\n\n return {\n borderWidth: 0,\n borderColor: 'transparent',\n width({ chart }) {\n const gap = 2;\n const totalWidth = chart.chartArea?.width ?? 0;\n const cellWidth = totalWidth / numCols - gap;\n return cellWidth > 0 ? cellWidth : 1;\n },\n height({ chart }) {\n const gap = 0;\n const totalHeight = chart.chartArea?.height ?? 0;\n const cellHeight = totalHeight / numRows - gap;\n return isFullScreen() ? totalHeight / 11.75 : Math.min(cellHeight, 60);\n },\n backgroundColor({ raw }) {\n if (raw?.value !== undefined) {\n return getPresetSymmetricColor(\n raw.value,\n Colors,\n 50,\n 15,\n defaultOpacity,\n paletteKey\n );\n }\n return 'rgba(204, 204, 204, 0.8)';\n },\n hoverBackgroundColor({ raw }) {\n if (raw?.value !== undefined) {\n return getPresetSymmetricColor(\n raw.value,\n Colors,\n 50,\n 15,\n 1,\n paletteKey\n );\n }\n return '#999';\n },\n };\n};\n\nexport default {\n options,\n datasetOptions,\n plugins: [gradientLegendPlugin],\n};\n"],"names":["type","createMatrixData","data","options","xAxis","yAxis","xKey","yKey","valueKey","Array","isArray","Error","matrixData","dataMap","Map","forEach","item","key","set","y","length","x","yValue","value","has","get","undefined","push","isMatrixFullscreen","setMatrixFullscreen","state","isFullScreen","document","fullscreenElement","webkitFullscreenElement","mozFullscreenElement","msFullscreenElement","getColorWithOpacity","color","opacity","startsWith","isNaN","finalOpacity","r","g","b","hex","parseInt","slice","parseColor","getPresetSymmetricColor","colors","neutral","band","paletteKey","toLowerCase","includes","minVal","maxVal","neutralIndex","Math","floor","ratio","idx","round","min","gradientLegendPlugin","id","afterDraw","chart","args","display","Colors","plugins","gradientLegend","colorScale","datasets","_colorPalette","ctx","chartArea","isDivergentPalette","computedScale","neutralVal","max","legendOptions","position","width","height","margin","borderRadius","gradientBorderRadius","title","titleFontSize","labelFontSize","labelMargin","left","bottom","top","gradient","createLinearGradient","findIndex","c","negativeColors","neutralColor","positiveColors","i","t","addColorStop","drawRoundedRect","xx","yy","w","h","radius","beginPath","moveTo","lineTo","arcTo","closePath","font","family","textAlign","textBaseline","fillStyle","fillText","fill","formatValue","val","toString","ds","allValues","map","d","filter","v","colorPalette","getComputedColorPalette","minValue","maxValue","computedNeutral","legendEnabled","responsive","maintainAspectRatio","aspectRatio","layout","padding","tooltip","callbacks","label","context","dataset","dataIndex","labels","legend","legendLabels","scales","grid","offset","ticks","autoSkip","maxTicksLimit","callback","afterFit","scale","datasetOptions","numCols","numRows","borderWidth","borderColor","cellWidth","totalHeight","cellHeight","backgroundColor","raw","hoverBackgroundColor","matrix"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treemap.js","sources":["../../../../src/common/config/chartTypes/treemap.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTextColor } from '../../helpers/helpers';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'treemap';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n\n return {\n plugins: {\n legend: {\n display: false,\n },\n },\n spacing: function (context) {\n const Dataset = context.dataset;\n const Grouped = Dataset.groups !== undefined;\n\n return Grouped ? 0 : 1;\n },\n borderWidth: function (context) {\n const Dataset = context.dataset;\n return Dataset.groups ? 1 : 0;\n },\n borderColor: BorderColor,\n labels: {\n align: 'left',\n display: true,\n color: function (context) {\n return getTextColor(context.element.options.backgroundColor);\n },\n font: {\n size: 12,\n weight: 500,\n },\n position: 'top',\n overflow: 'hidden',\n },\n captions: {\n align: 'center',\n display: true,\n color: function (context) {\n return getTextColor(context.element.options.backgroundColor);\n },\n font: {\n size: 12,\n weight: 700,\n },\n padding: 2,\n },\n };\n};\n\nexport const datasetOptions = (ctx, index) => {\n return {\n backgroundColor: function (context) {\n return getComputedColorPalette(ctx.options.colorPalette || 'categorical')[\n getGroupColorIndex(context)\n ]; // + '80'\n },\n };\n};\n\n/**\n * The function `getGroupColorIndex` returns the index of a group color based on the context provided.\n * Works for grouped charts, not nested data charts yet.\n * @param context - The `context` parameter is an object that contains information about the current\n * context or state of the program. It is used to determine the group color index based on the dataset\n * and data index.\n * @returns the index of the group color for a given context.\n */\nconst getGroupColorIndex = (context) => {\n const Dataset = context.dataset;\n let index = 0;\n\n if (Dataset.groups !== undefined) {\n const DataIndex = context.dataIndex;\n const GroupKey = Dataset.groups ? Dataset.groups[0] : null;\n const Nested =\n typeof Dataset.tree === 'object' && !Array.isArray(Dataset.tree);\n let Groups = [];\n\n if (Nested) {\n Groups = Object.keys(Dataset.tree);\n\n if (context.raw) {\n const Path = context.raw._data.path;\n const Parent = Path.split('.')[0];\n\n index = Groups.indexOf(Parent);\n }\n } else {\n Dataset.tree.forEach((leaf) => {\n if (!Groups.includes(leaf[GroupKey])) {\n Groups.push(leaf[GroupKey]);\n }\n });\n\n const Leaf = Dataset.data[DataIndex];\n\n if (Leaf) {\n index = Groups.indexOf(Leaf._data[GroupKey]);\n }\n }\n }\n\n return index < 0 ? 0 : index;\n};\n"],"names":["type","options","ctx","plugins","legend","display","spacing","context","undefined","dataset","groups","borderWidth","borderColor","getTokenThemeVal","labels","align","color","getTextColor","element","backgroundColor","font","size","weight","position","overflow","captions","padding","datasetOptions","index","getComputedColorPalette","colorPalette","getGroupColorIndex","Dataset","DataIndex","dataIndex","GroupKey","Nested","tree","Array","isArray","Groups","Object","keys","raw","Parent","_data","path","split","indexOf","forEach","leaf","includes","push","Leaf","data"],"mappings":"iPAIY,MAACA,EAAO,UAEPC,EAAWC,IAGf,CACLC,QAAS,CACPC,OAAQ,CACNC,SAAS,IAGbC,QAAS,SAAUC,GAIjB,YAFmCC,IADnBD,EAAQE,QACAC,OAEP,EAAI,CACtB,EACDC,YAAa,SAAUJ,GAErB,OADgBA,EAAQE,QACTC,OAAS,EAAI,CAC7B,EACDE,YAlBkBC,EAAiB,sCAmBnCC,OAAQ,CACNC,MAAO,OACPV,SAAS,EACTW,MAAO,SAAUT,GACf,OAAOU,EAAaV,EAAQW,QAAQjB,QAAQkB,gBAC7C,EACDC,KAAM,CACJC,KAAM,GACNC,OAAQ,KAEVC,SAAU,MACVC,SAAU,UAEZC,SAAU,CACRV,MAAO,SACPV,SAAS,EACTW,MAAO,SAAUT,GACf,OAAOU,EAAaV,EAAQW,QAAQjB,QAAQkB,gBAC7C,EACDC,KAAM,CACJC,KAAM,GACNC,OAAQ,KAEVI,QAAS,KAKFC,EAAiB,CAACzB,EAAK0B,KAC3B,CACLT,gBAAiB,SAAUZ,GACzB,OAAOsB,EAAwB3B,EAAID,QAAQ6B,cAAgB,eACzDC,EAAmBxB,GAEtB,IAYCwB,EAAsBxB,IAC1B,MAAMyB,EAAUzB,EAAQE,QACxB,IAAImB,EAAQ,EAEZ,QAAuBpB,IAAnBwB,EAAQtB,OAAsB,CAChC,MAAMuB,EAAY1B,EAAQ2B,UACpBC,EAAWH,EAAQtB,OAASsB,EAAQtB,OAAO,GAAK,KAChD0B,EACoB,iBAAjBJ,EAAQK,OAAsBC,MAAMC,QAAQP,EAAQK,MAC7D,IAAIG,EAAS,GAEb,GAAIJ,GAGF,GAFAI,EAASC,OAAOC,KAAKV,EAAQK,MAEzB9B,EAAQoC,IAAK,CACf,MACMC,EADOrC,EAAQoC,IAAIE,MAAMC,KACXC,MAAM,KAAK,GAE/BnB,EAAQY,EAAOQ,QAAQJ,
|
|
1
|
+
{"version":3,"file":"treemap.js","sources":["../../../../src/common/config/chartTypes/treemap.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTextColor } from '../../helpers/helpers';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const type = 'treemap';\n\nexport const options = (ctx) => {\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n\n return {\n plugins: {\n legend: {\n display: false,\n },\n },\n spacing: function (context) {\n const Dataset = context.dataset;\n const Grouped = Dataset.groups !== undefined;\n\n return Grouped ? 0 : 1;\n },\n borderWidth: function (context) {\n const Dataset = context.dataset;\n return Dataset.groups ? 1 : 0;\n },\n borderColor: BorderColor,\n labels: {\n align: 'left',\n display: true,\n color: function (context) {\n return getTextColor(context.element.options.backgroundColor);\n },\n font: {\n size: 12,\n weight: 500,\n },\n position: 'top',\n overflow: 'hidden',\n },\n captions: {\n align: 'center',\n display: true,\n color: function (context) {\n return getTextColor(context.element.options.backgroundColor);\n },\n font: {\n size: 12,\n weight: 700,\n },\n padding: 2,\n },\n };\n};\n\nexport const datasetOptions = (ctx, index) => {\n return {\n backgroundColor: function (context) {\n return getComputedColorPalette(ctx.options.colorPalette || 'categorical')[\n getGroupColorIndex(context)\n ]; // + '80'\n },\n };\n};\n\n/**\n * The function `getGroupColorIndex` returns the index of a group color based on the context provided.\n * Works for grouped charts, not nested data charts yet.\n * @param context - The `context` parameter is an object that contains information about the current\n * context or state of the program. It is used to determine the group color index based on the dataset\n * and data index.\n * @returns the index of the group color for a given context.\n */\nconst getGroupColorIndex = (context) => {\n const Dataset = context.dataset;\n let index = 0;\n\n if (Dataset.groups !== undefined) {\n const DataIndex = context.dataIndex;\n const GroupKey = Dataset.groups ? Dataset.groups[0] : null;\n const Nested =\n typeof Dataset.tree === 'object' && !Array.isArray(Dataset.tree);\n let Groups = [];\n\n if (Nested) {\n Groups = Object.keys(Dataset.tree);\n\n if (context.raw) {\n const Path = context.raw._data.path;\n const Parent = Path.split('.')[0];\n\n index = Groups.indexOf(Parent);\n }\n } else {\n Dataset.tree.forEach((leaf) => {\n if (!Groups.includes(leaf[GroupKey])) {\n Groups.push(leaf[GroupKey]);\n }\n });\n\n const Leaf = Dataset.data[DataIndex];\n\n if (Leaf) {\n index = Groups.indexOf(Leaf._data[GroupKey]);\n }\n }\n }\n\n return index < 0 ? 0 : index;\n};\n"],"names":["type","options","ctx","plugins","legend","display","spacing","context","undefined","dataset","groups","borderWidth","borderColor","getTokenThemeVal","labels","align","color","getTextColor","element","backgroundColor","font","size","weight","position","overflow","captions","padding","datasetOptions","index","getComputedColorPalette","colorPalette","getGroupColorIndex","Dataset","DataIndex","dataIndex","GroupKey","Nested","tree","Array","isArray","Groups","Object","keys","raw","Parent","_data","path","split","indexOf","forEach","leaf","includes","push","Leaf","data"],"mappings":"iPAIY,MAACA,EAAO,UAEPC,EAAWC,IAGf,CACLC,QAAS,CACPC,OAAQ,CACNC,SAAS,IAGbC,QAAS,SAAUC,GAIjB,YAFmCC,IADnBD,EAAQE,QACAC,OAEP,EAAI,CACtB,EACDC,YAAa,SAAUJ,GAErB,OADgBA,EAAQE,QACTC,OAAS,EAAI,CAC7B,EACDE,YAlBkBC,EAAiB,sCAmBnCC,OAAQ,CACNC,MAAO,OACPV,SAAS,EACTW,MAAO,SAAUT,GACf,OAAOU,EAAaV,EAAQW,QAAQjB,QAAQkB,gBAC7C,EACDC,KAAM,CACJC,KAAM,GACNC,OAAQ,KAEVC,SAAU,MACVC,SAAU,UAEZC,SAAU,CACRV,MAAO,SACPV,SAAS,EACTW,MAAO,SAAUT,GACf,OAAOU,EAAaV,EAAQW,QAAQjB,QAAQkB,gBAC7C,EACDC,KAAM,CACJC,KAAM,GACNC,OAAQ,KAEVI,QAAS,KAKFC,EAAiB,CAACzB,EAAK0B,KAC3B,CACLT,gBAAiB,SAAUZ,GACzB,OAAOsB,EAAwB3B,EAAID,QAAQ6B,cAAgB,eACzDC,EAAmBxB,GAEtB,IAYCwB,EAAsBxB,IAC1B,MAAMyB,EAAUzB,EAAQE,QACxB,IAAImB,EAAQ,EAEZ,QAAuBpB,IAAnBwB,EAAQtB,OAAsB,CAChC,MAAMuB,EAAY1B,EAAQ2B,UACpBC,EAAWH,EAAQtB,OAASsB,EAAQtB,OAAO,GAAK,KAChD0B,EACoB,iBAAjBJ,EAAQK,OAAsBC,MAAMC,QAAQP,EAAQK,MAC7D,IAAIG,EAAS,GAEb,GAAIJ,GAGF,GAFAI,EAASC,OAAOC,KAAKV,EAAQK,MAEzB9B,EAAQoC,IAAK,CACf,MACMC,EADOrC,EAAQoC,IAAIE,MAAMC,KACXC,MAAM,KAAK,GAE/BnB,EAAQY,EAAOQ,QAAQJ,EAC/B,MACW,CACLZ,EAAQK,KAAKY,SAASC,IACfV,EAAOW,SAASD,EAAKf,KACxBK,EAAOY,KAAKF,EAAKf,GAC3B,IAGM,MAAMkB,EAAOrB,EAAQsB,KAAKrB,GAEtBoB,IACFzB,EAAQY,EAAOQ,QAAQK,EAAKR,MAAMV,IAE1C,CACA,CAEE,OAAOP,EAAQ,EAAI,EAAIA,CAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"violin.js","sources":["../../../../src/common/config/chartTypes/violin.js"],"sourcesContent":["import Chart from 'chart.js/auto';\nimport { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\nimport {\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n} from '@sgratzl/chartjs-chart-boxplot';\n\nChart.register(BoxPlotController, BoxAndWiskers, ViolinController);\n\nexport const type = 'violin';\nexport const defaultBorderWidth = 1;\nconst borderColor = getTokenThemeVal(\n '--kd-color-data-viz-neutral-border-primary'\n);\nconst meanMedianOutlierBackgroundColor = getTokenThemeVal(\n '--kd-color-data-viz-neutral-background-color'\n);\n\nexport const options = (ctx) => {\n const horizontal = ctx.options?.indexAxis === 'y';\n\n return {\n scales: {\n x: { grid: { display: horizontal } },\n y: { grid: { display: !horizontal } },\n },\n plugins: {\n legend: { display: true, position: 'bottom' },\n tooltip: {\n enabled: true,\n callbacks: {\n title: (items) => {\n const axisLabel = horizontal\n ? items[0].chart.options.scales.y.title?.text\n : items[0].chart.options.scales.x.title?.text;\n return axisLabel\n ? `${axisLabel}: ${items[0].label}`\n : items[0].label;\n },\n },\n },\n },\n elements: {\n boxplot: {\n borderWidth: defaultBorderWidth,\n backgroundColor: meanMedianOutlierBackgroundColor,\n lowerBackgroundColor: meanMedianOutlierBackgroundColor,\n upperBackgroundColor: meanMedianOutlierBackgroundColor,\n medianStyle: 'circle',\n medianRadius: 6,\n medianBorderWidth: defaultBorderWidth,\n medianBorderColor: borderColor,\n medianBackgroundColor: meanMedianOutlierBackgroundColor,\n },\n },\n ...ctx.options,\n };\n};\n\nexport const datasetOptions = (ctx, index) => {\n const {\n colorPalette = 'categorical',\n backgroundAlpha = '95',\n pointCount = 100,\n violinWidth = 0.8,\n datasetOptionsOverride = {},\n } = ctx.options || {};\n\n const palette = getComputedColorPalette(colorPalette);\n const fill = palette[index % palette.length] + backgroundAlpha;\n\n return {\n backgroundColor: fill,\n borderColor: borderColor,\n borderWidth: defaultBorderWidth,\n meanStyle: 'circle',\n meanRadius: 4,\n meanBorderWidth: defaultBorderWidth,\n meanBorderColor: borderColor,\n meanBackgroundColor: meanMedianOutlierBackgroundColor,\n points: pointCount,\n width: violinWidth,\n lowerBackgroundColor: meanMedianOutlierBackgroundColor,\n upperBackgroundColor: meanMedianOutlierBackgroundColor,\n ...datasetOptionsOverride,\n };\n};\n\nexport const generateRandomData = (count, min, max, outliers = 0) => {\n const values = Array.from({ length: count }, () =>\n Math.floor(Math.random() * (max - min) + min)\n ).sort((a, b) => a - b);\n\n for (let i = 0; i < outliers; i++) {\n if (Math.random() > 0.5) {\n values.push(max + Math.floor(Math.random() * max * 0.5));\n } else {\n values.unshift(Math.max(0, min - Math.floor(Math.random() * min * 0.5)));\n }\n }\n\n return values;\n};\n"],"names":["Chart","register","BoxPlotController","BoxAndWiskers","ViolinController","type","defaultBorderWidth","borderColor","getTokenThemeVal","meanMedianOutlierBackgroundColor","options","ctx","horizontal","indexAxis","scales","x","grid","display","y","plugins","legend","position","tooltip","enabled","callbacks","title","items","axisLabel","chart","text","label","elements","boxplot","borderWidth","backgroundColor","lowerBackgroundColor","upperBackgroundColor","medianStyle","medianRadius","medianBorderWidth","medianBorderColor","medianBackgroundColor","datasetOptions","index","colorPalette","backgroundAlpha","pointCount","violinWidth","datasetOptionsOverride","palette","getComputedColorPalette","length","meanStyle","meanRadius","meanBorderWidth","meanBorderColor","meanBackgroundColor","points","width","generateRandomData","count","min","max","outliers","values","Array","from","Math","floor","random","sort","a","b","i","push","unshift"],"mappings":"mcASAA,EAAMC,SAASC,EAAmBC,EAAeC,GAErC,MAACC,EAAO,SACPC,EAAqB,EAC5BC,EAAcC,EAClB,8CAEIC,EAAmCD,EACvC,gDAGWE,EAAWC,IACtB,MAAMC,EAAwC,MAA3BD,EAAID,SAASG,UAEhC,MAAO,CACLC,OAAQ,CACNC,EAAG,CAAEC,KAAM,CAAEC,QAASL,IACtBM,EAAG,CAAEF,KAAM,CAAEC,SAAUL,KAEzBO,QAAS,CACPC,OAAQ,CAAEH,SAAS,EAAMI,SAAU,UACnCC,QAAS,CACPC,SAAS,EACTC,UAAW,CACTC,MAAQC,IACN,MAAMC,EAAYf,EACdc,EAAM,GAAGE,MAAMlB,QAAQI,OAAOI,EAAEO,OAAOI,KACvCH,EAAM,GAAGE,MAAMlB,QAAQI,OAAOC,EAAEU,OAAOI,KAC3C,OAAOF,EACH,GAAGA,MAAcD,EAAM,GAAGI,QAC1BJ,EAAM,GAAGI,KAAK,KAK1BC,SAAU,CACRC,QAAS,CACPC,YAlC0B,EAmC1BC,gBAAiBzB,EACjB0B,qBAAsB1B,EACtB2B,qBAAsB3B,EACtB4B,YAAa,SACbC,aAAc,EACdC,kBAxC0B,EAyC1BC,kBAAmBjC,EACnBkC,sBAAuBhC,OAGxBE,EAAID,QACR,EAGUgC,EAAiB,CAAC/B,EAAKgC,KAClC,MAAMC,aACJA,EAAe,cAAaC,gBAC5BA,EAAkB,KAAIC,WACtBA,EAAa,IAAGC,YAChBA,EAAc,GAAGC,uBACjBA,EAAyB,CAAE,GACzBrC,EAAID,SAAW,
|
|
1
|
+
{"version":3,"file":"violin.js","sources":["../../../../src/common/config/chartTypes/violin.js"],"sourcesContent":["import Chart from 'chart.js/auto';\nimport { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\nimport {\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n} from '@sgratzl/chartjs-chart-boxplot';\n\nChart.register(BoxPlotController, BoxAndWiskers, ViolinController);\n\nexport const type = 'violin';\nexport const defaultBorderWidth = 1;\nconst borderColor = getTokenThemeVal(\n '--kd-color-data-viz-neutral-border-primary'\n);\nconst meanMedianOutlierBackgroundColor = getTokenThemeVal(\n '--kd-color-data-viz-neutral-background-color'\n);\n\nexport const options = (ctx) => {\n const horizontal = ctx.options?.indexAxis === 'y';\n\n return {\n scales: {\n x: { grid: { display: horizontal } },\n y: { grid: { display: !horizontal } },\n },\n plugins: {\n legend: { display: true, position: 'bottom' },\n tooltip: {\n enabled: true,\n callbacks: {\n title: (items) => {\n const axisLabel = horizontal\n ? items[0].chart.options.scales.y.title?.text\n : items[0].chart.options.scales.x.title?.text;\n return axisLabel\n ? `${axisLabel}: ${items[0].label}`\n : items[0].label;\n },\n },\n },\n },\n elements: {\n boxplot: {\n borderWidth: defaultBorderWidth,\n backgroundColor: meanMedianOutlierBackgroundColor,\n lowerBackgroundColor: meanMedianOutlierBackgroundColor,\n upperBackgroundColor: meanMedianOutlierBackgroundColor,\n medianStyle: 'circle',\n medianRadius: 6,\n medianBorderWidth: defaultBorderWidth,\n medianBorderColor: borderColor,\n medianBackgroundColor: meanMedianOutlierBackgroundColor,\n },\n },\n ...ctx.options,\n };\n};\n\nexport const datasetOptions = (ctx, index) => {\n const {\n colorPalette = 'categorical',\n backgroundAlpha = '95',\n pointCount = 100,\n violinWidth = 0.8,\n datasetOptionsOverride = {},\n } = ctx.options || {};\n\n const palette = getComputedColorPalette(colorPalette);\n const fill = palette[index % palette.length] + backgroundAlpha;\n\n return {\n backgroundColor: fill,\n borderColor: borderColor,\n borderWidth: defaultBorderWidth,\n meanStyle: 'circle',\n meanRadius: 4,\n meanBorderWidth: defaultBorderWidth,\n meanBorderColor: borderColor,\n meanBackgroundColor: meanMedianOutlierBackgroundColor,\n points: pointCount,\n width: violinWidth,\n lowerBackgroundColor: meanMedianOutlierBackgroundColor,\n upperBackgroundColor: meanMedianOutlierBackgroundColor,\n ...datasetOptionsOverride,\n };\n};\n\nexport const generateRandomData = (count, min, max, outliers = 0) => {\n const values = Array.from({ length: count }, () =>\n Math.floor(Math.random() * (max - min) + min)\n ).sort((a, b) => a - b);\n\n for (let i = 0; i < outliers; i++) {\n if (Math.random() > 0.5) {\n values.push(max + Math.floor(Math.random() * max * 0.5));\n } else {\n values.unshift(Math.max(0, min - Math.floor(Math.random() * min * 0.5)));\n }\n }\n\n return values;\n};\n"],"names":["Chart","register","BoxPlotController","BoxAndWiskers","ViolinController","type","defaultBorderWidth","borderColor","getTokenThemeVal","meanMedianOutlierBackgroundColor","options","ctx","horizontal","indexAxis","scales","x","grid","display","y","plugins","legend","position","tooltip","enabled","callbacks","title","items","axisLabel","chart","text","label","elements","boxplot","borderWidth","backgroundColor","lowerBackgroundColor","upperBackgroundColor","medianStyle","medianRadius","medianBorderWidth","medianBorderColor","medianBackgroundColor","datasetOptions","index","colorPalette","backgroundAlpha","pointCount","violinWidth","datasetOptionsOverride","palette","getComputedColorPalette","length","meanStyle","meanRadius","meanBorderWidth","meanBorderColor","meanBackgroundColor","points","width","generateRandomData","count","min","max","outliers","values","Array","from","Math","floor","random","sort","a","b","i","push","unshift"],"mappings":"mcASAA,EAAMC,SAASC,EAAmBC,EAAeC,GAErC,MAACC,EAAO,SACPC,EAAqB,EAC5BC,EAAcC,EAClB,8CAEIC,EAAmCD,EACvC,gDAGWE,EAAWC,IACtB,MAAMC,EAAwC,MAA3BD,EAAID,SAASG,UAEhC,MAAO,CACLC,OAAQ,CACNC,EAAG,CAAEC,KAAM,CAAEC,QAASL,IACtBM,EAAG,CAAEF,KAAM,CAAEC,SAAUL,KAEzBO,QAAS,CACPC,OAAQ,CAAEH,SAAS,EAAMI,SAAU,UACnCC,QAAS,CACPC,SAAS,EACTC,UAAW,CACTC,MAAQC,IACN,MAAMC,EAAYf,EACdc,EAAM,GAAGE,MAAMlB,QAAQI,OAAOI,EAAEO,OAAOI,KACvCH,EAAM,GAAGE,MAAMlB,QAAQI,OAAOC,EAAEU,OAAOI,KAC3C,OAAOF,EACH,GAAGA,MAAcD,EAAM,GAAGI,QAC1BJ,EAAM,GAAGI,KAAK,KAK1BC,SAAU,CACRC,QAAS,CACPC,YAlC0B,EAmC1BC,gBAAiBzB,EACjB0B,qBAAsB1B,EACtB2B,qBAAsB3B,EACtB4B,YAAa,SACbC,aAAc,EACdC,kBAxC0B,EAyC1BC,kBAAmBjC,EACnBkC,sBAAuBhC,OAGxBE,EAAID,QACR,EAGUgC,EAAiB,CAAC/B,EAAKgC,KAClC,MAAMC,aACJA,EAAe,cAAaC,gBAC5BA,EAAkB,KAAIC,WACtBA,EAAa,IAAGC,YAChBA,EAAc,GAAGC,uBACjBA,EAAyB,CAAE,GACzBrC,EAAID,SAAW,CAAE,EAEfuC,EAAUC,EAAwBN,GAGxC,MAAO,CACLV,gBAHWe,EAAQN,EAAQM,EAAQE,QAAUN,EAI7CtC,YAAaA,EACb0B,YAhE8B,EAiE9BmB,UAAW,SACXC,WAAY,EACZC,gBAnE8B,EAoE9BC,gBAAiBhD,EACjBiD,oBAAqB/C,EACrBgD,OAAQX,EACRY,MAAOX,EACPZ,qBAAsB1B,EACtB2B,qBAAsB3B,KACnBuC,EACJ,EAGUW,EAAqB,CAACC,EAAOC,EAAKC,EAAKC,EAAW,KAC7D,MAAMC,EAASC,MAAMC,KAAK,CAAEf,OAAQS,IAAS,IAC3CO,KAAKC,MAAMD,KAAKE,UAAYP,EAAMD,GAAOA,KACzCS,MAAK,CAACC,EAAGC,IAAMD,EAAIC,IAErB,IAAK,IAAIC,EAAI,EAAGA,EAAIV,EAAUU,IACxBN,KAAKE,SAAW,GAClBL,EAAOU,KAAKZ,EAAMK,KAAKC,MAAMD,KAAKE,SAAWP,EAAM,KAEnDE,EAAOW,QAAQR,KAAKL,IAAI,EAAGD,EAAMM,KAAKC,MAAMD,KAAKE,SAAWR,EAAM,MAItE,OAAOG,CAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalOptionsNonRadial.js","sources":["../../../src/common/config/globalOptionsNonRadial.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nconst defaultConfig = (ctx) => {\n const GridLinesColor = getTokenThemeVal('--kd-color-border-variants-light');\n const AxisTextColor = getTokenThemeVal('--kd-color-text-level-primary');\n\n const MultiAxis =\n ctx.options.scales && Object.keys(ctx.options.scales).length > 2;\n\n const CommonAxisOptions = {\n grid: {\n drawTicks: false,\n color: GridLinesColor,\n },\n ticks: {\n padding: 8,\n color: AxisTextColor,\n },\n border: {\n display: false,\n },\n title: {\n color: AxisTextColor,\n display: true,\n },\n };\n\n const options = {\n scales: {\n x: {\n title: {\n display: true,\n text: 'X Axis ',\n padding: 8,\n },\n ...CommonAxisOptions,\n },\n y: {\n title: {\n display: true,\n text: 'Y Axis ',\n padding: { bottom: 8, top: 0 },\n },\n ...CommonAxisOptions,\n },\n },\n plugins: {\n tooltip: {\n callbacks: {\n labelColor: function (context) {\n const PerDatapointColors = Array.isArray(\n context.dataset.backgroundColor\n );\n const IsFunction =\n typeof context.dataset.backgroundColor == 'function';\n const BgColor = IsFunction\n ? context.dataset.borderColor + '80'\n : context.dataset.backgroundColor;\n\n return {\n borderColor: context.dataset.borderColor,\n backgroundColor: PerDatapointColors\n ? BgColor[context.dataIndex]\n : BgColor,\n borderRadius: 2,\n };\n },\n },\n },\n },\n };\n\n if (MultiAxis) {\n const ThirdAxisId = Object.keys(ctx.options.scales).find(\n (scaleId) => scaleId !== 'x' && scaleId !== 'y'\n );\n\n options.scales[ThirdAxisId] = {\n title: {\n display: true,\n padding: { bottom: 8, top: 0 },\n },\n position: 'right',\n grid: {\n drawOnChartArea: false,\n drawTicks: false,\n color: GridLinesColor,\n },\n border: {\n display: false,\n },\n };\n }\n\n return options;\n};\n\nexport default defaultConfig;\n"],"names":["defaultConfig","ctx","GridLinesColor","getTokenThemeVal","AxisTextColor","MultiAxis","options","scales","Object","keys","length","CommonAxisOptions","grid","drawTicks","color","ticks","padding","border","display","title","x","text","y","bottom","top","plugins","tooltip","callbacks","labelColor","context","PerDatapointColors","Array","isArray","dataset","backgroundColor","BgColor","borderColor","dataIndex","borderRadius","ThirdAxisId","find","scaleId","position","drawOnChartArea"],"mappings":"wHAEK,MAACA,EAAiBC,IACrB,MAAMC,EAAiBC,EAAiB,oCAClCC,EAAgBD,EAAiB,iCAEjCE,EACJJ,EAAIK,QAAQC,QAAUC,OAAOC,KAAKR,EAAIK,QAAQC,QAAQG,OAAS,EAE3DC,EAAoB,CACxBC,KAAM,CACJC,WAAW,EACXC,MAAOZ,GAETa,MAAO,CACLC,QAAS,EACTF,MAAOV,GAETa,OAAQ,CACNC,SAAS,GAEXC,MAAO,CACLL,MAAOV,EACPc,SAAS,IAIPZ,EAAU,CACdC,OAAQ,CACNa,EAAG,CACDD,MAAO,CACLD,SAAS,EACTG,KAAM,UACNL,QAAS,MAERL,GAELW,EAAG,CACDH,MAAO,CACLD,SAAS,EACTG,KAAM,UACNL,QAAS,CAAEO,OAAQ,EAAGC,IAAK,OAE1Bb,IAGPc,QAAS,CACPC,QAAS,CACPC,UAAW,CACTC,WAAY,SAAUC,GACpB,MAAMC,EAAqBC,MAAMC,QAC/BH,EAAQI,QAAQC,iBAIZC,EADsC,mBAAnCN,EAAQI,QAAQC,gBAErBL,EAAQI,QAAQG,YAAc,KAC9BP,EAAQI,QAAQC,gBAEpB,MAAO,CACLE,YAAaP,EAAQI,QAAQG,YAC7BF,gBAAiBJ,EACbK,EAAQN,EAAQQ,WAChBF,EACJG,aAAc,EAEjB,MAMT,GAAIjC,EAAW,CACb,MAAMkC,EAAc/B,OAAOC,KAAKR,EAAIK,QAAQC,QAAQiC,MACjDC,GAAwB,MAAZA,GAA+B,MAAZA,IAGlCnC,EAAQC,OAAOgC,GAAe,CAC5BpB,MAAO,CACLD,SAAS,EACTF,QAAS,CAAEO,OAAQ,EAAGC,IAAK,IAE7BkB,SAAU,QACV9B,KAAM,CACJ+B,iBAAiB,EACjB9B,WAAW,EACXC,MAAOZ,GAETe,OAAQ,CACNC,SAAS,
|
|
1
|
+
{"version":3,"file":"globalOptionsNonRadial.js","sources":["../../../src/common/config/globalOptionsNonRadial.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nconst defaultConfig = (ctx) => {\n const GridLinesColor = getTokenThemeVal('--kd-color-border-variants-light');\n const AxisTextColor = getTokenThemeVal('--kd-color-text-level-primary');\n\n const MultiAxis =\n ctx.options.scales && Object.keys(ctx.options.scales).length > 2;\n\n const CommonAxisOptions = {\n grid: {\n drawTicks: false,\n color: GridLinesColor,\n },\n ticks: {\n padding: 8,\n color: AxisTextColor,\n },\n border: {\n display: false,\n },\n title: {\n color: AxisTextColor,\n display: true,\n },\n };\n\n const options = {\n scales: {\n x: {\n title: {\n display: true,\n text: 'X Axis ',\n padding: 8,\n },\n ...CommonAxisOptions,\n },\n y: {\n title: {\n display: true,\n text: 'Y Axis ',\n padding: { bottom: 8, top: 0 },\n },\n ...CommonAxisOptions,\n },\n },\n plugins: {\n tooltip: {\n callbacks: {\n labelColor: function (context) {\n const PerDatapointColors = Array.isArray(\n context.dataset.backgroundColor\n );\n const IsFunction =\n typeof context.dataset.backgroundColor == 'function';\n const BgColor = IsFunction\n ? context.dataset.borderColor + '80'\n : context.dataset.backgroundColor;\n\n return {\n borderColor: context.dataset.borderColor,\n backgroundColor: PerDatapointColors\n ? BgColor[context.dataIndex]\n : BgColor,\n borderRadius: 2,\n };\n },\n },\n },\n },\n };\n\n if (MultiAxis) {\n const ThirdAxisId = Object.keys(ctx.options.scales).find(\n (scaleId) => scaleId !== 'x' && scaleId !== 'y'\n );\n\n options.scales[ThirdAxisId] = {\n title: {\n display: true,\n padding: { bottom: 8, top: 0 },\n },\n position: 'right',\n grid: {\n drawOnChartArea: false,\n drawTicks: false,\n color: GridLinesColor,\n },\n border: {\n display: false,\n },\n };\n }\n\n return options;\n};\n\nexport default defaultConfig;\n"],"names":["defaultConfig","ctx","GridLinesColor","getTokenThemeVal","AxisTextColor","MultiAxis","options","scales","Object","keys","length","CommonAxisOptions","grid","drawTicks","color","ticks","padding","border","display","title","x","text","y","bottom","top","plugins","tooltip","callbacks","labelColor","context","PerDatapointColors","Array","isArray","dataset","backgroundColor","BgColor","borderColor","dataIndex","borderRadius","ThirdAxisId","find","scaleId","position","drawOnChartArea"],"mappings":"wHAEK,MAACA,EAAiBC,IACrB,MAAMC,EAAiBC,EAAiB,oCAClCC,EAAgBD,EAAiB,iCAEjCE,EACJJ,EAAIK,QAAQC,QAAUC,OAAOC,KAAKR,EAAIK,QAAQC,QAAQG,OAAS,EAE3DC,EAAoB,CACxBC,KAAM,CACJC,WAAW,EACXC,MAAOZ,GAETa,MAAO,CACLC,QAAS,EACTF,MAAOV,GAETa,OAAQ,CACNC,SAAS,GAEXC,MAAO,CACLL,MAAOV,EACPc,SAAS,IAIPZ,EAAU,CACdC,OAAQ,CACNa,EAAG,CACDD,MAAO,CACLD,SAAS,EACTG,KAAM,UACNL,QAAS,MAERL,GAELW,EAAG,CACDH,MAAO,CACLD,SAAS,EACTG,KAAM,UACNL,QAAS,CAAEO,OAAQ,EAAGC,IAAK,OAE1Bb,IAGPc,QAAS,CACPC,QAAS,CACPC,UAAW,CACTC,WAAY,SAAUC,GACpB,MAAMC,EAAqBC,MAAMC,QAC/BH,EAAQI,QAAQC,iBAIZC,EADsC,mBAAnCN,EAAQI,QAAQC,gBAErBL,EAAQI,QAAQG,YAAc,KAC9BP,EAAQI,QAAQC,gBAEpB,MAAO,CACLE,YAAaP,EAAQI,QAAQG,YAC7BF,gBAAiBJ,EACbK,EAAQN,EAAQQ,WAChBF,EACJG,aAAc,EAEjB,MAMT,GAAIjC,EAAW,CACb,MAAMkC,EAAc/B,OAAOC,KAAKR,EAAIK,QAAQC,QAAQiC,MACjDC,GAAwB,MAAZA,GAA+B,MAAZA,IAGlCnC,EAAQC,OAAOgC,GAAe,CAC5BpB,MAAO,CACLD,SAAS,EACTF,QAAS,CAAEO,OAAQ,EAAGC,IAAK,IAE7BkB,SAAU,QACV9B,KAAM,CACJ+B,iBAAiB,EACjB9B,WAAW,EACXC,MAAOZ,GAETe,OAAQ,CACNC,SAAS,GAGjB,CAEE,OAAOZ,CAAO"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function renderBoxplotViolinTableHeader(): import("lit-html").TemplateResult<1>;
|
|
2
|
-
export declare function renderBoxplotViolinTableRow(label: string, values: number[]): import("lit-html").TemplateResult<1>;
|
|
3
|
-
export declare function renderBoxplotViolinTable(labels: string[], datasets: any[], axisLabel: string): import("lit-html").TemplateResult<1>;
|
|
1
|
+
export declare function renderBoxplotViolinTableHeader(): import("lit-html").TemplateResult<1>;
|
|
2
|
+
export declare function renderBoxplotViolinTableRow(label: string, values: number[]): import("lit-html").TemplateResult<1>;
|
|
3
|
+
export declare function renderBoxplotViolinTable(labels: string[], datasets: any[], axisLabel: string): import("lit-html").TemplateResult<1>;
|
|
4
4
|
//# sourceMappingURL=boxplotViolinTableRenderer.d.ts.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
export declare const debounce: any;
|
|
2
|
-
export declare const stringToReactHtml: (string:
|
|
3
|
-
__html:
|
|
4
|
-
};
|
|
5
|
-
/**
|
|
6
|
-
* Convert an object to an array of only its values.
|
|
7
|
-
* Used when importing enums in component stories for populating argType dropdowns.
|
|
8
|
-
* @param {*} options
|
|
9
|
-
* imported enums object
|
|
10
|
-
*/
|
|
11
|
-
export declare function createOptionsArray(options?: any): any;
|
|
12
|
-
export declare function convertChartDataToCSV(args: any): string | null;
|
|
13
|
-
export declare function getRandomData(arrayLength?: number, min?: number, max?: number): number[];
|
|
14
|
-
/**
|
|
15
|
-
* Takes a background hex color as input and returns the appropriate text
|
|
16
|
-
* color (either primary or inversed) based on the brightness of the background color.
|
|
17
|
-
* @param {string} bgHexColor - The `bgHexColor` parameter is a string representing a hexadecimal color
|
|
18
|
-
* code for the background color.
|
|
19
|
-
* @returns the color value for the text based on the background color provided. If the calculated YIQ
|
|
20
|
-
* value is greater than or equal to 128, it returns the primary text color (TextColor), otherwise it
|
|
21
|
-
* returns the inversed text color (InverseTextColor).
|
|
22
|
-
*/
|
|
23
|
-
export declare function getTextColor(bgHexColor: string): "#3d3c3c" | "#f9f9f9";
|
|
1
|
+
export declare const debounce: any;
|
|
2
|
+
export declare const stringToReactHtml: (string: string) => {
|
|
3
|
+
__html: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Convert an object to an array of only its values.
|
|
7
|
+
* Used when importing enums in component stories for populating argType dropdowns.
|
|
8
|
+
* @param {*} options
|
|
9
|
+
* imported enums object
|
|
10
|
+
*/
|
|
11
|
+
export declare function createOptionsArray(options?: any): any;
|
|
12
|
+
export declare function convertChartDataToCSV(args: any): string | null;
|
|
13
|
+
export declare function getRandomData(arrayLength?: number, min?: number, max?: number): number[];
|
|
14
|
+
/**
|
|
15
|
+
* Takes a background hex color as input and returns the appropriate text
|
|
16
|
+
* color (either primary or inversed) based on the brightness of the background color.
|
|
17
|
+
* @param {string} bgHexColor - The `bgHexColor` parameter is a string representing a hexadecimal color
|
|
18
|
+
* code for the background color.
|
|
19
|
+
* @returns the color value for the text based on the background color provided. If the calculated YIQ
|
|
20
|
+
* value is greater than or equal to 128, it returns the primary text color (TextColor), otherwise it
|
|
21
|
+
* returns the inversed text color (InverseTextColor).
|
|
22
|
+
*/
|
|
23
|
+
export declare function getTextColor(bgHexColor: string): "#3d3c3c" | "#f9f9f9";
|
|
24
24
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,EAAE,GAMtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,EAAE,GAMtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM;;CAE/C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,GAAQ,OAQnD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,iBA2B9C;AAED,wBAAgB,aAAa,CAAC,WAAW,SAAI,EAAE,GAAG,SAAO,EAAE,GAAG,SAAM,YAWnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,yBAU9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/common/helpers/helpers.ts"],"sourcesContent":["export const debounce: any = (fn:
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/common/helpers/helpers.ts"],"sourcesContent":["export const debounce: any = (fn: any, ms = 100) => {\n let timer: ReturnType<typeof setTimeout>;\n return function (e: Event) {\n clearTimeout(timer);\n timer = setTimeout(() => fn.apply(e), ms);\n };\n};\n\nexport const stringToReactHtml = (string: string) => {\n return { __html: string };\n};\n\n/**\n * Convert an object to an array of only its values.\n * Used when importing enums in component stories for populating argType dropdowns.\n * @param {*} options\n * imported enums object\n */\nexport function createOptionsArray(options: any = {}) {\n const optionsArray: any = [];\n\n Object.keys(options).map((key) => {\n optionsArray.push(options[key]);\n });\n\n return optionsArray;\n}\n\nexport function convertChartDataToCSV(args: any) {\n const data = args.data.data || null;\n if (data == null || !data.length) {\n return null;\n }\n\n const labels = args.labels || null;\n if (labels == null || !labels.length) {\n return null;\n }\n\n const columnDelimiter = args.columnDelimiter || ',';\n const lineDelimiter = args.lineDelimiter || '\\n';\n\n let result = '' + columnDelimiter;\n result += labels.join(columnDelimiter);\n result += lineDelimiter;\n\n result += args.data.label.toString();\n\n for (let i = 0; i < data.length; i++) {\n result += columnDelimiter;\n result += data[i];\n }\n result += lineDelimiter;\n\n return result;\n}\n\nexport function getRandomData(arrayLength = 6, min = -100, max = 100) {\n const data = [];\n\n for (let i = 0; i < arrayLength; i++) {\n data.push(\n Math.floor(Math.random() * (Math.floor(max) - Math.ceil(min) + 1)) +\n Math.ceil(min)\n );\n }\n\n return data;\n}\n\n/**\n * Takes a background hex color as input and returns the appropriate text\n * color (either primary or inversed) based on the brightness of the background color.\n * @param {string} bgHexColor - The `bgHexColor` parameter is a string representing a hexadecimal color\n * code for the background color.\n * @returns the color value for the text based on the background color provided. If the calculated YIQ\n * value is greater than or equal to 128, it returns the primary text color (TextColor), otherwise it\n * returns the inversed text color (InverseTextColor).\n */\nexport function getTextColor(bgHexColor: string) {\n const TextColor = '#3d3c3c';\n const InverseTextColor = '#f9f9f9';\n\n const r = parseInt(bgHexColor.substring(1, 3), 16);\n const g = parseInt(bgHexColor.substring(3, 5), 16);\n const b = parseInt(bgHexColor.substring(5, 7), 16);\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n return yiq >= 128 ? TextColor : InverseTextColor;\n}\n"],"names":["debounce","fn","ms","timer","e","clearTimeout","setTimeout","apply","convertChartDataToCSV","args","data","length","labels","columnDelimiter","lineDelimiter","result","join","label","toString","i","getTextColor","bgHexColor","parseInt","substring"],"mappings":"AAAa,MAAAA,EAAgB,CAACC,EAASC,EAAK,OAC1C,IAAIC,EACJ,OAAO,SAAUC,GACfC,aAAaF,GACbA,EAAQG,YAAW,IAAML,EAAGM,MAAMH,IAAIF,EACvC,CAAA,EAuBG,SAAUM,EAAsBC,GACpC,MAAMC,EAAOD,EAAKC,KAAKA,MAAQ,KAC/B,GAAY,MAARA,IAAiBA,EAAKC,OACxB,OAAO,KAGT,MAAMC,EAASH,EAAKG,QAAU,KAC9B,GAAc,MAAVA,IAAmBA,EAAOD,OAC5B,OAAO,KAGT,MAAME,EAAkBJ,EAAKI,iBAAmB,IAC1CC,EAAgBL,EAAKK,eAAiB,KAE5C,IAAIC,EAAS,GAAKF,EAClBE,GAAUH,EAAOI,KAAKH,GACtBE,GAAUD,EAEVC,GAAUN,EAAKC,KAAKO,MAAMC,WAE1B,IAAK,IAAIC,EAAI,EAAGA,EAAIT,EAAKC,OAAQQ,IAC/BJ,GAAUF,EACVE,GAAUL,EAAKS,GAIjB,OAFAJ,GAAUD,EAEHC,CACT,CAwBM,SAAUK,EAAaC,GAS3B,OAFiB,IAHPC,SAASD,EAAWE,UAAU,EAAG,GAAI,IAGpB,IAFjBD,SAASD,EAAWE,UAAU,EAAG,GAAI,IAEV,IAD3BD,SAASD,EAAWE,UAAU,EAAG,GAAI,KACH,KAE9B,IARI,UACO,SAQ3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLegendData.js","sources":["../../../src/common/legend/getLegendData.js"],"sourcesContent":["/**\n * Generates legend data from a Chart.js chart instance without any DOM manipulation.\n * This function extracts the necessary data to build a custom legend.\n *\n * @param {Chart} chart - The Chart.js chart instance\n * @returns {Array} An array of legend items with properties for rendering\n */\nexport function getLegendData(chart) {\n if (!chart) return [];\n\n const legendItems = [];\n const showLegendChartTypes = [\n 'bar',\n 'line',\n 'pie',\n 'doughnut',\n 'polarArea',\n 'radar',\n 'scatter',\n 'bubble',\n ];\n\n if (!showLegendChartTypes.includes(chart.config.type)) {\n return [];\n }\n\n if (chart.config.type === 'doughnut') {\n const hasMeterProperties = chart.data.datasets.some(\n (dataset) => 'needleValue' in dataset\n );\n if (hasMeterProperties) {\n return [];\n }\n }\n\n function shouldUseLabelBasedLegend(chart) {\n const labelBasedChartTypes = ['pie', 'doughnut', 'polarArea'];\n\n if (\n labelBasedChartTypes.includes(chart.config.type) &&\n chart.data.labels &&\n chart.data.labels.length\n ) {\n return true;\n }\n\n if (\n chart.data.labels &&\n chart.data.labels.length &&\n !chart.data.datasets.some((ds) => ds.label)\n ) {\n return true;\n }\n\n return false;\n }\n\n if (shouldUseLabelBasedLegend(chart)) {\n const dataset = chart.data.datasets[0];\n\n chart.data.labels.forEach((label, index) => {\n let color;\n if (dataset) {\n const bgColor = dataset.backgroundColor;\n\n if (Array.isArray(bgColor)) {\n color = bgColor[index % bgColor.length];\n } else if (typeof bgColor === 'function') {\n color = '#ccc';\n } else {\n color = bgColor;\n }\n } else {\n color = '#ccc';\n }\n\n legendItems.push({\n label,\n color,\n dataIndex: index,\n isHidden: chart.getDataVisibility(index) === false,\n // Function to toggle visibility\n toggleVisibility: () => {\n chart.toggleDataVisibility(index);\n chart.update();\n },\n });\n });\n } else {\n chart.data.datasets.forEach((dataset) => {\n if (!dataset.label) return;\n\n const index = chart.data.datasets.indexOf(dataset);\n const meta = chart.getDatasetMeta(index);\n\n let color;\n if (\n (chart.config.type === 'line' || dataset.type === 'line') &&\n dataset.borderColor\n ) {\n const borderColor = dataset.borderColor;\n color = Array.isArray(borderColor)\n ? borderColor[0]\n : typeof borderColor === 'function'\n ? '#ccc'\n : borderColor;\n } else {\n const bgColor =\n dataset.backgroundColor || dataset.borderColor || '#ccc';\n color = Array.isArray(bgColor)\n ? bgColor[0]\n : typeof bgColor === 'function'\n ? '#ccc'\n : bgColor;\n }\n\n let rgba = color;\n\n if (\n dataset.type === 'line' ||\n ['bubble', 'line', 'radar', 'scatter'].indexOf(chart.config.type) > -1\n ) {\n if (color.startsWith('#')) {\n const r = parseInt(color.slice(1, 3), 16);\n const g = parseInt(color.slice(3, 5), 16);\n const b = parseInt(color.slice(5, 7), 16);\n rgba = `rgba(${r}, ${g}, ${b}, 0.4)`;\n } else if (color.startsWith('rgb(')) {\n rgba = color.replace('rgb(', 'rgba(').replace(')', ', 0.4)');\n } else if (color.startsWith('rgba(')) {\n rgba = color.replace(/[\\d.]+\\)$/, '0.4)');\n }\n }\n\n const chartType = dataset.type || chart.config.type;\n const needsBorder =\n chartType === 'bubble' ||\n chartType === 'scatter' ||\n chartType === 'line' ||\n chartType === 'radar';\n\n legendItems.push({\n label: dataset.label,\n color,\n colorWithAlpha: rgba,\n datasetIndex: index,\n isHidden: meta.hidden,\n needsBorder,\n chartType,\n toggleVisibility: () => {\n meta.hidden = !meta.hidden;\n chart.update();\n },\n });\n });\n }\n\n return legendItems;\n}\n"],"names":["getLegendData","chart","legendItems","includes","config","type","data","datasets","some","dataset","labels","length","ds","label","shouldUseLabelBasedLegend","forEach","index","color","bgColor","backgroundColor","Array","isArray","push","dataIndex","isHidden","getDataVisibility","toggleVisibility","toggleDataVisibility","update","indexOf","meta","getDatasetMeta","borderColor","rgba","startsWith","parseInt","slice","replace","chartType","needsBorder","colorWithAlpha","datasetIndex","hidden"],"mappings":"AAOO,SAASA,EAAcC,GAC5B,IAAKA,EAAO,MAAO,GAEnB,MAAMC,EAAc,GAYpB,IAX6B,CAC3B,MACA,OACA,MACA,WACA,YACA,QACA,UACA,UAGwBC,SAASF,EAAMG,OAAOC,MAC9C,MAAO,GAGT,GAA0B,aAAtBJ,EAAMG,OAAOC,KAAqB,CAIpC,GAH2BJ,EAAMK,KAAKC,SAASC,MAC5CC,GAAY,gBAAiBA,IAG9B,MAAO,
|
|
1
|
+
{"version":3,"file":"getLegendData.js","sources":["../../../src/common/legend/getLegendData.js"],"sourcesContent":["/**\n * Generates legend data from a Chart.js chart instance without any DOM manipulation.\n * This function extracts the necessary data to build a custom legend.\n *\n * @param {Chart} chart - The Chart.js chart instance\n * @returns {Array} An array of legend items with properties for rendering\n */\nexport function getLegendData(chart) {\n if (!chart) return [];\n\n const legendItems = [];\n const showLegendChartTypes = [\n 'bar',\n 'line',\n 'pie',\n 'doughnut',\n 'polarArea',\n 'radar',\n 'scatter',\n 'bubble',\n ];\n\n if (!showLegendChartTypes.includes(chart.config.type)) {\n return [];\n }\n\n if (chart.config.type === 'doughnut') {\n const hasMeterProperties = chart.data.datasets.some(\n (dataset) => 'needleValue' in dataset\n );\n if (hasMeterProperties) {\n return [];\n }\n }\n\n function shouldUseLabelBasedLegend(chart) {\n const labelBasedChartTypes = ['pie', 'doughnut', 'polarArea'];\n\n if (\n labelBasedChartTypes.includes(chart.config.type) &&\n chart.data.labels &&\n chart.data.labels.length\n ) {\n return true;\n }\n\n if (\n chart.data.labels &&\n chart.data.labels.length &&\n !chart.data.datasets.some((ds) => ds.label)\n ) {\n return true;\n }\n\n return false;\n }\n\n if (shouldUseLabelBasedLegend(chart)) {\n const dataset = chart.data.datasets[0];\n\n chart.data.labels.forEach((label, index) => {\n let color;\n if (dataset) {\n const bgColor = dataset.backgroundColor;\n\n if (Array.isArray(bgColor)) {\n color = bgColor[index % bgColor.length];\n } else if (typeof bgColor === 'function') {\n color = '#ccc';\n } else {\n color = bgColor;\n }\n } else {\n color = '#ccc';\n }\n\n legendItems.push({\n label,\n color,\n dataIndex: index,\n isHidden: chart.getDataVisibility(index) === false,\n // Function to toggle visibility\n toggleVisibility: () => {\n chart.toggleDataVisibility(index);\n chart.update();\n },\n });\n });\n } else {\n chart.data.datasets.forEach((dataset) => {\n if (!dataset.label) return;\n\n const index = chart.data.datasets.indexOf(dataset);\n const meta = chart.getDatasetMeta(index);\n\n let color;\n if (\n (chart.config.type === 'line' || dataset.type === 'line') &&\n dataset.borderColor\n ) {\n const borderColor = dataset.borderColor;\n color = Array.isArray(borderColor)\n ? borderColor[0]\n : typeof borderColor === 'function'\n ? '#ccc'\n : borderColor;\n } else {\n const bgColor =\n dataset.backgroundColor || dataset.borderColor || '#ccc';\n color = Array.isArray(bgColor)\n ? bgColor[0]\n : typeof bgColor === 'function'\n ? '#ccc'\n : bgColor;\n }\n\n let rgba = color;\n\n if (\n dataset.type === 'line' ||\n ['bubble', 'line', 'radar', 'scatter'].indexOf(chart.config.type) > -1\n ) {\n if (color.startsWith('#')) {\n const r = parseInt(color.slice(1, 3), 16);\n const g = parseInt(color.slice(3, 5), 16);\n const b = parseInt(color.slice(5, 7), 16);\n rgba = `rgba(${r}, ${g}, ${b}, 0.4)`;\n } else if (color.startsWith('rgb(')) {\n rgba = color.replace('rgb(', 'rgba(').replace(')', ', 0.4)');\n } else if (color.startsWith('rgba(')) {\n rgba = color.replace(/[\\d.]+\\)$/, '0.4)');\n }\n }\n\n const chartType = dataset.type || chart.config.type;\n const needsBorder =\n chartType === 'bubble' ||\n chartType === 'scatter' ||\n chartType === 'line' ||\n chartType === 'radar';\n\n legendItems.push({\n label: dataset.label,\n color,\n colorWithAlpha: rgba,\n datasetIndex: index,\n isHidden: meta.hidden,\n needsBorder,\n chartType,\n toggleVisibility: () => {\n meta.hidden = !meta.hidden;\n chart.update();\n },\n });\n });\n }\n\n return legendItems;\n}\n"],"names":["getLegendData","chart","legendItems","includes","config","type","data","datasets","some","dataset","labels","length","ds","label","shouldUseLabelBasedLegend","forEach","index","color","bgColor","backgroundColor","Array","isArray","push","dataIndex","isHidden","getDataVisibility","toggleVisibility","toggleDataVisibility","update","indexOf","meta","getDatasetMeta","borderColor","rgba","startsWith","parseInt","slice","replace","chartType","needsBorder","colorWithAlpha","datasetIndex","hidden"],"mappings":"AAOO,SAASA,EAAcC,GAC5B,IAAKA,EAAO,MAAO,GAEnB,MAAMC,EAAc,GAYpB,IAX6B,CAC3B,MACA,OACA,MACA,WACA,YACA,QACA,UACA,UAGwBC,SAASF,EAAMG,OAAOC,MAC9C,MAAO,GAGT,GAA0B,aAAtBJ,EAAMG,OAAOC,KAAqB,CAIpC,GAH2BJ,EAAMK,KAAKC,SAASC,MAC5CC,GAAY,gBAAiBA,IAG9B,MAAO,EAEb,CAwBE,GAtBA,SAAmCR,GAGjC,SAF6B,CAAC,MAAO,WAAY,aAG1BE,SAASF,EAAMG,OAAOC,OAC3CJ,EAAMK,KAAKI,QACXT,EAAMK,KAAKI,OAAOC,YAMlBV,EAAMK,KAAKI,SACXT,EAAMK,KAAKI,OAAOC,QACjBV,EAAMK,KAAKC,SAASC,MAAMI,GAAOA,EAAGC,QAM3C,CAEMC,CAA0Bb,GAAQ,CACpC,MAAMQ,EAAUR,EAAMK,KAAKC,SAAS,GAEpCN,EAAMK,KAAKI,OAAOK,SAAQ,CAACF,EAAOG,KAChC,IAAIC,EACJ,GAAIR,EAAS,CACX,MAAMS,EAAUT,EAAQU,gBAGtBF,EADEG,MAAMC,QAAQH,GACRA,EAAQF,EAAQE,EAAQP,QACJ,mBAAZO,EACR,OAEAA,CAElB,MACQD,EAAQ,OAGVf,EAAYoB,KAAK,CACfT,QACAI,QACAM,UAAWP,EACXQ,UAA6C,IAAnCvB,EAAMwB,kBAAkBT,GAElCU,iBAAkB,KAChBzB,EAAM0B,qBAAqBX,GAC3Bf,EAAM2B,QAAQ,GAEhB,GAER,MACI3B,EAAMK,KAAKC,SAASQ,SAASN,IAC3B,IAAKA,EAAQI,MAAO,OAEpB,MAAMG,EAAQf,EAAMK,KAAKC,SAASsB,QAAQpB,GACpCqB,EAAO7B,EAAM8B,eAAef,GAElC,IAAIC,EACJ,GACyB,SAAtBhB,EAAMG,OAAOC,MAAoC,SAAjBI,EAAQJ,OACzCI,EAAQuB,YAQH,CACL,MAAMd,EACJT,EAAQU,iBAAmBV,EAAQuB,aAAe,OACpDf,EAAQG,MAAMC,QAAQH,GAClBA,EAAQ,GACW,mBAAZA,EACP,OACAA,CACZ,KAfQ,CACA,MAAMc,EAAcvB,EAAQuB,YAC5Bf,EAAQG,MAAMC,QAAQW,GAClBA,EAAY,GACW,mBAAhBA,EACP,OACAA,CACZ,CAUM,IAAIC,EAAOhB,EAEX,GACmB,SAAjBR,EAAQJ,MACR,CAAC,SAAU,OAAQ,QAAS,WAAWwB,QAAQ5B,EAAMG,OAAOC,OAAQ,EAEpE,GAAIY,EAAMiB,WAAW,KAAM,CAIzBD,EAAO,QAHGE,SAASlB,EAAMmB,MAAM,EAAG,GAAI,QAC5BD,SAASlB,EAAMmB,MAAM,EAAG,GAAI,QAC5BD,SAASlB,EAAMmB,MAAM,EAAG,GAAI,WAEvC,MAAUnB,EAAMiB,WAAW,QAC1BD,EAAOhB,EAAMoB,QAAQ,OAAQ,SAASA,QAAQ,IAAK,UAC1CpB,EAAMiB,WAAW,WAC1BD,EAAOhB,EAAMoB,QAAQ,YAAa,SAItC,MAAMC,EAAY7B,EAAQJ,MAAQJ,EAAMG,OAAOC,KACzCkC,EACU,WAAdD,GACc,YAAdA,GACc,SAAdA,GACc,UAAdA,EAEFpC,EAAYoB,KAAK,CACfT,MAAOJ,EAAQI,MACfI,QACAuB,eAAgBP,EAChBQ,aAAczB,EACdQ,SAAUM,EAAKY,OACfH,cACAD,YACAZ,iBAAkB,KAChBI,EAAKY,QAAUZ,EAAKY,OACpBzC,EAAM2B,QAAQ,GAEhB,IAIN,OAAO1B,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlRenderer.js","sources":["../../../src/common/legend/htmlRenderer.js"],"sourcesContent":["import { getLegendData } from './getLegendData';\n\nconst defaultOpts = {\n className: 'shidoka-legend',\n itemClassName: 'shidoka-legend-item',\n boxWidth: 14,\n boxHeight: 14,\n borderRadius: 2,\n maxHeight: 100,\n layout: 'horizontal',\n fontSize: '12px',\n boxMargin: 8,\n onItemClick: null,\n adjustChartHeight: true,\n reservedLegendHeight: 40,\n columns: 0,\n labelFormatter: null,\n itemClassResolver: null,\n position: 'bottom',\n};\n\nfunction applyStyles(el, styles) {\n Object.assign(el.style, styles);\n}\n\nexport function renderHTMLLegend(chart, container, options) {\n if (!chart || !container) return container;\n\n container.innerHTML = '';\n const items = getLegendData(chart);\n if (!items.length) return container;\n\n const opts = { ...defaultOpts, ...options };\n\n const legendOuterContainer = document.createElement('div');\n legendOuterContainer.className = `${opts.className}-container`;\n applyStyles(legendOuterContainer, {\n width: '100%',\n paddingLeft: '20px',\n paddingRight: '20px',\n marginRight: 'auto',\n marginLeft: 'auto',\n boxSizing: 'border-box',\n });\n\n const scrollableContainer = document.createElement('div');\n scrollableContainer.className = opts.className;\n applyStyles(scrollableContainer, {\n width: '100%',\n maxHeight: `${opts.maxHeight}px`,\n overflowY: 'auto',\n boxSizing: 'border-box',\n });\n\n scrollableContainer.tabIndex = 0;\n scrollableContainer.setAttribute('role', 'region');\n scrollableContainer.setAttribute('aria-label', 'Chart legend items');\n scrollableContainer.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown') {\n scrollableContainer.scrollTop += 40;\n e.preventDefault();\n } else if (e.key === 'ArrowUp') {\n scrollableContainer.scrollTop -= 40;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n scrollableContainer.scrollTop += scrollableContainer.clientHeight;\n e.preventDefault();\n } else if (e.key === 'PageUp') {\n scrollableContainer.scrollTop -= scrollableContainer.clientHeight;\n e.preventDefault();\n } else if (e.key === 'Home') {\n scrollableContainer.scrollTop = 0;\n e.preventDefault();\n } else if (e.key === 'End') {\n scrollableContainer.scrollTop = scrollableContainer.scrollHeight;\n e.preventDefault();\n }\n });\n\n const ul = document.createElement('ul');\n ul.className = `${opts.className}-items`;\n\n const ulStyles = {\n display: 'flex',\n listStyle: 'none',\n margin: '0',\n paddingTop: '8px',\n paddingBottom: '8px',\n paddingLeft: '0',\n gap: '12px',\n width: '100%',\n };\n\n if (opts.layout === 'vertical') {\n ulStyles.flexDirection = 'column';\n ulStyles.flexWrap = 'nowrap';\n ulStyles.justifyContent = 'flex-start';\n } else if (opts.columns > 0) {\n ulStyles.display = 'grid';\n ulStyles.gridTemplateColumns = `repeat(${opts.columns}, 1fr)`;\n ulStyles.justifyContent = 'flex-start';\n } else {\n ulStyles.flexWrap = 'wrap';\n ulStyles.justifyContent = 'center';\n }\n\n applyStyles(ul, ulStyles);\n\n const legendItems = [];\n\n items.forEach((item) => {\n const li = document.createElement('li');\n li.className = opts.itemClassName;\n li.setAttribute('data-legend-item', item.label);\n li.setAttribute(\n 'data-index',\n item.datasetIndex !== undefined\n ? item.datasetIndex\n : item.dataIndex !== undefined\n ? item.dataIndex\n : ''\n );\n\n if (\n opts.itemClassResolver &&\n typeof opts.itemClassResolver === 'function'\n ) {\n const customClass = opts.itemClassResolver(item);\n if (customClass) {\n li.classList.add(customClass);\n }\n }\n\n applyStyles(li, {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n fontFamily: 'var(--kd-font-family-body, inherit)',\n fontSize: opts.fontSize,\n marginRight: '12px',\n height: '100%',\n userSelect: 'none',\n opacity: item.isHidden ? '0.5' : '1',\n textDecoration: item.isHidden ? 'line-through' : 'none',\n });\n\n const buttonWrapper = document.createElement('button');\n buttonWrapper.className = `${opts.itemClassName}-button`;\n buttonWrapper.setAttribute('data-color-name', item.label);\n applyStyles(buttonWrapper, {\n background: 'none',\n border: 'none',\n padding: '0',\n margin: '0',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n textAlign: 'left',\n });\n\n buttonWrapper.setAttribute('aria-pressed', (!item.isHidden).toString());\n buttonWrapper.setAttribute(\n 'aria-label',\n `${item.label}${item.isHidden ? ' (hidden)' : ''}`\n );\n\n buttonWrapper.addEventListener('focus', () => {\n buttonWrapper.style.outline =\n '2px solid var(--kd-color-border-variants-focus)';\n buttonWrapper.style.outlineOffset = '2px';\n });\n\n buttonWrapper.addEventListener('blur', () => {\n buttonWrapper.style.outline = '';\n buttonWrapper.style.outlineOffset = '';\n });\n\n li.setAttribute('role', 'listitem');\n\n buttonWrapper.addEventListener('mouseover', () => {\n li.style.opacity = '0.8';\n });\n\n buttonWrapper.addEventListener('mouseout', () => {\n li.style.opacity = item.isHidden ? '0.5' : '1';\n });\n\n const colorBox = document.createElement('span');\n colorBox.className = `${opts.itemClassName}-color`;\n applyStyles(colorBox, {\n width: `${opts.boxWidth}px`,\n height: `${opts.boxHeight}px`,\n borderRadius: `${opts.borderRadius}px`,\n display: 'inline-block',\n marginRight: `${opts.boxMargin}px`,\n boxSizing: 'border-box',\n backgroundColor: item.needsBorder ? item.colorWithAlpha : item.color,\n border: item.needsBorder ? `1.5px solid ${item.color}` : '',\n });\n\n const valueVisible =\n chart.config.type === 'doughnut' ||\n chart.config.type === 'pie' ||\n chart.config.type === 'polarArea';\n\n const label = document.createElement('span');\n label.className = `${opts.itemClassName}-label`;\n\n if (opts.labelFormatter && typeof opts.labelFormatter === 'function') {\n label.textContent = opts.labelFormatter(item.label, item);\n } else {\n label.textContent = item.label;\n }\n\n if (valueVisible && 'dataIndex' in item && chart.data.datasets[0].data) {\n const value = chart.data.datasets[0].data[item.dataIndex];\n if (value !== undefined) {\n const valueSpan = document.createElement('span');\n valueSpan.className = `${opts.itemClassName}-value`;\n valueSpan.textContent = ` (${value})`;\n applyStyles(valueSpan, {\n marginLeft: '4px',\n fontSize: '0.9em',\n opacity: '0.8',\n });\n label.appendChild(valueSpan);\n }\n }\n\n const toggleItemVisibility = (e) => {\n e.stopPropagation();\n\n item.toggleVisibility();\n const hidden =\n 'dataIndex' in item\n ? chart.getDataVisibility(item.dataIndex) === false\n : chart.getDatasetMeta(item.datasetIndex).hidden;\n li.style.opacity = hidden ? '0.5' : '1';\n li.style.textDecoration = hidden ? 'line-through' : 'none';\n buttonWrapper.setAttribute('aria-pressed', (!hidden).toString());\n buttonWrapper.setAttribute(\n 'aria-label',\n `${item.label}${hidden ? ' (hidden)' : ''}`\n );\n\n const info = {\n item,\n chart,\n isHidden: hidden,\n label: item.label,\n dataIndex: 'dataIndex' in item ? item.dataIndex : undefined,\n datasetIndex: 'datasetIndex' in item ? item.datasetIndex : undefined,\n element: li,\n event: e,\n };\n\n if (typeof opts.onItemClick === 'function') {\n opts.onItemClick(info);\n }\n\n container.dispatchEvent(\n new CustomEvent('on-click', {\n detail: info,\n bubbles: true,\n composed: true,\n })\n );\n };\n\n buttonWrapper.addEventListener('click', toggleItemVisibility);\n buttonWrapper.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleItemVisibility(e);\n }\n });\n\n buttonWrapper.appendChild(colorBox);\n buttonWrapper.appendChild(label);\n li.appendChild(buttonWrapper);\n ul.appendChild(li);\n\n legendItems.push(buttonWrapper);\n });\n\n if (legendItems.length > 0) {\n legendItems.forEach((button, index) => {\n button.addEventListener('keydown', (e) => {\n const navigateTo = (targetIndex) => {\n if (targetIndex >= 0 && targetIndex < legendItems.length) {\n legendItems[targetIndex].focus();\n e.preventDefault();\n }\n };\n\n if (opts.columns > 1) {\n const totalRows = Math.ceil(legendItems.length / opts.columns);\n const currentRow = Math.floor(index / opts.columns);\n const currentCol = index % opts.columns;\n\n switch (e.key) {\n case 'ArrowRight':\n navigateTo(\n currentRow * opts.columns + ((currentCol + 1) % opts.columns)\n );\n break;\n case 'ArrowLeft':\n navigateTo(\n currentRow * opts.columns +\n ((currentCol - 1 + opts.columns) % opts.columns)\n );\n break;\n case 'ArrowDown':\n navigateTo(\n ((currentRow + 1) % totalRows) * opts.columns + currentCol\n );\n break;\n case 'ArrowUp':\n navigateTo(\n ((currentRow - 1 + totalRows) % totalRows) * opts.columns +\n currentCol\n );\n break;\n }\n } else if (opts.layout === 'vertical' || opts.columns === 1) {\n switch (e.key) {\n case 'ArrowDown':\n navigateTo((index + 1) % legendItems.length);\n break;\n case 'ArrowUp':\n navigateTo((index - 1 + legendItems.length) % legendItems.length);\n break;\n }\n } else {\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n navigateTo((index + 1) % legendItems.length);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n navigateTo((index - 1 + legendItems.length) % legendItems.length);\n break;\n }\n }\n });\n });\n }\n\n scrollableContainer.appendChild(ul);\n legendOuterContainer.appendChild(scrollableContainer);\n\n if (opts.position === 'left' || opts.position === 'right') {\n applyStyles(legendOuterContainer, {\n float: opts.position,\n maxWidth: '25%',\n paddingLeft: opts.position === 'right' ? '15px' : '0',\n paddingRight: opts.position === 'left' ? '15px' : '0',\n });\n\n applyStyles(scrollableContainer, {\n maxHeight: '100%',\n height: 'auto',\n });\n\n if (opts.layout !== 'vertical') {\n applyStyles(ul, {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'flex-start',\n });\n }\n }\n\n container.appendChild(legendOuterContainer);\n\n scrollableContainer.style.overflowY =\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight\n ? 'auto'\n : 'hidden';\n\n if (opts.adjustChartHeight && chart.canvas) {\n const legendHeight = Math.min(\n scrollableContainer.scrollHeight,\n opts.maxHeight || scrollableContainer.scrollHeight\n );\n const totalHeight = legendHeight + opts.reservedLegendHeight;\n\n if (totalHeight > opts.reservedLegendHeight) {\n const chartContainer = chart.canvas.parentElement;\n if (chartContainer) {\n if (!chartContainer.dataset.originalHeight) {\n chartContainer.dataset.originalHeight =\n chartContainer.style.height || 'auto';\n }\n\n const originalHeight = chartContainer.dataset.originalHeight;\n const newHeight =\n originalHeight !== 'auto'\n ? `calc(${originalHeight} - ${legendHeight}px)`\n : `calc(100% - ${legendHeight}px)`;\n\n chartContainer.style.height = newHeight;\n chart.resize();\n }\n }\n }\n\n return container;\n}\n"],"names":["defaultOpts","className","itemClassName","boxWidth","boxHeight","borderRadius","maxHeight","layout","fontSize","boxMargin","onItemClick","adjustChartHeight","reservedLegendHeight","columns","labelFormatter","itemClassResolver","position","applyStyles","el","styles","Object","assign","style","renderHTMLLegend","chart","container","options","innerHTML","items","getLegendData","length","opts","legendOuterContainer","document","createElement","width","paddingLeft","paddingRight","marginRight","marginLeft","boxSizing","scrollableContainer","overflowY","tabIndex","setAttribute","addEventListener","e","key","scrollTop","preventDefault","clientHeight","scrollHeight","ul","ulStyles","display","listStyle","margin","paddingTop","paddingBottom","gap","flexDirection","flexWrap","justifyContent","gridTemplateColumns","legendItems","forEach","item","li","label","undefined","datasetIndex","dataIndex","customClass","classList","add","alignItems","cursor","fontFamily","height","userSelect","opacity","isHidden","textDecoration","buttonWrapper","background","border","padding","color","textAlign","toString","outline","outlineOffset","colorBox","backgroundColor","needsBorder","colorWithAlpha","valueVisible","config","type","textContent","data","datasets","value","valueSpan","appendChild","toggleItemVisibility","stopPropagation","toggleVisibility","hidden","getDataVisibility","getDatasetMeta","info","element","event","dispatchEvent","CustomEvent","detail","bubbles","composed","push","button","index","navigateTo","targetIndex","focus","totalRows","Math","ceil","currentRow","floor","currentCol","float","maxWidth","canvas","legendHeight","min","chartContainer","parentElement","dataset","originalHeight","newHeight","resize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"htmlRenderer.js","sources":["../../../src/common/legend/htmlRenderer.js"],"sourcesContent":["import { getLegendData } from './getLegendData';\n\nconst defaultOpts = {\n className: 'shidoka-legend',\n itemClassName: 'shidoka-legend-item',\n boxWidth: 14,\n boxHeight: 14,\n borderRadius: 2,\n maxHeight: 100,\n layout: 'horizontal',\n fontSize: '12px',\n boxMargin: 8,\n onItemClick: null,\n adjustChartHeight: true,\n reservedLegendHeight: 40,\n columns: 0,\n labelFormatter: null,\n itemClassResolver: null,\n position: 'bottom',\n};\n\nfunction applyStyles(el, styles) {\n Object.assign(el.style, styles);\n}\n\nexport function renderHTMLLegend(chart, container, options) {\n if (!chart || !container) return container;\n\n container.innerHTML = '';\n const items = getLegendData(chart);\n if (!items.length) return container;\n\n const opts = { ...defaultOpts, ...options };\n\n const legendOuterContainer = document.createElement('div');\n legendOuterContainer.className = `${opts.className}-container`;\n applyStyles(legendOuterContainer, {\n width: '100%',\n paddingLeft: '20px',\n paddingRight: '20px',\n marginRight: 'auto',\n marginLeft: 'auto',\n boxSizing: 'border-box',\n });\n\n const scrollableContainer = document.createElement('div');\n scrollableContainer.className = opts.className;\n applyStyles(scrollableContainer, {\n width: '100%',\n maxHeight: `${opts.maxHeight}px`,\n overflowY: 'auto',\n boxSizing: 'border-box',\n });\n\n scrollableContainer.tabIndex = 0;\n scrollableContainer.setAttribute('role', 'region');\n scrollableContainer.setAttribute('aria-label', 'Chart legend items');\n scrollableContainer.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown') {\n scrollableContainer.scrollTop += 40;\n e.preventDefault();\n } else if (e.key === 'ArrowUp') {\n scrollableContainer.scrollTop -= 40;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n scrollableContainer.scrollTop += scrollableContainer.clientHeight;\n e.preventDefault();\n } else if (e.key === 'PageUp') {\n scrollableContainer.scrollTop -= scrollableContainer.clientHeight;\n e.preventDefault();\n } else if (e.key === 'Home') {\n scrollableContainer.scrollTop = 0;\n e.preventDefault();\n } else if (e.key === 'End') {\n scrollableContainer.scrollTop = scrollableContainer.scrollHeight;\n e.preventDefault();\n }\n });\n\n const ul = document.createElement('ul');\n ul.className = `${opts.className}-items`;\n\n const ulStyles = {\n display: 'flex',\n listStyle: 'none',\n margin: '0',\n paddingTop: '8px',\n paddingBottom: '8px',\n paddingLeft: '0',\n gap: '12px',\n width: '100%',\n };\n\n if (opts.layout === 'vertical') {\n ulStyles.flexDirection = 'column';\n ulStyles.flexWrap = 'nowrap';\n ulStyles.justifyContent = 'flex-start';\n } else if (opts.columns > 0) {\n ulStyles.display = 'grid';\n ulStyles.gridTemplateColumns = `repeat(${opts.columns}, 1fr)`;\n ulStyles.justifyContent = 'flex-start';\n } else {\n ulStyles.flexWrap = 'wrap';\n ulStyles.justifyContent = 'center';\n }\n\n applyStyles(ul, ulStyles);\n\n const legendItems = [];\n\n items.forEach((item) => {\n const li = document.createElement('li');\n li.className = opts.itemClassName;\n li.setAttribute('data-legend-item', item.label);\n li.setAttribute(\n 'data-index',\n item.datasetIndex !== undefined\n ? item.datasetIndex\n : item.dataIndex !== undefined\n ? item.dataIndex\n : ''\n );\n\n if (\n opts.itemClassResolver &&\n typeof opts.itemClassResolver === 'function'\n ) {\n const customClass = opts.itemClassResolver(item);\n if (customClass) {\n li.classList.add(customClass);\n }\n }\n\n applyStyles(li, {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n fontFamily: 'var(--kd-font-family-body, inherit)',\n fontSize: opts.fontSize,\n marginRight: '12px',\n height: '100%',\n userSelect: 'none',\n opacity: item.isHidden ? '0.5' : '1',\n textDecoration: item.isHidden ? 'line-through' : 'none',\n });\n\n const buttonWrapper = document.createElement('button');\n buttonWrapper.className = `${opts.itemClassName}-button`;\n buttonWrapper.setAttribute('data-color-name', item.label);\n applyStyles(buttonWrapper, {\n background: 'none',\n border: 'none',\n padding: '0',\n margin: '0',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n textAlign: 'left',\n });\n\n buttonWrapper.setAttribute('aria-pressed', (!item.isHidden).toString());\n buttonWrapper.setAttribute(\n 'aria-label',\n `${item.label}${item.isHidden ? ' (hidden)' : ''}`\n );\n\n buttonWrapper.addEventListener('focus', () => {\n buttonWrapper.style.outline =\n '2px solid var(--kd-color-border-variants-focus)';\n buttonWrapper.style.outlineOffset = '2px';\n });\n\n buttonWrapper.addEventListener('blur', () => {\n buttonWrapper.style.outline = '';\n buttonWrapper.style.outlineOffset = '';\n });\n\n li.setAttribute('role', 'listitem');\n\n buttonWrapper.addEventListener('mouseover', () => {\n li.style.opacity = '0.8';\n });\n\n buttonWrapper.addEventListener('mouseout', () => {\n li.style.opacity = item.isHidden ? '0.5' : '1';\n });\n\n const colorBox = document.createElement('span');\n colorBox.className = `${opts.itemClassName}-color`;\n applyStyles(colorBox, {\n width: `${opts.boxWidth}px`,\n height: `${opts.boxHeight}px`,\n borderRadius: `${opts.borderRadius}px`,\n display: 'inline-block',\n marginRight: `${opts.boxMargin}px`,\n boxSizing: 'border-box',\n backgroundColor: item.needsBorder ? item.colorWithAlpha : item.color,\n border: item.needsBorder ? `1.5px solid ${item.color}` : '',\n });\n\n const valueVisible =\n chart.config.type === 'doughnut' ||\n chart.config.type === 'pie' ||\n chart.config.type === 'polarArea';\n\n const label = document.createElement('span');\n label.className = `${opts.itemClassName}-label`;\n\n if (opts.labelFormatter && typeof opts.labelFormatter === 'function') {\n label.textContent = opts.labelFormatter(item.label, item);\n } else {\n label.textContent = item.label;\n }\n\n if (valueVisible && 'dataIndex' in item && chart.data.datasets[0].data) {\n const value = chart.data.datasets[0].data[item.dataIndex];\n if (value !== undefined) {\n const valueSpan = document.createElement('span');\n valueSpan.className = `${opts.itemClassName}-value`;\n valueSpan.textContent = ` (${value})`;\n applyStyles(valueSpan, {\n marginLeft: '4px',\n fontSize: '0.9em',\n opacity: '0.8',\n });\n label.appendChild(valueSpan);\n }\n }\n\n const toggleItemVisibility = (e) => {\n e.stopPropagation();\n\n item.toggleVisibility();\n const hidden =\n 'dataIndex' in item\n ? chart.getDataVisibility(item.dataIndex) === false\n : chart.getDatasetMeta(item.datasetIndex).hidden;\n li.style.opacity = hidden ? '0.5' : '1';\n li.style.textDecoration = hidden ? 'line-through' : 'none';\n buttonWrapper.setAttribute('aria-pressed', (!hidden).toString());\n buttonWrapper.setAttribute(\n 'aria-label',\n `${item.label}${hidden ? ' (hidden)' : ''}`\n );\n\n const info = {\n item,\n chart,\n isHidden: hidden,\n label: item.label,\n dataIndex: 'dataIndex' in item ? item.dataIndex : undefined,\n datasetIndex: 'datasetIndex' in item ? item.datasetIndex : undefined,\n element: li,\n event: e,\n };\n\n if (typeof opts.onItemClick === 'function') {\n opts.onItemClick(info);\n }\n\n container.dispatchEvent(\n new CustomEvent('on-click', {\n detail: info,\n bubbles: true,\n composed: true,\n })\n );\n };\n\n buttonWrapper.addEventListener('click', toggleItemVisibility);\n buttonWrapper.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleItemVisibility(e);\n }\n });\n\n buttonWrapper.appendChild(colorBox);\n buttonWrapper.appendChild(label);\n li.appendChild(buttonWrapper);\n ul.appendChild(li);\n\n legendItems.push(buttonWrapper);\n });\n\n if (legendItems.length > 0) {\n legendItems.forEach((button, index) => {\n button.addEventListener('keydown', (e) => {\n const navigateTo = (targetIndex) => {\n if (targetIndex >= 0 && targetIndex < legendItems.length) {\n legendItems[targetIndex].focus();\n e.preventDefault();\n }\n };\n\n if (opts.columns > 1) {\n const totalRows = Math.ceil(legendItems.length / opts.columns);\n const currentRow = Math.floor(index / opts.columns);\n const currentCol = index % opts.columns;\n\n switch (e.key) {\n case 'ArrowRight':\n navigateTo(\n currentRow * opts.columns + ((currentCol + 1) % opts.columns)\n );\n break;\n case 'ArrowLeft':\n navigateTo(\n currentRow * opts.columns +\n ((currentCol - 1 + opts.columns) % opts.columns)\n );\n break;\n case 'ArrowDown':\n navigateTo(\n ((currentRow + 1) % totalRows) * opts.columns + currentCol\n );\n break;\n case 'ArrowUp':\n navigateTo(\n ((currentRow - 1 + totalRows) % totalRows) * opts.columns +\n currentCol\n );\n break;\n }\n } else if (opts.layout === 'vertical' || opts.columns === 1) {\n switch (e.key) {\n case 'ArrowDown':\n navigateTo((index + 1) % legendItems.length);\n break;\n case 'ArrowUp':\n navigateTo((index - 1 + legendItems.length) % legendItems.length);\n break;\n }\n } else {\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n navigateTo((index + 1) % legendItems.length);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n navigateTo((index - 1 + legendItems.length) % legendItems.length);\n break;\n }\n }\n });\n });\n }\n\n scrollableContainer.appendChild(ul);\n legendOuterContainer.appendChild(scrollableContainer);\n\n if (opts.position === 'left' || opts.position === 'right') {\n applyStyles(legendOuterContainer, {\n float: opts.position,\n maxWidth: '25%',\n paddingLeft: opts.position === 'right' ? '15px' : '0',\n paddingRight: opts.position === 'left' ? '15px' : '0',\n });\n\n applyStyles(scrollableContainer, {\n maxHeight: '100%',\n height: 'auto',\n });\n\n if (opts.layout !== 'vertical') {\n applyStyles(ul, {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'flex-start',\n });\n }\n }\n\n container.appendChild(legendOuterContainer);\n\n scrollableContainer.style.overflowY =\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight\n ? 'auto'\n : 'hidden';\n\n if (opts.adjustChartHeight && chart.canvas) {\n const legendHeight = Math.min(\n scrollableContainer.scrollHeight,\n opts.maxHeight || scrollableContainer.scrollHeight\n );\n const totalHeight = legendHeight + opts.reservedLegendHeight;\n\n if (totalHeight > opts.reservedLegendHeight) {\n const chartContainer = chart.canvas.parentElement;\n if (chartContainer) {\n if (!chartContainer.dataset.originalHeight) {\n chartContainer.dataset.originalHeight =\n chartContainer.style.height || 'auto';\n }\n\n const originalHeight = chartContainer.dataset.originalHeight;\n const newHeight =\n originalHeight !== 'auto'\n ? `calc(${originalHeight} - ${legendHeight}px)`\n : `calc(100% - ${legendHeight}px)`;\n\n chartContainer.style.height = newHeight;\n chart.resize();\n }\n }\n }\n\n return container;\n}\n"],"names":["defaultOpts","className","itemClassName","boxWidth","boxHeight","borderRadius","maxHeight","layout","fontSize","boxMargin","onItemClick","adjustChartHeight","reservedLegendHeight","columns","labelFormatter","itemClassResolver","position","applyStyles","el","styles","Object","assign","style","renderHTMLLegend","chart","container","options","innerHTML","items","getLegendData","length","opts","legendOuterContainer","document","createElement","width","paddingLeft","paddingRight","marginRight","marginLeft","boxSizing","scrollableContainer","overflowY","tabIndex","setAttribute","addEventListener","e","key","scrollTop","preventDefault","clientHeight","scrollHeight","ul","ulStyles","display","listStyle","margin","paddingTop","paddingBottom","gap","flexDirection","flexWrap","justifyContent","gridTemplateColumns","legendItems","forEach","item","li","label","undefined","datasetIndex","dataIndex","customClass","classList","add","alignItems","cursor","fontFamily","height","userSelect","opacity","isHidden","textDecoration","buttonWrapper","background","border","padding","color","textAlign","toString","outline","outlineOffset","colorBox","backgroundColor","needsBorder","colorWithAlpha","valueVisible","config","type","textContent","data","datasets","value","valueSpan","appendChild","toggleItemVisibility","stopPropagation","toggleVisibility","hidden","getDataVisibility","getDatasetMeta","info","element","event","dispatchEvent","CustomEvent","detail","bubbles","composed","push","button","index","navigateTo","targetIndex","focus","totalRows","Math","ceil","currentRow","floor","currentCol","float","maxWidth","canvas","legendHeight","min","chartContainer","parentElement","dataset","originalHeight","newHeight","resize"],"mappings":"mDAEA,MAAMA,EAAc,CAClBC,UAAW,iBACXC,cAAe,sBACfC,SAAU,GACVC,UAAW,GACXC,aAAc,EACdC,UAAW,IACXC,OAAQ,aACRC,SAAU,OACVC,UAAW,EACXC,YAAa,KACbC,mBAAmB,EACnBC,qBAAsB,GACtBC,QAAS,EACTC,eAAgB,KAChBC,kBAAmB,KACnBC,SAAU,UAGZ,SAASC,EAAYC,EAAIC,GACvBC,OAAOC,OAAOH,EAAGI,MAAOH,EAC1B,CAEO,SAASI,EAAiBC,EAAOC,EAAWC,GACjD,IAAKF,IAAUC,EAAW,OAAOA,EAEjCA,EAAUE,UAAY,GACtB,MAAMC,EAAQC,EAAcL,GAC5B,IAAKI,EAAME,OAAQ,OAAOL,EAE1B,MAAMM,EAAO,IAAK/B,KAAgB0B,GAE5BM,EAAuBC,SAASC,cAAc,OACpDF,EAAqB/B,UAAY,GAAG8B,EAAK9B,sBACzCgB,EAAYe,EAAsB,CAChCG,MAAO,OACPC,YAAa,OACbC,aAAc,OACdC,YAAa,OACbC,WAAY,OACZC,UAAW,eAGb,MAAMC,EAAsBR,SAASC,cAAc,OACnDO,EAAoBxC,UAAY8B,EAAK9B,UACrCgB,EAAYwB,EAAqB,CAC/BN,MAAO,OACP7B,UAAW,GAAGyB,EAAKzB,cACnBoC,UAAW,OACXF,UAAW,eAGbC,EAAoBE,SAAW,EAC/BF,EAAoBG,aAAa,OAAQ,UACzCH,EAAoBG,aAAa,aAAc,sBAC/CH,EAAoBI,iBAAiB,WAAYC,IACjC,cAAVA,EAAEC,KACJN,EAAoBO,WAAa,GACjCF,EAAEG,kBACiB,YAAVH,EAAEC,KACXN,EAAoBO,WAAa,GACjCF,EAAEG,kBACiB,aAAVH,EAAEC,KACXN,EAAoBO,WAAaP,EAAoBS,aACrDJ,EAAEG,kBACiB,WAAVH,EAAEC,KACXN,EAAoBO,WAAaP,EAAoBS,aACrDJ,EAAEG,kBACiB,SAAVH,EAAEC,KACXN,EAAoBO,UAAY,EAChCF,EAAEG,kBACiB,QAAVH,EAAEC,MACXN,EAAoBO,UAAYP,EAAoBU,aACpDL,EAAEG,iBACR,IAGE,MAAMG,EAAKnB,SAASC,cAAc,MAClCkB,EAAGnD,UAAY,GAAG8B,EAAK9B,kBAEvB,MAAMoD,EAAW,CACfC,QAAS,OACTC,UAAW,OACXC,OAAQ,IACRC,WAAY,MACZC,cAAe,MACftB,YAAa,IACbuB,IAAK,OACLxB,MAAO,QAGW,aAAhBJ,EAAKxB,QACP8C,EAASO,cAAgB,SACzBP,EAASQ,SAAW,SACpBR,EAASS,eAAiB,cACjB/B,EAAKlB,QAAU,GACxBwC,EAASC,QAAU,OACnBD,EAASU,oBAAsB,UAAUhC,EAAKlB,gBAC9CwC,EAASS,eAAiB,eAE1BT,EAASQ,SAAW,OACpBR,EAASS,eAAiB,UAG5B7C,EAAYmC,EAAIC,GAEhB,MAAMW,EAAc,GAsRpB,GApRApC,EAAMqC,SAASC,IACb,MAAMC,EAAKlC,SAASC,cAAc,MAYlC,GAXAiC,EAAGlE,UAAY8B,EAAK7B,cACpBiE,EAAGvB,aAAa,mBAAoBsB,EAAKE,OACzCD,EAAGvB,aACD,kBACsByB,IAAtBH,EAAKI,aACDJ,EAAKI,kBACcD,IAAnBH,EAAKK,UACLL,EAAKK,UACL,IAIJxC,EAAKhB,mBAC6B,mBAA3BgB,EAAKhB,kBACZ,CACA,MAAMyD,EAAczC,EAAKhB,kBAAkBmD,GACvCM,GACFL,EAAGM,UAAUC,IAAIF,EAEzB,CAEIvD,EAAYkD,EAAI,CACdb,QAAS,OACTqB,WAAY,SACZC,OAAQ,UACRC,WAAY,sCACZrE,SAAUuB,EAAKvB,SACf8B,YAAa,OACbwC,OAAQ,OACRC,WAAY,OACZC,QAASd,EAAKe,SAAW,MAAQ,IACjCC,eAAgBhB,EAAKe,SAAW,eAAiB,SAGnD,MAAME,EAAgBlD,SAASC,cAAc,UAC7CiD,EAAclF,UAAY,GAAG8B,EAAK7B,uBAClCiF,EAAcvC,aAAa,kBAAmBsB,EAAKE,OACnDnD,EAAYkE,EAAe,CACzBC,WAAY,OACZC,OAAQ,OACRC,QAAS,IACT9B,OAAQ,IACRoB,OAAQ,UACRtB,QAAS,OACTqB,WAAY,SACZxC,MAAO,OACP2C,OAAQ,OACRD,WAAY,UACZrE,SAAU,UACV+E,MAAO,UACPC,UAAW,SAGbL,EAAcvC,aAAa,iBAAkBsB,EAAKe,UAAUQ,YAC5DN,EAAcvC,aACZ,aACA,GAAGsB,EAAKE,QAAQF,EAAKe,SAAW,YAAc,MAGhDE,EAActC,iBAAiB,SAAS,KACtCsC,EAAc7D,MAAMoE,QAClB,kDACFP,EAAc7D,MAAMqE,cAAgB,KAAK,IAG3CR,EAActC,iBAAiB,QAAQ,KACrCsC,EAAc7D,MAAMoE,QAAU,GAC9BP,EAAc7D,MAAMqE,cAAgB,EAAE,IAGxCxB,EAAGvB,aAAa,OAAQ,YAExBuC,EAActC,iBAAiB,aAAa,KAC1CsB,EAAG7C,MAAM0D,QAAU,KAAK,IAG1BG,EAActC,iBAAiB,YAAY,KACzCsB,EAAG7C,MAAM0D,QAAUd,EAAKe,SAAW,MAAQ,GAAG,IAGhD,MAAMW,EAAW3D,SAASC,cAAc,QACxC0D,EAAS3F,UAAY,GAAG8B,EAAK7B,sBAC7Be,EAAY2E,EAAU,CACpBzD,MAAO,GAAGJ,EAAK5B,aACf2E,OAAQ,GAAG/C,EAAK3B,cAChBC,aAAc,GAAG0B,EAAK1B,iBACtBiD,QAAS,eACThB,YAAa,GAAGP,EAAKtB,cACrB+B,UAAW,aACXqD,gBAAiB3B,EAAK4B,YAAc5B,EAAK6B,eAAiB7B,EAAKqB,MAC/DF,OAAQnB,EAAK4B,YAAc,eAAe5B,EAAKqB,QAAU,KAG3D,MAAMS,EACkB,aAAtBxE,EAAMyE,OAAOC,MACS,QAAtB1E,EAAMyE,OAAOC,MACS,cAAtB1E,EAAMyE,OAAOC,KAET9B,EAAQnC,SAASC,cAAc,QASrC,GARAkC,EAAMnE,UAAY,GAAG8B,EAAK7B,sBAEtB6B,EAAKjB,gBAAiD,mBAAxBiB,EAAKjB,eACrCsD,EAAM+B,YAAcpE,EAAKjB,eAAeoD,EAAKE,MAAOF,GAEpDE,EAAM+B,YAAcjC,EAAKE,MAGvB4B,GAAgB,cAAe9B,GAAQ1C,EAAM4E,KAAKC,SAAS,GAAGD,KAAM,CACtE,MAAME,EAAQ9E,EAAM4E,KAAKC,SAAS,GAAGD,KAAKlC,EAAKK,WAC/C,QAAcF,IAAViC,EAAqB,CACvB,MAAMC,EAAYtE,SAASC,cAAc,QACzCqE,EAAUtG,UAAY,GAAG8B,EAAK7B,sBAC9BqG,EAAUJ,YAAc,KAAKG,KAC7BrF,EAAYsF,EAAW,CACrBhE,WAAY,MACZ/B,SAAU,QACVwE,QAAS,QAEXZ,EAAMoC,YAAYD,EAC1B,CACA,CAEI,MAAME,EAAwB3D,IAC5BA,EAAE4D,kBAEFxC,EAAKyC,mBACL,MAAMC,EACJ,cAAe1C,GACiC,IAA5C1C,EAAMqF,kBAAkB3C,EAAKK,WAC7B/C,EAAMsF,eAAe5C,EAAKI,cAAcsC,OAC9CzC,EAAG7C,MAAM0D,QAAU4B,EAAS,MAAQ,IACpCzC,EAAG7C,MAAM4D,eAAiB0B,EAAS,eAAiB,OACpDzB,EAAcvC,aAAa,iBAAkBgE,GAAQnB,YACrDN,EAAcvC,aACZ,aACA,GAAGsB,EAAKE,QAAQwC,EAAS,YAAc,MAGzC,MAAMG,EAAO,CACX7C,OACA1C,QACAyD,SAAU2B,EACVxC,MAAOF,EAAKE,MACZG,UAAW,cAAeL,EAAOA,EAAKK,eAAYF,EAClDC,aAAc,iBAAkBJ,EAAOA,EAAKI,kBAAeD,EAC3D2C,QAAS7C,EACT8C,MAAOnE,GAGuB,mBAArBf,EAAKrB,aACdqB,EAAKrB,YAAYqG,GAGnBtF,EAAUyF,cACR,IAAIC,YAAY,WAAY,CAC1BC,OAAQL,EACRM,SAAS,EACTC,UAAU,IAEb,EAGHnC,EAActC,iBAAiB,QAAS4D,GACxCtB,EAActC,iBAAiB,WAAYC,IAC3B,UAAVA,EAAEC,KAA6B,MAAVD,EAAEC,MACzBD,EAAEG,iBACFwD,EAAqB3D,GAC7B,IAGIqC,EAAcqB,YAAYZ,GAC1BT,EAAcqB,YAAYpC,GAC1BD,EAAGqC,YAAYrB,GACf/B,EAAGoD,YAAYrC,GAEfH,EAAYuD,KAAKpC,EAAc,IAG7BnB,EAAYlC,OAAS,GACvBkC,EAAYC,SAAQ,CAACuD,EAAQC,KAC3BD,EAAO3E,iBAAiB,WAAYC,IAClC,MAAM4E,EAAcC,IACdA,GAAe,GAAKA,EAAc3D,EAAYlC,SAChDkC,EAAY2D,GAAaC,QACzB9E,EAAEG,iBACd,EAGQ,GAAIlB,EAAKlB,QAAU,EAAG,CACpB,MAAMgH,EAAYC,KAAKC,KAAK/D,EAAYlC,OAASC,EAAKlB,SAChDmH,EAAaF,KAAKG,MAAMR,EAAQ1F,EAAKlB,SACrCqH,EAAaT,EAAQ1F,EAAKlB,QAEhC,OAAQiC,EAAEC,KACR,IAAK,aACH2E,EACEM,EAAajG,EAAKlB,SAAYqH,EAAa,GAAKnG,EAAKlB,SAEvD,MACF,IAAK,YACH6G,EACEM,EAAajG,EAAKlB,SACdqH,EAAa,EAAInG,EAAKlB,SAAWkB,EAAKlB,SAE5C,MACF,IAAK,YACH6G,GACIM,EAAa,GAAKH,EAAa9F,EAAKlB,QAAUqH,GAElD,MACF,IAAK,UACHR,GACIM,EAAa,EAAIH,GAAaA,EAAa9F,EAAKlB,QAChDqH,GAIlB,MAAe,GAAoB,aAAhBnG,EAAKxB,QAA0C,IAAjBwB,EAAKlB,QAC5C,OAAQiC,EAAEC,KACR,IAAK,YACH2E,GAAYD,EAAQ,GAAKzD,EAAYlC,QACrC,MACF,IAAK,UACH4F,GAAYD,EAAQ,EAAIzD,EAAYlC,QAAUkC,EAAYlC,aAI9D,OAAQgB,EAAEC,KACR,IAAK,aACL,IAAK,YACH2E,GAAYD,EAAQ,GAAKzD,EAAYlC,QACrC,MACF,IAAK,YACL,IAAK,UACH4F,GAAYD,EAAQ,EAAIzD,EAAYlC,QAAUkC,EAAYlC,QAGxE,GACQ,IAINW,EAAoB+D,YAAYpD,GAChCpB,EAAqBwE,YAAY/D,GAEX,SAAlBV,EAAKf,UAAyC,UAAlBe,EAAKf,WACnCC,EAAYe,EAAsB,CAChCmG,MAAOpG,EAAKf,SACZoH,SAAU,MACVhG,YAA+B,UAAlBL,EAAKf,SAAuB,OAAS,IAClDqB,aAAgC,SAAlBN,EAAKf,SAAsB,OAAS,MAGpDC,EAAYwB,EAAqB,CAC/BnC,UAAW,OACXwE,OAAQ,SAGU,aAAhB/C,EAAKxB,QACPU,EAAYmC,EAAI,CACdQ,cAAe,SACfC,SAAU,SACVc,WAAY,gBAKlBlD,EAAU+E,YAAYxE,GAEtBS,EAAoBnB,MAAMoB,UACxBD,EAAoBU,aAAeV,EAAoBS,aACnD,OACA,SAEFnB,EAAKpB,mBAAqBa,EAAM6G,OAAQ,CAC1C,MAAMC,EAAeR,KAAKS,IACxB9F,EAAoBU,aACpBpB,EAAKzB,WAAamC,EAAoBU,cAIxC,GAFoBmF,EAAevG,EAAKnB,qBAEtBmB,EAAKnB,qBAAsB,CAC3C,MAAM4H,EAAiBhH,EAAM6G,OAAOI,cACpC,GAAID,EAAgB,CACbA,EAAeE,QAAQC,iBAC1BH,EAAeE,QAAQC,eACrBH,EAAelH,MAAMwD,QAAU,QAGnC,MAAM6D,EAAiBH,EAAeE,QAAQC,eACxCC,EACe,SAAnBD,EACI,QAAQA,OAAoBL,OAC5B,eAAeA,OAErBE,EAAelH,MAAMwD,OAAS8D,EAC9BpH,EAAMqH,QACd,CACA,CACA,CAEE,OAAOpH,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doughnutLabel.js","sources":["../../../src/common/plugins/doughnutLabel.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport default {\n id: 'doughnutLabel',\n beforeDraw: (chart, args, options) => {\n const TextColor = getTokenThemeVal('--kd-color-text-level-primary');\n\n if (\n chart.config.type === 'doughnut' &&\n !chart.config.options.doughnutLabel?.disabled\n ) {\n const { ctx } = chart;\n\n // get sum of all visible data points\n const total = chart.config.data.datasets[0].data\n .filter((dataPoint, index) => !chart.legend.legendItems[index]?.hidden)\n .reduce((a, b) => a + b, 0);\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n var centerX = (chart.chartArea.left + chart.chartArea.right) / 2;\n var centerY = (chart.chartArea.top + chart.chartArea.bottom) / 2 - 10;\n ctx.fillStyle = TextColor;\n\n //Draw text in center\n // get custom options for center text\n const Line1textOption = chart.config.options.doughnutLabel?.line1text;\n const Line1fontSize =\n chart.config.options.doughnutLabel?.line1fontSize || '16px';\n const Line2textOption = chart.config.options.doughnutLabel?.line2text;\n const Line2fontSize =\n chart.config.options.doughnutLabel?.line2fontSize || '16px';\n\n // set default values\n let Line1text = total;\n let Line2text = chart.config.options.scales.y.title.text;\n\n // determine if line1text option is given, is a function or not, and update text\n if (Line1textOption || Line1textOption === '') {\n Line1text =\n typeof Line1textOption === 'function'\n ? Line1textOption(Line1text, ctx)\n : Line1textOption;\n }\n\n // determine if line2text option is given, is a function or not, and update text\n if (Line2textOption || Line2textOption === '') {\n Line2text =\n typeof Line2textOption === 'function'\n ? Line2textOption(Line2text, ctx)\n : Line2textOption;\n }\n\n ctx.font = `${Line1fontSize} \"Helvetica Neue\", Helvetica, Arial, sans-serif`;\n ctx.fillText(Line1text, centerX, centerY);\n ctx.font = `${Line2fontSize} \"Helvetica Neue\", Helvetica, Arial, sans-serif`;\n ctx.fillText(Line2text, centerX, centerY + 20);\n }\n },\n};\n"],"names":["doughnutLabelPlugin","id","beforeDraw","chart","args","options","TextColor","getTokenThemeVal","config","type","doughnutLabel","disabled","ctx","total","data","datasets","filter","dataPoint","index","legend","legendItems","hidden","reduce","a","b","textAlign","textBaseline","centerX","chartArea","left","right","centerY","top","bottom","fillStyle","Line1textOption","line1text","Line1fontSize","line1fontSize","Line2textOption","line2text","Line2fontSize","line2fontSize","Line1text","Line2text","scales","y","title","text","font","fillText"],"mappings":"wHAEA,IAAeA,EAAA,CACbC,GAAI,gBACJC,WAAY,CAACC,EAAOC,EAAMC,KACxB,MAAMC,EAAYC,EAAiB,iCAEnC,GACwB,aAAtBJ,EAAMK,OAAOC,OACZN,EAAMK,OAAOH,QAAQK,eAAeC,SACrC,CACA,MAAMC,IAAEA,GAAQT,EAGVU,EAAQV,EAAMK,OAAOM,KAAKC,SAAS,GAAGD,KACzCE,QAAO,CAACC,EAAWC,KAAWf,EAAMgB,OAAOC,YAAYF,IAAQG,SAC/DC,QAAO,CAACC,EAAGC,IAAMD,EAAIC,GAAG,GAE3BZ,EAAIa,UAAY,SAChBb,EAAIc,aAAe,SACnB,IAAIC,GAAWxB,EAAMyB,UAAUC,KAAO1B,EAAMyB,UAAUE,OAAS,EAC3DC,GAAW5B,EAAMyB,UAAUI,IAAM7B,EAAMyB,UAAUK,QAAU,EAAI,GACnErB,EAAIsB,UAAY5B,EAIhB,MAAM6B,EAAkBhC,EAAMK,OAAOH,QAAQK,eAAe0B,UACtDC,EACJlC,EAAMK,OAAOH,QAAQK,eAAe4B,eAAiB,OACjDC,EAAkBpC,EAAMK,OAAOH,QAAQK,eAAe8B,UACtDC,EACJtC,EAAMK,OAAOH,QAAQK,eAAegC,eAAiB,OAGvD,IAAIC,EAAY9B,EACZ+B,EAAYzC,EAAMK,OAAOH,QAAQwC,OAAOC,EAAEC,MAAMC,MAGhDb,GAAuC,KAApBA,KACrBQ,EAC6B,mBAApBR,EACHA,EAAgBQ,EAAW/B,GAC3BuB,IAIJI,GAAuC,KAApBA,KACrBK,EAC6B,mBAApBL,EACHA,EAAgBK,EAAWhC,GAC3B2B,GAGR3B,EAAIqC,KAAO,GAAGZ,mDACdzB,EAAIsC,SAASP,EAAWhB,EAASI,GACjCnB,EAAIqC,KAAO,GAAGR,mDACd7B,EAAIsC,SAASN,EAAWjB,EAASI,EAAU,
|
|
1
|
+
{"version":3,"file":"doughnutLabel.js","sources":["../../../src/common/plugins/doughnutLabel.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport default {\n id: 'doughnutLabel',\n beforeDraw: (chart, args, options) => {\n const TextColor = getTokenThemeVal('--kd-color-text-level-primary');\n\n if (\n chart.config.type === 'doughnut' &&\n !chart.config.options.doughnutLabel?.disabled\n ) {\n const { ctx } = chart;\n\n // get sum of all visible data points\n const total = chart.config.data.datasets[0].data\n .filter((dataPoint, index) => !chart.legend.legendItems[index]?.hidden)\n .reduce((a, b) => a + b, 0);\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n var centerX = (chart.chartArea.left + chart.chartArea.right) / 2;\n var centerY = (chart.chartArea.top + chart.chartArea.bottom) / 2 - 10;\n ctx.fillStyle = TextColor;\n\n //Draw text in center\n // get custom options for center text\n const Line1textOption = chart.config.options.doughnutLabel?.line1text;\n const Line1fontSize =\n chart.config.options.doughnutLabel?.line1fontSize || '16px';\n const Line2textOption = chart.config.options.doughnutLabel?.line2text;\n const Line2fontSize =\n chart.config.options.doughnutLabel?.line2fontSize || '16px';\n\n // set default values\n let Line1text = total;\n let Line2text = chart.config.options.scales.y.title.text;\n\n // determine if line1text option is given, is a function or not, and update text\n if (Line1textOption || Line1textOption === '') {\n Line1text =\n typeof Line1textOption === 'function'\n ? Line1textOption(Line1text, ctx)\n : Line1textOption;\n }\n\n // determine if line2text option is given, is a function or not, and update text\n if (Line2textOption || Line2textOption === '') {\n Line2text =\n typeof Line2textOption === 'function'\n ? Line2textOption(Line2text, ctx)\n : Line2textOption;\n }\n\n ctx.font = `${Line1fontSize} \"Helvetica Neue\", Helvetica, Arial, sans-serif`;\n ctx.fillText(Line1text, centerX, centerY);\n ctx.font = `${Line2fontSize} \"Helvetica Neue\", Helvetica, Arial, sans-serif`;\n ctx.fillText(Line2text, centerX, centerY + 20);\n }\n },\n};\n"],"names":["doughnutLabelPlugin","id","beforeDraw","chart","args","options","TextColor","getTokenThemeVal","config","type","doughnutLabel","disabled","ctx","total","data","datasets","filter","dataPoint","index","legend","legendItems","hidden","reduce","a","b","textAlign","textBaseline","centerX","chartArea","left","right","centerY","top","bottom","fillStyle","Line1textOption","line1text","Line1fontSize","line1fontSize","Line2textOption","line2text","Line2fontSize","line2fontSize","Line1text","Line2text","scales","y","title","text","font","fillText"],"mappings":"wHAEA,IAAeA,EAAA,CACbC,GAAI,gBACJC,WAAY,CAACC,EAAOC,EAAMC,KACxB,MAAMC,EAAYC,EAAiB,iCAEnC,GACwB,aAAtBJ,EAAMK,OAAOC,OACZN,EAAMK,OAAOH,QAAQK,eAAeC,SACrC,CACA,MAAMC,IAAEA,GAAQT,EAGVU,EAAQV,EAAMK,OAAOM,KAAKC,SAAS,GAAGD,KACzCE,QAAO,CAACC,EAAWC,KAAWf,EAAMgB,OAAOC,YAAYF,IAAQG,SAC/DC,QAAO,CAACC,EAAGC,IAAMD,EAAIC,GAAG,GAE3BZ,EAAIa,UAAY,SAChBb,EAAIc,aAAe,SACnB,IAAIC,GAAWxB,EAAMyB,UAAUC,KAAO1B,EAAMyB,UAAUE,OAAS,EAC3DC,GAAW5B,EAAMyB,UAAUI,IAAM7B,EAAMyB,UAAUK,QAAU,EAAI,GACnErB,EAAIsB,UAAY5B,EAIhB,MAAM6B,EAAkBhC,EAAMK,OAAOH,QAAQK,eAAe0B,UACtDC,EACJlC,EAAMK,OAAOH,QAAQK,eAAe4B,eAAiB,OACjDC,EAAkBpC,EAAMK,OAAOH,QAAQK,eAAe8B,UACtDC,EACJtC,EAAMK,OAAOH,QAAQK,eAAegC,eAAiB,OAGvD,IAAIC,EAAY9B,EACZ+B,EAAYzC,EAAMK,OAAOH,QAAQwC,OAAOC,EAAEC,MAAMC,MAGhDb,GAAuC,KAApBA,KACrBQ,EAC6B,mBAApBR,EACHA,EAAgBQ,EAAW/B,GAC3BuB,IAIJI,GAAuC,KAApBA,KACrBK,EAC6B,mBAApBL,EACHA,EAAgBK,EAAWhC,GAC3B2B,GAGR3B,EAAIqC,KAAO,GAAGZ,mDACdzB,EAAIsC,SAASP,EAAWhB,EAASI,GACjCnB,EAAIqC,KAAO,GAAGR,mDACd7B,EAAIsC,SAASN,EAAWjB,EAASI,EAAU,GACjD"}
|