@kyndryl-design-system/shidoka-charts 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/config/chartTypes/sankey.js +2 -0
- package/common/config/chartTypes/sankey.js.map +1 -0
- package/common/config/colorPalettes.js +1 -1
- package/common/config/colorPalettes.js.map +1 -1
- package/common/helpers/helpers.d.ts +37 -5
- package/common/helpers/helpers.d.ts.map +1 -1
- package/common/helpers/helpers.js +1 -1
- package/common/helpers/helpers.js.map +1 -1
- package/common/plugins/sankeyTooltip.d.ts +8 -0
- package/common/plugins/sankeyTooltip.d.ts.map +1 -0
- package/common/plugins/sankeyTooltip.js +2 -0
- package/common/plugins/sankeyTooltip.js.map +1 -0
- package/components/chart/chart.d.ts.map +1 -1
- package/components/chart/chart.js +6 -6
- package/components/chart/chart.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getComputedColorPalette as o}from"../colorPalettes.js";import{getTokenThemeVal as e}from"@kyndryl-design-system/shidoka-foundation/common/helpers/color";import{createSankeyTooltipHandler as r}from"../../plugins/sankeyTooltip.js";const t="sankey",a=()=>e("--kd-color-text-level-primary"),n=o=>o?.from??o?.source,l=o=>o?.to??o?.target,d=r(),i=r=>{const t=r?.options||{},n=e("--kd-color-background-page-default"),l=a(),i=t.colorPalette||"categorical",c=o(i),s={outlineBorderWidth:.5,outlineBorderColor:n,outlineBackgroundColor:e("--kd-color-data-viz-level-secondary"),backgroundColor:c[0],...t};s.animations={colors:{duration:0},active:{duration:0},x:{duration:450,easing:"easeOutCubic"},y:{duration:450,easing:"easeOutCubic"},...t.animations||{}};const u={legend:{display:!1},datalabels:{font:{size:12,weight:"bold"},color:l},tooltip:{enabled:!1,external:d},...t.plugins||{}},g={dataTableHeaderLabels:{source:"Source",target:"Target",value:"Weight"},...t.sankey||{}};return{...s,plugins:u,sankey:g,borderColor:n}},c=e=>{const r=e?.options?.colorPalette||"categorical",t="default"===r?"categorical":r,d=a();let i=o(t)||o("categorical")||[];const c=i[0]||"#888",s=(o,e)=>{if(!o||!i.length)return c;const r=(o=>{if(!o)return{};const e=o._nodeColorMapPaletteKey;if(o._nodeColorMap&&e===t)return o._nodeColorMap;const r=new Set;(o.data||[]).forEach((o=>{if(!o)return;const e=n(o),t=l(o);void 0!==e&&r.add(e),void 0!==t&&r.add(t)}));const a={},d=Array.from(r);return i.length||(i=[c]),d.forEach(((o,e)=>{a[o]=i[e%i.length]})),o._nodeColorMap=a,o._nodeColorMapPaletteKey=t,o._colorPalette=i,a})(o);return void 0!==e&&r[e]?r[e]:c},u=(o,e)=>{const r=o?.dataset,t="number"==typeof o?.dataIndex?o.dataIndex:0,a=r?.data?.[t];if(!a)return c;const d="from"===e?n(a):l(a);return s(r,d)};return{color:d,colorFrom:o=>u(o,"from"),colorTo:o=>u(o,"to"),hoverColorFrom:o=>u(o,"from"),hoverColorTo:o=>u(o,"to"),colorMode:e?.options?.colorMode||"from"}};export{c as datasetOptions,i as options,t as type};
|
|
2
|
+
//# sourceMappingURL=sankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sankey.js","sources":["../../../../src/common/config/chartTypes/sankey.js"],"sourcesContent":["import { getComputedColorPalette } from '../colorPalettes';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\nimport { createSankeyTooltipHandler } from '../../plugins/sankeyTooltip';\n\nexport const type = 'sankey';\n\nconst getSankeyLabelColor = () =>\n getTokenThemeVal('--kd-color-text-level-primary');\n\nconst getFrom = (d) => d?.from ?? d?.source;\nconst getTo = (d) => d?.to ?? d?.target;\n\nconst sankeyExternalTooltip = createSankeyTooltipHandler();\n\nexport const options = (ctx) => {\n const userOptions = ctx?.options || {};\n const BorderColor = getTokenThemeVal('--kd-color-background-page-default');\n const LabelColor = getSankeyLabelColor();\n const rawPaletteKey = userOptions.colorPalette || 'categorical';\n const Colors = getComputedColorPalette(rawPaletteKey);\n const SankeyBackground = getTokenThemeVal(\n '--kd-color-data-viz-level-secondary'\n );\n\n const baseOptions = {\n outlineBorderWidth: 0.5,\n outlineBorderColor: BorderColor,\n outlineBackgroundColor: SankeyBackground,\n backgroundColor: Colors[0],\n ...userOptions,\n };\n\n baseOptions.animations = {\n colors: { duration: 0 },\n active: { duration: 0 },\n x: {\n duration: 450,\n easing: 'easeOutCubic',\n },\n y: {\n duration: 450,\n easing: 'easeOutCubic',\n },\n ...(userOptions.animations || {}),\n };\n\n const basePlugins = {\n legend: { display: false },\n datalabels: {\n font: {\n size: 12,\n weight: 'bold',\n },\n color: LabelColor,\n },\n tooltip: {\n enabled: false,\n external: sankeyExternalTooltip,\n },\n ...(userOptions.plugins || {}),\n };\n\n const baseSankey = {\n dataTableHeaderLabels: {\n source: 'Source',\n target: 'Target',\n value: 'Weight',\n },\n ...(userOptions.sankey || {}),\n };\n\n return {\n ...baseOptions,\n plugins: basePlugins,\n sankey: baseSankey,\n borderColor: BorderColor,\n };\n};\n\nexport const datasetOptions = (ctx) => {\n const rawKey = ctx?.options?.colorPalette || 'categorical';\n const key = rawKey === 'default' ? 'categorical' : rawKey;\n const LabelColor = getSankeyLabelColor();\n\n let palette =\n getComputedColorPalette(key) ||\n getComputedColorPalette('categorical') ||\n [];\n\n const FALLBACK_COLOR = palette[0] || '#888';\n\n const buildNodeColorMap = (dataset) => {\n if (!dataset) return {};\n\n const cachedKey = dataset._nodeColorMapPaletteKey;\n if (dataset._nodeColorMap && cachedKey === key) {\n return dataset._nodeColorMap;\n }\n\n const nodes = new Set();\n (dataset.data || []).forEach((d) => {\n if (!d) return;\n const f = getFrom(d);\n const t = getTo(d);\n if (f !== undefined) nodes.add(f);\n if (t !== undefined) nodes.add(t);\n });\n\n const map = {};\n const nodeArray = Array.from(nodes);\n\n if (!palette.length) {\n palette = [FALLBACK_COLOR];\n }\n\n nodeArray.forEach((n, i) => {\n map[n] = palette[i % palette.length];\n });\n\n dataset._nodeColorMap = map;\n dataset._nodeColorMapPaletteKey = key;\n dataset._colorPalette = palette;\n\n return map;\n };\n\n const getNodeColor = (dataset, nodeKey) => {\n if (!dataset || !palette.length) return FALLBACK_COLOR;\n const map = buildNodeColorMap(dataset);\n return nodeKey !== undefined && map[nodeKey]\n ? map[nodeKey]\n : FALLBACK_COLOR;\n };\n\n const colorForIndex = (context, which) => {\n const ds = context?.dataset;\n const idx = typeof context?.dataIndex === 'number' ? context.dataIndex : 0;\n const link = ds?.data?.[idx];\n if (!link) return FALLBACK_COLOR;\n const k = which === 'from' ? getFrom(link) : getTo(link);\n return getNodeColor(ds, k);\n };\n\n // Key change: drop 'gradient' in favor of a solid mode by default\n const colorMode = ctx?.options?.colorMode || 'from';\n\n return {\n color: LabelColor,\n colorFrom: (ctx2) => colorForIndex(ctx2, 'from'),\n colorTo: (ctx2) => colorForIndex(ctx2, 'to'),\n hoverColorFrom: (ctx2) => colorForIndex(ctx2, 'from'),\n hoverColorTo: (ctx2) => colorForIndex(ctx2, 'to'),\n colorMode,\n };\n};\n"],"names":["type","getSankeyLabelColor","getTokenThemeVal","getFrom","d","from","source","getTo","to","target","sankeyExternalTooltip","createSankeyTooltipHandler","options","ctx","userOptions","BorderColor","LabelColor","rawPaletteKey","colorPalette","Colors","getComputedColorPalette","baseOptions","outlineBorderWidth","outlineBorderColor","outlineBackgroundColor","backgroundColor","animations","colors","duration","active","x","easing","y","basePlugins","legend","display","datalabels","font","size","weight","color","tooltip","enabled","external","plugins","baseSankey","dataTableHeaderLabels","value","sankey","borderColor","datasetOptions","rawKey","key","palette","FALLBACK_COLOR","getNodeColor","dataset","nodeKey","length","map","cachedKey","_nodeColorMapPaletteKey","_nodeColorMap","nodes","Set","data","forEach","f","t","undefined","add","nodeArray","Array","n","i","_colorPalette","buildNodeColorMap","colorForIndex","context","which","ds","idx","dataIndex","link","k","colorFrom","ctx2","colorTo","hoverColorFrom","hoverColorTo","colorMode"],"mappings":"4OAIY,MAACA,EAAO,SAEdC,EAAsB,IAC1BC,EAAiB,iCAEbC,EAAWC,GAAMA,GAAGC,MAAQD,GAAGE,OAC/BC,EAASH,GAAMA,GAAGI,IAAMJ,GAAGK,OAE3BC,EAAwBC,IAEjBC,EAAWC,IACtB,MAAMC,EAAcD,GAAKD,SAAW,CAAA,EAC9BG,EAAcb,EAAiB,sCAC/Bc,EAAaf,IACbgB,EAAgBH,EAAYI,cAAgB,cAC5CC,EAASC,EAAwBH,GAKjCI,EAAc,CAClBC,mBAAoB,GACpBC,mBAAoBR,EACpBS,uBAPuBtB,EACvB,uCAOAuB,gBAAiBN,EAAO,MACrBL,GAGLO,EAAYK,WAAa,CACvBC,OAAQ,CAAEC,SAAU,GACpBC,OAAQ,CAAED,SAAU,GACpBE,EAAG,CACDF,SAAU,IACVG,OAAQ,gBAEVC,EAAG,CACDJ,SAAU,IACVG,OAAQ,mBAENjB,EAAYY,YAAc,IAGhC,MAAMO,EAAc,CAClBC,OAAQ,CAAEC,SAAS,GACnBC,WAAY,CACVC,KAAM,CACJC,KAAM,GACNC,OAAQ,QAEVC,MAAOxB,GAETyB,QAAS,CACPC,SAAS,EACTC,SAAUjC,MAERI,EAAY8B,SAAW,IAGvBC,EAAa,CACjBC,sBAAuB,CACrBxC,OAAQ,SACRG,OAAQ,SACRsC,MAAO,aAELjC,EAAYkC,QAAU,IAG5B,MAAO,IACF3B,EACHuB,QAASX,EACTe,OAAQH,EACRI,YAAalC,EACd,EAGUmC,EAAkBrC,IAC7B,MAAMsC,EAAStC,GAAKD,SAASM,cAAgB,cACvCkC,EAAiB,YAAXD,EAAuB,cAAgBA,EAC7CnC,EAAaf,IAEnB,IAAIoD,EACFjC,EAAwBgC,IACxBhC,EAAwB,gBACxB,GAEF,MAAMkC,EAAiBD,EAAQ,IAAM,OAqC/BE,EAAe,CAACC,EAASC,KAC7B,IAAKD,IAAYH,EAAQK,OAAQ,OAAOJ,EACxC,MAAMK,EArCkB,CAACH,IACzB,IAAKA,EAAS,MAAO,CAAA,EAErB,MAAMI,EAAYJ,EAAQK,wBAC1B,GAAIL,EAAQM,eAAiBF,IAAcR,EACzC,OAAOI,EAAQM,cAGjB,MAAMC,EAAQ,IAAIC,KACjBR,EAAQS,MAAQ,IAAIC,SAAS9D,IAC5B,IAAKA,EAAG,OACR,MAAM+D,EAAIhE,EAAQC,GACZgE,EAAI7D,EAAMH,QACNiE,IAANF,GAAiBJ,EAAMO,IAAIH,QACrBE,IAAND,GAAiBL,EAAMO,IAAIF,EAAE,IAGnC,MAAMT,EAAM,CAAA,EACNY,EAAYC,MAAMnE,KAAK0D,GAc7B,OAZKV,EAAQK,SACXL,EAAU,CAACC,IAGbiB,EAAUL,SAAQ,CAACO,EAAGC,KACpBf,EAAIc,GAAKpB,EAAQqB,EAAIrB,EAAQK,OAAO,IAGtCF,EAAQM,cAAgBH,EACxBH,EAAQK,wBAA0BT,EAClCI,EAAQmB,cAAgBtB,EAEjBM,CAAG,EAKEiB,CAAkBpB,GAC9B,YAAmBa,IAAZZ,GAAyBE,EAAIF,GAChCE,EAAIF,GACJH,CAAc,EAGduB,EAAgB,CAACC,EAASC,KAC9B,MAAMC,EAAKF,GAAStB,QACdyB,EAAoC,iBAAvBH,GAASI,UAAyBJ,EAAQI,UAAY,EACnEC,EAAOH,GAAIf,OAAOgB,GACxB,IAAKE,EAAM,OAAO7B,EAClB,MAAM8B,EAAc,SAAVL,EAAmB5E,EAAQgF,GAAQ5E,EAAM4E,GACnD,OAAO5B,EAAayB,EAAII,EAAE,EAM5B,MAAO,CACL5C,MAAOxB,EACPqE,UAAYC,GAAST,EAAcS,EAAM,QACzCC,QAAUD,GAAST,EAAcS,EAAM,MACvCE,eAAiBF,GAAST,EAAcS,EAAM,QAC9CG,aAAeH,GAAST,EAAcS,EAAM,MAC5CI,UARgB7E,GAAKD,SAAS8E,WAAa,OAS5C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getTokenThemeVal as a}from"@kyndryl-design-system/shidoka-foundation/common/helpers/color";const i=i
|
|
1
|
+
import{getTokenThemeVal as a}from"@kyndryl-design-system/shidoka-foundation/common/helpers/color";const i=a=>{const i=o[a];return Array.isArray(i)?i.slice():[]},t=t=>i(t).map((i=>i.startsWith("--")?a(i):i)),o={categorical:["--kd-color-data-viz-categorical-01-01","--kd-color-data-viz-categorical-01-02","--kd-color-data-viz-categorical-01-03","--kd-color-data-viz-categorical-01-04","--kd-color-data-viz-categorical-01-05","--kd-color-data-viz-categorical-01-06","--kd-color-data-viz-categorical-01-07","--kd-color-data-viz-categorical-01-08","--kd-color-data-viz-categorical-01-09","--kd-color-data-viz-categorical-01-10"],sequential01:["--kd-color-data-viz-sequential-01-10","--kd-color-data-viz-sequential-01-20","--kd-color-data-viz-sequential-01-30","--kd-color-data-viz-sequential-01-40","--kd-color-data-viz-sequential-01-50","--kd-color-data-viz-sequential-01-60","--kd-color-data-viz-sequential-01-70","--kd-color-data-viz-sequential-01-80","--kd-color-data-viz-sequential-01-90","--kd-color-data-viz-sequential-01-100"],sequential02:["--kd-color-data-viz-sequential-02-10","--kd-color-data-viz-sequential-02-20","--kd-color-data-viz-sequential-02-30","--kd-color-data-viz-sequential-02-40","--kd-color-data-viz-sequential-02-50","--kd-color-data-viz-sequential-02-60","--kd-color-data-viz-sequential-02-70","--kd-color-data-viz-sequential-02-80","--kd-color-data-viz-sequential-02-90","--kd-color-data-viz-sequential-02-100"],sequential03:["--kd-color-data-viz-sequential-03-10","--kd-color-data-viz-sequential-03-20","--kd-color-data-viz-sequential-03-30","--kd-color-data-viz-sequential-03-40","--kd-color-data-viz-sequential-03-50","--kd-color-data-viz-sequential-03-60","--kd-color-data-viz-sequential-03-70","--kd-color-data-viz-sequential-03-80","--kd-color-data-viz-sequential-03-90","--kd-color-data-viz-sequential-03-100"],sequential04:["--kd-color-data-viz-sequential-04-10","--kd-color-data-viz-sequential-04-20","--kd-color-data-viz-sequential-04-30","--kd-color-data-viz-sequential-04-40","--kd-color-data-viz-sequential-04-50","--kd-color-data-viz-sequential-04-60","--kd-color-data-viz-sequential-04-70","--kd-color-data-viz-sequential-04-80","--kd-color-data-viz-sequential-04-90","--kd-color-data-viz-sequential-04-100"],sequential05:["--kd-color-data-viz-sequential-05-10","--kd-color-data-viz-sequential-05-20","--kd-color-data-viz-sequential-05-30","--kd-color-data-viz-sequential-05-40","--kd-color-data-viz-sequential-05-50","--kd-color-data-viz-sequential-05-60","--kd-color-data-viz-sequential-05-70","--kd-color-data-viz-sequential-05-80","--kd-color-data-viz-sequential-05-90","--kd-color-data-viz-sequential-05-100"],divergent01:["--kd-color-data-viz-divergent-01-negative-100","--kd-color-data-viz-divergent-01-negative-90","--kd-color-data-viz-divergent-01-negative-80","--kd-color-data-viz-divergent-01-negative-70","--kd-color-data-viz-divergent-01-negative-60","--kd-color-data-viz-divergent-01-negative-50","--kd-color-data-viz-divergent-01-negative-40","--kd-color-data-viz-divergent-01-negative-30","--kd-color-data-viz-divergent-01-negative-20","--kd-color-data-viz-divergent-01-negative-10","--kd-color-data-viz-divergent-01-neutral","--kd-color-data-viz-divergent-01-positive-10","--kd-color-data-viz-divergent-01-positive-20","--kd-color-data-viz-divergent-01-positive-30","--kd-color-data-viz-divergent-01-positive-40","--kd-color-data-viz-divergent-01-positive-50","--kd-color-data-viz-divergent-01-positive-60","--kd-color-data-viz-divergent-01-positive-70","--kd-color-data-viz-divergent-01-positive-80","--kd-color-data-viz-divergent-01-positive-90","--kd-color-data-viz-divergent-01-positive-100"],divergent02:["--kd-color-data-viz-divergent-02-negative-100","--kd-color-data-viz-divergent-02-negative-90","--kd-color-data-viz-divergent-02-negative-80","--kd-color-data-viz-divergent-02-negative-70","--kd-color-data-viz-divergent-02-negative-60","--kd-color-data-viz-divergent-02-negative-50","--kd-color-data-viz-divergent-02-negative-40","--kd-color-data-viz-divergent-02-negative-30","--kd-color-data-viz-divergent-02-negative-20","--kd-color-data-viz-divergent-02-negative-10","--kd-color-data-viz-divergent-02-neutral","--kd-color-data-viz-divergent-02-positive-10","--kd-color-data-viz-divergent-02-positive-20","--kd-color-data-viz-divergent-02-positive-30","--kd-color-data-viz-divergent-02-positive-40","--kd-color-data-viz-divergent-02-positive-50","--kd-color-data-viz-divergent-02-positive-60","--kd-color-data-viz-divergent-02-positive-70","--kd-color-data-viz-divergent-02-positive-80","--kd-color-data-viz-divergent-02-positive-90","--kd-color-data-viz-divergent-02-positive-100"],statusLight:["--kd-color-data-viz-rag-8-success-light","--kd-color-data-viz-rag-8-warning-light","--kd-color-data-viz-rag-8-error-light","--kd-color-status-error-critical-light"],statusDark:["--kd-color-data-viz-rag-8-success","--kd-color-data-viz-rag-8-warning","--kd-color-data-viz-rag-8-error","--kd-color-status-error-critical-dark"],rag03:["--kd-color-data-viz-rag-3-success","--kd-color-data-viz-rag-3-warning","--kd-color-data-viz-rag-3-error"],rag08:["--kd-color-data-viz-rag-8-success","--kd-color-data-viz-rag-8-success-light","--kd-color-data-viz-rag-8-warning","--kd-color-data-viz-rag-8-warning-light","--kd-color-data-viz-rag-8-error","--kd-color-data-viz-rag-8-error-light","--kd-color-data-viz-rag-8-informational","--kd-color-data-viz-rag-8-informational-light"]};export{i as getColorPalette,t as getComputedColorPalette};
|
|
2
2
|
//# sourceMappingURL=colorPalettes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorPalettes.js","sources":["../../../src/common/config/colorPalettes.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const
|
|
1
|
+
{"version":3,"file":"colorPalettes.js","sources":["../../../src/common/config/colorPalettes.js"],"sourcesContent":["import { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nexport const getColorPalette = (key) => {\n const palette = palettes[key];\n return Array.isArray(palette) ? palette.slice() : [];\n};\n\nexport const getComputedColorPalette = (key) => {\n const palette = getColorPalette(key);\n return palette.map((color) => {\n return color.startsWith('--') ? getTokenThemeVal(color) : color;\n });\n};\n\nconst palettes = {\n categorical: [\n '--kd-color-data-viz-categorical-01-01',\n '--kd-color-data-viz-categorical-01-02',\n '--kd-color-data-viz-categorical-01-03',\n '--kd-color-data-viz-categorical-01-04',\n '--kd-color-data-viz-categorical-01-05',\n '--kd-color-data-viz-categorical-01-06',\n '--kd-color-data-viz-categorical-01-07',\n '--kd-color-data-viz-categorical-01-08',\n '--kd-color-data-viz-categorical-01-09',\n '--kd-color-data-viz-categorical-01-10',\n ],\n\n sequential01: [\n '--kd-color-data-viz-sequential-01-10',\n '--kd-color-data-viz-sequential-01-20',\n '--kd-color-data-viz-sequential-01-30',\n '--kd-color-data-viz-sequential-01-40',\n '--kd-color-data-viz-sequential-01-50',\n '--kd-color-data-viz-sequential-01-60',\n '--kd-color-data-viz-sequential-01-70',\n '--kd-color-data-viz-sequential-01-80',\n '--kd-color-data-viz-sequential-01-90',\n '--kd-color-data-viz-sequential-01-100',\n ],\n\n sequential02: [\n '--kd-color-data-viz-sequential-02-10',\n '--kd-color-data-viz-sequential-02-20',\n '--kd-color-data-viz-sequential-02-30',\n '--kd-color-data-viz-sequential-02-40',\n '--kd-color-data-viz-sequential-02-50',\n '--kd-color-data-viz-sequential-02-60',\n '--kd-color-data-viz-sequential-02-70',\n '--kd-color-data-viz-sequential-02-80',\n '--kd-color-data-viz-sequential-02-90',\n '--kd-color-data-viz-sequential-02-100',\n ],\n\n sequential03: [\n '--kd-color-data-viz-sequential-03-10',\n '--kd-color-data-viz-sequential-03-20',\n '--kd-color-data-viz-sequential-03-30',\n '--kd-color-data-viz-sequential-03-40',\n '--kd-color-data-viz-sequential-03-50',\n '--kd-color-data-viz-sequential-03-60',\n '--kd-color-data-viz-sequential-03-70',\n '--kd-color-data-viz-sequential-03-80',\n '--kd-color-data-viz-sequential-03-90',\n '--kd-color-data-viz-sequential-03-100',\n ],\n\n sequential04: [\n '--kd-color-data-viz-sequential-04-10',\n '--kd-color-data-viz-sequential-04-20',\n '--kd-color-data-viz-sequential-04-30',\n '--kd-color-data-viz-sequential-04-40',\n '--kd-color-data-viz-sequential-04-50',\n '--kd-color-data-viz-sequential-04-60',\n '--kd-color-data-viz-sequential-04-70',\n '--kd-color-data-viz-sequential-04-80',\n '--kd-color-data-viz-sequential-04-90',\n '--kd-color-data-viz-sequential-04-100',\n ],\n\n sequential05: [\n '--kd-color-data-viz-sequential-05-10',\n '--kd-color-data-viz-sequential-05-20',\n '--kd-color-data-viz-sequential-05-30',\n '--kd-color-data-viz-sequential-05-40',\n '--kd-color-data-viz-sequential-05-50',\n '--kd-color-data-viz-sequential-05-60',\n '--kd-color-data-viz-sequential-05-70',\n '--kd-color-data-viz-sequential-05-80',\n '--kd-color-data-viz-sequential-05-90',\n '--kd-color-data-viz-sequential-05-100',\n ],\n\n divergent01: [\n '--kd-color-data-viz-divergent-01-negative-100',\n '--kd-color-data-viz-divergent-01-negative-90',\n '--kd-color-data-viz-divergent-01-negative-80',\n '--kd-color-data-viz-divergent-01-negative-70',\n '--kd-color-data-viz-divergent-01-negative-60',\n '--kd-color-data-viz-divergent-01-negative-50',\n '--kd-color-data-viz-divergent-01-negative-40',\n '--kd-color-data-viz-divergent-01-negative-30',\n '--kd-color-data-viz-divergent-01-negative-20',\n '--kd-color-data-viz-divergent-01-negative-10',\n '--kd-color-data-viz-divergent-01-neutral',\n '--kd-color-data-viz-divergent-01-positive-10',\n '--kd-color-data-viz-divergent-01-positive-20',\n '--kd-color-data-viz-divergent-01-positive-30',\n '--kd-color-data-viz-divergent-01-positive-40',\n '--kd-color-data-viz-divergent-01-positive-50',\n '--kd-color-data-viz-divergent-01-positive-60',\n '--kd-color-data-viz-divergent-01-positive-70',\n '--kd-color-data-viz-divergent-01-positive-80',\n '--kd-color-data-viz-divergent-01-positive-90',\n '--kd-color-data-viz-divergent-01-positive-100',\n ],\n\n divergent02: [\n '--kd-color-data-viz-divergent-02-negative-100',\n '--kd-color-data-viz-divergent-02-negative-90',\n '--kd-color-data-viz-divergent-02-negative-80',\n '--kd-color-data-viz-divergent-02-negative-70',\n '--kd-color-data-viz-divergent-02-negative-60',\n '--kd-color-data-viz-divergent-02-negative-50',\n '--kd-color-data-viz-divergent-02-negative-40',\n '--kd-color-data-viz-divergent-02-negative-30',\n '--kd-color-data-viz-divergent-02-negative-20',\n '--kd-color-data-viz-divergent-02-negative-10',\n '--kd-color-data-viz-divergent-02-neutral',\n '--kd-color-data-viz-divergent-02-positive-10',\n '--kd-color-data-viz-divergent-02-positive-20',\n '--kd-color-data-viz-divergent-02-positive-30',\n '--kd-color-data-viz-divergent-02-positive-40',\n '--kd-color-data-viz-divergent-02-positive-50',\n '--kd-color-data-viz-divergent-02-positive-60',\n '--kd-color-data-viz-divergent-02-positive-70',\n '--kd-color-data-viz-divergent-02-positive-80',\n '--kd-color-data-viz-divergent-02-positive-90',\n '--kd-color-data-viz-divergent-02-positive-100',\n ],\n\n statusLight: [\n '--kd-color-data-viz-rag-8-success-light',\n '--kd-color-data-viz-rag-8-warning-light',\n '--kd-color-data-viz-rag-8-error-light',\n '--kd-color-status-error-critical-light',\n ],\n\n statusDark: [\n '--kd-color-data-viz-rag-8-success',\n '--kd-color-data-viz-rag-8-warning',\n '--kd-color-data-viz-rag-8-error',\n '--kd-color-status-error-critical-dark',\n ],\n\n rag03: [\n '--kd-color-data-viz-rag-3-success',\n '--kd-color-data-viz-rag-3-warning',\n '--kd-color-data-viz-rag-3-error',\n ],\n\n rag08: [\n '--kd-color-data-viz-rag-8-success',\n '--kd-color-data-viz-rag-8-success-light',\n '--kd-color-data-viz-rag-8-warning',\n '--kd-color-data-viz-rag-8-warning-light',\n '--kd-color-data-viz-rag-8-error',\n '--kd-color-data-viz-rag-8-error-light',\n '--kd-color-data-viz-rag-8-informational',\n '--kd-color-data-viz-rag-8-informational-light',\n ],\n};\n"],"names":["getColorPalette","key","palette","palettes","Array","isArray","slice","getComputedColorPalette","map","color","startsWith","getTokenThemeVal","categorical","sequential01","sequential02","sequential03","sequential04","sequential05","divergent01","divergent02","statusLight","statusDark","rag03","rag08"],"mappings":"kGAEY,MAACA,EAAmBC,IAC9B,MAAMC,EAAUC,EAASF,GACzB,OAAOG,MAAMC,QAAQH,GAAWA,EAAQI,QAAU,EAAE,EAGzCC,EAA2BN,GACtBD,EAAgBC,GACjBO,KAAKC,GACXA,EAAMC,WAAW,MAAQC,EAAiBF,GAASA,IAIxDN,EAAW,CACfS,YAAa,CACX,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,yCAGFC,aAAc,CACZ,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,yCAGFC,aAAc,CACZ,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,yCAGFC,aAAc,CACZ,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,yCAGFC,aAAc,CACZ,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,yCAGFC,aAAc,CACZ,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,yCAGFC,YAAa,CACX,gDACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,2CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,iDAGFC,YAAa,CACX,gDACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,2CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,iDAGFC,YAAa,CACX,0CACA,0CACA,wCACA,0CAGFC,WAAY,CACV,oCACA,oCACA,kCACA,yCAGFC,MAAO,CACL,oCACA,oCACA,mCAGFC,MAAO,CACL,oCACA,0CACA,oCACA,0CACA,kCACA,wCACA,0CACA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare
|
|
1
|
+
export declare function debounce<Fn extends (...args: unknown[]) => void>(fn: Fn, ms?: number): (this: ThisParameterType<Fn>, ...args: Parameters<Fn>) => void;
|
|
2
|
+
export declare function stringToReactHtml(value: string): {
|
|
3
3
|
__html: string;
|
|
4
4
|
};
|
|
5
5
|
/**
|
|
@@ -8,8 +8,39 @@ export declare const stringToReactHtml: (string: string) => {
|
|
|
8
8
|
* @param {*} options
|
|
9
9
|
* imported enums object
|
|
10
10
|
*/
|
|
11
|
-
export declare function createOptionsArray(options?:
|
|
12
|
-
|
|
11
|
+
export declare function createOptionsArray<T>(options?: Record<string, T>): T[];
|
|
12
|
+
type SankeyHeaders = {
|
|
13
|
+
source: string;
|
|
14
|
+
target: string;
|
|
15
|
+
value: string;
|
|
16
|
+
};
|
|
17
|
+
type SankeyLinkKey = string | number;
|
|
18
|
+
interface SankeyLink {
|
|
19
|
+
from?: SankeyLinkKey;
|
|
20
|
+
to?: SankeyLinkKey;
|
|
21
|
+
source?: SankeyLinkKey;
|
|
22
|
+
target?: SankeyLinkKey;
|
|
23
|
+
flow?: string | number;
|
|
24
|
+
value?: string | number;
|
|
25
|
+
}
|
|
26
|
+
interface SankeyOptions {
|
|
27
|
+
sankey?: {
|
|
28
|
+
dataTableHeaderLabels?: Partial<SankeyHeaders>;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
interface ChartData {
|
|
32
|
+
data?: (SankeyLink | number | string)[];
|
|
33
|
+
label?: string | number;
|
|
34
|
+
labels?: Record<SankeyLinkKey, string>;
|
|
35
|
+
}
|
|
36
|
+
interface CsvArgs {
|
|
37
|
+
data?: ChartData;
|
|
38
|
+
labels?: (string | number)[];
|
|
39
|
+
options?: SankeyOptions;
|
|
40
|
+
columnDelimiter?: string;
|
|
41
|
+
lineDelimiter?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function convertChartDataToCSV(args: CsvArgs): string | null;
|
|
13
44
|
export declare function getRandomData(arrayLength?: number, min?: number, max?: number): number[];
|
|
14
45
|
/**
|
|
15
46
|
* Takes a background hex color as input and returns the appropriate text
|
|
@@ -20,6 +51,7 @@ export declare function getRandomData(arrayLength?: number, min?: number, max?:
|
|
|
20
51
|
* value is greater than or equal to 128, it returns the primary text color (TextColor), otherwise it
|
|
21
52
|
* returns the inversed text color (InverseTextColor).
|
|
22
53
|
*/
|
|
23
|
-
export declare function getTextColor(bgHexColor: string):
|
|
54
|
+
export declare function getTextColor(bgHexColor: string): string;
|
|
24
55
|
export declare function convertTreeDataToCSV(datasets: any[]): string;
|
|
56
|
+
export {};
|
|
25
57
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/helpers.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAC9D,EAAE,EAAE,EAAE,EACN,EAAE,SAAM,IAIS,MAAM,iBAAiB,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,UAItE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAM,GAAG,CAAC,EAAE,CAE1E;AAED,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE;QACP,qBAAqB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAChD,CAAC;CACH;AAED,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAYD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA4ElE;AAED,wBAAgB,aAAa,CAC3B,WAAW,SAAI,EACf,GAAG,SAAO,EACV,GAAG,SAAM,GACR,MAAM,EAAE,CAQV;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,UAsBnD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
function n(n,l=100){let t;return function(...e){t&&clearTimeout(t),t=setTimeout((()=>n.apply(this,e)),l)}}function l(n,l){if(null==n)return"";let t=String(n);return t.includes('"')&&(t=t.replace(/"/g,'""')),t.includes(l)||t.includes('"')||t.includes("\n")?`"${t}"`:t}function t(n){var t,e,r,i,u,o,a,s,d,f,v;const c=(null===(t=n.data)||void 0===t?void 0:t.data)||null;if(!c||!c.length)return null;const p=null!==(e=n.columnDelimiter)&&void 0!==e?e:",",g=null!==(r=n.lineDelimiter)&&void 0!==r?r:"\n",b=c[0];if("object"==typeof b&&null!==b&&!Array.isArray(b)&&("from"in b||"source"in b)){const t={source:"Source",target:"Target",value:"Value",...null!==(o=null===(u=(null!==(i=n.options)&&void 0!==i?i:{}).sankey)||void 0===u?void 0:u.dataTableHeaderLabels)&&void 0!==o?o:{}},e=null!==(s=null===(a=n.data)||void 0===a?void 0:a.labels)&&void 0!==s?s:{},r=null!==(d=n.labels)&&void 0!==d?d:[];let f="";return f+=[l(t.source,p),l(t.target,p),l(t.value,p)].join(p),f+=g,c.forEach((n=>{var t,i,u,o,a,s,d,v;const c=null!==(t=n.from)&&void 0!==t?t:n.source,b=null!==(i=n.to)&&void 0!==i?i:n.target,m=null!==(o=null!==(u=n.flow)&&void 0!==u?u:n.value)&&void 0!==o?o:"",h=null!==(s=null!==(a=e&&e[c])&&void 0!==a?a:"number"==typeof c&&r[c])&&void 0!==s?s:String(null!=c?c:""),$=null!==(v=null!==(d=e&&e[b])&&void 0!==d?d:"number"==typeof b&&r[b])&&void 0!==v?v:String(null!=b?b:"");f+=[l(h,p),l($,p),l(m,p)].join(p),f+=g})),f}const m=n.labels;if(!m||!m.length)return null;let h=p+m.join(p)+g;null!=(null===(f=n.data)||void 0===f?void 0:f.label)&&(h+=String(n.data.label));for(let n=0;n<c.length;n+=1)h+=p,h+=String(null!==(v=c[n])&&void 0!==v?v:"");return h+=g,h}function e(n){var l;const t="#3d3c3c",e=null!==(l=function(n){if(!n)return null;let l=n.trim().toLowerCase();if(!l.startsWith("#")){if(!/^[0-9a-f]{3}$/.test(l)&&!/^[0-9a-f]{6}$/.test(l))return null;l=`#${l}`}if(l=l.slice(1),3===l.length&&/^[0-9a-f]{3}$/.test(l))l=l.split("").map((n=>n+n)).join("");else if(6!==l.length||!/^[0-9a-f]{6}$/.test(l))return null;return`#${l}`}(n))&&void 0!==l?l:"#ffffff",r=parseInt(e.substring(1,3),16),i=parseInt(e.substring(3,5),16),u=parseInt(e.substring(5,7),16);if(Number.isNaN(r)||Number.isNaN(i)||Number.isNaN(u))return t;return(299*r+587*i+114*u)/1e3>=128?t:"#f9f9f9"}function r(n){var l;if((null===(l=n[0])||void 0===l?void 0:l.data)&&Array.isArray(n[0].data)){const l=n[0].data;let t="Parent Name,Depth,Children Count\n";return l.forEach(((n,e)=>{var r;const u=i(e,l),o=null!==n.parent&&void 0!==n.parent?(null===(r=l[n.parent])||void 0===r?void 0:r.name)||`Index ${n.parent}`:"Root",a=l.filter((n=>n.parent===e)).length;t+=`"${o}",${u},${a}\n`})),t}return""}function i(n,l,t=new Set){if(t.has(n))return 0;t.add(n);const e=l[n];return e&&null!==e.parent&&void 0!==e.parent?1+i(e.parent,l,t):0}export{t as convertChartDataToCSV,r as convertTreeDataToCSV,n as debounce,e as getTextColor};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
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\nexport function convertTreeDataToCSV(datasets: any[]) {\n if (datasets[0]?.data && Array.isArray(datasets[0].data)) {\n const data = datasets[0].data;\n let csv = 'Parent Name,Depth,Children Count\\n';\n\n data.forEach((item: any, index: number) => {\n const depth = calculateDepth(index, data);\n const parentName =\n item.parent !== null && item.parent !== undefined\n ? data[item.parent]?.name || `Index ${item.parent}`\n : 'Root';\n const childrenCount = data.filter(\n (child: any) => child.parent === index\n ).length;\n\n csv += `\"${parentName}\",${depth},${childrenCount}\\n`;\n });\n\n return csv;\n }\n\n return '';\n}\n\n// Helper function to calculate depth\nfunction calculateDepth(\n index: number,\n data: any[],\n visited = new Set()\n): number {\n if (visited.has(index)) return 0; // Prevent circular references\n visited.add(index);\n\n const item = data[index];\n if (!item || item.parent === null || item.parent === undefined) {\n return 0;\n }\n return 1 + calculateDepth(item.parent, data, visited);\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","convertTreeDataToCSV","datasets","_a","Array","isArray","csv","forEach","item","index","depth","calculateDepth","parentName","parent","undefined","name","childrenCount","filter","child","visited","Set","has","add"],"mappings":"AAAO,MAAMA,EAAgB,CAACC,EAASC,EAAK,OAC1C,IAAIC,EACJ,OAAO,SAAUC,GACfC,aAAaF,GACbA,EAAQG,YAAW,IAAML,EAAGM,MAAMH,IAAIF,EACxC,CAAC,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,CAEM,SAAUC,EAAqBC,SACnC,IAAe,UAAXA,EAAS,UAAE,IAAAC,OAAA,EAAAA,EAAEhB,OAAQiB,MAAMC,QAAQH,EAAS,GAAGf,MAAO,CACxD,MAAMA,EAAOe,EAAS,GAAGf,KACzB,IAAImB,EAAM,qCAeV,OAbAnB,EAAKoB,SAAQ,CAACC,EAAWC,WACvB,MAAMC,EAAQC,EAAeF,EAAOtB,GAC9ByB,EACY,OAAhBJ,EAAKK,aAAmCC,IAAhBN,EAAKK,QACR,QAAjBV,EAAAhB,EAAKqB,EAAKK,eAAO,IAAAV,OAAA,EAAAA,EAAEY,OAAQ,SAASP,EAAKK,SACzC,OACAG,EAAgB7B,EAAK8B,QACxBC,GAAeA,EAAML,SAAWJ,IACjCrB,OAEFkB,GAAO,IAAIM,MAAeF,KAASM,KAAiB,IAG/CV,CACT,CAEA,MAAO,EACT,CAGA,SAASK,EACPF,EACAtB,EACAgC,EAAU,IAAIC,KAEd,GAAID,EAAQE,IAAIZ,GAAQ,OAAO,EAC/BU,EAAQG,IAAIb,GAEZ,MAAMD,EAAOrB,EAAKsB,GAClB,OAAKD,GAAwB,OAAhBA,EAAKK,aAAmCC,IAAhBN,EAAKK,OAGnC,EAAIF,EAAeH,EAAKK,OAAQ1B,EAAMgC,GAFpC,CAGX"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/common/helpers/helpers.ts"],"sourcesContent":["export function debounce<Fn extends (...args: unknown[]) => void>(\n fn: Fn,\n ms = 100\n) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n return function (this: ThisParameterType<Fn>, ...args: Parameters<Fn>) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => fn.apply(this, args), ms);\n };\n}\n\nexport function stringToReactHtml(value: string): { __html: string } {\n return { __html: value };\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<T>(options: Record<string, T> = {}): T[] {\n return Object.values(options);\n}\n\ntype SankeyHeaders = {\n source: string;\n target: string;\n value: string;\n};\n\ntype SankeyLinkKey = string | number;\n\ninterface SankeyLink {\n from?: SankeyLinkKey;\n to?: SankeyLinkKey;\n source?: SankeyLinkKey;\n target?: SankeyLinkKey;\n flow?: string | number;\n value?: string | number;\n}\n\ninterface SankeyOptions {\n sankey?: {\n dataTableHeaderLabels?: Partial<SankeyHeaders>;\n };\n}\n\ninterface ChartData {\n data?: (SankeyLink | number | string)[];\n label?: string | number;\n labels?: Record<SankeyLinkKey, string>;\n}\n\ninterface CsvArgs {\n data?: ChartData;\n labels?: (string | number)[];\n options?: SankeyOptions;\n columnDelimiter?: string;\n lineDelimiter?: string;\n}\n\nfunction csvEscape(value: unknown, columnDelimiter: string): string {\n if (value === null || value === undefined) return '';\n let s = String(value);\n if (s.includes('\"')) s = s.replace(/\"/g, '\"\"');\n if (s.includes(columnDelimiter) || s.includes('\"') || s.includes('\\n')) {\n return `\"${s}\"`;\n }\n return s;\n}\n\nexport function convertChartDataToCSV(args: CsvArgs): string | null {\n const data = args.data?.data || null;\n if (!data || !data.length) return null;\n\n const columnDelimiter = args.columnDelimiter ?? ',';\n const lineDelimiter = args.lineDelimiter ?? '\\n';\n\n const first = data[0];\n\n if (\n typeof first === 'object' &&\n first !== null &&\n !Array.isArray(first) &&\n ('from' in first || 'source' in first)\n ) {\n const options = args.options ?? {};\n const sankeyHeaders: SankeyHeaders = {\n source: 'Source',\n target: 'Target',\n value: 'Value',\n ...(options.sankey?.dataTableHeaderLabels ?? {}),\n };\n\n const datasetLabels = args.data?.labels ?? {};\n const nodeLabelsArray = args.labels ?? [];\n\n let result = '';\n result += [\n csvEscape(sankeyHeaders.source, columnDelimiter),\n csvEscape(sankeyHeaders.target, columnDelimiter),\n csvEscape(sankeyHeaders.value, columnDelimiter),\n ].join(columnDelimiter);\n result += lineDelimiter;\n\n (data as SankeyLink[]).forEach((link) => {\n const fromKey = link.from ?? link.source;\n const toKey = link.to ?? link.target;\n const val = link.flow ?? link.value ?? '';\n\n const fromDisplay =\n (datasetLabels && datasetLabels[fromKey as SankeyLinkKey]) ??\n (typeof fromKey === 'number' && nodeLabelsArray[fromKey]) ??\n String(fromKey ?? '');\n\n const toDisplay =\n (datasetLabels && datasetLabels[toKey as SankeyLinkKey]) ??\n (typeof toKey === 'number' && nodeLabelsArray[toKey]) ??\n String(toKey ?? '');\n\n result += [\n csvEscape(fromDisplay, columnDelimiter),\n csvEscape(toDisplay, columnDelimiter),\n csvEscape(val, columnDelimiter),\n ].join(columnDelimiter);\n result += lineDelimiter;\n });\n\n return result;\n }\n\n const labels = args.labels;\n if (!labels || !labels.length) return null;\n\n let result = columnDelimiter + labels.join(columnDelimiter) + lineDelimiter;\n\n if (args.data?.label != null) {\n result += String(args.data.label);\n }\n\n for (let i = 0; i < data.length; i += 1) {\n result += columnDelimiter;\n result += String(data[i] ?? '');\n }\n result += lineDelimiter;\n\n return result;\n}\n\nexport function getRandomData(\n arrayLength = 6,\n min = -100,\n max = 100\n): number[] {\n const minCeil = Math.ceil(min);\n const maxFloor = Math.floor(max);\n const range = maxFloor - minCeil + 1;\n\n return Array.from({ length: arrayLength }, () => {\n return Math.floor(Math.random() * range) + minCeil;\n });\n}\n\nfunction normalizeHexColor(input: string): string | null {\n if (!input) return null;\n\n let hex = input.trim().toLowerCase();\n\n if (!hex.startsWith('#')) {\n if (/^[0-9a-f]{3}$/.test(hex) || /^[0-9a-f]{6}$/.test(hex)) {\n hex = `#${hex}`;\n } else {\n return null;\n }\n }\n\n hex = hex.slice(1);\n\n if (hex.length === 3 && /^[0-9a-f]{3}$/.test(hex)) {\n hex = hex\n .split('')\n .map((ch) => ch + ch)\n .join('');\n } else if (hex.length !== 6 || !/^[0-9a-f]{6}$/.test(hex)) {\n return null;\n }\n\n return `#${hex}`;\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): string {\n const TextColor = '#3d3c3c';\n const InverseTextColor = '#f9f9f9';\n\n const normalized = normalizeHexColor(bgHexColor) ?? '#ffffff';\n\n const r = parseInt(normalized.substring(1, 3), 16);\n const g = parseInt(normalized.substring(3, 5), 16);\n const b = parseInt(normalized.substring(5, 7), 16);\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) {\n return TextColor;\n }\n\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n return yiq >= 128 ? TextColor : InverseTextColor;\n}\n\nexport function convertTreeDataToCSV(datasets: any[]) {\n if (datasets[0]?.data && Array.isArray(datasets[0].data)) {\n const data = datasets[0].data;\n let csv = 'Parent Name,Depth,Children Count\\n';\n\n data.forEach((item: any, index: number) => {\n const depth = calculateDepth(index, data);\n const parentName =\n item.parent !== null && item.parent !== undefined\n ? data[item.parent]?.name || `Index ${item.parent}`\n : 'Root';\n const childrenCount = data.filter(\n (child: any) => child.parent === index\n ).length;\n\n csv += `\"${parentName}\",${depth},${childrenCount}\\n`;\n });\n\n return csv;\n }\n\n return '';\n}\n\n// Helper function to calculate depth\nfunction calculateDepth(\n index: number,\n data: any[],\n visited = new Set()\n): number {\n if (visited.has(index)) return 0; // Prevent circular references\n visited.add(index);\n\n const item = data[index];\n if (!item || item.parent === null || item.parent === undefined) {\n return 0;\n }\n return 1 + calculateDepth(item.parent, data, visited);\n}\n"],"names":["debounce","fn","ms","timer","args","clearTimeout","setTimeout","apply","this","csvEscape","value","columnDelimiter","s","String","includes","replace","convertChartDataToCSV","data","_a","length","_b","lineDelimiter","_c","first","Array","isArray","sankeyHeaders","source","target","_f","_e","_d","options","sankey","dataTableHeaderLabels","datasetLabels","_h","_g","labels","nodeLabelsArray","_j","result","join","forEach","link","fromKey","from","toKey","to","val","flow","fromDisplay","toDisplay","_k","label","i","_l","getTextColor","bgHexColor","TextColor","normalized","input","hex","trim","toLowerCase","startsWith","test","slice","split","map","ch","normalizeHexColor","r","parseInt","substring","g","b","Number","isNaN","convertTreeDataToCSV","datasets","csv","item","index","depth","calculateDepth","parentName","parent","undefined","name","childrenCount","filter","child","visited","Set","has","add"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Chart, TooltipModel } from 'chart.js';
|
|
2
|
+
interface SankeyTooltipContext {
|
|
3
|
+
chart: Chart<'sankey'>;
|
|
4
|
+
tooltip: TooltipModel<'sankey'>;
|
|
5
|
+
}
|
|
6
|
+
export declare const createSankeyTooltipHandler: () => (context: SankeyTooltipContext) => void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=sankeyTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sankeyTooltip.d.ts","sourceRoot":"","sources":["../../../src/common/plugins/sankeyTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA6BpD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,0BAA0B,SAC9B,SAAS,oBAAoB,SAsJnC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getTokenThemeVal as e}from"@kyndryl-design-system/shidoka-foundation/common/helpers/color";const t=()=>t=>{var l,n,s,o,a,i,d,p;const{chart:r,tooltip:c}=t,y=e("--kd-color-background-ui-default-dark"),m=e("--kd-color-text-variant-inversed");let u=null===(l=r.canvas.parentNode)||void 0===l?void 0:l.querySelector(".sankey-tooltip");if(u||(u=document.createElement("div"),u.className="sankey-tooltip",u.style.position="absolute",u.style.pointerEvents="none",u.style.zIndex="50",u.style.opacity="0",null===(n=r.canvas.parentNode)||void 0===n||n.appendChild(u)),u.style.background="transparent",u.style.padding="0",u.style.borderRadius="0",u.style.boxShadow="none",u.style.color=m,u.style.font='12px/1.4 system-ui, -apple-system, BlinkMacSystemFont,"Segoe UI",sans-serif',!c||0===c.opacity)return void(u.style.opacity="0");const x=c.dataPoints[0],g=x.dataset,h=x.dataIndex,b=g.data[h],f=null!==(s=b.from)&&void 0!==s?s:b.source,v=null!==(o=b.to)&&void 0!==o?o:b.target,C=null!==(i=null!==(a=b.flow)&&void 0!==a?a:b.value)&&void 0!==i?i:"",k=null!==(d=g.labels&&g.labels[f])&&void 0!==d?d:String(f),w=null!==(p=g.labels&&g.labels[v])&&void 0!==p?p:String(v),E="function"==typeof g.colorFrom?g.colorFrom({chart:r,dataset:g,dataIndex:h}):"#888",I="function"==typeof g.colorTo?g.colorTo({chart:r,dataset:g,dataIndex:h}):"#888";u.innerHTML="";const S=document.createElement("div");S.style.position="relative",S.style.display="inline-flex",S.style.alignItems="center",S.style.gap="6px",S.style.lineHeight="1",S.style.background=y,S.style.color=m,S.style.borderRadius="4px",S.style.padding="6px 10px",S.style.boxShadow="0 2px 6px rgba(0,0,0,0.25)",S.style.whiteSpace="nowrap";const R=document.createElement("span");R.style.display="inline-flex",R.style.alignItems="center",R.style.gap="4px";const H=document.createElement("span");H.style.width="14px",H.style.height="14px",H.style.marginRight="2px",H.style.borderRadius="2px",H.style.display="inline-block",H.style.background=E;const T=document.createElement("span");T.textContent=k,R.appendChild(H),R.appendChild(T);const $=document.createElement("span");$.style.display="inline-flex",$.style.alignItems="center",$.style.lineHeight="1",$.textContent="→";const F=document.createElement("span");F.style.display="inline-flex",F.style.alignItems="center",F.style.gap="4px";const N=document.createElement("span");N.style.width="14px",N.style.height="14px",N.style.marginRight="2px",N.style.borderRadius="2px",N.style.display="inline-block",N.style.background=I;const X=document.createElement("span");X.textContent=w,F.appendChild(N),F.appendChild(X);const B=document.createElement("span");B.style.display="inline-flex",B.style.alignItems="center",B.style.lineHeight="1",B.textContent=`: ${String(C)}`,S.appendChild(R),S.appendChild($),S.appendChild(F),S.appendChild(B);const L=document.createElement("div");L.style.position="absolute",L.style.left="50%",L.style.bottom="-6px",L.style.transform="translateX(-50%)",L.style.width="0",L.style.height="0",L.style.borderLeft="6px solid transparent",L.style.borderRight="6px solid transparent",L.style.borderTop=`6px solid ${y}`,S.appendChild(L),u.appendChild(S);const M=r.canvas.getBoundingClientRect();u.style.opacity="1",u.style.left=`${M.left+window.scrollX+c.caretX}px`,u.style.top=`${M.top+window.scrollY+c.caretY}px`,u.style.transform="translate(-50%, calc(-100% - 10px))"};export{t as createSankeyTooltipHandler};
|
|
2
|
+
//# sourceMappingURL=sankeyTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sankeyTooltip.js","sources":["../../../src/common/plugins/sankeyTooltip.ts"],"sourcesContent":["import type { Chart, TooltipModel } from 'chart.js';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\ntype SankeyLink = {\n from?: string | number;\n to?: string | number;\n source?: string | number;\n target?: string | number;\n flow?: number | string;\n value?: number | string;\n};\n\ntype SankeyDataset = {\n data: SankeyLink[];\n labels?: Record<string | number, string>;\n\n colorFrom?: (args: {\n chart: Chart<'sankey'>;\n dataset: SankeyDataset;\n dataIndex: number;\n }) => string;\n\n colorTo?: (args: {\n chart: Chart<'sankey'>;\n dataset: SankeyDataset;\n dataIndex: number;\n }) => string;\n};\n\ninterface SankeyTooltipContext {\n chart: Chart<'sankey'>;\n tooltip: TooltipModel<'sankey'>;\n}\n\nexport const createSankeyTooltipHandler =\n () => (context: SankeyTooltipContext) => {\n const { chart, tooltip } = context;\n\n const TooltipBackground = getTokenThemeVal(\n '--kd-color-background-ui-default-dark'\n );\n const TooltipFontColor = getTokenThemeVal(\n '--kd-color-text-variant-inversed'\n );\n\n let tooltipEl =\n chart.canvas.parentNode?.querySelector<HTMLDivElement>('.sankey-tooltip');\n\n if (!tooltipEl) {\n tooltipEl = document.createElement('div');\n tooltipEl.className = 'sankey-tooltip';\n tooltipEl.style.position = 'absolute';\n tooltipEl.style.pointerEvents = 'none';\n tooltipEl.style.zIndex = '50';\n tooltipEl.style.opacity = '0';\n chart.canvas.parentNode?.appendChild(tooltipEl);\n }\n\n tooltipEl.style.background = 'transparent';\n tooltipEl.style.padding = '0';\n tooltipEl.style.borderRadius = '0';\n tooltipEl.style.boxShadow = 'none';\n tooltipEl.style.color = TooltipFontColor;\n tooltipEl.style.font =\n '12px/1.4 system-ui, -apple-system, BlinkMacSystemFont,\"Segoe UI\",sans-serif';\n\n if (!tooltip || tooltip.opacity === 0) {\n tooltipEl.style.opacity = '0';\n return;\n }\n\n const item = tooltip.dataPoints[0];\n const dataset = item.dataset as SankeyDataset;\n const dataIndex = item.dataIndex;\n const link = dataset.data[dataIndex];\n\n const fromKey = link.from ?? link.source;\n const toKey = link.to ?? link.target;\n const value = link.flow ?? link.value ?? '';\n\n const fromLabel =\n (dataset.labels && dataset.labels[fromKey as number]) ?? String(fromKey);\n const toLabel =\n (dataset.labels && dataset.labels[toKey as number]) ?? String(toKey);\n\n const fromColor =\n typeof dataset.colorFrom === 'function'\n ? dataset.colorFrom({ chart, dataset, dataIndex })\n : '#888';\n\n const toColor =\n typeof dataset.colorTo === 'function'\n ? dataset.colorTo({ chart, dataset, dataIndex })\n : '#888';\n\n tooltipEl.innerHTML = '';\n\n const inner = document.createElement('div');\n inner.style.position = 'relative';\n inner.style.display = 'inline-flex';\n inner.style.alignItems = 'center';\n inner.style.gap = '6px';\n inner.style.lineHeight = '1';\n inner.style.background = TooltipBackground;\n inner.style.color = TooltipFontColor;\n inner.style.borderRadius = '4px';\n inner.style.padding = '6px 10px';\n inner.style.boxShadow = '0 2px 6px rgba(0,0,0,0.25)';\n inner.style.whiteSpace = 'nowrap';\n\n const fromWrapper = document.createElement('span');\n fromWrapper.style.display = 'inline-flex';\n fromWrapper.style.alignItems = 'center';\n fromWrapper.style.gap = '4px';\n\n const fromSwatch = document.createElement('span');\n fromSwatch.style.width = '14px';\n fromSwatch.style.height = '14px';\n fromSwatch.style.marginRight = '2px';\n fromSwatch.style.borderRadius = '2px';\n fromSwatch.style.display = 'inline-block';\n fromSwatch.style.background = fromColor;\n\n const fromText = document.createElement('span');\n fromText.textContent = fromLabel;\n\n fromWrapper.appendChild(fromSwatch);\n fromWrapper.appendChild(fromText);\n\n const arrowSpan = document.createElement('span');\n arrowSpan.style.display = 'inline-flex';\n arrowSpan.style.alignItems = 'center';\n arrowSpan.style.lineHeight = '1';\n arrowSpan.textContent = '→';\n\n const toWrapper = document.createElement('span');\n toWrapper.style.display = 'inline-flex';\n toWrapper.style.alignItems = 'center';\n toWrapper.style.gap = '4px';\n\n const toSwatch = document.createElement('span');\n toSwatch.style.width = '14px';\n toSwatch.style.height = '14px';\n toSwatch.style.marginRight = '2px';\n toSwatch.style.borderRadius = '2px';\n toSwatch.style.display = 'inline-block';\n toSwatch.style.background = toColor;\n\n const toText = document.createElement('span');\n toText.textContent = toLabel;\n\n toWrapper.appendChild(toSwatch);\n toWrapper.appendChild(toText);\n\n const valueSpan = document.createElement('span');\n valueSpan.style.display = 'inline-flex';\n valueSpan.style.alignItems = 'center';\n valueSpan.style.lineHeight = '1';\n valueSpan.textContent = `: ${String(value)}`;\n\n inner.appendChild(fromWrapper);\n inner.appendChild(arrowSpan);\n inner.appendChild(toWrapper);\n inner.appendChild(valueSpan);\n\n const caret = document.createElement('div');\n caret.style.position = 'absolute';\n caret.style.left = '50%';\n caret.style.bottom = '-6px';\n caret.style.transform = 'translateX(-50%)';\n caret.style.width = '0';\n caret.style.height = '0';\n caret.style.borderLeft = '6px solid transparent';\n caret.style.borderRight = '6px solid transparent';\n caret.style.borderTop = `6px solid ${TooltipBackground}`;\n\n inner.appendChild(caret);\n tooltipEl.appendChild(inner);\n\n const rect = chart.canvas.getBoundingClientRect();\n\n tooltipEl.style.opacity = '1';\n tooltipEl.style.left = `${rect.left + window.scrollX + tooltip.caretX}px`;\n tooltipEl.style.top = `${rect.top + window.scrollY + tooltip.caretY}px`;\n tooltipEl.style.transform = 'translate(-50%, calc(-100% - 10px))';\n };\n"],"names":["createSankeyTooltipHandler","context","chart","tooltip","TooltipBackground","getTokenThemeVal","TooltipFontColor","tooltipEl","_a","canvas","parentNode","querySelector","document","createElement","className","style","position","pointerEvents","zIndex","opacity","_b","appendChild","background","padding","borderRadius","boxShadow","color","font","item","dataPoints","dataset","dataIndex","link","data","fromKey","_c","from","source","toKey","_d","to","target","value","_f","_e","flow","fromLabel","_g","labels","String","toLabel","_h","fromColor","colorFrom","toColor","colorTo","innerHTML","inner","display","alignItems","gap","lineHeight","whiteSpace","fromWrapper","fromSwatch","width","height","marginRight","fromText","textContent","arrowSpan","toWrapper","toSwatch","toText","valueSpan","caret","left","bottom","transform","borderLeft","borderRight","borderTop","rect","getBoundingClientRect","window","scrollX","caretX","top","scrollY","caretY"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAIlD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAIlD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,0BAA0B,CAAC;AA+ElC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;IACtD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD;AAED;;;;;;GAMG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,0BAAwB;IAE9C,mBAAmB;IAEnB,QAAQ,CAAC,UAAU,SAAM;IAEzB,yBAAyB;IAEzB,QAAQ,CAAC,WAAW,SAAM;IAE1B,2BAA2B;IAE3B,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAM;IAExB,4BAA4B;IAE5B,QAAQ,CAAC,MAAM,EAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEhC,8BAA8B;IAE9B,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,uDAAuD;IAEvD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAM;IAE3B,yHAAyH;IAEzH,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAM;IAE3B,wEAAwE;IAExE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAQ;IAE5B,uEAAuE;IAEvE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAQ;IAE3B,sCAAsC;IAEtC,QAAQ,CAAC,eAAe,UAAS;IAEjC,0CAA0C;IAE1C,QAAQ,CAAC,YAAY,UAAS;IAE9B,qCAAqC;IAErC,QAAQ,CAAC,UAAU,UAAS;IAE5B,8BAA8B;IAE9B,QAAQ,CAAC,YAAY,UAAS;IAE9B,oCAAoC;IAEpC,QAAQ,CAAC,gBAAgB,UAAS;IAElC,oCAAoC;IAEpC,QAAQ,CAAC,qBAAqB,UAAS;IAEvC,kCAAkC;IAElC,QAAQ,CAAC,mBAAmB,UAAS;IAErC,4CAA4C;IAE5C,QAAQ,CAAC,QAAQ,UAAS;IAE1B,gCAAgC;IAEhC,QAAQ,CAAC,YAAY;;;;;;;MAOnB;IAEF;;OAEG;IAEH,QAAQ,CAAC,UAAU,UAAS;IAE5B;;OAEG;IAEH,QAAQ,CAAC,aAAa,UAAS;IAE/B,wDAAwD;IAExD,QAAQ,CAAC,mBAAmB,SAAO;IAEnC,+CAA+C;IAE/C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAM;IAEnD;;;OAGG;IAEH,QAAQ,CAAC,SAAS,EAAG,iBAAiB,CAAC;IAEvC;;;OAGG;IAEH,QAAQ,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAEpC;;;OAGG;IAEH,QAAQ,CAAC,KAAK,EAAG,cAAc,CAAC;IAEhC;;OAEG;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAQ;IAE3B;;OAEG;IAEH,QAAQ,CAAC,SAAS,UAAS;IAE3B;;OAEG;IAEH,QAAQ,CAAC,aAAa,UAAS;IAE/B;;OAEG;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAM;IAEjC;;OAEG;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAM;IAElC;;OAEG;IAEH,QAAQ,CAAC,OAAO,UAAS;IAEzB;;OAEG;IACH,eAAe,EAAE,GAAG,CAIlB;IAEF;;OAEG;IACH,cAAc,EAAE,GAAG,CAMhB;IAEM,MAAM;IA0Yf,OAAO,CAAC,YAAY;IAMX,iBAAiB;IAYjB,oBAAoB;IAOpB,YAAY;IAKrB,OAAO,CAAC,wBAAwB;IA6BvB,OAAO,CAAC,YAAY,EAAE,GAAG;IAuFlC;;;OAGG;IACH,OAAO,CAAC,SAAS;IA4BjB;;;OAGG;YACW,YAAY;IAiE1B,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,mBAAmB;IA+F3B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,sBAAsB;IAuD9B,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,sBAAsB;CAG/B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPrivateFieldGet as i,__classPrivateFieldSet as a}from"tslib";import{LitElement as o,unsafeCSS as n,html as r}from"lit";import{customElement as c,property as h,state as l,query as d}from"lit/decorators.js";import{classMap as m}from"lit/directives/class-map.js";import{deepmerge as p,deepmergeCustom as g}from"deepmerge-ts";import u from"chart.js/auto";import"chartjs-adapter-date-fns";import{ChoroplethController as f,BubbleMapController as y,GeoFeature as b,ColorScale as v,SizeScale as
|
|
1
|
+
import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPrivateFieldGet as i,__classPrivateFieldSet as a}from"tslib";import{LitElement as o,unsafeCSS as n,html as r}from"lit";import{customElement as c,property as h,state as l,query as d}from"lit/decorators.js";import{classMap as m}from"lit/directives/class-map.js";import{deepmerge as p,deepmergeCustom as g}from"deepmerge-ts";import u from"chart.js/auto";import"chartjs-adapter-date-fns";import{ChoroplethController as f,BubbleMapController as y,GeoFeature as b,ColorScale as v,SizeScale as j,ProjectionScale as w}from"chartjs-chart-geo";import{TreemapController as k,TreemapElement as T}from"chartjs-chart-treemap";import{MatrixController as C,MatrixElement as $}from"chartjs-chart-matrix";import{BoxPlotController as x,BoxAndWiskers as D,ViolinController as O,Violin as L}from"@sgratzl/chartjs-chart-boxplot";import{DendrogramController as M,TreeController as W,GraphController as A,ForceDirectedGraphController as H,EdgeLine as S}from"chartjs-chart-graph";import{SankeyController as B,Flow as E}from"chartjs-chart-sankey";import _ from"../../common/plugins/canvasBackground.js";import V from"../../common/plugins/doughnutLabel.js";import F from"../../common/plugins/meterGaugeNeedle.js";import N from"../../common/plugins/gradientLegend.js";import{renderHTMLLegend as R}from"../../common/legend/htmlRenderer.js";import{htmlLegendPlugin as z}from"../../common/plugins/htmlLegendPlugin.js";import J from"chartjs-plugin-a11y-legend";import I from"chartjs-plugin-datalabels";import P from"chartjs-plugin-annotation";import{debounce as q,convertTreeDataToCSV as G,convertChartDataToCSV as U}from"../../common/helpers/helpers.js";import{renderBoxplotViolinTable as K}from"../../common/helpers/boxplotViolinTableRenderer.js";import X from"./chart.scss.js";import Y from"../../common/config/globalOptions.js";import Q from"../../common/config/globalOptionsNonRadial.js";import Z from"../../common/config/globalOptionsRadial.js";import tt from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg.js';import et from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg.js';import st from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg.js';import it from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg.js';import at from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg.js';import{unsafeSVG as ot}from"lit/directives/unsafe-svg.js";import{getTokenThemeVal as nt}from"@kyndryl-design-system/shidoka-foundation/common/helpers/color";import{renderGraphTreeTable as rt}from"../../common/helpers/graphTreeTableRenderer.js";function ct(t){switch(t){case"../../common/config/chartTypes/bar.js":return import("../../common/config/chartTypes/bar.js");case"../../common/config/chartTypes/boxplot.js":return import("../../common/config/chartTypes/boxplot.js");case"../../common/config/chartTypes/bubble.js":return import("../../common/config/chartTypes/bubble.js");case"../../common/config/chartTypes/bubbleMap.js":return import("../../common/config/chartTypes/bubbleMap.js");case"../../common/config/chartTypes/choropleth.js":return import("../../common/config/chartTypes/choropleth.js");case"../../common/config/chartTypes/dendrogram.js":return import("../../common/config/chartTypes/dendrogram.js");case"../../common/config/chartTypes/doughnut.js":return import("../../common/config/chartTypes/doughnut.js");case"../../common/config/chartTypes/forceDirectedGraph.js":return import("../../common/config/chartTypes/forceDirectedGraph.js");case"../../common/config/chartTypes/graph.js":return import("../../common/config/chartTypes/graph.js");case"../../common/config/chartTypes/graphCommon.js":return import("../../common/config/chartTypes/graphCommon.js");case"../../common/config/chartTypes/line.js":return import("../../common/config/chartTypes/line.js");case"../../common/config/chartTypes/matrix.js":return import("../../common/config/chartTypes/matrix.js");case"../../common/config/chartTypes/meter.js":return import("../../common/config/chartTypes/meter.js");case"../../common/config/chartTypes/pie.js":return import("../../common/config/chartTypes/pie.js");case"../../common/config/chartTypes/polarArea.js":return import("../../common/config/chartTypes/polarArea.js");case"../../common/config/chartTypes/radar.js":return import("../../common/config/chartTypes/radar.js");case"../../common/config/chartTypes/sankey.js":return import("../../common/config/chartTypes/sankey.js");case"../../common/config/chartTypes/scatter.js":return import("../../common/config/chartTypes/scatter.js");case"../../common/config/chartTypes/tree.js":return import("../../common/config/chartTypes/tree.js");case"../../common/config/chartTypes/treemap.js":return import("../../common/config/chartTypes/treemap.js");case"../../common/config/chartTypes/violin.js":return import("../../common/config/chartTypes/violin.js");default:return new Promise((function(e,s){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}u.register(f,y,b,v,j,w,k,T,C,$,x,D,O,L,M,W,A,H,S,B,E,P,I);let ht=(()=>{var f,y,b,v,j,w,k,T,C,$,x,D,O,L,M,W,A,H,S,B,E,I,P,ht,lt,dt,mt,pt,gt,ut,ft;let yt,bt,vt,jt,wt,kt,Tt,Ct,$t,xt,Dt,Ot,Lt,Mt,Wt,At,Ht,St,Bt,Et,_t,Vt,Ft,Nt,Rt,zt,Jt,It,Pt,qt,Gt,Ut,Kt,Xt=[c("kd-chart")],Yt=[],Qt=o,Zt=[],te=[],ee=[],se=[],ie=[],ae=[],oe=[],ne=[],re=[],ce=[],he=[],le=[],de=[],me=[],pe=[],ge=[],ue=[],fe=[],ye=[],be=[],ve=[],je=[],we=[],ke=[],Te=[],Ce=[],$e=[],xe=[],De=[],Oe=[],Le=[],Me=[],We=[],Ae=[],He=[],Se=[],Be=[],Ee=[],_e=[],Ve=[],Fe=[],Ne=[],Re=[],ze=[],Je=[],Ie=[],Pe=[],qe=[],Ge=[],Ue=[],Ke=[],Xe=[],Ye=[],Qe=[],Ze=[],ts=[],es=[],ss=[],is=[],as=[],os=[],ns=[];return bt=class extends Qt{constructor(){super(...arguments),f.set(this,s(this,Zt,"")),y.set(this,(s(this,te),s(this,ee,""))),b.set(this,(s(this,se),s(this,ie,""))),v.set(this,(s(this,ae),s(this,oe,void 0))),j.set(this,(s(this,ne),s(this,re,void 0))),w.set(this,(s(this,ce),s(this,he,{}))),k.set(this,(s(this,le),s(this,de,[]))),T.set(this,(s(this,me),s(this,pe,null))),C.set(this,(s(this,ge),s(this,ue,null))),$.set(this,(s(this,fe),s(this,ye,!1))),x.set(this,(s(this,be),s(this,ve,!1))),D.set(this,(s(this,je),s(this,we,!1))),O.set(this,(s(this,ke),s(this,Te,!1))),L.set(this,(s(this,Ce),s(this,$e,!1))),M.set(this,(s(this,xe),s(this,De,!1))),W.set(this,(s(this,Oe),s(this,Le,!1))),A.set(this,(s(this,Me),s(this,We,!1))),H.set(this,(s(this,Ae),s(this,He,{toggleView:"Toggle View Mode",toggleFullscreen:"Toggle Fullscreen",downloadMenu:"Download Menu",downloadCsv:"Download as CSV",downloadPng:"Download as PNG",downloadJpg:"Download as JPG"}))),S.set(this,(s(this,Se),s(this,Be,!1))),B.set(this,(s(this,Ee),s(this,_e,!1))),E.set(this,(s(this,Ve),s(this,Fe,100))),I.set(this,(s(this,Ne),s(this,Re,{}))),P.set(this,(s(this,ze),s(this,Je,void 0))),ht.set(this,(s(this,Ie),s(this,Pe,void 0))),lt.set(this,(s(this,qe),s(this,Ge,void 0))),dt.set(this,(s(this,Ue),s(this,Ke,null))),mt.set(this,(s(this,Xe),s(this,Ye,!1))),pt.set(this,(s(this,Qe),s(this,Ze,!1))),gt.set(this,(s(this,ts),s(this,es,{}))),ut.set(this,(s(this,ss),s(this,is,{}))),ft.set(this,(s(this,as),s(this,os,!1))),this._resizeObserver=(s(this,ns),new ResizeObserver(q((()=>{this._resizeChart()})))),this._themeObserver=new MutationObserver((()=>{this.chart&&this.mergeOptions().then((()=>{this.initChart()}))}))}get chartTitle(){return i(this,f,"f")}set chartTitle(t){a(this,f,t,"f")}get description(){return i(this,y,"f")}set description(t){a(this,y,t,"f")}get type(){return i(this,b,"f")}set type(t){a(this,b,t,"f")}get labels(){return i(this,v,"f")}set labels(t){a(this,v,t,"f")}get datasets(){return i(this,j,"f")}set datasets(t){a(this,j,t,"f")}get options(){return i(this,w,"f")}set options(t){a(this,w,t,"f")}get plugins(){return i(this,k,"f")}set plugins(t){a(this,k,t,"f")}get height(){return i(this,T,"f")}set height(t){a(this,T,t,"f")}get width(){return i(this,C,"f")}set width(t){a(this,C,t,"f")}get hideDescription(){return i(this,$,"f")}set hideDescription(t){a(this,$,t,"f")}get hideCaptions(){return i(this,x,"f")}set hideCaptions(t){a(this,x,t,"f")}get hideHeader(){return i(this,D,"f")}set hideHeader(t){a(this,D,t,"f")}get hideControls(){return i(this,O,"f")}set hideControls(t){a(this,O,t,"f")}get hideTableControl(){return i(this,L,"f")}set hideTableControl(t){a(this,L,t,"f")}get hideFullscreenControl(){return i(this,M,"f")}set hideFullscreenControl(t){a(this,M,t,"f")}get hideDownloadControl(){return i(this,W,"f")}set hideDownloadControl(t){a(this,W,t,"f")}get noBorder(){return i(this,A,"f")}set noBorder(t){a(this,A,t,"f")}get customLabels(){return i(this,H,"f")}set customLabels(t){a(this,H,t,"f")}get fullscreen(){return i(this,S,"f")}set fullscreen(t){a(this,S,t,"f")}get useHtmlLegend(){return i(this,B,"f")}set useHtmlLegend(t){a(this,B,t,"f")}get htmlLegendMaxHeight(){return i(this,E,"f")}set htmlLegendMaxHeight(t){a(this,E,t,"f")}get htmlLegendOptions(){return i(this,I,"f")}set htmlLegendOptions(t){a(this,I,t,"f")}get container(){return i(this,P,"f")}set container(t){a(this,P,t,"f")}get canvas(){return i(this,ht,"f")}set canvas(t){a(this,ht,t,"f")}get ccDiv(){return i(this,lt,"f")}set ccDiv(t){a(this,lt,t,"f")}get chart(){return i(this,dt,"f")}set chart(t){a(this,dt,t,"f")}get tableView(){return i(this,mt,"f")}set tableView(t){a(this,mt,t,"f")}get tableDisabled(){return i(this,pt,"f")}set tableDisabled(t){a(this,pt,t,"f")}get mergedOptions(){return i(this,gt,"f")}set mergedOptions(t){a(this,gt,t,"f")}get mergedDatasets(){return i(this,ut,"f")}set mergedDatasets(t){a(this,ut,t,"f")}get _widget(){return i(this,ft,"f")}set _widget(t){a(this,ft,t,"f")}render(){var t,e,s,i,a,o,n,c,h;const l={container:!0,fullscreen:this.fullscreen,"no-border":this.noBorder||this._widget,widget:this._widget};return r`
|
|
2
2
|
<div
|
|
3
3
|
class=${m(l)}
|
|
4
4
|
@fullscreenchange=${()=>this.handleFullscreenChange()}
|
|
@@ -30,7 +30,7 @@ import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPr
|
|
|
30
30
|
title=${this.customLabels.toggleView}
|
|
31
31
|
>
|
|
32
32
|
<span slot="icon">
|
|
33
|
-
${this.tableView?
|
|
33
|
+
${this.tableView?ot(tt):ot(et)}
|
|
34
34
|
</span>
|
|
35
35
|
</button>
|
|
36
36
|
`}
|
|
@@ -42,7 +42,7 @@ import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPr
|
|
|
42
42
|
title=${this.customLabels.toggleFullscreen}
|
|
43
43
|
>
|
|
44
44
|
<span slot="icon">
|
|
45
|
-
${this.fullscreen?
|
|
45
|
+
${this.fullscreen?ot(at):ot(it)}
|
|
46
46
|
</span>
|
|
47
47
|
</button>
|
|
48
48
|
`}
|
|
@@ -55,7 +55,7 @@ import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPr
|
|
|
55
55
|
title=${this.customLabels.downloadMenu}
|
|
56
56
|
>
|
|
57
57
|
<span slot="icon">
|
|
58
|
-
${
|
|
58
|
+
${ot(st)}
|
|
59
59
|
</span>
|
|
60
60
|
</button>
|
|
61
61
|
|
|
@@ -153,7 +153,7 @@ import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPr
|
|
|
153
153
|
</tr>
|
|
154
154
|
`}))}
|
|
155
155
|
</tbody>
|
|
156
|
-
`:["boxplot","violin"].includes(this.type)?
|
|
156
|
+
`:["boxplot","violin"].includes(this.type)?K(this.labels,this.datasets,this.getTableAxisLabel()):"tree"===this.type?rt(this.datasets):r`
|
|
157
157
|
<thead>
|
|
158
158
|
<tr>
|
|
159
159
|
${(null===(h=this.labels)||void 0===h?void 0:h.length)||"treemap"===this.type?r`<th>${this.getTableAxisLabel()}</th>`:null}
|
|
@@ -228,5 +228,5 @@ import{__setFunctionName as t,__esDecorate as e,__runInitializers as s,__classPr
|
|
|
228
228
|
</div>
|
|
229
229
|
`:null}
|
|
230
230
|
</div>
|
|
231
|
-
`}_resizeChart(){this.chart&&this.chart.resize()}connectedCallback(){super.connectedCallback();try{const t=document.querySelector('meta[name="color-scheme"]');t instanceof Node&&this._themeObserver.observe(t,{attributes:!0})}catch(t){console.warn("Failed to set up theme observer:",t)}}disconnectedCallback(){this._resizeObserver.disconnect(),this._themeObserver.disconnect(),super.disconnectedCallback()}firstUpdated(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".canvas-container");this._resizeObserver.observe(e)}generateScrollableLegend(){if(!this.chart||!this.useHtmlLegend)return;const t=this.shadowRoot.querySelector(".html-legend-container");t.innerHTML="";const e={maxHeight:this.htmlLegendMaxHeight,...this.htmlLegendOptions,onItemClick:t=>{this.htmlLegendOptions.onItemClick&&this.htmlLegendOptions.onItemClick(t),this.dispatchEvent(new CustomEvent("on-click",{detail:t,bubbles:!0,composed:!0}))}};F(this.chart,t,e)}updated(t){var e,s;this.chart&&(t.has("labels")||t.has("datasets")||t.has("options"))&&this.mergeOptions().then((()=>{this.chart.data.labels=this.labels,this.chart.options=this.mergedOptions,this.chart.data.datasets.forEach(((t,e)=>{this.mergedDatasets.find((e=>e.label===t.label))||this.chart.data.datasets.splice(e,1)})),this.mergedDatasets.forEach((t=>{const e=this.chart.data.datasets.find((e=>e.label===t.label));e?Object.keys(t).forEach((s=>{e[s]=t[s]})):this.chart.data.datasets.push(t)})),this.chart.update(),this.generateScrollableLegend()}));let i=!1;if(this.datasets&&this.datasets.length)for(const t of this.datasets)if(i=(null===(e=t.data)||void 0===e?void 0:e.length)>0||(null===(s=t.tree)||void 0===s?void 0:s.length)>0||t.tree&&Object.keys(t.tree).length>0,!i){console.error("Missing data for one or more chart datasets.");break}!this.chart&&this.type&&t.has("datasets")&&i&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&(t.has("type")||t.has("plugins")||t.has("width")||t.has("height")||t.has("useHtmlLegend"))&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&t.has("noBorder")&&this.chart.resize()}initChart(){const t="meter"===this.type?_:E,e=[B,t,V,...this.plugins,R];this.useHtmlLegend&&e.push(N),this.chart&&this.chart.destroy(),this.chart=new u(this.canvas,{type:"meter"===this.type?"doughnut":this.type,data:{labels:this.labels,datasets:this.mergedDatasets},options:this.mergedOptions,plugins:e}),this.generateScrollableLegend()}async mergeOptions(){const t=[];this.datasets.forEach((e=>{e.type&&t.push(function(t){switch(t){case"../../common/config/chartTypes/bar.js":return import("../../common/config/chartTypes/bar.js");case"../../common/config/chartTypes/boxplot.js":return import("../../common/config/chartTypes/boxplot.js");case"../../common/config/chartTypes/bubble.js":return import("../../common/config/chartTypes/bubble.js");case"../../common/config/chartTypes/bubbleMap.js":return import("../../common/config/chartTypes/bubbleMap.js");case"../../common/config/chartTypes/choropleth.js":return import("../../common/config/chartTypes/choropleth.js");case"../../common/config/chartTypes/dendrogram.js":return import("../../common/config/chartTypes/dendrogram.js");case"../../common/config/chartTypes/doughnut.js":return import("../../common/config/chartTypes/doughnut.js");case"../../common/config/chartTypes/forceDirectedGraph.js":return import("../../common/config/chartTypes/forceDirectedGraph.js");case"../../common/config/chartTypes/graph.js":return import("../../common/config/chartTypes/graph.js");case"../../common/config/chartTypes/graphCommon.js":return import("../../common/config/chartTypes/graphCommon.js");case"../../common/config/chartTypes/line.js":return import("../../common/config/chartTypes/line.js");case"../../common/config/chartTypes/matrix.js":return import("../../common/config/chartTypes/matrix.js");case"../../common/config/chartTypes/meter.js":return import("../../common/config/chartTypes/meter.js");case"../../common/config/chartTypes/pie.js":return import("../../common/config/chartTypes/pie.js");case"../../common/config/chartTypes/polarArea.js":return import("../../common/config/chartTypes/polarArea.js");case"../../common/config/chartTypes/radar.js":return import("../../common/config/chartTypes/radar.js");case"../../common/config/chartTypes/scatter.js":return import("../../common/config/chartTypes/scatter.js");case"../../common/config/chartTypes/tree.js":return import("../../common/config/chartTypes/tree.js");case"../../common/config/chartTypes/treemap.js":return import("../../common/config/chartTypes/treemap.js");case"../../common/config/chartTypes/violin.js":return import("../../common/config/chartTypes/violin.js");default:return new Promise((function(e,s){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}(`../../common/config/chartTypes/${e.type}.js`))}));const e=await Promise.all([nt(`../../common/config/chartTypes/${this.type}.js`),...t]);let s=K(this);s.plugins=s.plugins||{},this.useHtmlLegend?(s.plugins.legend={display:!1},s.plugins.htmlLegend=s.plugins.htmlLegend||{}):(s.plugins.legend=s.plugins.legend||{},s.plugins.legend.display=!0),["pie","doughnut","radar","polarArea","meter"].includes(this.type)?s=p(s,Y(this)):["choropleth","treemap","bubbleMap","dendrogram","tree"].includes(this.type)||(s=p(s,X(this)));const i=JSON.parse(JSON.stringify(this.datasets));e.forEach((t=>{s=p(s,t.options(this)),i.forEach(((e,s)=>{(!e.type&&t.type===this.type||e.type===t.type)&&(i[s]=p(e,t.datasetOptions(this,s)))}))})),this.options&&(s=p(s,this.options)),this.mergedOptions=s,i.forEach(((t,e)=>{const s=g({mergeArrays:!1});i[e]=s(t,this.datasets[e])})),this.mergedDatasets=i}getTableAxisLabel(){var t,e,s,i,a,o,n,r,c,h,l;let d="";return d="y"===(null===(t=this.options)||void 0===t?void 0:t.indexAxis)?(null===(a=null===(i=null===(s=null===(e=this.options)||void 0===e?void 0:e.scales)||void 0===s?void 0:s.y)||void 0===i?void 0:i.title)||void 0===a?void 0:a.text)?null===(o=this.options)||void 0===o?void 0:o.scales.y.title.text:"Y Axis":(null===(h=null===(c=null===(r=null===(n=this.options)||void 0===n?void 0:n.scales)||void 0===r?void 0:r.x)||void 0===c?void 0:c.title)||void 0===h?void 0:h.text)?null===(l=this.options)||void 0===l?void 0:l.scales.x.title.text:"X Axis",d}handleViewToggle(){this.tableView=!this.tableView}checkType(){this.tableDisabled=["dendrogram","forceDirectedGraph","tree"].includes(this.type)}handleDownloadImage(t,e){t.preventDefault();const s=e?"image/jpeg":"image/png",i=e?"jpg":"png";if(this.useHtmlLegend&&this.chart){if(["doughnut","pie"].includes(this.type))return void this.exportSimpleCanvasOnly(s,i);const t={options:JSON.parse(JSON.stringify(this.chart.options)),data:JSON.parse(JSON.stringify(this.chart.data)),type:this.chart.config.type},e=this.chart.data.datasets.map(((t,e)=>this.chart.getDatasetMeta(e).hidden));try{this.chart.options.plugins||(this.chart.options.plugins={}),this.chart.options.plugins.legend||(this.chart.options.plugins.legend={}),this.chart.options.plugins.legend.display=!0,this.chart.options.plugins.legend.position="bottom",this.chart.options.plugins.legend.labels={boxWidth:12,boxHeight:12,padding:10,font:{size:12}},this.chart.options.layout?this.chart.options.layout.padding?"number"==typeof this.chart.options.layout.padding?this.chart.options.layout.padding={top:this.chart.options.layout.padding,right:this.chart.options.layout.padding,bottom:Math.max(this.chart.options.layout.padding,40),left:this.chart.options.layout.padding}:this.chart.options.layout.padding&&(this.chart.options.layout.padding.bottom=Math.max(this.chart.options.layout.padding.bottom||0,40)):this.chart.options.layout.padding={bottom:40}:this.chart.options.layout={padding:{bottom:40}},this.chart.update("none");const a=this.canvas.getContext("2d");if(!a)throw new Error("Could not get canvas context");const o=at("--kd-color-background-page-default");a.save(),a.globalCompositeOperation="destination-over",a.fillStyle=o,a.fillRect(0,0,this.canvas.width,this.canvas.height);const n=this.chart.toBase64Image(s,1),r=document.createElement("a");r.href=n,r.download=this.chartTitle+"."+i,document.body.appendChild(r),r.click(),document.body.removeChild(r),a.restore(),this.chart.options=t.options,e.forEach(((t,e)=>{this.chart.getDatasetMeta(e).hidden=t})),this.chart.update()}catch(t){console.error("Error exporting chart with legend:",t),this.exportCanvasOnly(s,i)}}else this.exportCanvasOnly(s,i)}exportCanvasOnly(t,e){const s=this.canvas.getContext("2d");if(!s||!this.chart)return;const i=at("--kd-color-background-page-default");s.save(),s.globalCompositeOperation="destination-over",s.fillStyle=i,s.fillRect(0,0,this.canvas.width,this.canvas.height);const a=document.createElement("a");a.href=this.chart.toBase64Image(t,1),a.download=this.chartTitle+"."+e,document.body.appendChild(a),a.click(),document.body.removeChild(a),s.restore()}exportSimpleCanvasOnly(t,e){const s=this.canvas.getContext("2d");if(s&&this.chart)try{const i=JSON.parse(JSON.stringify(this.chart.options));s.save();const a=at("--kd-color-background-page-default");s.globalCompositeOperation="destination-over",s.fillStyle=a,s.fillRect(0,0,this.canvas.width,this.canvas.height),this.chart.options={...this.chart.options,plugins:{legend:{display:!0,position:"bottom",labels:{boxWidth:12,boxHeight:12,padding:10,font:{size:12}}},datalabels:{display:!1,formatter:null},tooltip:{enabled:!1},doughnutLabel:{enabled:!1}},layout:{padding:{bottom:40}}},this.chart.update("none");const o=this.chart.toBase64Image(t,1),n=document.createElement("a");n.href=o,n.download=this.chartTitle+"."+e,document.body.appendChild(n),n.click(),document.body.removeChild(n),s.restore(),this.chart.options=i,this.chart.update()}catch(s){console.error("Error in exportSimpleCanvasOnly:",s),this.exportCanvasOnly(t,e)}}handleDownloadCsv(t){t.preventDefault();let e="";if("tree"===this.type||"dendrogram"===this.type)e+=P(this.datasets);else for(let t=0;t<this.chart.data.datasets.length;t++)e+=q({data:this.chart.data.datasets[t],labels:this.labels});if(null==e||""===e)return;const s=this.chartTitle+".csv";e.match(/^data:text\/csv/i)||(e="data:text/csv;charset=utf-8,"+e);const i=encodeURI(e),a=document.createElement("a");a.setAttribute("href",i),a.setAttribute("download",s),document.body.appendChild(a),a.click(),document.body.removeChild(a)}handleFullscreen(){var t;(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)?document.exitFullscreen():this.container.requestFullscreen()}handleFullscreenChange(){var t;this.fullscreen=null!==(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)}},f=new WeakMap,y=new WeakMap,b=new WeakMap,v=new WeakMap,w=new WeakMap,j=new WeakMap,T=new WeakMap,k=new WeakMap,C=new WeakMap,$=new WeakMap,x=new WeakMap,D=new WeakMap,O=new WeakMap,L=new WeakMap,M=new WeakMap,W=new WeakMap,A=new WeakMap,H=new WeakMap,S=new WeakMap,z=new WeakMap,J=new WeakMap,rt=new WeakMap,ct=new WeakMap,ht=new WeakMap,lt=new WeakMap,dt=new WeakMap,mt=new WeakMap,pt=new WeakMap,gt=new WeakMap,ut=new WeakMap,ft=new WeakMap,t(bt,"KDChart"),(()=>{var t;const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null!==(t=Qt[Symbol.metadata])&&void 0!==t?t:null):void 0;vt=[h({type:String})],wt=[h({type:String})],jt=[h({type:String})],Tt=[h({type:Array})],kt=[h({type:Array})],Ct=[h({type:Object})],$t=[h({type:Array})],xt=[h({type:Number})],Dt=[h({type:Number})],Ot=[h({type:Boolean})],Lt=[h({type:Boolean})],Mt=[h({type:Boolean})],Wt=[h({type:Boolean})],At=[h({type:Boolean})],Ht=[h({type:Boolean})],St=[h({type:Boolean})],Bt=[h({type:Boolean})],Et=[h({type:Object})],_t=[l()],Vt=[h({type:Boolean})],Ft=[h({type:Number,reflect:!0})],Nt=[h({type:Object})],Rt=[d(".container")],zt=[d("canvas")],Jt=[d(".closed-caption")],It=[l()],Pt=[l()],qt=[l()],Gt=[l()],Ut=[l()],Kt=[l()],e(bt,null,vt,{kind:"accessor",name:"chartTitle",static:!1,private:!1,access:{has:t=>"chartTitle"in t,get:t=>t.chartTitle,set:(t,e)=>{t.chartTitle=e}},metadata:s},Zt,te),e(bt,null,wt,{kind:"accessor",name:"description",static:!1,private:!1,access:{has:t=>"description"in t,get:t=>t.description,set:(t,e)=>{t.description=e}},metadata:s},ee,se),e(bt,null,jt,{kind:"accessor",name:"type",static:!1,private:!1,access:{has:t=>"type"in t,get:t=>t.type,set:(t,e)=>{t.type=e}},metadata:s},ie,ae),e(bt,null,Tt,{kind:"accessor",name:"labels",static:!1,private:!1,access:{has:t=>"labels"in t,get:t=>t.labels,set:(t,e)=>{t.labels=e}},metadata:s},oe,ne),e(bt,null,kt,{kind:"accessor",name:"datasets",static:!1,private:!1,access:{has:t=>"datasets"in t,get:t=>t.datasets,set:(t,e)=>{t.datasets=e}},metadata:s},re,ce),e(bt,null,Ct,{kind:"accessor",name:"options",static:!1,private:!1,access:{has:t=>"options"in t,get:t=>t.options,set:(t,e)=>{t.options=e}},metadata:s},he,le),e(bt,null,$t,{kind:"accessor",name:"plugins",static:!1,private:!1,access:{has:t=>"plugins"in t,get:t=>t.plugins,set:(t,e)=>{t.plugins=e}},metadata:s},de,me),e(bt,null,xt,{kind:"accessor",name:"height",static:!1,private:!1,access:{has:t=>"height"in t,get:t=>t.height,set:(t,e)=>{t.height=e}},metadata:s},pe,ge),e(bt,null,Dt,{kind:"accessor",name:"width",static:!1,private:!1,access:{has:t=>"width"in t,get:t=>t.width,set:(t,e)=>{t.width=e}},metadata:s},ue,fe),e(bt,null,Ot,{kind:"accessor",name:"hideDescription",static:!1,private:!1,access:{has:t=>"hideDescription"in t,get:t=>t.hideDescription,set:(t,e)=>{t.hideDescription=e}},metadata:s},ye,be),e(bt,null,Lt,{kind:"accessor",name:"hideCaptions",static:!1,private:!1,access:{has:t=>"hideCaptions"in t,get:t=>t.hideCaptions,set:(t,e)=>{t.hideCaptions=e}},metadata:s},ve,we),e(bt,null,Mt,{kind:"accessor",name:"hideHeader",static:!1,private:!1,access:{has:t=>"hideHeader"in t,get:t=>t.hideHeader,set:(t,e)=>{t.hideHeader=e}},metadata:s},je,Te),e(bt,null,Wt,{kind:"accessor",name:"hideControls",static:!1,private:!1,access:{has:t=>"hideControls"in t,get:t=>t.hideControls,set:(t,e)=>{t.hideControls=e}},metadata:s},ke,Ce),e(bt,null,At,{kind:"accessor",name:"hideTableControl",static:!1,private:!1,access:{has:t=>"hideTableControl"in t,get:t=>t.hideTableControl,set:(t,e)=>{t.hideTableControl=e}},metadata:s},$e,xe),e(bt,null,Ht,{kind:"accessor",name:"hideFullscreenControl",static:!1,private:!1,access:{has:t=>"hideFullscreenControl"in t,get:t=>t.hideFullscreenControl,set:(t,e)=>{t.hideFullscreenControl=e}},metadata:s},De,Oe),e(bt,null,St,{kind:"accessor",name:"hideDownloadControl",static:!1,private:!1,access:{has:t=>"hideDownloadControl"in t,get:t=>t.hideDownloadControl,set:(t,e)=>{t.hideDownloadControl=e}},metadata:s},Le,Me),e(bt,null,Bt,{kind:"accessor",name:"noBorder",static:!1,private:!1,access:{has:t=>"noBorder"in t,get:t=>t.noBorder,set:(t,e)=>{t.noBorder=e}},metadata:s},We,Ae),e(bt,null,Et,{kind:"accessor",name:"customLabels",static:!1,private:!1,access:{has:t=>"customLabels"in t,get:t=>t.customLabels,set:(t,e)=>{t.customLabels=e}},metadata:s},He,Se),e(bt,null,_t,{kind:"accessor",name:"fullscreen",static:!1,private:!1,access:{has:t=>"fullscreen"in t,get:t=>t.fullscreen,set:(t,e)=>{t.fullscreen=e}},metadata:s},Be,Ee),e(bt,null,Vt,{kind:"accessor",name:"useHtmlLegend",static:!1,private:!1,access:{has:t=>"useHtmlLegend"in t,get:t=>t.useHtmlLegend,set:(t,e)=>{t.useHtmlLegend=e}},metadata:s},_e,Ve),e(bt,null,Ft,{kind:"accessor",name:"htmlLegendMaxHeight",static:!1,private:!1,access:{has:t=>"htmlLegendMaxHeight"in t,get:t=>t.htmlLegendMaxHeight,set:(t,e)=>{t.htmlLegendMaxHeight=e}},metadata:s},Fe,Ne),e(bt,null,Nt,{kind:"accessor",name:"htmlLegendOptions",static:!1,private:!1,access:{has:t=>"htmlLegendOptions"in t,get:t=>t.htmlLegendOptions,set:(t,e)=>{t.htmlLegendOptions=e}},metadata:s},Re,ze),e(bt,null,Rt,{kind:"accessor",name:"container",static:!1,private:!1,access:{has:t=>"container"in t,get:t=>t.container,set:(t,e)=>{t.container=e}},metadata:s},Je,Ie),e(bt,null,zt,{kind:"accessor",name:"canvas",static:!1,private:!1,access:{has:t=>"canvas"in t,get:t=>t.canvas,set:(t,e)=>{t.canvas=e}},metadata:s},Pe,qe),e(bt,null,Jt,{kind:"accessor",name:"ccDiv",static:!1,private:!1,access:{has:t=>"ccDiv"in t,get:t=>t.ccDiv,set:(t,e)=>{t.ccDiv=e}},metadata:s},Ge,Ue),e(bt,null,It,{kind:"accessor",name:"chart",static:!1,private:!1,access:{has:t=>"chart"in t,get:t=>t.chart,set:(t,e)=>{t.chart=e}},metadata:s},Ke,Xe),e(bt,null,Pt,{kind:"accessor",name:"tableView",static:!1,private:!1,access:{has:t=>"tableView"in t,get:t=>t.tableView,set:(t,e)=>{t.tableView=e}},metadata:s},Ye,Qe),e(bt,null,qt,{kind:"accessor",name:"tableDisabled",static:!1,private:!1,access:{has:t=>"tableDisabled"in t,get:t=>t.tableDisabled,set:(t,e)=>{t.tableDisabled=e}},metadata:s},Ze,ts),e(bt,null,Gt,{kind:"accessor",name:"mergedOptions",static:!1,private:!1,access:{has:t=>"mergedOptions"in t,get:t=>t.mergedOptions,set:(t,e)=>{t.mergedOptions=e}},metadata:s},es,ss),e(bt,null,Ut,{kind:"accessor",name:"mergedDatasets",static:!1,private:!1,access:{has:t=>"mergedDatasets"in t,get:t=>t.mergedDatasets,set:(t,e)=>{t.mergedDatasets=e}},metadata:s},is,as),e(bt,null,Kt,{kind:"accessor",name:"_widget",static:!1,private:!1,access:{has:t=>"_widget"in t,get:t=>t._widget,set:(t,e)=>{t._widget=e}},metadata:s},os,ns),e(null,yt={value:bt},Xt,{kind:"class",name:bt.name,metadata:s},null,Yt),bt=yt.value,s&&Object.defineProperty(bt,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s})})(),bt.styles=n(U),s(bt,Yt),bt})();export{rt as KDChart};
|
|
231
|
+
`}_resizeChart(){this.chart&&this.chart.resize()}connectedCallback(){super.connectedCallback();try{const t=document.querySelector('meta[name="color-scheme"]');t instanceof Node&&this._themeObserver.observe(t,{attributes:!0})}catch(t){console.warn("Failed to set up theme observer:",t)}}disconnectedCallback(){this._resizeObserver.disconnect(),this._themeObserver.disconnect(),super.disconnectedCallback()}firstUpdated(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".canvas-container");this._resizeObserver.observe(e)}generateScrollableLegend(){if(!this.chart||!this.useHtmlLegend)return;const t=this.shadowRoot.querySelector(".html-legend-container");t.innerHTML="";const e={maxHeight:this.htmlLegendMaxHeight,...this.htmlLegendOptions,onItemClick:t=>{this.htmlLegendOptions.onItemClick&&this.htmlLegendOptions.onItemClick(t),this.dispatchEvent(new CustomEvent("on-click",{detail:t,bubbles:!0,composed:!0}))}};R(this.chart,t,e)}updated(t){var e,s;this.chart&&(t.has("labels")||t.has("datasets")||t.has("options"))&&this.mergeOptions().then((()=>{this.chart.data.labels=this.labels,this.chart.options=this.mergedOptions,this.chart.data.datasets.forEach(((t,e)=>{this.mergedDatasets.find((e=>e.label===t.label))||this.chart.data.datasets.splice(e,1)})),this.mergedDatasets.forEach((t=>{const e=this.chart.data.datasets.find((e=>e.label===t.label));e?Object.keys(t).forEach((s=>{e[s]=t[s]})):this.chart.data.datasets.push(t)})),this.chart.update(),this.generateScrollableLegend()}));let i=!1;if(this.datasets&&this.datasets.length)for(const t of this.datasets)if(i=(null===(e=t.data)||void 0===e?void 0:e.length)>0||(null===(s=t.tree)||void 0===s?void 0:s.length)>0||t.tree&&Object.keys(t.tree).length>0,!i){console.error("Missing data for one or more chart datasets.");break}!this.chart&&this.type&&t.has("datasets")&&i&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&(t.has("type")||t.has("plugins")||t.has("width")||t.has("height")||t.has("useHtmlLegend"))&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&t.has("noBorder")&&this.chart.resize()}initChart(){const t="meter"===this.type?F:V,e=[_,t,N,...this.plugins,J];this.useHtmlLegend&&e.push(z),this.chart&&this.chart.destroy(),this.chart=new u(this.canvas,{type:"meter"===this.type?"doughnut":this.type,data:{labels:this.labels,datasets:this.mergedDatasets},options:this.mergedOptions,plugins:e}),this.generateScrollableLegend()}async mergeOptions(){const t=[];this.datasets.forEach((e=>{e.type&&t.push(function(t){switch(t){case"../../common/config/chartTypes/bar.js":return import("../../common/config/chartTypes/bar.js");case"../../common/config/chartTypes/boxplot.js":return import("../../common/config/chartTypes/boxplot.js");case"../../common/config/chartTypes/bubble.js":return import("../../common/config/chartTypes/bubble.js");case"../../common/config/chartTypes/bubbleMap.js":return import("../../common/config/chartTypes/bubbleMap.js");case"../../common/config/chartTypes/choropleth.js":return import("../../common/config/chartTypes/choropleth.js");case"../../common/config/chartTypes/dendrogram.js":return import("../../common/config/chartTypes/dendrogram.js");case"../../common/config/chartTypes/doughnut.js":return import("../../common/config/chartTypes/doughnut.js");case"../../common/config/chartTypes/forceDirectedGraph.js":return import("../../common/config/chartTypes/forceDirectedGraph.js");case"../../common/config/chartTypes/graph.js":return import("../../common/config/chartTypes/graph.js");case"../../common/config/chartTypes/graphCommon.js":return import("../../common/config/chartTypes/graphCommon.js");case"../../common/config/chartTypes/line.js":return import("../../common/config/chartTypes/line.js");case"../../common/config/chartTypes/matrix.js":return import("../../common/config/chartTypes/matrix.js");case"../../common/config/chartTypes/meter.js":return import("../../common/config/chartTypes/meter.js");case"../../common/config/chartTypes/pie.js":return import("../../common/config/chartTypes/pie.js");case"../../common/config/chartTypes/polarArea.js":return import("../../common/config/chartTypes/polarArea.js");case"../../common/config/chartTypes/radar.js":return import("../../common/config/chartTypes/radar.js");case"../../common/config/chartTypes/sankey.js":return import("../../common/config/chartTypes/sankey.js");case"../../common/config/chartTypes/scatter.js":return import("../../common/config/chartTypes/scatter.js");case"../../common/config/chartTypes/tree.js":return import("../../common/config/chartTypes/tree.js");case"../../common/config/chartTypes/treemap.js":return import("../../common/config/chartTypes/treemap.js");case"../../common/config/chartTypes/violin.js":return import("../../common/config/chartTypes/violin.js");default:return new Promise((function(e,s){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}(`../../common/config/chartTypes/${e.type}.js`))}));const e=await Promise.all([ct(`../../common/config/chartTypes/${this.type}.js`),...t]);let s=Y(this);s.plugins=s.plugins||{},this.useHtmlLegend?(s.plugins.legend={display:!1},s.plugins.htmlLegend=s.plugins.htmlLegend||{}):(s.plugins.legend=s.plugins.legend||{},s.plugins.legend.display=!0),["pie","doughnut","radar","polarArea","meter"].includes(this.type)?s=p(s,Z(this)):["choropleth","treemap","bubbleMap","dendrogram","tree"].includes(this.type)||(s=p(s,Q(this)));const i=JSON.parse(JSON.stringify(this.datasets));e.forEach((t=>{s=p(s,t.options(this)),i.forEach(((e,s)=>{(!e.type&&t.type===this.type||e.type===t.type)&&(i[s]=p(e,t.datasetOptions(this,s)))}))})),this.options&&(s=p(s,this.options)),this.mergedOptions=s,i.forEach(((t,e)=>{const s=g({mergeArrays:!1});i[e]=s(t,this.datasets[e])})),this.mergedDatasets=i}getTableAxisLabel(){var t,e,s,i,a,o,n,r,c,h,l;let d="";return d="y"===(null===(t=this.options)||void 0===t?void 0:t.indexAxis)?(null===(a=null===(i=null===(s=null===(e=this.options)||void 0===e?void 0:e.scales)||void 0===s?void 0:s.y)||void 0===i?void 0:i.title)||void 0===a?void 0:a.text)?null===(o=this.options)||void 0===o?void 0:o.scales.y.title.text:"Y Axis":(null===(h=null===(c=null===(r=null===(n=this.options)||void 0===n?void 0:n.scales)||void 0===r?void 0:r.x)||void 0===c?void 0:c.title)||void 0===h?void 0:h.text)?null===(l=this.options)||void 0===l?void 0:l.scales.x.title.text:"X Axis",d}handleViewToggle(){this.tableView=!this.tableView}checkType(){this.tableDisabled=["dendrogram","forceDirectedGraph","tree"].includes(this.type)}handleDownloadImage(t,e){t.preventDefault();const s=e?"image/jpeg":"image/png",i=e?"jpg":"png";if(this.useHtmlLegend&&this.chart){if(["doughnut","pie"].includes(this.type))return void this.exportSimpleCanvasOnly(s,i);const t={options:JSON.parse(JSON.stringify(this.chart.options)),data:JSON.parse(JSON.stringify(this.chart.data)),type:this.chart.config.type},e=this.chart.data.datasets.map(((t,e)=>this.chart.getDatasetMeta(e).hidden));try{this.chart.options.plugins||(this.chart.options.plugins={}),this.chart.options.plugins.legend||(this.chart.options.plugins.legend={}),this.chart.options.plugins.legend.display=!0,this.chart.options.plugins.legend.position="bottom",this.chart.options.plugins.legend.labels={boxWidth:12,boxHeight:12,padding:10,font:{size:12}},this.chart.options.layout?this.chart.options.layout.padding?"number"==typeof this.chart.options.layout.padding?this.chart.options.layout.padding={top:this.chart.options.layout.padding,right:this.chart.options.layout.padding,bottom:Math.max(this.chart.options.layout.padding,40),left:this.chart.options.layout.padding}:this.chart.options.layout.padding&&(this.chart.options.layout.padding.bottom=Math.max(this.chart.options.layout.padding.bottom||0,40)):this.chart.options.layout.padding={bottom:40}:this.chart.options.layout={padding:{bottom:40}},this.chart.update("none");const a=this.canvas.getContext("2d");if(!a)throw new Error("Could not get canvas context");const o=nt("--kd-color-background-page-default");a.save(),a.globalCompositeOperation="destination-over",a.fillStyle=o,a.fillRect(0,0,this.canvas.width,this.canvas.height);const n=this.chart.toBase64Image(s,1),r=document.createElement("a");r.href=n,r.download=this.chartTitle+"."+i,document.body.appendChild(r),r.click(),document.body.removeChild(r),a.restore(),this.chart.options=t.options,e.forEach(((t,e)=>{this.chart.getDatasetMeta(e).hidden=t})),this.chart.update()}catch(t){console.error("Error exporting chart with legend:",t),this.exportCanvasOnly(s,i)}}else this.exportCanvasOnly(s,i)}exportCanvasOnly(t,e){const s=this.canvas.getContext("2d");if(!s||!this.chart)return;const i=nt("--kd-color-background-page-default");s.save(),s.globalCompositeOperation="destination-over",s.fillStyle=i,s.fillRect(0,0,this.canvas.width,this.canvas.height);const a=document.createElement("a");a.href=this.chart.toBase64Image(t,1),a.download=this.chartTitle+"."+e,document.body.appendChild(a),a.click(),document.body.removeChild(a),s.restore()}exportSimpleCanvasOnly(t,e){const s=this.canvas.getContext("2d");if(s&&this.chart)try{const i=JSON.parse(JSON.stringify(this.chart.options));s.save();const a=nt("--kd-color-background-page-default");s.globalCompositeOperation="destination-over",s.fillStyle=a,s.fillRect(0,0,this.canvas.width,this.canvas.height),this.chart.options={...this.chart.options,plugins:{legend:{display:!0,position:"bottom",labels:{boxWidth:12,boxHeight:12,padding:10,font:{size:12}}},datalabels:{display:!1,formatter:null},tooltip:{enabled:!1},doughnutLabel:{enabled:!1}},layout:{padding:{bottom:40}}},this.chart.update("none");const o=this.chart.toBase64Image(t,1),n=document.createElement("a");n.href=o,n.download=this.chartTitle+"."+e,document.body.appendChild(n),n.click(),document.body.removeChild(n),s.restore(),this.chart.options=i,this.chart.update()}catch(s){console.error("Error in exportSimpleCanvasOnly:",s),this.exportCanvasOnly(t,e)}}handleDownloadCsv(t){t.preventDefault();let e="";if("tree"===this.type||"dendrogram"===this.type)e+=G(this.datasets);else for(let t=0;t<this.chart.data.datasets.length;t++)e+=U({data:this.chart.data.datasets[t],labels:this.labels});if(null==e||""===e)return;const s=this.chartTitle+".csv";e.match(/^data:text\/csv/i)||(e="data:text/csv;charset=utf-8,"+e);const i=encodeURI(e),a=document.createElement("a");a.setAttribute("href",i),a.setAttribute("download",s),document.body.appendChild(a),a.click(),document.body.removeChild(a)}handleFullscreen(){var t;(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)?document.exitFullscreen():this.container.requestFullscreen()}handleFullscreenChange(){var t;this.fullscreen=null!==(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)}},f=new WeakMap,y=new WeakMap,b=new WeakMap,v=new WeakMap,j=new WeakMap,w=new WeakMap,k=new WeakMap,T=new WeakMap,C=new WeakMap,$=new WeakMap,x=new WeakMap,D=new WeakMap,O=new WeakMap,L=new WeakMap,M=new WeakMap,W=new WeakMap,A=new WeakMap,H=new WeakMap,S=new WeakMap,B=new WeakMap,E=new WeakMap,I=new WeakMap,P=new WeakMap,ht=new WeakMap,lt=new WeakMap,dt=new WeakMap,mt=new WeakMap,pt=new WeakMap,gt=new WeakMap,ut=new WeakMap,ft=new WeakMap,t(bt,"KDChart"),(()=>{var t;const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null!==(t=Qt[Symbol.metadata])&&void 0!==t?t:null):void 0;vt=[h({type:String})],jt=[h({type:String})],wt=[h({type:String})],kt=[h({type:Array})],Tt=[h({type:Array})],Ct=[h({type:Object})],$t=[h({type:Array})],xt=[h({type:Number})],Dt=[h({type:Number})],Ot=[h({type:Boolean})],Lt=[h({type:Boolean})],Mt=[h({type:Boolean})],Wt=[h({type:Boolean})],At=[h({type:Boolean})],Ht=[h({type:Boolean})],St=[h({type:Boolean})],Bt=[h({type:Boolean})],Et=[h({type:Object})],_t=[l()],Vt=[h({type:Boolean})],Ft=[h({type:Number,reflect:!0})],Nt=[h({type:Object})],Rt=[d(".container")],zt=[d("canvas")],Jt=[d(".closed-caption")],It=[l()],Pt=[l()],qt=[l()],Gt=[l()],Ut=[l()],Kt=[l()],e(bt,null,vt,{kind:"accessor",name:"chartTitle",static:!1,private:!1,access:{has:t=>"chartTitle"in t,get:t=>t.chartTitle,set:(t,e)=>{t.chartTitle=e}},metadata:s},Zt,te),e(bt,null,jt,{kind:"accessor",name:"description",static:!1,private:!1,access:{has:t=>"description"in t,get:t=>t.description,set:(t,e)=>{t.description=e}},metadata:s},ee,se),e(bt,null,wt,{kind:"accessor",name:"type",static:!1,private:!1,access:{has:t=>"type"in t,get:t=>t.type,set:(t,e)=>{t.type=e}},metadata:s},ie,ae),e(bt,null,kt,{kind:"accessor",name:"labels",static:!1,private:!1,access:{has:t=>"labels"in t,get:t=>t.labels,set:(t,e)=>{t.labels=e}},metadata:s},oe,ne),e(bt,null,Tt,{kind:"accessor",name:"datasets",static:!1,private:!1,access:{has:t=>"datasets"in t,get:t=>t.datasets,set:(t,e)=>{t.datasets=e}},metadata:s},re,ce),e(bt,null,Ct,{kind:"accessor",name:"options",static:!1,private:!1,access:{has:t=>"options"in t,get:t=>t.options,set:(t,e)=>{t.options=e}},metadata:s},he,le),e(bt,null,$t,{kind:"accessor",name:"plugins",static:!1,private:!1,access:{has:t=>"plugins"in t,get:t=>t.plugins,set:(t,e)=>{t.plugins=e}},metadata:s},de,me),e(bt,null,xt,{kind:"accessor",name:"height",static:!1,private:!1,access:{has:t=>"height"in t,get:t=>t.height,set:(t,e)=>{t.height=e}},metadata:s},pe,ge),e(bt,null,Dt,{kind:"accessor",name:"width",static:!1,private:!1,access:{has:t=>"width"in t,get:t=>t.width,set:(t,e)=>{t.width=e}},metadata:s},ue,fe),e(bt,null,Ot,{kind:"accessor",name:"hideDescription",static:!1,private:!1,access:{has:t=>"hideDescription"in t,get:t=>t.hideDescription,set:(t,e)=>{t.hideDescription=e}},metadata:s},ye,be),e(bt,null,Lt,{kind:"accessor",name:"hideCaptions",static:!1,private:!1,access:{has:t=>"hideCaptions"in t,get:t=>t.hideCaptions,set:(t,e)=>{t.hideCaptions=e}},metadata:s},ve,je),e(bt,null,Mt,{kind:"accessor",name:"hideHeader",static:!1,private:!1,access:{has:t=>"hideHeader"in t,get:t=>t.hideHeader,set:(t,e)=>{t.hideHeader=e}},metadata:s},we,ke),e(bt,null,Wt,{kind:"accessor",name:"hideControls",static:!1,private:!1,access:{has:t=>"hideControls"in t,get:t=>t.hideControls,set:(t,e)=>{t.hideControls=e}},metadata:s},Te,Ce),e(bt,null,At,{kind:"accessor",name:"hideTableControl",static:!1,private:!1,access:{has:t=>"hideTableControl"in t,get:t=>t.hideTableControl,set:(t,e)=>{t.hideTableControl=e}},metadata:s},$e,xe),e(bt,null,Ht,{kind:"accessor",name:"hideFullscreenControl",static:!1,private:!1,access:{has:t=>"hideFullscreenControl"in t,get:t=>t.hideFullscreenControl,set:(t,e)=>{t.hideFullscreenControl=e}},metadata:s},De,Oe),e(bt,null,St,{kind:"accessor",name:"hideDownloadControl",static:!1,private:!1,access:{has:t=>"hideDownloadControl"in t,get:t=>t.hideDownloadControl,set:(t,e)=>{t.hideDownloadControl=e}},metadata:s},Le,Me),e(bt,null,Bt,{kind:"accessor",name:"noBorder",static:!1,private:!1,access:{has:t=>"noBorder"in t,get:t=>t.noBorder,set:(t,e)=>{t.noBorder=e}},metadata:s},We,Ae),e(bt,null,Et,{kind:"accessor",name:"customLabels",static:!1,private:!1,access:{has:t=>"customLabels"in t,get:t=>t.customLabels,set:(t,e)=>{t.customLabels=e}},metadata:s},He,Se),e(bt,null,_t,{kind:"accessor",name:"fullscreen",static:!1,private:!1,access:{has:t=>"fullscreen"in t,get:t=>t.fullscreen,set:(t,e)=>{t.fullscreen=e}},metadata:s},Be,Ee),e(bt,null,Vt,{kind:"accessor",name:"useHtmlLegend",static:!1,private:!1,access:{has:t=>"useHtmlLegend"in t,get:t=>t.useHtmlLegend,set:(t,e)=>{t.useHtmlLegend=e}},metadata:s},_e,Ve),e(bt,null,Ft,{kind:"accessor",name:"htmlLegendMaxHeight",static:!1,private:!1,access:{has:t=>"htmlLegendMaxHeight"in t,get:t=>t.htmlLegendMaxHeight,set:(t,e)=>{t.htmlLegendMaxHeight=e}},metadata:s},Fe,Ne),e(bt,null,Nt,{kind:"accessor",name:"htmlLegendOptions",static:!1,private:!1,access:{has:t=>"htmlLegendOptions"in t,get:t=>t.htmlLegendOptions,set:(t,e)=>{t.htmlLegendOptions=e}},metadata:s},Re,ze),e(bt,null,Rt,{kind:"accessor",name:"container",static:!1,private:!1,access:{has:t=>"container"in t,get:t=>t.container,set:(t,e)=>{t.container=e}},metadata:s},Je,Ie),e(bt,null,zt,{kind:"accessor",name:"canvas",static:!1,private:!1,access:{has:t=>"canvas"in t,get:t=>t.canvas,set:(t,e)=>{t.canvas=e}},metadata:s},Pe,qe),e(bt,null,Jt,{kind:"accessor",name:"ccDiv",static:!1,private:!1,access:{has:t=>"ccDiv"in t,get:t=>t.ccDiv,set:(t,e)=>{t.ccDiv=e}},metadata:s},Ge,Ue),e(bt,null,It,{kind:"accessor",name:"chart",static:!1,private:!1,access:{has:t=>"chart"in t,get:t=>t.chart,set:(t,e)=>{t.chart=e}},metadata:s},Ke,Xe),e(bt,null,Pt,{kind:"accessor",name:"tableView",static:!1,private:!1,access:{has:t=>"tableView"in t,get:t=>t.tableView,set:(t,e)=>{t.tableView=e}},metadata:s},Ye,Qe),e(bt,null,qt,{kind:"accessor",name:"tableDisabled",static:!1,private:!1,access:{has:t=>"tableDisabled"in t,get:t=>t.tableDisabled,set:(t,e)=>{t.tableDisabled=e}},metadata:s},Ze,ts),e(bt,null,Gt,{kind:"accessor",name:"mergedOptions",static:!1,private:!1,access:{has:t=>"mergedOptions"in t,get:t=>t.mergedOptions,set:(t,e)=>{t.mergedOptions=e}},metadata:s},es,ss),e(bt,null,Ut,{kind:"accessor",name:"mergedDatasets",static:!1,private:!1,access:{has:t=>"mergedDatasets"in t,get:t=>t.mergedDatasets,set:(t,e)=>{t.mergedDatasets=e}},metadata:s},is,as),e(bt,null,Kt,{kind:"accessor",name:"_widget",static:!1,private:!1,access:{has:t=>"_widget"in t,get:t=>t._widget,set:(t,e)=>{t._widget=e}},metadata:s},os,ns),e(null,yt={value:bt},Xt,{kind:"class",name:bt.name,metadata:s},null,Yt),bt=yt.value,s&&Object.defineProperty(bt,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s})})(),bt.styles=n(X),s(bt,Yt),bt})();export{ht as KDChart};
|
|
232
232
|
//# sourceMappingURL=chart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sources":["../../../src/components/chart/chart.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { deepmerge, deepmergeCustom } from 'deepmerge-ts';\nimport Chart from 'chart.js/auto';\nimport 'chartjs-adapter-date-fns';\nimport {\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n} from 'chartjs-chart-geo';\nimport { TreemapController, TreemapElement } from 'chartjs-chart-treemap';\nimport { MatrixController, MatrixElement } from 'chartjs-chart-matrix';\nimport {\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n Violin,\n} from '@sgratzl/chartjs-chart-boxplot';\nimport {\n DendrogramController,\n TreeController,\n GraphController,\n ForceDirectedGraphController,\n EdgeLine,\n} from 'chartjs-chart-graph';\nimport canvasBackgroundPlugin from '../../common/plugins/canvasBackground';\nimport doughnutLabelPlugin from '../../common/plugins/doughnutLabel';\nimport meterGaugePlugin from '../../common/plugins/meterGaugeNeedle';\nimport gradientLegendPlugin from '../../common/plugins/gradientLegend';\nimport { renderHTMLLegend } from '../../common/legend';\nimport { htmlLegendPlugin } from '../../common/plugins/htmlLegendPlugin';\nimport a11yPlugin from 'chartjs-plugin-a11y-legend';\nimport datalabelsPlugin from 'chartjs-plugin-datalabels';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport {\n convertChartDataToCSV,\n debounce,\n convertTreeDataToCSV,\n} from '../../common/helpers/helpers';\nimport { renderBoxplotViolinTable } from '../../common/helpers/boxplotViolinTableRenderer';\nimport ChartScss from './chart.scss?inline';\nimport globalOptions from '../../common/config/globalOptions';\nimport globalOptionsNonRadial from '../../common/config/globalOptionsNonRadial';\nimport globalOptionsRadial from '../../common/config/globalOptionsRadial';\nimport chartIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg';\nimport tableIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg';\nimport downloadIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg';\nimport maximizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg';\nimport minimizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\nimport { renderGraphTreeTable } from '../../common/helpers/graphTreeTableRenderer';\n\nChart.register(\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n TreemapController,\n TreemapElement,\n MatrixController,\n MatrixElement,\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n Violin,\n DendrogramController,\n TreeController,\n GraphController,\n ForceDirectedGraphController,\n EdgeLine,\n annotationPlugin,\n datalabelsPlugin\n);\n\nexport interface LegendClickInfo {\n item: any;\n chart: Chart;\n isHidden: boolean;\n label: string;\n dataIndex?: number;\n datasetIndex?: number;\n element: HTMLElement;\n event?: MouseEvent;\n}\n\nexport interface HtmlLegendOptions {\n boxWidth?: number;\n boxHeight?: number;\n borderRadius?: number;\n className?: string;\n itemClassName?: string;\n layout?: 'horizontal' | 'vertical';\n fontSize?: number;\n boxMargin?: number;\n adjustChartHeight?: boolean;\n reservedLegendHeight?: number;\n /**\n * Callback fired when a legend item is clicked.\n * This handler receives comprehensive information and can interact with external APIs.\n */\n onItemClick?: (info: LegendClickInfo) => void;\n columns?: number;\n labelFormatter?: (label: string, item: any) => string;\n itemClassResolver?: (item: any) => string | null;\n position?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * Chart.js wrapper component.\n * @slot unnamed - Slot for custom content between header and chart.\n * @slot controls - Slot for custom controls such as an overflow menu.\n * @slot tooltip - Slot for tooltip in header.\n * @slot draghandle - Slot for widget drag handle.\n */\n@customElement('kd-chart')\nexport class KDChart extends LitElement {\n static override styles = unsafeCSS(ChartScss);\n\n /** Chart title. */\n @property({ type: String })\n accessor chartTitle = '';\n\n /** Chart description. */\n @property({ type: String })\n accessor description = '';\n\n /** Chart.js chart type. */\n @property({ type: String })\n accessor type: any = '';\n\n /** Chart.js data.labels. */\n @property({ type: Array })\n accessor labels!: Array<string>;\n\n /** Chart.js data.datasets. */\n @property({ type: Array })\n accessor datasets!: Array<any>;\n\n /** Chart.js options. Can override Shidoka defaults. */\n @property({ type: Object })\n accessor options: any = {};\n\n /** Chart.js additional plugins. Must be registerable inline via Chart.plugins array, not globally via Chart.register. */\n @property({ type: Array })\n accessor plugins: any = [];\n\n /** Chart.js canvas height (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n accessor height: any = null;\n\n /** Chart.js canvas width (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n accessor width: any = null;\n\n /** Hides the description visually. */\n @property({ type: Boolean })\n accessor hideDescription = false;\n\n /** Hides the closed captions visually. */\n @property({ type: Boolean })\n accessor hideCaptions = false;\n\n /** Hides the title & description. */\n @property({ type: Boolean })\n accessor hideHeader = false;\n\n /** Hides all the controls. */\n @property({ type: Boolean })\n accessor hideControls = false;\n\n /** Hides the table view control. */\n @property({ type: Boolean })\n accessor hideTableControl = false;\n\n /** Hides the fullscreen control. */\n @property({ type: Boolean })\n accessor hideFullscreenControl = false;\n\n /** Hides the download control. */\n @property({ type: Boolean })\n accessor hideDownloadControl = false;\n\n /** Removes the outer border and padding. */\n @property({ type: Boolean })\n accessor noBorder = false;\n\n /** Customizable text labels. */\n @property({ type: Object })\n accessor customLabels = {\n toggleView: 'Toggle View Mode',\n toggleFullscreen: 'Toggle Fullscreen',\n downloadMenu: 'Download Menu',\n downloadCsv: 'Download as CSV',\n downloadPng: 'Download as PNG',\n downloadJpg: 'Download as JPG',\n };\n\n /** Fullscreen state.\n * @ignore\n */\n @state()\n accessor fullscreen = false;\n\n /** Use HTML legend instead of Chart.js built-in canvas legend.\n * @public\n */\n @property({ type: Boolean })\n accessor useHtmlLegend = false;\n\n /** Max height for HTML legend scroll container (px). */\n @property({ type: Number, reflect: true })\n accessor htmlLegendMaxHeight = 100;\n\n /** Full set of legend customization options */\n @property({ type: Object })\n accessor htmlLegendOptions: HtmlLegendOptions = {};\n\n /**\n * Queries the container element.\n * @ignore\n */\n @query('.container')\n accessor container!: HTMLCanvasElement;\n\n /**\n * Queries the canvas element.\n * @ignore\n */\n @query('canvas')\n accessor canvas!: HTMLCanvasElement;\n\n /**\n * Queries the closed caption div.\n * @ignore\n */\n @query('.closed-caption')\n accessor ccDiv!: HTMLDivElement;\n\n /** The chart instance.\n * @ignore\n */\n @state()\n accessor chart: any = null;\n\n /** Table view mode.\n * @ignore\n */\n @state()\n accessor tableView = false;\n\n /** Disable table view feature.\n * @ignore\n */\n @state()\n accessor tableDisabled = false;\n\n /** Merged options.\n * @ignore\n */\n @state()\n accessor mergedOptions: any = {};\n\n /** Merged datasets.\n * @ignore\n */\n @state()\n accessor mergedDatasets: any = {};\n\n /** Is Widget. Inherited from kyn-widget.\n * @internal\n */\n @state()\n accessor _widget = false;\n\n /** Resize observer for canvas-container.\n * @internal\n */\n _resizeObserver: any = new ResizeObserver(\n debounce(() => {\n this._resizeChart();\n })\n );\n\n /** Theme observer to watch for meta color-scheme changes.\n * @internal\n */\n _themeObserver: any = new MutationObserver(() => {\n if (this.chart) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n }\n });\n\n override render() {\n const Classes = {\n container: true,\n fullscreen: this.fullscreen,\n 'no-border': this.noBorder || this._widget,\n widget: this._widget,\n };\n\n return html`\n <div\n class=${classMap(Classes)}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n ${!this.hideHeader || !this.hideControls\n ? html`\n <div class=\"header\">\n ${!this.hideHeader\n ? html`\n <slot name=\"draghandle\"></slot>\n\n <div id=\"titleDesc\">\n <div class=\"title\">\n ${this.chartTitle}\n <slot name=\"tooltip\"></slot>\n </div>\n <div\n class=\"description ${this.hideDescription\n ? 'hidden-visually'\n : ''}\"\n >\n ${this.description}\n </div>\n </div>\n `\n : null}\n ${!this.hideControls\n ? html`\n <div class=\"controls\">\n ${!this.tableDisabled && !this.hideTableControl\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleViewToggle()}\n aria-label=${this.customLabels.toggleView}\n title=${this.customLabels.toggleView}\n >\n <span slot=\"icon\">\n ${this.tableView\n ? unsafeSVG(chartIcon)\n : unsafeSVG(tableIcon)}\n </span>\n </button>\n `\n : null}\n ${!this.hideFullscreenControl\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleFullscreen()}\n aria-label=${this.customLabels.toggleFullscreen}\n title=${this.customLabels.toggleFullscreen}\n >\n <span slot=\"icon\">\n ${this.fullscreen\n ? unsafeSVG(minimizeIcon)\n : unsafeSVG(maximizeIcon)}\n </span>\n </button>\n `\n : null}\n ${!this.hideDownloadControl\n ? html`\n <div class=\"download\">\n <button\n tabindex=\"0\"\n class=\"control-button\"\n aria-label=${this.customLabels.downloadMenu}\n title=${this.customLabels.downloadMenu}\n >\n <span slot=\"icon\">\n ${unsafeSVG(downloadIcon)}\n </span>\n </button>\n\n <div class=\"download-menu\">\n ${!this.tableDisabled\n ? html`\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadCsv(e)}\n >\n ${this.customLabels.downloadCsv}\n </button>\n `\n : null}\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadImage(e, false)}\n >\n ${this.customLabels.downloadPng}\n </button>\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadImage(e, true)}\n >\n ${this.customLabels.downloadJpg}\n </button>\n </div>\n </div>\n `\n : null}\n\n <slot name=\"controls\"></slot>\n </div>\n `\n : null}\n </div>\n `\n : null}\n\n <div>\n <slot></slot>\n </div>\n\n <figure class=\"${this.tableView ? 'hidden' : ''}\">\n <div\n class=\"canvas-container\"\n style=\"${this.width ? `width: ${this.width}px;` : ''}\n ${this.height ? `height: ${this.height}px;` : ''}\"\n >\n <canvas role=\"img\" aria-labelledby=\"titleDesc\"></canvas>\n </div>\n <figcaption>\n <div\n class=\"closed-caption ${this.hideCaptions\n ? 'hidden-visually'\n : ''}\"\n ></div>\n </figcaption>\n\n <div\n class=\"html-legend-container\"\n ?hidden=${!this.useHtmlLegend}\n ></div>\n </figure>\n\n ${!this.tableDisabled && this.tableView\n ? html`\n <div class=\"table\">\n <table>\n ${['pie', 'doughnut', 'polarArea'].includes(this.type)\n ? html`\n <thead>\n <tr>\n <th>Label</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n ${this.labels.map(\n (label, i) => html`\n <tr>\n <td>${label}</td>\n <td>${this.datasets[0].data[i]}</td>\n </tr>\n `\n )}\n </tbody>\n `\n : this.type === 'matrix'\n ? html`\n <thead>\n <tr>\n <th>\n ${this.options?.scales?.y?.title?.text ||\n 'Y Axis'}\n </th>\n <th>\n ${this.options?.scales?.x?.title?.text ||\n 'X Axis'}\n </th>\n ${this.datasets.map(\n (dataset) => html`<th>${dataset.label}</th>`\n )}\n </tr>\n </thead>\n <tbody>\n ${this.datasets[0].data.map((cell: any) => {\n const xLabel = Array.isArray(this.labels)\n ? this.labels[cell.x - 1] || ''\n : (this.labels as any).x?.[cell.x - 1] || '';\n const yLabel = Array.isArray(this.labels)\n ? this.labels[cell.y - 1] || ''\n : (this.labels as any).y?.[cell.y - 1] || '';\n return html`\n <tr>\n <td>${yLabel}</td>\n <td>${xLabel}</td>\n ${this.datasets.map(\n () => html`<td>${cell.value}</td>`\n )}\n </tr>\n `;\n })}\n </tbody>\n `\n : ['boxplot', 'violin'].includes(this.type)\n ? renderBoxplotViolinTable(\n this.labels,\n this.datasets,\n this.getTableAxisLabel()\n )\n : this.type === 'tree'\n ? renderGraphTreeTable(this.datasets)\n : html`\n <thead>\n <tr>\n ${this.labels?.length || this.type === 'treemap'\n ? html`<th>${this.getTableAxisLabel()}</th>`\n : null}\n ${this.datasets.map(\n (dataset) => html`<th>${dataset.label}</th>`\n )}\n </tr>\n </thead>\n <tbody>\n ${this.type === 'treemap'\n ? Array.isArray(this.datasets[0].tree)\n ? this.datasets[0].tree.map(\n (_value: any) => html`\n <tr>\n <td>\n ${_value[this.datasets[0].labelKey]}\n </td>\n <td>${_value[this.datasets[0].key]}</td>\n </tr>\n `\n )\n : Object.entries(this.datasets[0].tree).map(\n (_value: any) => {\n const HtmlStrings = [];\n if (_value[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_value[0]}</td>\n <td>${_value[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_value[1]).map(\n (_subValue: any) => {\n if (_subValue[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_subValue[0]}</td>\n <td>${_subValue[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_subValue[1]).map(\n (_subSubValue: any) => {\n HtmlStrings.push(html`\n <tr>\n <td>${_subSubValue[0]}</td>\n <td>\n ${_subSubValue[1].value}\n </td>\n </tr>\n `);\n }\n );\n }\n }\n );\n }\n return HtmlStrings;\n }\n )\n : this.datasets[0].data.map(\n (_value: any, i: number) => {\n const IndexAxis =\n this.options.indexAxis || 'x';\n const NonIndexAxis =\n IndexAxis === 'x' ? 'y' : 'x';\n return html`\n <tr>\n ${this.labels?.length\n ? html`\n ${this.options?.scales?.[IndexAxis]\n ?.type === 'time'\n ? html`\n <td>\n ${new Date(\n this.labels[i]\n ).toLocaleString()}\n </td>\n `\n : html`\n <td>${this.labels[i]}</td>\n `}\n `\n : null}\n ${this.datasets.map((dataset) => {\n if (i >= dataset.data.length)\n return html`<td></td>`;\n\n const dataPoint = dataset.data[i];\n if (\n this.type === 'bubbleMap' ||\n this.type === 'choropleth'\n ) {\n return html`\n <td>${dataset.data[i].value}</td>\n `;\n } else if (\n this.options?.scales[NonIndexAxis]\n ?.type === 'time'\n ) {\n return html`\n <td>\n ${new Date(\n dataPoint\n ).toLocaleString()}\n </td>\n `;\n } else if (Array.isArray(dataPoint)) {\n return html`\n <td>\n ${dataPoint[0]}, ${dataPoint[1]}\n </td>\n `;\n } else if (\n [\n 'pie',\n 'doughnut',\n 'polarArea',\n ].includes(this.type)\n ) {\n return html` <td>${dataPoint}</td> `;\n } else if (\n typeof dataPoint === 'object' &&\n !Array.isArray(dataPoint) &&\n dataPoint !== null\n ) {\n return html`\n <td>\n ${Object.keys(dataPoint).map(\n (key) => {\n const Label =\n this.options?.scales?.[key]\n ?.title?.text || key;\n const DisplayData =\n this.options?.scales?.[key]\n ?.type === 'time' &&\n dataPoint[key]\n ? new Date(\n dataPoint[key]\n ).toLocaleString()\n : dataPoint[key];\n return html`\n <div>\n <strong>\n ${Label}:\n </strong>\n ${DisplayData}\n </div>\n `;\n }\n )}\n </td>\n `;\n } else {\n return html`\n <td>${dataset.data[i]}</td>\n `;\n }\n })}\n </tr>\n `;\n }\n )}\n </tbody>\n `}\n </table>\n </div>\n `\n : null}\n </div>\n `;\n }\n\n private _resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n try {\n const meta = document.querySelector('meta[name=\"color-scheme\"]');\n if (meta instanceof Node) {\n this._themeObserver.observe(meta, { attributes: true });\n }\n } catch (error) {\n console.warn('Failed to set up theme observer:', error);\n }\n }\n\n override disconnectedCallback() {\n this._resizeObserver.disconnect();\n this._themeObserver.disconnect();\n\n super.disconnectedCallback();\n }\n\n override firstUpdated() {\n const el = this.shadowRoot?.querySelector('.canvas-container');\n this._resizeObserver.observe(el);\n }\n\n private generateScrollableLegend(): void {\n if (!this.chart || !this.useHtmlLegend) return;\n\n const legendContainer = this.shadowRoot!.querySelector<HTMLElement>(\n '.html-legend-container'\n )!;\n legendContainer.innerHTML = '';\n\n const opts = {\n maxHeight: this.htmlLegendMaxHeight,\n ...this.htmlLegendOptions,\n onItemClick: (info: LegendClickInfo) => {\n if (this.htmlLegendOptions.onItemClick) {\n this.htmlLegendOptions.onItemClick(info);\n }\n\n this.dispatchEvent(\n new CustomEvent('on-click', {\n detail: info,\n bubbles: true,\n composed: true,\n })\n );\n },\n };\n\n renderHTMLLegend(this.chart, legendContainer, opts);\n }\n\n override updated(changedProps: any) {\n if (\n this.chart &&\n (changedProps.has('labels') ||\n changedProps.has('datasets') ||\n changedProps.has('options'))\n ) {\n this.mergeOptions().then(() => {\n this.chart.data.labels = this.labels;\n this.chart.options = this.mergedOptions;\n\n this.chart.data.datasets.forEach((dataset: any, index: number) => {\n const NewDataset = this.mergedDatasets.find(\n (newDataset: any) => newDataset.label === dataset.label\n );\n\n if (!NewDataset) {\n this.chart.data.datasets.splice(index, 1);\n }\n });\n\n this.mergedDatasets.forEach((dataset: any) => {\n const prevDataset = this.chart.data.datasets.find(\n (prevDataset: any) => prevDataset.label === dataset.label\n );\n\n if (!prevDataset) {\n this.chart.data.datasets.push(dataset);\n } else {\n Object.keys(dataset).forEach((key) => {\n prevDataset[key] = dataset[key];\n });\n }\n });\n\n this.chart.update();\n\n this.generateScrollableLegend();\n });\n }\n\n // init chart\n // check to make sure initial datasets + data have been provided\n let hasData = false;\n if (this.datasets && this.datasets.length) {\n for (const dataset of this.datasets) {\n hasData =\n dataset.data?.length > 0 ||\n dataset.tree?.length > 0 ||\n (dataset.tree && Object.keys(dataset.tree).length > 0);\n\n if (!hasData) {\n console.error('Missing data for one or more chart datasets.');\n break;\n }\n }\n }\n\n if (!this.chart && this.type && changedProps.has('datasets') && hasData) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n // Re-init chart instance when type, plugins, width, height, or useHtmlLegend change.\n if (\n this.chart &&\n (changedProps.has('type') ||\n changedProps.has('plugins') ||\n changedProps.has('width') ||\n changedProps.has('height') ||\n changedProps.has('useHtmlLegend'))\n ) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n if (this.chart && changedProps.has('noBorder')) {\n this.chart.resize();\n }\n }\n\n /**\n * Initializes a bar chart using the Chart.js library with provided labels, datasets,\n * and options.\n */\n private initChart() {\n const pluginSelect =\n this.type === 'meter' ? meterGaugePlugin : doughnutLabelPlugin;\n\n const chartPlugins = [\n canvasBackgroundPlugin,\n pluginSelect,\n gradientLegendPlugin,\n ...this.plugins,\n a11yPlugin,\n ];\n\n // add htmlLegendPlugin if useHtmlLegend is enabled\n if (this.useHtmlLegend) {\n chartPlugins.push(htmlLegendPlugin);\n }\n\n if (this.chart) this.chart.destroy();\n this.chart = new Chart(this.canvas, {\n type: this.type === 'meter' ? 'doughnut' : this.type,\n data: { labels: this.labels, datasets: this.mergedDatasets },\n options: this.mergedOptions,\n plugins: chartPlugins,\n });\n\n this.generateScrollableLegend();\n }\n\n /**\n * Merges various chart type options and dataset options to create a\n * final set of options for a chart.\n */\n private async mergeOptions() {\n const radialTypes = ['pie', 'doughnut', 'radar', 'polarArea', 'meter'];\n const ignoredTypes = [\n 'choropleth',\n 'treemap',\n 'bubbleMap',\n 'dendrogram',\n 'tree',\n ];\n\n // dynamically import type-specific configs\n const additionalTypeImports: any[] = [];\n this.datasets.forEach((dataset) => {\n if (dataset.type) {\n additionalTypeImports.push(\n import(`../../common/config/chartTypes/${dataset.type}.js`)\n );\n }\n });\n const chartTypeConfigs = await Promise.all([\n import(`../../common/config/chartTypes/${this.type}.js`),\n ...additionalTypeImports,\n ]);\n\n let mergedOptions: any = globalOptions(this);\n mergedOptions.plugins = mergedOptions.plugins || {};\n\n if (this.useHtmlLegend) {\n mergedOptions.plugins.legend = { display: false };\n mergedOptions.plugins.htmlLegend = mergedOptions.plugins.htmlLegend || {};\n } else {\n mergedOptions.plugins.legend = mergedOptions.plugins.legend || {};\n mergedOptions.plugins.legend.display = true;\n }\n\n // merge radial vs non-radial defaults\n if (radialTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsRadial(this));\n } else if (!ignoredTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsNonRadial(this));\n }\n\n const mergedDatasets: any[] = JSON.parse(JSON.stringify(this.datasets));\n\n chartTypeConfigs.forEach((cfg: any) => {\n mergedOptions = deepmerge(mergedOptions, cfg.options(this));\n mergedDatasets.forEach((ds: any, i: number) => {\n if ((!ds.type && cfg.type === this.type) || ds.type === cfg.type) {\n mergedDatasets[i] = deepmerge(ds, cfg.datasetOptions(this, i));\n }\n });\n });\n\n if (this.options) {\n mergedOptions = deepmerge(mergedOptions, this.options);\n }\n this.mergedOptions = mergedOptions;\n\n mergedDatasets.forEach((ds: object, i: number) => {\n const customDeep = deepmergeCustom({ mergeArrays: false });\n mergedDatasets[i] = customDeep(ds, this.datasets[i]);\n });\n this.mergedDatasets = mergedDatasets;\n }\n\n private getTableAxisLabel() {\n let label = '';\n\n if (this.options?.indexAxis === 'y') {\n if (this.options?.scales?.y?.title?.text) {\n label = this.options?.scales.y.title.text;\n } else {\n label = 'Y Axis';\n }\n } else {\n if (this.options?.scales?.x?.title?.text) {\n label = this.options?.scales.x.title.text;\n } else {\n label = 'X Axis';\n }\n }\n\n return label;\n }\n\n private handleViewToggle() {\n this.tableView = !this.tableView;\n }\n\n private checkType() {\n // chart types that can't have a data table view\n const blacklist: any = ['dendrogram', 'forceDirectedGraph', 'tree'];\n this.tableDisabled = blacklist.includes(this.type);\n }\n\n private handleDownloadImage(e: Event, jpeg: boolean) {\n e.preventDefault();\n\n const imgFormat = jpeg ? 'image/jpeg' : 'image/png';\n const fileExt = jpeg ? 'jpg' : 'png';\n\n if (this.useHtmlLegend && this.chart) {\n if (['doughnut', 'pie'].includes(this.type)) {\n this.exportSimpleCanvasOnly(imgFormat, fileExt);\n return;\n }\n\n const originalConfig = {\n options: JSON.parse(JSON.stringify(this.chart.options)),\n data: JSON.parse(JSON.stringify(this.chart.data)),\n type: this.chart.config.type,\n };\n\n const originalHidden = this.chart.data.datasets.map(\n (_: unknown, i: number) => this.chart.getDatasetMeta(i).hidden\n );\n\n try {\n if (!this.chart.options.plugins) {\n this.chart.options.plugins = {};\n }\n\n if (!this.chart.options.plugins.legend) {\n this.chart.options.plugins.legend = {};\n }\n\n this.chart.options.plugins.legend.display = true;\n this.chart.options.plugins.legend.position = 'bottom';\n this.chart.options.plugins.legend.labels = {\n boxWidth: 12,\n boxHeight: 12,\n padding: 10,\n font: {\n size: 12,\n },\n };\n\n if (!this.chart.options.layout) {\n this.chart.options.layout = { padding: { bottom: 40 } };\n } else if (!this.chart.options.layout.padding) {\n this.chart.options.layout.padding = { bottom: 40 };\n } else if (typeof this.chart.options.layout.padding === 'number') {\n this.chart.options.layout.padding = {\n top: this.chart.options.layout.padding,\n right: this.chart.options.layout.padding,\n bottom: Math.max(this.chart.options.layout.padding, 40),\n left: this.chart.options.layout.padding,\n };\n } else if (this.chart.options.layout.padding) {\n this.chart.options.layout.padding.bottom = Math.max(\n this.chart.options.layout.padding.bottom || 0,\n 40\n );\n }\n\n this.chart.update('none');\n\n const context = this.canvas.getContext('2d');\n if (!context) throw new Error('Could not get canvas context');\n\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.save();\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n const imgData = this.chart.toBase64Image(imgFormat, 1);\n\n const a = document.createElement('a');\n a.href = imgData;\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n this.chart.options = originalConfig.options;\n originalHidden.forEach((hidden: boolean, i: number) => {\n this.chart.getDatasetMeta(i).hidden = hidden;\n });\n this.chart.update();\n } catch (error) {\n console.error('Error exporting chart with legend:', error);\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n } else {\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n }\n\n private exportCanvasOnly(imgFormat: string, fileExt: string) {\n const context = this.canvas.getContext('2d');\n if (!context || !this.chart) return;\n\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.save();\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n const a = document.createElement('a');\n a.href = this.chart.toBase64Image(imgFormat, 1);\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n }\n\n private exportSimpleCanvasOnly(imgFormat: string, fileExt: string) {\n const context = this.canvas.getContext('2d');\n if (!context || !this.chart) return;\n\n try {\n const originalOptions = JSON.parse(JSON.stringify(this.chart.options));\n\n context.save();\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n this.chart.options = {\n ...this.chart.options,\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n boxWidth: 12,\n boxHeight: 12,\n padding: 10,\n font: { size: 12 },\n },\n },\n datalabels: { display: false, formatter: null },\n tooltip: { enabled: false },\n doughnutLabel: { enabled: false },\n },\n layout: {\n padding: { bottom: 40 },\n },\n };\n\n this.chart.update('none');\n\n const imgData = this.chart.toBase64Image(imgFormat, 1);\n\n const a = document.createElement('a');\n a.href = imgData;\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n this.chart.options = originalOptions;\n this.chart.update();\n } catch (error) {\n console.error('Error in exportSimpleCanvasOnly:', error);\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n }\n\n private handleDownloadCsv(e: Event) {\n e.preventDefault();\n let csv = '';\n\n // Special handling for tree and dendrogram charts\n if (this.type === 'tree' || this.type === 'dendrogram') {\n csv += convertTreeDataToCSV(this.datasets);\n } else {\n // Standard CSV handling for other chart types\n for (let i = 0; i < this.chart.data.datasets.length; i++) {\n csv += convertChartDataToCSV({\n data: this.chart.data.datasets[i],\n labels: this.labels,\n });\n }\n }\n\n if (csv == null || csv === '') return;\n\n const filename = this.chartTitle + '.csv';\n if (!csv.match(/^data:text\\/csv/i)) {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n }\n\n // not sure if anything below this comment works\n const data = encodeURI(csv);\n const link = document.createElement('a');\n link.setAttribute('href', data);\n link.setAttribute('download', filename);\n document.body.appendChild(link); // Required for FF\n link.click();\n document.body.removeChild(link);\n }\n\n private handleFullscreen() {\n if (this.shadowRoot?.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.fullscreen = this.shadowRoot?.fullscreenElement !== null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-chart': KDChart;\n }\n}\n"],"names":["Chart","register","ChoroplethController","BubbleMapController","GeoFeature","ColorScale","SizeScale","ProjectionScale","TreemapController","TreemapElement","MatrixController","MatrixElement","BoxPlotController","BoxAndWiskers","ViolinController","Violin","DendrogramController","TreeController","GraphController","ForceDirectedGraphController","EdgeLine","annotationPlugin","datalabelsPlugin","KDChart","customElement","LitElement","_classThis","_classSuper","_KDChart_chartTitle_accessor_storage","set","this","__runInitializers","_chartTitle_initializers","_KDChart_description_accessor_storage","_chartTitle_extraInitializers","_description_initializers","_KDChart_type_accessor_storage","_description_extraInitializers","_type_initializers","_KDChart_labels_accessor_storage","_type_extraInitializers","_labels_initializers","_KDChart_datasets_accessor_storage","_labels_extraInitializers","_datasets_initializers","_KDChart_options_accessor_storage","_datasets_extraInitializers","_options_initializers","_KDChart_plugins_accessor_storage","_options_extraInitializers","_plugins_initializers","_KDChart_height_accessor_storage","_plugins_extraInitializers","_height_initializers","_KDChart_width_accessor_storage","_height_extraInitializers","_width_initializers","_KDChart_hideDescription_accessor_storage","_width_extraInitializers","_hideDescription_initializers","_KDChart_hideCaptions_accessor_storage","_hideDescription_extraInitializers","_hideCaptions_initializers","_KDChart_hideHeader_accessor_storage","_hideCaptions_extraInitializers","_hideHeader_initializers","_KDChart_hideControls_accessor_storage","_hideHeader_extraInitializers","_hideControls_initializers","_KDChart_hideTableControl_accessor_storage","_hideControls_extraInitializers","_hideTableControl_initializers","_KDChart_hideFullscreenControl_accessor_storage","_hideTableControl_extraInitializers","_hideFullscreenControl_initializers","_KDChart_hideDownloadControl_accessor_storage","_hideFullscreenControl_extraInitializers","_hideDownloadControl_initializers","_KDChart_noBorder_accessor_storage","_hideDownloadControl_extraInitializers","_noBorder_initializers","_KDChart_customLabels_accessor_storage","_noBorder_extraInitializers","_customLabels_initializers","toggleView","toggleFullscreen","downloadMenu","downloadCsv","downloadPng","downloadJpg","_KDChart_fullscreen_accessor_storage","_customLabels_extraInitializers","_fullscreen_initializers","_KDChart_useHtmlLegend_accessor_storage","_fullscreen_extraInitializers","_useHtmlLegend_initializers","_KDChart_htmlLegendMaxHeight_accessor_storage","_useHtmlLegend_extraInitializers","_htmlLegendMaxHeight_initializers","_KDChart_htmlLegendOptions_accessor_storage","_htmlLegendMaxHeight_extraInitializers","_htmlLegendOptions_initializers","_KDChart_container_accessor_storage","_htmlLegendOptions_extraInitializers","_container_initializers","_KDChart_canvas_accessor_storage","_container_extraInitializers","_canvas_initializers","_KDChart_ccDiv_accessor_storage","_canvas_extraInitializers","_ccDiv_initializers","_KDChart_chart_accessor_storage","_ccDiv_extraInitializers","_chart_initializers","_KDChart_tableView_accessor_storage","_chart_extraInitializers","_tableView_initializers","_KDChart_tableDisabled_accessor_storage","_tableView_extraInitializers","_tableDisabled_initializers","_KDChart_mergedOptions_accessor_storage","_tableDisabled_extraInitializers","_mergedOptions_initializers","_KDChart_mergedDatasets_accessor_storage","_mergedOptions_extraInitializers","_mergedDatasets_initializers","_KDChart__widget_accessor_storage","_mergedDatasets_extraInitializers","__widget_initializers","_resizeObserver","ResizeObserver","debounce","_resizeChart","_themeObserver","MutationObserver","chart","mergeOptions","then","initChart","chartTitle","__classPrivateFieldGet","value","__classPrivateFieldSet","description","type","labels","datasets","options","plugins","height","width","hideDescription","hideCaptions","hideHeader","hideControls","hideTableControl","hideFullscreenControl","hideDownloadControl","noBorder","customLabels","fullscreen","useHtmlLegend","htmlLegendMaxHeight","htmlLegendOptions","container","canvas","ccDiv","tableView","tableDisabled","mergedOptions","mergedDatasets","_widget","render","Classes","widget","html","classMap","handleFullscreenChange","handleViewToggle","unsafeSVG","chartIcon","tableIcon","handleFullscreen","minimizeIcon","maximizeIcon","downloadIcon","e","handleDownloadCsv","handleDownloadImage","includes","map","label","i","data","_d","_c","_b","_a","scales","y","title","text","_h","_g","_f","_e","x","dataset","cell","xLabel","Array","isArray","yLabel","renderBoxplotViolinTable","getTableAxisLabel","renderGraphTreeTable","_j","length","tree","_value","labelKey","key","Object","entries","HtmlStrings","push","_subValue","_subSubValue","IndexAxis","indexAxis","NonIndexAxis","Date","toLocaleString","dataPoint","keys","Label","DisplayData","resize","connectedCallback","super","meta","document","querySelector","Node","observe","attributes","error","console","warn","disconnectedCallback","disconnect","firstUpdated","el","shadowRoot","generateScrollableLegend","legendContainer","innerHTML","opts","maxHeight","onItemClick","info","dispatchEvent","CustomEvent","detail","bubbles","composed","renderHTMLLegend","updated","changedProps","has","forEach","index","find","newDataset","splice","prevDataset","update","hasData","checkType","pluginSelect","meterGaugePlugin","doughnutLabelPlugin","chartPlugins","canvasBackgroundPlugin","gradientLegendPlugin","a11yPlugin","htmlLegendPlugin","destroy","additionalTypeImports","__variableDynamicImportRuntime0__","chartTypeConfigs","Promise","all","__variableDynamicImportRuntime1__","globalOptions","legend","display","htmlLegend","deepmerge","globalOptionsRadial","globalOptionsNonRadial","JSON","parse","stringify","cfg","ds","datasetOptions","customDeep","deepmergeCustom","mergeArrays","_k","_l","jpeg","preventDefault","imgFormat","fileExt","exportSimpleCanvasOnly","originalConfig","config","originalHidden","_","getDatasetMeta","hidden","position","boxWidth","boxHeight","padding","font","size","layout","top","right","bottom","Math","max","left","context","getContext","Error","color","getTokenThemeVal","save","globalCompositeOperation","fillStyle","fillRect","imgData","toBase64Image","a","createElement","href","download","body","appendChild","click","removeChild","restore","exportCanvasOnly","originalOptions","datalabels","formatter","tooltip","enabled","doughnutLabel","csv","convertTreeDataToCSV","convertChartDataToCSV","filename","match","encodeURI","link","setAttribute","fullscreenElement","exitFullscreen","requestFullscreen","_chartTitle_decorators","property","String","_description_decorators","_type_decorators","_labels_decorators","_datasets_decorators","_options_decorators","_plugins_decorators","_height_decorators","Number","_width_decorators","_hideDescription_decorators","Boolean","_hideCaptions_decorators","_hideHeader_decorators","_hideControls_decorators","_hideTableControl_decorators","_hideFullscreenControl_decorators","_hideDownloadControl_decorators","_noBorder_decorators","_customLabels_decorators","_fullscreen_decorators","state","_useHtmlLegend_decorators","reflect","_htmlLegendOptions_decorators","query","_chart_decorators","_tableView_decorators","_tableDisabled_decorators","_mergedOptions_decorators","_mergedDatasets_decorators","__widget_decorators","__esDecorate","kind","name","static","private","access","obj","get","metadata","_metadata","_htmlLegendMaxHeight_decorators","_container_decorators","_canvas_decorators","_ccDiv_decorators","__widget_extraInitializers","_classDescriptor","_classDecorators","_classExtraInitializers","styles","unsafeCSS","ChartScss"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart.js","sources":["../../../src/components/chart/chart.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { deepmerge, deepmergeCustom } from 'deepmerge-ts';\nimport Chart from 'chart.js/auto';\nimport 'chartjs-adapter-date-fns';\nimport {\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n} from 'chartjs-chart-geo';\nimport { TreemapController, TreemapElement } from 'chartjs-chart-treemap';\nimport { MatrixController, MatrixElement } from 'chartjs-chart-matrix';\nimport {\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n Violin,\n} from '@sgratzl/chartjs-chart-boxplot';\nimport {\n DendrogramController,\n TreeController,\n GraphController,\n ForceDirectedGraphController,\n EdgeLine,\n} from 'chartjs-chart-graph';\nimport { SankeyController, Flow } from 'chartjs-chart-sankey';\nimport canvasBackgroundPlugin from '../../common/plugins/canvasBackground';\nimport doughnutLabelPlugin from '../../common/plugins/doughnutLabel';\nimport meterGaugePlugin from '../../common/plugins/meterGaugeNeedle';\nimport gradientLegendPlugin from '../../common/plugins/gradientLegend';\nimport { renderHTMLLegend } from '../../common/legend';\nimport { htmlLegendPlugin } from '../../common/plugins/htmlLegendPlugin';\nimport a11yPlugin from 'chartjs-plugin-a11y-legend';\nimport datalabelsPlugin from 'chartjs-plugin-datalabels';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport {\n convertChartDataToCSV,\n debounce,\n convertTreeDataToCSV,\n} from '../../common/helpers/helpers';\nimport { renderBoxplotViolinTable } from '../../common/helpers/boxplotViolinTableRenderer';\nimport ChartScss from './chart.scss?inline';\nimport globalOptions from '../../common/config/globalOptions';\nimport globalOptionsNonRadial from '../../common/config/globalOptionsNonRadial';\nimport globalOptionsRadial from '../../common/config/globalOptionsRadial';\nimport chartIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg';\nimport tableIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg';\nimport downloadIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg';\nimport maximizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg';\nimport minimizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\nimport { renderGraphTreeTable } from '../../common/helpers/graphTreeTableRenderer';\n\nChart.register(\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n TreemapController,\n TreemapElement,\n MatrixController,\n MatrixElement,\n BoxPlotController,\n BoxAndWiskers,\n ViolinController,\n Violin,\n DendrogramController,\n TreeController,\n GraphController,\n ForceDirectedGraphController,\n EdgeLine,\n SankeyController,\n Flow,\n annotationPlugin,\n datalabelsPlugin\n);\n\nexport interface LegendClickInfo {\n item: any;\n chart: Chart;\n isHidden: boolean;\n label: string;\n dataIndex?: number;\n datasetIndex?: number;\n element: HTMLElement;\n event?: MouseEvent;\n}\n\nexport interface HtmlLegendOptions {\n boxWidth?: number;\n boxHeight?: number;\n borderRadius?: number;\n className?: string;\n itemClassName?: string;\n layout?: 'horizontal' | 'vertical';\n fontSize?: number;\n boxMargin?: number;\n adjustChartHeight?: boolean;\n reservedLegendHeight?: number;\n /**\n * Callback fired when a legend item is clicked.\n * This handler receives comprehensive information and can interact with external APIs.\n */\n onItemClick?: (info: LegendClickInfo) => void;\n columns?: number;\n labelFormatter?: (label: string, item: any) => string;\n itemClassResolver?: (item: any) => string | null;\n position?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * Chart.js wrapper component.\n * @slot unnamed - Slot for custom content between header and chart.\n * @slot controls - Slot for custom controls such as an overflow menu.\n * @slot tooltip - Slot for tooltip in header.\n * @slot draghandle - Slot for widget drag handle.\n */\n@customElement('kd-chart')\nexport class KDChart extends LitElement {\n static override styles = unsafeCSS(ChartScss);\n\n /** Chart title. */\n @property({ type: String })\n accessor chartTitle = '';\n\n /** Chart description. */\n @property({ type: String })\n accessor description = '';\n\n /** Chart.js chart type. */\n @property({ type: String })\n accessor type: any = '';\n\n /** Chart.js data.labels. */\n @property({ type: Array })\n accessor labels!: Array<string>;\n\n /** Chart.js data.datasets. */\n @property({ type: Array })\n accessor datasets!: Array<any>;\n\n /** Chart.js options. Can override Shidoka defaults. */\n @property({ type: Object })\n accessor options: any = {};\n\n /** Chart.js additional plugins. Must be registerable inline via Chart.plugins array, not globally via Chart.register. */\n @property({ type: Array })\n accessor plugins: any = [];\n\n /** Chart.js canvas height (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n accessor height: any = null;\n\n /** Chart.js canvas width (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n accessor width: any = null;\n\n /** Hides the description visually. */\n @property({ type: Boolean })\n accessor hideDescription = false;\n\n /** Hides the closed captions visually. */\n @property({ type: Boolean })\n accessor hideCaptions = false;\n\n /** Hides the title & description. */\n @property({ type: Boolean })\n accessor hideHeader = false;\n\n /** Hides all the controls. */\n @property({ type: Boolean })\n accessor hideControls = false;\n\n /** Hides the table view control. */\n @property({ type: Boolean })\n accessor hideTableControl = false;\n\n /** Hides the fullscreen control. */\n @property({ type: Boolean })\n accessor hideFullscreenControl = false;\n\n /** Hides the download control. */\n @property({ type: Boolean })\n accessor hideDownloadControl = false;\n\n /** Removes the outer border and padding. */\n @property({ type: Boolean })\n accessor noBorder = false;\n\n /** Customizable text labels. */\n @property({ type: Object })\n accessor customLabels = {\n toggleView: 'Toggle View Mode',\n toggleFullscreen: 'Toggle Fullscreen',\n downloadMenu: 'Download Menu',\n downloadCsv: 'Download as CSV',\n downloadPng: 'Download as PNG',\n downloadJpg: 'Download as JPG',\n };\n\n /** Fullscreen state.\n * @ignore\n */\n @state()\n accessor fullscreen = false;\n\n /** Use HTML legend instead of Chart.js built-in canvas legend.\n * @public\n */\n @property({ type: Boolean })\n accessor useHtmlLegend = false;\n\n /** Max height for HTML legend scroll container (px). */\n @property({ type: Number, reflect: true })\n accessor htmlLegendMaxHeight = 100;\n\n /** Full set of legend customization options */\n @property({ type: Object })\n accessor htmlLegendOptions: HtmlLegendOptions = {};\n\n /**\n * Queries the container element.\n * @ignore\n */\n @query('.container')\n accessor container!: HTMLCanvasElement;\n\n /**\n * Queries the canvas element.\n * @ignore\n */\n @query('canvas')\n accessor canvas!: HTMLCanvasElement;\n\n /**\n * Queries the closed caption div.\n * @ignore\n */\n @query('.closed-caption')\n accessor ccDiv!: HTMLDivElement;\n\n /** The chart instance.\n * @ignore\n */\n @state()\n accessor chart: any = null;\n\n /** Table view mode.\n * @ignore\n */\n @state()\n accessor tableView = false;\n\n /** Disable table view feature.\n * @ignore\n */\n @state()\n accessor tableDisabled = false;\n\n /** Merged options.\n * @ignore\n */\n @state()\n accessor mergedOptions: any = {};\n\n /** Merged datasets.\n * @ignore\n */\n @state()\n accessor mergedDatasets: any = {};\n\n /** Is Widget. Inherited from kyn-widget.\n * @internal\n */\n @state()\n accessor _widget = false;\n\n /** Resize observer for canvas-container.\n * @internal\n */\n _resizeObserver: any = new ResizeObserver(\n debounce(() => {\n this._resizeChart();\n })\n );\n\n /** Theme observer to watch for meta color-scheme changes.\n * @internal\n */\n _themeObserver: any = new MutationObserver(() => {\n if (this.chart) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n }\n });\n\n override render() {\n const Classes = {\n container: true,\n fullscreen: this.fullscreen,\n 'no-border': this.noBorder || this._widget,\n widget: this._widget,\n };\n\n return html`\n <div\n class=${classMap(Classes)}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n ${!this.hideHeader || !this.hideControls\n ? html`\n <div class=\"header\">\n ${!this.hideHeader\n ? html`\n <slot name=\"draghandle\"></slot>\n\n <div id=\"titleDesc\">\n <div class=\"title\">\n ${this.chartTitle}\n <slot name=\"tooltip\"></slot>\n </div>\n <div\n class=\"description ${this.hideDescription\n ? 'hidden-visually'\n : ''}\"\n >\n ${this.description}\n </div>\n </div>\n `\n : null}\n ${!this.hideControls\n ? html`\n <div class=\"controls\">\n ${!this.tableDisabled && !this.hideTableControl\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleViewToggle()}\n aria-label=${this.customLabels.toggleView}\n title=${this.customLabels.toggleView}\n >\n <span slot=\"icon\">\n ${this.tableView\n ? unsafeSVG(chartIcon)\n : unsafeSVG(tableIcon)}\n </span>\n </button>\n `\n : null}\n ${!this.hideFullscreenControl\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleFullscreen()}\n aria-label=${this.customLabels.toggleFullscreen}\n title=${this.customLabels.toggleFullscreen}\n >\n <span slot=\"icon\">\n ${this.fullscreen\n ? unsafeSVG(minimizeIcon)\n : unsafeSVG(maximizeIcon)}\n </span>\n </button>\n `\n : null}\n ${!this.hideDownloadControl\n ? html`\n <div class=\"download\">\n <button\n tabindex=\"0\"\n class=\"control-button\"\n aria-label=${this.customLabels.downloadMenu}\n title=${this.customLabels.downloadMenu}\n >\n <span slot=\"icon\">\n ${unsafeSVG(downloadIcon)}\n </span>\n </button>\n\n <div class=\"download-menu\">\n ${!this.tableDisabled\n ? html`\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadCsv(e)}\n >\n ${this.customLabels.downloadCsv}\n </button>\n `\n : null}\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadImage(e, false)}\n >\n ${this.customLabels.downloadPng}\n </button>\n <button\n tabindex=\"0\"\n @click=${(e: Event) =>\n this.handleDownloadImage(e, true)}\n >\n ${this.customLabels.downloadJpg}\n </button>\n </div>\n </div>\n `\n : null}\n\n <slot name=\"controls\"></slot>\n </div>\n `\n : null}\n </div>\n `\n : null}\n\n <div>\n <slot></slot>\n </div>\n\n <figure class=\"${this.tableView ? 'hidden' : ''}\">\n <div\n class=\"canvas-container\"\n style=\"${this.width ? `width: ${this.width}px;` : ''}\n ${this.height ? `height: ${this.height}px;` : ''}\"\n >\n <canvas role=\"img\" aria-labelledby=\"titleDesc\"></canvas>\n </div>\n <figcaption>\n <div\n class=\"closed-caption ${this.hideCaptions\n ? 'hidden-visually'\n : ''}\"\n ></div>\n </figcaption>\n\n <div\n class=\"html-legend-container\"\n ?hidden=${!this.useHtmlLegend}\n ></div>\n </figure>\n\n ${!this.tableDisabled && this.tableView\n ? html`\n <div class=\"table\">\n <table>\n ${['pie', 'doughnut', 'polarArea'].includes(this.type)\n ? html`\n <thead>\n <tr>\n <th>Label</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n ${this.labels.map(\n (label, i) => html`\n <tr>\n <td>${label}</td>\n <td>${this.datasets[0].data[i]}</td>\n </tr>\n `\n )}\n </tbody>\n `\n : this.type === 'matrix'\n ? html`\n <thead>\n <tr>\n <th>\n ${this.options?.scales?.y?.title?.text ||\n 'Y Axis'}\n </th>\n <th>\n ${this.options?.scales?.x?.title?.text ||\n 'X Axis'}\n </th>\n ${this.datasets.map(\n (dataset) => html`<th>${dataset.label}</th>`\n )}\n </tr>\n </thead>\n <tbody>\n ${this.datasets[0].data.map((cell: any) => {\n const xLabel = Array.isArray(this.labels)\n ? this.labels[cell.x - 1] || ''\n : (this.labels as any).x?.[cell.x - 1] || '';\n const yLabel = Array.isArray(this.labels)\n ? this.labels[cell.y - 1] || ''\n : (this.labels as any).y?.[cell.y - 1] || '';\n return html`\n <tr>\n <td>${yLabel}</td>\n <td>${xLabel}</td>\n ${this.datasets.map(\n () => html`<td>${cell.value}</td>`\n )}\n </tr>\n `;\n })}\n </tbody>\n `\n : ['boxplot', 'violin'].includes(this.type)\n ? renderBoxplotViolinTable(\n this.labels,\n this.datasets,\n this.getTableAxisLabel()\n )\n : this.type === 'tree'\n ? renderGraphTreeTable(this.datasets)\n : html`\n <thead>\n <tr>\n ${this.labels?.length || this.type === 'treemap'\n ? html`<th>${this.getTableAxisLabel()}</th>`\n : null}\n ${this.datasets.map(\n (dataset) => html`<th>${dataset.label}</th>`\n )}\n </tr>\n </thead>\n <tbody>\n ${this.type === 'treemap'\n ? Array.isArray(this.datasets[0].tree)\n ? this.datasets[0].tree.map(\n (_value: any) => html`\n <tr>\n <td>\n ${_value[this.datasets[0].labelKey]}\n </td>\n <td>${_value[this.datasets[0].key]}</td>\n </tr>\n `\n )\n : Object.entries(this.datasets[0].tree).map(\n (_value: any) => {\n const HtmlStrings = [];\n if (_value[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_value[0]}</td>\n <td>${_value[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_value[1]).map(\n (_subValue: any) => {\n if (_subValue[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_subValue[0]}</td>\n <td>${_subValue[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_subValue[1]).map(\n (_subSubValue: any) => {\n HtmlStrings.push(html`\n <tr>\n <td>${_subSubValue[0]}</td>\n <td>\n ${_subSubValue[1].value}\n </td>\n </tr>\n `);\n }\n );\n }\n }\n );\n }\n return HtmlStrings;\n }\n )\n : this.datasets[0].data.map(\n (_value: any, i: number) => {\n const IndexAxis =\n this.options.indexAxis || 'x';\n const NonIndexAxis =\n IndexAxis === 'x' ? 'y' : 'x';\n return html`\n <tr>\n ${this.labels?.length\n ? html`\n ${this.options?.scales?.[IndexAxis]\n ?.type === 'time'\n ? html`\n <td>\n ${new Date(\n this.labels[i]\n ).toLocaleString()}\n </td>\n `\n : html`\n <td>${this.labels[i]}</td>\n `}\n `\n : null}\n ${this.datasets.map((dataset) => {\n if (i >= dataset.data.length)\n return html`<td></td>`;\n\n const dataPoint = dataset.data[i];\n if (\n this.type === 'bubbleMap' ||\n this.type === 'choropleth'\n ) {\n return html`\n <td>${dataset.data[i].value}</td>\n `;\n } else if (\n this.options?.scales[NonIndexAxis]\n ?.type === 'time'\n ) {\n return html`\n <td>\n ${new Date(\n dataPoint\n ).toLocaleString()}\n </td>\n `;\n } else if (Array.isArray(dataPoint)) {\n return html`\n <td>\n ${dataPoint[0]}, ${dataPoint[1]}\n </td>\n `;\n } else if (\n [\n 'pie',\n 'doughnut',\n 'polarArea',\n ].includes(this.type)\n ) {\n return html` <td>${dataPoint}</td> `;\n } else if (\n typeof dataPoint === 'object' &&\n !Array.isArray(dataPoint) &&\n dataPoint !== null\n ) {\n return html`\n <td>\n ${Object.keys(dataPoint).map(\n (key) => {\n const Label =\n this.options?.scales?.[key]\n ?.title?.text || key;\n const DisplayData =\n this.options?.scales?.[key]\n ?.type === 'time' &&\n dataPoint[key]\n ? new Date(\n dataPoint[key]\n ).toLocaleString()\n : dataPoint[key];\n return html`\n <div>\n <strong>\n ${Label}:\n </strong>\n ${DisplayData}\n </div>\n `;\n }\n )}\n </td>\n `;\n } else {\n return html`\n <td>${dataset.data[i]}</td>\n `;\n }\n })}\n </tr>\n `;\n }\n )}\n </tbody>\n `}\n </table>\n </div>\n `\n : null}\n </div>\n `;\n }\n\n private _resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n try {\n const meta = document.querySelector('meta[name=\"color-scheme\"]');\n if (meta instanceof Node) {\n this._themeObserver.observe(meta, { attributes: true });\n }\n } catch (error) {\n console.warn('Failed to set up theme observer:', error);\n }\n }\n\n override disconnectedCallback() {\n this._resizeObserver.disconnect();\n this._themeObserver.disconnect();\n\n super.disconnectedCallback();\n }\n\n override firstUpdated() {\n const el = this.shadowRoot?.querySelector('.canvas-container');\n this._resizeObserver.observe(el);\n }\n\n private generateScrollableLegend(): void {\n if (!this.chart || !this.useHtmlLegend) return;\n\n const legendContainer = this.shadowRoot!.querySelector<HTMLElement>(\n '.html-legend-container'\n )!;\n legendContainer.innerHTML = '';\n\n const opts = {\n maxHeight: this.htmlLegendMaxHeight,\n ...this.htmlLegendOptions,\n onItemClick: (info: LegendClickInfo) => {\n if (this.htmlLegendOptions.onItemClick) {\n this.htmlLegendOptions.onItemClick(info);\n }\n\n this.dispatchEvent(\n new CustomEvent('on-click', {\n detail: info,\n bubbles: true,\n composed: true,\n })\n );\n },\n };\n\n renderHTMLLegend(this.chart, legendContainer, opts);\n }\n\n override updated(changedProps: any) {\n if (\n this.chart &&\n (changedProps.has('labels') ||\n changedProps.has('datasets') ||\n changedProps.has('options'))\n ) {\n this.mergeOptions().then(() => {\n this.chart.data.labels = this.labels;\n this.chart.options = this.mergedOptions;\n\n this.chart.data.datasets.forEach((dataset: any, index: number) => {\n const NewDataset = this.mergedDatasets.find(\n (newDataset: any) => newDataset.label === dataset.label\n );\n\n if (!NewDataset) {\n this.chart.data.datasets.splice(index, 1);\n }\n });\n\n this.mergedDatasets.forEach((dataset: any) => {\n const prevDataset = this.chart.data.datasets.find(\n (prevDataset: any) => prevDataset.label === dataset.label\n );\n\n if (!prevDataset) {\n this.chart.data.datasets.push(dataset);\n } else {\n Object.keys(dataset).forEach((key) => {\n prevDataset[key] = dataset[key];\n });\n }\n });\n\n this.chart.update();\n\n this.generateScrollableLegend();\n });\n }\n\n // init chart\n // check to make sure initial datasets + data have been provided\n let hasData = false;\n if (this.datasets && this.datasets.length) {\n for (const dataset of this.datasets) {\n hasData =\n dataset.data?.length > 0 ||\n dataset.tree?.length > 0 ||\n (dataset.tree && Object.keys(dataset.tree).length > 0);\n\n if (!hasData) {\n console.error('Missing data for one or more chart datasets.');\n break;\n }\n }\n }\n\n if (!this.chart && this.type && changedProps.has('datasets') && hasData) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n // Re-init chart instance when type, plugins, width, height, or useHtmlLegend change.\n if (\n this.chart &&\n (changedProps.has('type') ||\n changedProps.has('plugins') ||\n changedProps.has('width') ||\n changedProps.has('height') ||\n changedProps.has('useHtmlLegend'))\n ) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n if (this.chart && changedProps.has('noBorder')) {\n this.chart.resize();\n }\n }\n\n /**\n * Initializes a bar chart using the Chart.js library with provided labels, datasets,\n * and options.\n */\n private initChart() {\n const pluginSelect =\n this.type === 'meter' ? meterGaugePlugin : doughnutLabelPlugin;\n\n const chartPlugins = [\n canvasBackgroundPlugin,\n pluginSelect,\n gradientLegendPlugin,\n ...this.plugins,\n a11yPlugin,\n ];\n\n // add htmlLegendPlugin if useHtmlLegend is enabled\n if (this.useHtmlLegend) {\n chartPlugins.push(htmlLegendPlugin);\n }\n\n if (this.chart) this.chart.destroy();\n this.chart = new Chart(this.canvas, {\n type: this.type === 'meter' ? 'doughnut' : this.type,\n data: { labels: this.labels, datasets: this.mergedDatasets },\n options: this.mergedOptions,\n plugins: chartPlugins,\n });\n\n this.generateScrollableLegend();\n }\n\n /**\n * Merges various chart type options and dataset options to create a\n * final set of options for a chart.\n */\n private async mergeOptions() {\n const radialTypes = ['pie', 'doughnut', 'radar', 'polarArea', 'meter'];\n const ignoredTypes = [\n 'choropleth',\n 'treemap',\n 'bubbleMap',\n 'dendrogram',\n 'tree',\n ];\n\n // dynamically import type-specific configs\n const additionalTypeImports: any[] = [];\n this.datasets.forEach((dataset) => {\n if (dataset.type) {\n additionalTypeImports.push(\n import(`../../common/config/chartTypes/${dataset.type}.js`)\n );\n }\n });\n const chartTypeConfigs = await Promise.all([\n import(`../../common/config/chartTypes/${this.type}.js`),\n ...additionalTypeImports,\n ]);\n\n let mergedOptions: any = globalOptions(this);\n mergedOptions.plugins = mergedOptions.plugins || {};\n\n if (this.useHtmlLegend) {\n mergedOptions.plugins.legend = { display: false };\n mergedOptions.plugins.htmlLegend = mergedOptions.plugins.htmlLegend || {};\n } else {\n mergedOptions.plugins.legend = mergedOptions.plugins.legend || {};\n mergedOptions.plugins.legend.display = true;\n }\n\n // merge radial vs non-radial defaults\n if (radialTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsRadial(this));\n } else if (!ignoredTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsNonRadial(this));\n }\n\n const mergedDatasets: any[] = JSON.parse(JSON.stringify(this.datasets));\n\n chartTypeConfigs.forEach((cfg: any) => {\n mergedOptions = deepmerge(mergedOptions, cfg.options(this));\n mergedDatasets.forEach((ds: any, i: number) => {\n if ((!ds.type && cfg.type === this.type) || ds.type === cfg.type) {\n mergedDatasets[i] = deepmerge(ds, cfg.datasetOptions(this, i));\n }\n });\n });\n\n if (this.options) {\n mergedOptions = deepmerge(mergedOptions, this.options);\n }\n this.mergedOptions = mergedOptions;\n\n mergedDatasets.forEach((ds: object, i: number) => {\n const customDeep = deepmergeCustom({ mergeArrays: false });\n mergedDatasets[i] = customDeep(ds, this.datasets[i]);\n });\n this.mergedDatasets = mergedDatasets;\n }\n\n private getTableAxisLabel() {\n let label = '';\n\n if (this.options?.indexAxis === 'y') {\n if (this.options?.scales?.y?.title?.text) {\n label = this.options?.scales.y.title.text;\n } else {\n label = 'Y Axis';\n }\n } else {\n if (this.options?.scales?.x?.title?.text) {\n label = this.options?.scales.x.title.text;\n } else {\n label = 'X Axis';\n }\n }\n\n return label;\n }\n\n private handleViewToggle() {\n this.tableView = !this.tableView;\n }\n\n private checkType() {\n // chart types that can't have a data table view\n const blacklist: any = ['dendrogram', 'forceDirectedGraph', 'tree'];\n this.tableDisabled = blacklist.includes(this.type);\n }\n\n private handleDownloadImage(e: Event, jpeg: boolean) {\n e.preventDefault();\n\n const imgFormat = jpeg ? 'image/jpeg' : 'image/png';\n const fileExt = jpeg ? 'jpg' : 'png';\n\n if (this.useHtmlLegend && this.chart) {\n if (['doughnut', 'pie'].includes(this.type)) {\n this.exportSimpleCanvasOnly(imgFormat, fileExt);\n return;\n }\n\n const originalConfig = {\n options: JSON.parse(JSON.stringify(this.chart.options)),\n data: JSON.parse(JSON.stringify(this.chart.data)),\n type: this.chart.config.type,\n };\n\n const originalHidden = this.chart.data.datasets.map(\n (_: unknown, i: number) => this.chart.getDatasetMeta(i).hidden\n );\n\n try {\n if (!this.chart.options.plugins) {\n this.chart.options.plugins = {};\n }\n\n if (!this.chart.options.plugins.legend) {\n this.chart.options.plugins.legend = {};\n }\n\n this.chart.options.plugins.legend.display = true;\n this.chart.options.plugins.legend.position = 'bottom';\n this.chart.options.plugins.legend.labels = {\n boxWidth: 12,\n boxHeight: 12,\n padding: 10,\n font: {\n size: 12,\n },\n };\n\n if (!this.chart.options.layout) {\n this.chart.options.layout = { padding: { bottom: 40 } };\n } else if (!this.chart.options.layout.padding) {\n this.chart.options.layout.padding = { bottom: 40 };\n } else if (typeof this.chart.options.layout.padding === 'number') {\n this.chart.options.layout.padding = {\n top: this.chart.options.layout.padding,\n right: this.chart.options.layout.padding,\n bottom: Math.max(this.chart.options.layout.padding, 40),\n left: this.chart.options.layout.padding,\n };\n } else if (this.chart.options.layout.padding) {\n this.chart.options.layout.padding.bottom = Math.max(\n this.chart.options.layout.padding.bottom || 0,\n 40\n );\n }\n\n this.chart.update('none');\n\n const context = this.canvas.getContext('2d');\n if (!context) throw new Error('Could not get canvas context');\n\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.save();\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n const imgData = this.chart.toBase64Image(imgFormat, 1);\n\n const a = document.createElement('a');\n a.href = imgData;\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n this.chart.options = originalConfig.options;\n originalHidden.forEach((hidden: boolean, i: number) => {\n this.chart.getDatasetMeta(i).hidden = hidden;\n });\n this.chart.update();\n } catch (error) {\n console.error('Error exporting chart with legend:', error);\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n } else {\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n }\n\n private exportCanvasOnly(imgFormat: string, fileExt: string) {\n const context = this.canvas.getContext('2d');\n if (!context || !this.chart) return;\n\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.save();\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n const a = document.createElement('a');\n a.href = this.chart.toBase64Image(imgFormat, 1);\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n }\n\n private exportSimpleCanvasOnly(imgFormat: string, fileExt: string) {\n const context = this.canvas.getContext('2d');\n if (!context || !this.chart) return;\n\n try {\n const originalOptions = JSON.parse(JSON.stringify(this.chart.options));\n\n context.save();\n const color = getTokenThemeVal('--kd-color-background-page-default');\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = color;\n context.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n this.chart.options = {\n ...this.chart.options,\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n boxWidth: 12,\n boxHeight: 12,\n padding: 10,\n font: { size: 12 },\n },\n },\n datalabels: { display: false, formatter: null },\n tooltip: { enabled: false },\n doughnutLabel: { enabled: false },\n },\n layout: {\n padding: { bottom: 40 },\n },\n };\n\n this.chart.update('none');\n\n const imgData = this.chart.toBase64Image(imgFormat, 1);\n\n const a = document.createElement('a');\n a.href = imgData;\n a.download = this.chartTitle + '.' + fileExt;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n context.restore();\n this.chart.options = originalOptions;\n this.chart.update();\n } catch (error) {\n console.error('Error in exportSimpleCanvasOnly:', error);\n this.exportCanvasOnly(imgFormat, fileExt);\n }\n }\n\n private handleDownloadCsv(e: Event) {\n e.preventDefault();\n let csv = '';\n\n // Special handling for tree and dendrogram charts\n if (this.type === 'tree' || this.type === 'dendrogram') {\n csv += convertTreeDataToCSV(this.datasets);\n } else {\n // Standard CSV handling for other chart types\n for (let i = 0; i < this.chart.data.datasets.length; i++) {\n csv += convertChartDataToCSV({\n data: this.chart.data.datasets[i],\n labels: this.labels,\n });\n }\n }\n\n if (csv == null || csv === '') return;\n\n const filename = this.chartTitle + '.csv';\n if (!csv.match(/^data:text\\/csv/i)) {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n }\n\n // not sure if anything below this comment works\n const data = encodeURI(csv);\n const link = document.createElement('a');\n link.setAttribute('href', data);\n link.setAttribute('download', filename);\n document.body.appendChild(link); // Required for FF\n link.click();\n document.body.removeChild(link);\n }\n\n private handleFullscreen() {\n if (this.shadowRoot?.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.fullscreen = this.shadowRoot?.fullscreenElement !== null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-chart': KDChart;\n }\n}\n"],"names":["Chart","register","ChoroplethController","BubbleMapController","GeoFeature","ColorScale","SizeScale","ProjectionScale","TreemapController","TreemapElement","MatrixController","MatrixElement","BoxPlotController","BoxAndWiskers","ViolinController","Violin","DendrogramController","TreeController","GraphController","ForceDirectedGraphController","EdgeLine","SankeyController","Flow","annotationPlugin","datalabelsPlugin","KDChart","customElement","LitElement","_classThis","_classSuper","_KDChart_chartTitle_accessor_storage","set","this","__runInitializers","_chartTitle_initializers","_KDChart_description_accessor_storage","_chartTitle_extraInitializers","_description_initializers","_KDChart_type_accessor_storage","_description_extraInitializers","_type_initializers","_KDChart_labels_accessor_storage","_type_extraInitializers","_labels_initializers","_KDChart_datasets_accessor_storage","_labels_extraInitializers","_datasets_initializers","_KDChart_options_accessor_storage","_datasets_extraInitializers","_options_initializers","_KDChart_plugins_accessor_storage","_options_extraInitializers","_plugins_initializers","_KDChart_height_accessor_storage","_plugins_extraInitializers","_height_initializers","_KDChart_width_accessor_storage","_height_extraInitializers","_width_initializers","_KDChart_hideDescription_accessor_storage","_width_extraInitializers","_hideDescription_initializers","_KDChart_hideCaptions_accessor_storage","_hideDescription_extraInitializers","_hideCaptions_initializers","_KDChart_hideHeader_accessor_storage","_hideCaptions_extraInitializers","_hideHeader_initializers","_KDChart_hideControls_accessor_storage","_hideHeader_extraInitializers","_hideControls_initializers","_KDChart_hideTableControl_accessor_storage","_hideControls_extraInitializers","_hideTableControl_initializers","_KDChart_hideFullscreenControl_accessor_storage","_hideTableControl_extraInitializers","_hideFullscreenControl_initializers","_KDChart_hideDownloadControl_accessor_storage","_hideFullscreenControl_extraInitializers","_hideDownloadControl_initializers","_KDChart_noBorder_accessor_storage","_hideDownloadControl_extraInitializers","_noBorder_initializers","_KDChart_customLabels_accessor_storage","_noBorder_extraInitializers","_customLabels_initializers","toggleView","toggleFullscreen","downloadMenu","downloadCsv","downloadPng","downloadJpg","_KDChart_fullscreen_accessor_storage","_customLabels_extraInitializers","_fullscreen_initializers","_KDChart_useHtmlLegend_accessor_storage","_fullscreen_extraInitializers","_useHtmlLegend_initializers","_KDChart_htmlLegendMaxHeight_accessor_storage","_useHtmlLegend_extraInitializers","_htmlLegendMaxHeight_initializers","_KDChart_htmlLegendOptions_accessor_storage","_htmlLegendMaxHeight_extraInitializers","_htmlLegendOptions_initializers","_KDChart_container_accessor_storage","_htmlLegendOptions_extraInitializers","_container_initializers","_KDChart_canvas_accessor_storage","_container_extraInitializers","_canvas_initializers","_KDChart_ccDiv_accessor_storage","_canvas_extraInitializers","_ccDiv_initializers","_KDChart_chart_accessor_storage","_ccDiv_extraInitializers","_chart_initializers","_KDChart_tableView_accessor_storage","_chart_extraInitializers","_tableView_initializers","_KDChart_tableDisabled_accessor_storage","_tableView_extraInitializers","_tableDisabled_initializers","_KDChart_mergedOptions_accessor_storage","_tableDisabled_extraInitializers","_mergedOptions_initializers","_KDChart_mergedDatasets_accessor_storage","_mergedOptions_extraInitializers","_mergedDatasets_initializers","_KDChart__widget_accessor_storage","_mergedDatasets_extraInitializers","__widget_initializers","_resizeObserver","ResizeObserver","debounce","_resizeChart","_themeObserver","MutationObserver","chart","mergeOptions","then","initChart","chartTitle","__classPrivateFieldGet","value","__classPrivateFieldSet","description","type","labels","datasets","options","plugins","height","width","hideDescription","hideCaptions","hideHeader","hideControls","hideTableControl","hideFullscreenControl","hideDownloadControl","noBorder","customLabels","fullscreen","useHtmlLegend","htmlLegendMaxHeight","htmlLegendOptions","container","canvas","ccDiv","tableView","tableDisabled","mergedOptions","mergedDatasets","_widget","render","Classes","widget","html","classMap","handleFullscreenChange","handleViewToggle","unsafeSVG","chartIcon","tableIcon","handleFullscreen","minimizeIcon","maximizeIcon","downloadIcon","e","handleDownloadCsv","handleDownloadImage","includes","map","label","i","data","_d","_c","_b","_a","scales","y","title","text","_h","_g","_f","_e","x","dataset","cell","xLabel","Array","isArray","yLabel","renderBoxplotViolinTable","getTableAxisLabel","renderGraphTreeTable","_j","length","tree","_value","labelKey","key","Object","entries","HtmlStrings","push","_subValue","_subSubValue","IndexAxis","indexAxis","NonIndexAxis","Date","toLocaleString","dataPoint","keys","Label","DisplayData","resize","connectedCallback","super","meta","document","querySelector","Node","observe","attributes","error","console","warn","disconnectedCallback","disconnect","firstUpdated","el","shadowRoot","generateScrollableLegend","legendContainer","innerHTML","opts","maxHeight","onItemClick","info","dispatchEvent","CustomEvent","detail","bubbles","composed","renderHTMLLegend","updated","changedProps","has","forEach","index","find","newDataset","splice","prevDataset","update","hasData","checkType","pluginSelect","meterGaugePlugin","doughnutLabelPlugin","chartPlugins","canvasBackgroundPlugin","gradientLegendPlugin","a11yPlugin","htmlLegendPlugin","destroy","additionalTypeImports","__variableDynamicImportRuntime0__","chartTypeConfigs","Promise","all","__variableDynamicImportRuntime1__","globalOptions","legend","display","htmlLegend","deepmerge","globalOptionsRadial","globalOptionsNonRadial","JSON","parse","stringify","cfg","ds","datasetOptions","customDeep","deepmergeCustom","mergeArrays","_k","_l","jpeg","preventDefault","imgFormat","fileExt","exportSimpleCanvasOnly","originalConfig","config","originalHidden","_","getDatasetMeta","hidden","position","boxWidth","boxHeight","padding","font","size","layout","top","right","bottom","Math","max","left","context","getContext","Error","color","getTokenThemeVal","save","globalCompositeOperation","fillStyle","fillRect","imgData","toBase64Image","a","createElement","href","download","body","appendChild","click","removeChild","restore","exportCanvasOnly","originalOptions","datalabels","formatter","tooltip","enabled","doughnutLabel","csv","convertTreeDataToCSV","convertChartDataToCSV","filename","match","encodeURI","link","setAttribute","fullscreenElement","exitFullscreen","requestFullscreen","_chartTitle_decorators","property","String","_description_decorators","_type_decorators","_labels_decorators","_datasets_decorators","_options_decorators","_plugins_decorators","_height_decorators","Number","_width_decorators","_hideDescription_decorators","Boolean","_hideCaptions_decorators","_hideHeader_decorators","_hideControls_decorators","_hideTableControl_decorators","_hideFullscreenControl_decorators","_hideDownloadControl_decorators","_noBorder_decorators","_customLabels_decorators","_fullscreen_decorators","state","_useHtmlLegend_decorators","reflect","_htmlLegendOptions_decorators","query","_chart_decorators","_tableView_decorators","_tableDisabled_decorators","_mergedOptions_decorators","_mergedDatasets_decorators","__widget_decorators","__esDecorate","kind","name","static","private","access","obj","get","metadata","_metadata","_htmlLegendMaxHeight_decorators","_container_decorators","_canvas_decorators","_ccDiv_decorators","__widget_extraInitializers","_classDescriptor","_classDecorators","_classExtraInitializers","styles","unsafeCSS","ChartScss"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kyndryl-design-system/shidoka-charts",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "Shidoka Charts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "index.js",
|
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
"chart.js": "^4.4.0",
|
|
33
33
|
"chartjs-adapter-date-fns": "^3.0.0",
|
|
34
34
|
"chartjs-chart-geo": "^4.2.4",
|
|
35
|
+
"chartjs-chart-graph": "^4.3.4",
|
|
35
36
|
"chartjs-chart-matrix": "^2.0.1",
|
|
37
|
+
"chartjs-chart-sankey": "^0.14.0",
|
|
36
38
|
"chartjs-chart-treemap": "^2.3.0",
|
|
37
|
-
"chartjs-chart-graph": "^4.3.4",
|
|
38
39
|
"chartjs-plugin-a11y-legend": "^0.1.0",
|
|
39
40
|
"chartjs-plugin-annotation": "^3.0.1",
|
|
40
41
|
"chartjs-plugin-chart2music": "^0.1.2",
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
"@typescript-eslint/eslint-plugin": "^8.34.0",
|
|
66
67
|
"@typescript-eslint/parser": "^8.34.0",
|
|
67
68
|
"@vitest/browser": "^3.2.3",
|
|
68
|
-
"@vitest/coverage-v8": "^
|
|
69
|
+
"@vitest/coverage-v8": "^4.0.10",
|
|
69
70
|
"axe-playwright": "^2.0.1",
|
|
70
71
|
"chromatic": "^11.2.0",
|
|
71
72
|
"eslint": "^8.31.0",
|