@embeddable.com/remarkable-ui 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BarChartDefaultHorizontalPro.js +30 -29
- package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
- package/dist/BarChartDefaultPro.js +35 -34
- package/dist/BarChartDefaultPro.js.map +1 -1
- package/dist/BarChartGroupedHorizontalPro.js +29 -28
- package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
- package/dist/BarChartGroupedPro.js +40 -39
- package/dist/BarChartGroupedPro.js.map +1 -1
- package/dist/BarChartStackedHorizontalPro.js +28 -27
- package/dist/BarChartStackedHorizontalPro.js.map +1 -1
- package/dist/BarChartStackedPro.js +47 -46
- package/dist/BarChartStackedPro.js.map +1 -1
- package/dist/ChartCard-FOSghcoD.js +127 -0
- package/dist/ChartCard-FOSghcoD.js.map +1 -0
- package/dist/Color.type.emb-CTiA_AzI.js +9 -0
- package/dist/Color.type.emb-CTiA_AzI.js.map +1 -0
- package/dist/ColorEditor.js +38 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ComparisonPeriod.type.emb-CQ63PFtq.js +14 -0
- package/dist/{ComparisonPeriod.type.emb-D0_AP_PM.js.map → ComparisonPeriod.type.emb-CQ63PFtq.js.map} +1 -1
- package/dist/ComparisonPeriodSelectFieldPro.js +33 -32
- package/dist/ComparisonPeriodSelectFieldPro.js.map +1 -1
- package/dist/DateRangeSelectFieldPro.js +10 -8
- package/dist/DateRangeSelectFieldPro.js.map +1 -1
- package/dist/DonutChartPro.js +13 -12
- package/dist/DonutChartPro.js.map +1 -1
- package/dist/DonutLabelChartPro.js +16 -15
- package/dist/DonutLabelChartPro.js.map +1 -1
- package/dist/{EditorCard-BLudeyiZ.js → EditorCard-CB-re8Qn.js} +26 -25
- package/dist/EditorCard-CB-re8Qn.js.map +1 -0
- package/dist/{HeatMap-HTlj76CN.js → HeatMap-DwXoxYyu.js} +31 -31
- package/dist/{HeatMap-HTlj76CN.js.map → HeatMap-DwXoxYyu.js.map} +1 -1
- package/dist/HeatMapPro.js +84 -60
- package/dist/HeatMapPro.js.map +1 -1
- package/dist/KpiChart-lEsVao_M.js +110 -0
- package/dist/KpiChart-lEsVao_M.js.map +1 -0
- package/dist/KpiChartNumberComparisonPro.js +55 -53
- package/dist/KpiChartNumberComparisonPro.js.map +1 -1
- package/dist/KpiChartNumberPro.js +12 -11
- package/dist/KpiChartNumberPro.js.map +1 -1
- package/dist/LineChartComparisonDefaultPro.js +114 -106
- package/dist/LineChartComparisonDefaultPro.js.map +1 -1
- package/dist/LineChartDefaultPro.js +87 -84
- package/dist/LineChartDefaultPro.js.map +1 -1
- package/dist/LineChartGroupedPro.js +52 -51
- package/dist/LineChartGroupedPro.js.map +1 -1
- package/dist/MultiSelectFieldPro.js +10 -9
- package/dist/MultiSelectFieldPro.js.map +1 -1
- package/dist/PieChartPro.js +14 -13
- package/dist/PieChartPro.js.map +1 -1
- package/dist/{PivotTable-Diy2xzoH.js → PivotTable-DlBkWU2O.js} +8 -8
- package/dist/{PivotTable-Diy2xzoH.js.map → PivotTable-DlBkWU2O.js.map} +1 -1
- package/dist/PivotTablePro.js +48 -48
- package/dist/PivotTablePro.js.map +1 -1
- package/dist/SingleSelectField-ammJ2Zc2.js +110 -0
- package/dist/SingleSelectField-ammJ2Zc2.js.map +1 -0
- package/dist/SingleSelectFieldPro.js +9 -8
- package/dist/SingleSelectFieldPro.js.map +1 -1
- package/dist/TableChartPaginated.js +73 -72
- package/dist/TableChartPaginated.js.map +1 -1
- package/dist/TablePaginated-pVrIngVd.js +12448 -0
- package/dist/TablePaginated-pVrIngVd.js.map +1 -0
- package/dist/{bars.utils-CAMiF7iA.js → bars.utils-8ka9OKUG.js} +4 -4
- package/dist/{bars.utils-CAMiF7iA.js.map → bars.utils-8ka9OKUG.js.map} +1 -1
- package/dist/{charts.utils-Cw4SeX2m.js → charts.utils-Cbyzr0nO.js} +16149 -16144
- package/dist/charts.utils-Cbyzr0nO.js.map +1 -0
- package/dist/component.constants-VpbbPSIL.js +5452 -0
- package/dist/component.constants-VpbbPSIL.js.map +1 -0
- package/dist/embeddable-components.json +14 -12
- package/dist/embeddable-theme-2b917.js +16739 -16736
- package/dist/{embeddable-types-363c8.js → embeddable-types-df460.js} +21 -17
- package/dist/embeddable-types.js.map +1 -1
- package/dist/{formatter.utils-N2gk49ys.js → formatter.utils-BLz3TSY0.js} +2 -2
- package/dist/{formatter.utils-N2gk49ys.js.map → formatter.utils-BLz3TSY0.js.map} +1 -1
- package/dist/index-B7Pv2FEr.js +48 -0
- package/dist/{index-Dwe8JLUr.js.map → index-B7Pv2FEr.js.map} +1 -1
- package/dist/index-BYbp2vA7.js +57 -0
- package/dist/index-BYbp2vA7.js.map +1 -0
- package/dist/{index-Jm7acUco.js → index-CCJCuW1J.js} +37 -36
- package/dist/index-CCJCuW1J.js.map +1 -0
- package/dist/index-DcyTRz2V.js +63 -0
- package/dist/{index-DhfbSAKi.js.map → index-DcyTRz2V.js.map} +1 -1
- package/dist/{index-BOcQ7e6Q.js → index-DtmAIOuh.js} +25 -24
- package/dist/{index-BOcQ7e6Q.js.map → index-DtmAIOuh.js.map} +1 -1
- package/dist/index-mMCdUsGD.js +63 -0
- package/dist/{index-BKkfcfXT.js.map → index-mMCdUsGD.js.map} +1 -1
- package/dist/index.js +168 -169
- package/dist/index.js.map +1 -1
- package/dist/{pies.utils-E8f3Hj1h.js → pies.utils-Cr-a3NjZ.js} +15 -14
- package/dist/{pies.utils-E8f3Hj1h.js.map → pies.utils-Cr-a3NjZ.js.map} +1 -1
- package/dist/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts +2 -2
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts +6 -2
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +2 -3
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts +0 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/TableChartPaginated/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/component.constants.d.ts +0 -14
- package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts +1 -0
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/editors/ColorEditor/index.d.ts +8 -0
- package/dist/remarkable-pro/editors/ColorEditor/index.d.ts.map +1 -0
- package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts +17 -0
- package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts.map +1 -0
- package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/theme.constants.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/theme.types.d.ts +2 -4
- package/dist/remarkable-pro/theme/theme.types.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/utils/export.utils.d.ts +4 -4
- package/dist/remarkable-pro/theme/utils/export.utils.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts +2 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts +2 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/components/KpiChartChange.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts +3 -3
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts +3 -3
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +1 -0
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.d.ts.map +1 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts +8 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts.map +1 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts +10 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts.map +1 -0
- package/dist/remarkable-ui/index.d.ts +3 -4
- package/dist/remarkable-ui/index.d.ts.map +1 -1
- package/dist/remarkable-ui.css +1 -1
- package/dist/{timeRange.utils-DuutFoIE.js → timeRange.utils-AEhW9Gu4.js} +2 -2
- package/dist/{timeRange.utils-DuutFoIE.js.map → timeRange.utils-AEhW9Gu4.js.map} +1 -1
- package/package.json +1 -1
- package/dist/ChartCard-BzLW_64B.js +0 -122
- package/dist/ChartCard-BzLW_64B.js.map +0 -1
- package/dist/ComparisonPeriod.type.emb-D0_AP_PM.js +0 -14
- package/dist/EditorCard-BLudeyiZ.js.map +0 -1
- package/dist/KpiChart-DWnEF3iA.js +0 -105
- package/dist/KpiChart-DWnEF3iA.js.map +0 -1
- package/dist/SingleSelectField-CX2hEN0u.js +0 -109
- package/dist/SingleSelectField-CX2hEN0u.js.map +0 -1
- package/dist/charts.utils-Cw4SeX2m.js.map +0 -1
- package/dist/component.constants-B5vygi6l.js +0 -17905
- package/dist/component.constants-B5vygi6l.js.map +0 -1
- package/dist/index-BKkfcfXT.js +0 -62
- package/dist/index-DhfbSAKi.js +0 -62
- package/dist/index-Dwe8JLUr.js +0 -47
- package/dist/index-Jm7acUco.js.map +0 -1
- package/dist/index-_mthkdMa.js +0 -56
- package/dist/index-_mthkdMa.js.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts +0 -20
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts +0 -3
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts +0 -16
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts +0 -16
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts +0 -12
- package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts +0 -17
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts +0 -12
- package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts.map +0 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +0 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldOption/SelectFieldOption.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts +0 -3
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts +0 -7
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts +0 -7
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts.map +0 -1
- /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldCategory/SelectFieldCategory.d.ts +0 -0
- /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldOption/SelectFieldOption.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonutLabelChartPro.js","sources":["../src/remarkable-pro/components/charts/pies/DonutLabelChartPro/DonutLabelChartPro.emb.ts"],"sourcesContent":["import DonutChartPro from './index';\nimport { Value, loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimension,\n measure,\n maxLegendItems,\n showLegend,\n showTooltips,\n showValueLabels,\n title,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'DonutLabelChartPro',\n label: 'Donut Label Chart',\n category: 'Pie Charts',\n inputs: [\n dataset,\n measure,\n dimension,\n { ...measure, name: 'innerLabelMeasure', label: 'Inner Label Measure' },\n {\n name: 'innerLabelText',\n type: 'string',\n label: 'Inner Label Text',\n description: 'Text to display inside the donut chart',\n required: false,\n category: 'Component Data',\n },\n title,\n description,\n showLegend,\n maxLegendItems,\n showTooltips,\n showValueLabels,\n ],\n events: [\n {\n name: 'onSegmentClick',\n label: 'A segment is clicked',\n properties: [\n {\n name: 'dimensionValue',\n label: 'Clicked Dimension',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(DonutChartPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure, inputs.dimension],\n }),\n resultsInnerLabel: loadData({\n from: inputs.dataset,\n select: [inputs.innerLabelMeasure],\n }),\n };\n },\n events: {\n onSegmentClick: (value) => {\n return {\n dimensionValue: value.dimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","measure","dimension","title","description","showLegend","maxLegendItems","showTooltips","showValueLabels","DonutLabelChartPro_emb","defineComponent","DonutChartPro","inputs","loadData","value","Value"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DonutLabelChartPro.js","sources":["../src/remarkable-pro/components/charts/pies/DonutLabelChartPro/DonutLabelChartPro.emb.ts"],"sourcesContent":["import DonutChartPro from './index';\nimport { Value, loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimension,\n measure,\n maxLegendItems,\n showLegend,\n showTooltips,\n showValueLabels,\n title,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'DonutLabelChartPro',\n label: 'Donut Label Chart',\n category: 'Pie Charts',\n inputs: [\n dataset,\n measure,\n dimension,\n { ...measure, name: 'innerLabelMeasure', label: 'Inner Label Measure' },\n {\n name: 'innerLabelText',\n type: 'string',\n label: 'Inner Label Text',\n description: 'Text to display inside the donut chart',\n required: false,\n category: 'Component Data',\n },\n title,\n description,\n showLegend,\n maxLegendItems,\n showTooltips,\n showValueLabels,\n ],\n events: [\n {\n name: 'onSegmentClick',\n label: 'A segment is clicked',\n properties: [\n {\n name: 'dimensionValue',\n label: 'Clicked Dimension',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(DonutChartPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure, inputs.dimension],\n }),\n resultsInnerLabel: loadData({\n from: inputs.dataset,\n select: [inputs.innerLabelMeasure],\n }),\n };\n },\n events: {\n onSegmentClick: (value) => {\n return {\n dimensionValue: value.dimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","measure","dimension","title","description","showLegend","maxLegendItems","showTooltips","showValueLabels","DonutLabelChartPro_emb","defineComponent","DonutChartPro","inputs","loadData","value","Value"],"mappings":";;;;AAeO,MAAMA,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,IACNC;AAAA,IACAC;AAAA,IACAC;AAAA,IACA,EAAE,GAAGD,GAAS,MAAM,qBAAqB,OAAO,sBAAA;AAAA,IAChD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,IAEZE;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA;AAAA,EAEF,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEJ,GAEAC,IAAeC,EAAgBC,GAAeZ,GAAM;AAAA,EAClD,OAAO,CAACa,OACC;AAAA,IACL,GAAGA;AAAA,IACH,SAASC,EAAS;AAAA,MAChB,MAAMD,EAAO;AAAA,MACb,QAAQ,CAACA,EAAO,SAASA,EAAO,SAAS;AAAA,IAAA,CAC1C;AAAA,IACD,mBAAmBC,EAAS;AAAA,MAC1B,MAAMD,EAAO;AAAA,MACb,QAAQ,CAACA,EAAO,iBAAiB;AAAA,IAAA,CAClC;AAAA,EAAA;AAAA,EAGL,QAAQ;AAAA,IACN,gBAAgB,CAACE,OACR;AAAA,MACL,gBAAgBA,EAAM,kBAAkBC,EAAM,SAAA;AAAA,IAAS;AAAA,EAE3D;AAEJ,CAAC;"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useEffect as
|
|
3
|
-
import { useTheme as
|
|
1
|
+
import { h as i, j as o, C as l, o as u, n as d } from "./TablePaginated-pVrIngVd.js";
|
|
2
|
+
import { useEffect as m } from "react";
|
|
3
|
+
import { useTheme as y } from "@embeddable.com/react";
|
|
4
|
+
import { i as g, N as h, z as f, a5 as C } from "./component.constants-VpbbPSIL.js";
|
|
4
5
|
/**
|
|
5
6
|
* @license @tabler/icons-react v3.35.0 - MIT
|
|
6
7
|
*
|
|
7
8
|
* This source code is licensed under the MIT license.
|
|
8
9
|
* See the LICENSE file in the root directory of this source tree.
|
|
9
10
|
*/
|
|
10
|
-
const _ = [["path", { d: "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", key: "svg-0" }], ["path", { d: "M21 21l-6 -6", key: "svg-1" }]],
|
|
11
|
+
const _ = [["path", { d: "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", key: "svg-0" }], ["path", { d: "M21 21l-6 -6", key: "svg-1" }]], E = i("outline", "search", "Search", _), N = (t) => {
|
|
11
12
|
const s = t.reduce((e, r) => {
|
|
12
13
|
if ("category" in r && r.category) {
|
|
13
14
|
const a = r.category;
|
|
@@ -19,8 +20,8 @@ const _ = [["path", { d: "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", key: "svg
|
|
|
19
20
|
}, p = "_searchField_fsiyv_1", F = "_submitButton_fsiyv_5", I = {
|
|
20
21
|
searchField: p,
|
|
21
22
|
submitButton: F
|
|
22
|
-
},
|
|
23
|
-
|
|
23
|
+
}, $ = (t, s) => {
|
|
24
|
+
m(() => {
|
|
24
25
|
t && setTimeout(() => {
|
|
25
26
|
var e;
|
|
26
27
|
(e = s.current) == null || e.focus();
|
|
@@ -28,8 +29,8 @@ const _ = [["path", { d: "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", key: "svg
|
|
|
28
29
|
}, [t, s]);
|
|
29
30
|
}, j = "_selectFieldCategory_fdkgf_1", x = {
|
|
30
31
|
selectFieldCategory: j
|
|
31
|
-
},
|
|
32
|
-
function
|
|
32
|
+
}, w = ({ label: t }) => /* @__PURE__ */ o.jsx("span", { className: x.selectFieldCategory, children: t });
|
|
33
|
+
function z(t, s = 300) {
|
|
33
34
|
let e;
|
|
34
35
|
return (...r) => {
|
|
35
36
|
clearTimeout(e), e = setTimeout(() => {
|
|
@@ -39,36 +40,36 @@ function $(t, s = 300) {
|
|
|
39
40
|
}
|
|
40
41
|
const b = "_card_15bw3_1", S = {
|
|
41
42
|
card: b
|
|
42
|
-
},
|
|
43
|
+
}, A = ({
|
|
43
44
|
title: t,
|
|
44
45
|
subtitle: s,
|
|
45
46
|
children: e,
|
|
46
47
|
errorMessage: r,
|
|
47
48
|
...a
|
|
48
49
|
}) => {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
const n = () => r ? /* @__PURE__ */
|
|
52
|
-
|
|
50
|
+
const c = y();
|
|
51
|
+
g(c);
|
|
52
|
+
const n = () => r ? /* @__PURE__ */ o.jsx(
|
|
53
|
+
h,
|
|
53
54
|
{
|
|
54
55
|
variant: "error",
|
|
55
|
-
icon:
|
|
56
|
-
title:
|
|
56
|
+
icon: C,
|
|
57
|
+
title: f.t("editors.errorTitle"),
|
|
57
58
|
message: r
|
|
58
59
|
}
|
|
59
60
|
) : e;
|
|
60
|
-
return /* @__PURE__ */
|
|
61
|
-
/* @__PURE__ */
|
|
62
|
-
/* @__PURE__ */
|
|
61
|
+
return /* @__PURE__ */ o.jsxs(l, { className: S.card, ...a, children: [
|
|
62
|
+
/* @__PURE__ */ o.jsx(u, { title: t, subtitle: s }),
|
|
63
|
+
/* @__PURE__ */ o.jsx(d, { children: n() })
|
|
63
64
|
] });
|
|
64
65
|
};
|
|
65
66
|
export {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
A as E,
|
|
68
|
+
E as I,
|
|
69
|
+
w as S,
|
|
70
|
+
z as d,
|
|
71
|
+
N as g,
|
|
71
72
|
I as s,
|
|
72
|
-
|
|
73
|
+
$ as u
|
|
73
74
|
};
|
|
74
|
-
//# sourceMappingURL=EditorCard-
|
|
75
|
+
//# sourceMappingURL=EditorCard-CB-re8Qn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorCard-CB-re8Qn.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.mjs","../src/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/remarkable-ui/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/remarkable-ui/utils/debounce.utils.ts","../src/remarkable-pro/components/editors/shared/EditorCard/EditorCard.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 21l-6 -6\", \"key\": \"svg-1\" }]];\nconst IconSearch = createReactComponent(\"outline\", \"search\", \"Search\", __iconNode);\n\nexport { __iconNode, IconSearch as default };\n//# sourceMappingURL=IconSearch.mjs.map\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import { useTheme } from '@embeddable.com/react';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport styles from './EditorCard.module.css';\nimport { FC } from 'react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { Card, CardContent, CardFeedback, CardHeader } from '../../../../../remarkable-ui';\nimport { IconAlertCircle } from '@tabler/icons-react';\n\ntype EditorCardProps = {\n title?: string;\n subtitle?: string;\n children: React.ReactNode;\n errorMessage?: string;\n};\n\nexport const EditorCard: FC<EditorCardProps> = ({\n title,\n subtitle,\n children,\n errorMessage,\n ...props\n}) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const getDisplay = () => {\n if (errorMessage) {\n return (\n <CardFeedback\n variant=\"error\"\n icon={IconAlertCircle}\n title={i18n.t('editors.errorTitle')}\n message={errorMessage}\n />\n );\n }\n\n return children;\n };\n\n return (\n <Card className={styles.card} {...props}>\n <CardHeader title={title} subtitle={subtitle} />\n <CardContent>{getDisplay()}</CardContent>\n </Card>\n );\n};\n"],"names":["__iconNode","IconSearch","createReactComponent","groupOptionsByCategory","options","result","acc","option","category","useSelectSearchFocus","isOpen","searchFieldRef","useEffect","_a","SelectFieldCategory","label","jsx","styles","debounce","fn","delay","timer","args","EditorCard","title","subtitle","children","errorMessage","props","theme","useTheme","i18nSetup","getDisplay","CardFeedback","IconAlertCircle","i18n","Card","CardHeader","CardContent"],"mappings":";;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa,CAAC,CAAC,QAAQ,EAAE,GAAK,8CAA8C,KAAO,QAAO,CAAE,GAAG,CAAC,QAAQ,EAAE,GAAK,gBAAgB,KAAO,QAAO,CAAE,CAAC,GAChJC,IAAaC,EAAqB,WAAW,UAAU,UAAUF,CAAU,GCDpEG,IAAyB,CACpCC,MAC0B;AAC1B,QAAMC,IAASD,EAAQ,OAAuB,CAACE,GAAKC,MAAW;AAC7D,QAAI,cAAcA,KAAUA,EAAO,UAAU;AAC3C,YAAMC,IAAWD,EAAO;AACxB,MAAKD,EAAIE,CAAQ,MACfF,EAAIE,CAAQ,IAAI,CAAA,IAElBF,EAAIE,CAAQ,EAAE,KAAKD,CAAM;AAAA,IAC3B;AACA,WAAOD;AAAA,EACT,GAAG,CAAA,CAAE;AAGL,SAAO,OAAO,KAAKD,CAAM,EAAE,WAAW,IAAI,OAAOA;AACnD;;;GCvBaI,IAAuB,CAClCC,GACAC,MACG;AACH,EAAAC,EAAU,MAAM;AACd,IAAIF,KACF,WAAW,MAAM;;AACd,OAAAG,IAAAF,EAAe,YAAf,QAAAE,EAAwD;AAAA,IAC3D,GAAG,GAAG;AAAA,EAEV,GAAG,CAACH,GAAQC,CAAc,CAAC;AAC7B;;GCNaG,IAAoD,CAAC,EAAE,OAAAC,QAC3DC,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAWC,EAAO,qBAAsB,UAAAF,GAAM;ACPtD,SAASG,EACdC,GACAC,IAAQ,KAC0B;AAClC,MAAIC;AACJ,SAAO,IAAIC,MAAwB;AACjC,iBAAaD,CAAK,GAClBA,IAAQ,WAAW,MAAM;AACvB,MAAAF,EAAG,GAAGG,CAAI;AAAA,IACZ,GAAGF,CAAK;AAAA,EACV;AACF;;;GCGaG,IAAkC,CAAC;AAAA,EAC9C,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAeC,EAAA;AACrB,EAAAC,EAAUF,CAAK;AAEf,QAAMG,IAAa,MACbL,IAEAX,gBAAAA,EAAAA;AAAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAMC;AAAA,MACN,OAAOC,EAAK,EAAE,oBAAoB;AAAA,MAClC,SAASR;AAAA,IAAA;AAAA,EAAA,IAKRD;AAGT,gCACGU,GAAA,EAAK,WAAWnB,EAAO,MAAO,GAAGW,GAChC,UAAA;AAAA,IAAAZ,gBAAAA,EAAAA,IAACqB,GAAA,EAAW,OAAAb,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9CT,gBAAAA,EAAAA,IAACsB,GAAA,EAAa,UAAAN,EAAA,EAAW,CAAE;AAAA,EAAA,GAC7B;AAEJ;","x_google_ignoreList":[0]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useMemo as
|
|
3
|
-
import { g as
|
|
4
|
-
const
|
|
1
|
+
import { y as Q, j as f, k as T, R as N } from "./TablePaginated-pVrIngVd.js";
|
|
2
|
+
import { useMemo as k, useCallback as U } from "react";
|
|
3
|
+
import { g as $ } from "./tables.utils-D7KXdM2S.js";
|
|
4
|
+
const S = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), R = (t, e, r) => t + (e - t) * r, V = 0.35, q = "#000000", J = "#FFFFFF", C = (t) => String(t ?? ""), W = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i, j = /* @__PURE__ */ new Map(), B = (t) => {
|
|
5
5
|
if (!t || t[0] !== "#") return t;
|
|
6
6
|
const e = t.slice(1).toLowerCase();
|
|
7
7
|
return e.length === 3 ? `#${e[0]}${e[0]}${e[1]}${e[1]}${e[2]}${e[2]}` : e.length === 6 ? `#${e}` : t.toLowerCase();
|
|
8
8
|
}, Y = (t) => {
|
|
9
9
|
if (!t) return t;
|
|
10
|
-
const e =
|
|
10
|
+
const e = j.get(t);
|
|
11
11
|
if (e) return e;
|
|
12
12
|
if (t.startsWith("#")) {
|
|
13
13
|
const h = B(t);
|
|
14
|
-
return
|
|
14
|
+
return j.set(t, h), h;
|
|
15
15
|
}
|
|
16
16
|
if (typeof document > "u")
|
|
17
17
|
return t;
|
|
@@ -22,8 +22,8 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
22
22
|
const s = o.match(W);
|
|
23
23
|
if (!s) return t;
|
|
24
24
|
const [, l = "0", a = "0", p = "0"] = s, b = (h) => Number(h).toString(16).padStart(2, "0"), d = `#${b(l)}${b(a)}${b(p)}`.toLowerCase();
|
|
25
|
-
return
|
|
26
|
-
},
|
|
25
|
+
return j.set(t, d), d;
|
|
26
|
+
}, w = (t) => {
|
|
27
27
|
const e = B(Y(t)).slice(1);
|
|
28
28
|
if (e.length !== 6) return { r: 0, g: 0, b: 0 };
|
|
29
29
|
const r = parseInt(e, 16);
|
|
@@ -32,22 +32,22 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
32
32
|
const o = (s) => Math.round(s).toString(16).padStart(2, "0");
|
|
33
33
|
return `#${o(t)}${o(e)}${o(r)}`;
|
|
34
34
|
}, M = (t, e, r) => {
|
|
35
|
-
const o =
|
|
36
|
-
return Z(
|
|
35
|
+
const o = w(t), s = w(e);
|
|
36
|
+
return Z(R(o.r, s.r, r), R(o.g, s.g, r), R(o.b, s.b, r));
|
|
37
37
|
}, D = (t) => {
|
|
38
|
-
const { r: e, g: r, b: o } =
|
|
38
|
+
const { r: e, g: r, b: o } = w(t);
|
|
39
39
|
return (e * 299 + r * 587 + o * 114) / 1e3;
|
|
40
40
|
}, v = (t) => D(t) < 150 ? "#FFFFFF" : "#212129", tt = (t, e, r, o = 0.5) => {
|
|
41
|
-
const s =
|
|
41
|
+
const s = S(o);
|
|
42
42
|
return (l) => {
|
|
43
|
-
const a =
|
|
43
|
+
const a = S(l);
|
|
44
44
|
return a <= s ? M(t, e, s === 0 ? 1 : a / s) : M(e, r, (a - s) / (1 - s));
|
|
45
45
|
};
|
|
46
46
|
}, et = (t) => {
|
|
47
47
|
const e = t.trim();
|
|
48
48
|
if (!e.endsWith("%")) return null;
|
|
49
49
|
const r = Number.parseFloat(e.slice(0, -1));
|
|
50
|
-
return Number.isFinite(r) ?
|
|
50
|
+
return Number.isFinite(r) ? S(r / 100) : null;
|
|
51
51
|
}, I = (t, e, r, o) => {
|
|
52
52
|
if (t == null) return o;
|
|
53
53
|
if (typeof t == "number" && Number.isFinite(t)) return t;
|
|
@@ -83,12 +83,12 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
83
83
|
if (!Number.isFinite(g)) return b(0.5);
|
|
84
84
|
const F = (g - t) / x;
|
|
85
85
|
if (F <= 0) {
|
|
86
|
-
const m = Math.max(0, t - g) / d, i = P(
|
|
86
|
+
const m = Math.max(0, t - g) / d, i = P(S(m)) * V;
|
|
87
87
|
return i > 0 ? M(s, J, i) : s;
|
|
88
88
|
}
|
|
89
89
|
if (F >= 1) {
|
|
90
|
-
const m = Math.max(0, g - e) / h, i = P(
|
|
91
|
-
return i > 0 ? M(a,
|
|
90
|
+
const m = Math.max(0, g - e) / h, i = P(S(m)) * V;
|
|
91
|
+
return i > 0 ? M(a, q, i) : a;
|
|
92
92
|
}
|
|
93
93
|
return b(F);
|
|
94
94
|
};
|
|
@@ -102,44 +102,44 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
102
102
|
minThreshold: a,
|
|
103
103
|
maxThreshold: p,
|
|
104
104
|
minColor: b,
|
|
105
|
-
midColor: d =
|
|
105
|
+
midColor: d = Q("--em-tablechart-heatmap-color", "#FF5400"),
|
|
106
106
|
maxColor: h,
|
|
107
107
|
columnWidth: x,
|
|
108
108
|
firstColumnWidth: g,
|
|
109
109
|
displayNullAs: F
|
|
110
110
|
}) => {
|
|
111
|
-
const { rawMin: m, rawMax: i } =
|
|
111
|
+
const { rawMin: m, rawMax: i } = k(() => {
|
|
112
112
|
let n = 1 / 0, c = -1 / 0;
|
|
113
113
|
for (const y of t) {
|
|
114
114
|
const u = A(y[l.key], F);
|
|
115
115
|
u != null && typeof u == "number" && Number.isFinite(u) && (u < n && (n = u), u > c && (c = u));
|
|
116
116
|
}
|
|
117
117
|
return !Number.isFinite(n) || !Number.isFinite(c) ? { rawMin: 0, rawMax: 0 } : { rawMin: n, rawMax: c };
|
|
118
|
-
}, [t, l.key, F]), { domainMin: E, domainMax: L } =
|
|
118
|
+
}, [t, l.key, F]), { domainMin: E, domainMax: L } = k(() => {
|
|
119
119
|
const n = I(a, m, i, m), c = I(p, m, i, i);
|
|
120
120
|
return n <= c ? { domainMin: n, domainMax: c } : { domainMin: c, domainMax: n };
|
|
121
|
-
}, [a, p, m, i]), O =
|
|
121
|
+
}, [a, p, m, i]), O = k(
|
|
122
122
|
() => Array.from(
|
|
123
123
|
new Set(
|
|
124
124
|
t.map((n) => n[o.key]).filter((n) => n != null).map(C)
|
|
125
125
|
)
|
|
126
126
|
),
|
|
127
127
|
[t, o.key]
|
|
128
|
-
), G =
|
|
128
|
+
), G = k(
|
|
129
129
|
() => Array.from(
|
|
130
130
|
new Set(
|
|
131
131
|
t.map((n) => n[s.key]).filter((n) => n != null).map(C)
|
|
132
132
|
)
|
|
133
133
|
),
|
|
134
134
|
[t, s.key]
|
|
135
|
-
), K =
|
|
135
|
+
), K = k(() => {
|
|
136
136
|
const n = /* @__PURE__ */ new Map();
|
|
137
137
|
for (const c of t) {
|
|
138
138
|
const y = C(c[s.key]), u = C(c[o.key]);
|
|
139
139
|
n.has(y) || n.set(y, /* @__PURE__ */ new Map()), n.get(y).set(u, c);
|
|
140
140
|
}
|
|
141
141
|
return n;
|
|
142
|
-
}, [t, s.key, o.key]), X =
|
|
142
|
+
}, [t, s.key, o.key]), X = U(
|
|
143
143
|
(n) => ct({
|
|
144
144
|
domainMin: E,
|
|
145
145
|
domainMax: L,
|
|
@@ -164,11 +164,11 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
164
164
|
"th",
|
|
165
165
|
{
|
|
166
166
|
className: N.stickyFirstColumn,
|
|
167
|
-
style:
|
|
167
|
+
style: $(g),
|
|
168
168
|
children: l.label
|
|
169
169
|
}
|
|
170
170
|
),
|
|
171
|
-
O.map((n, c) => /* @__PURE__ */ f.jsx("th", { style:
|
|
171
|
+
O.map((n, c) => /* @__PURE__ */ f.jsx("th", { style: $(x), children: o.format ? o.format(n) : n }, `col-${n}-${c}`))
|
|
172
172
|
] }) }),
|
|
173
173
|
/* @__PURE__ */ f.jsx("tbody", { children: G.map((n) => /* @__PURE__ */ f.jsxs("tr", { children: [
|
|
174
174
|
/* @__PURE__ */ f.jsx(
|
|
@@ -176,21 +176,21 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
176
176
|
{
|
|
177
177
|
scope: "row",
|
|
178
178
|
className: N.stickyFirstColumn,
|
|
179
|
-
style:
|
|
179
|
+
style: $(g),
|
|
180
180
|
children: s.format ? s.format(n) : n
|
|
181
181
|
}
|
|
182
182
|
),
|
|
183
183
|
O.map((c) => {
|
|
184
184
|
var H;
|
|
185
|
-
const y = (H = K.get(n)) == null ? void 0 : H.get(c), u = A(y == null ? void 0 : y[l.key], F), _ = nt(u, X),
|
|
185
|
+
const y = (H = K.get(n)) == null ? void 0 : H.get(c), u = A(y == null ? void 0 : y[l.key], F), _ = nt(u, X), z = v(_);
|
|
186
186
|
return /* @__PURE__ */ f.jsx(
|
|
187
187
|
"td",
|
|
188
188
|
{
|
|
189
189
|
style: {
|
|
190
190
|
background: _,
|
|
191
|
-
color:
|
|
191
|
+
color: z,
|
|
192
192
|
textAlign: "center",
|
|
193
|
-
|
|
193
|
+
...$(x)
|
|
194
194
|
},
|
|
195
195
|
children: st(u, e, l)
|
|
196
196
|
},
|
|
@@ -205,4 +205,4 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, P = (t) => 1 - (1 - t) * (1 - t), j
|
|
|
205
205
|
export {
|
|
206
206
|
ut as H
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=HeatMap-
|
|
208
|
+
//# sourceMappingURL=HeatMap-DwXoxYyu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeatMap-HTlj76CN.js","sources":["../src/remarkable-ui/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/remarkable-ui/components/charts/tables/HeatMap/HeatMap.tsx"],"sourcesContent":["import { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return 'white';\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n textAlign: 'center',\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["clamp01","x","easeOutQuad","lerp","a","b","t","OUTSIDE_DARKEN_MAX","LERP_DARKEST_COLOR","LERP_LIGHTEST_COLOR","idOf","v","CSS_RGB_REGEX","COLOR_CACHE","normalizeHex","hex","resolveCssColorToHex","input","cached","el","computed","m","r","g","toHex","n","hexToRgb","color","i","rgbToHex","to","lerpColor","A","B","getBrightness","getCellColor","backgroundColor","makeDiverging","minC","midC","maxC","midpoint","parsePercentString","s","thresholdToRaw","rawMin","rawMax","fallback","asPct","maybe","toFiniteOrSelf","getCellValue","value","displayNullAs","getCellBackground","colorForValue","getCellDisplayValue","showValues","measure","getMidPoint","domainMin","domainMax","range","createColorForValue","minColor","midColor","maxColor","midPoint","scale","leftTailLen","rightTailLen","domRange","mid","_v","dist","strength","HeatMap","data","className","columnDimension","rowDimension","minThreshold","maxThreshold","getStyle","columnWidth","firstColumnWidth","useMemo","min","max","d","domMin","domMax","columnValues","rowValues","cellMap","map","c","useCallback","clsx","tableStyles","jsx","getTableCellWidthStyle","cv","index","rv","obj","_a","background"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeatMap-DwXoxYyu.js","sources":["../src/remarkable-ui/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/remarkable-ui/components/charts/tables/HeatMap/HeatMap.tsx"],"sourcesContent":["import { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return 'white';\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n textAlign: 'center',\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["clamp01","x","easeOutQuad","lerp","a","b","t","OUTSIDE_DARKEN_MAX","LERP_DARKEST_COLOR","LERP_LIGHTEST_COLOR","idOf","v","CSS_RGB_REGEX","COLOR_CACHE","normalizeHex","hex","resolveCssColorToHex","input","cached","el","computed","m","r","g","toHex","n","hexToRgb","color","i","rgbToHex","to","lerpColor","A","B","getBrightness","getCellColor","backgroundColor","makeDiverging","minC","midC","maxC","midpoint","parsePercentString","s","thresholdToRaw","rawMin","rawMax","fallback","asPct","maybe","toFiniteOrSelf","getCellValue","value","displayNullAs","getCellBackground","colorForValue","getCellDisplayValue","showValues","measure","getMidPoint","domainMin","domainMax","range","createColorForValue","minColor","midColor","maxColor","midPoint","scale","leftTailLen","rightTailLen","domRange","mid","_v","dist","strength","HeatMap","data","className","columnDimension","rowDimension","minThreshold","maxThreshold","getStyle","columnWidth","firstColumnWidth","useMemo","min","max","d","domMin","domMax","columnValues","rowValues","cellMap","map","c","useCallback","clsx","tableStyles","jsx","getTableCellWidthStyle","cv","index","rv","obj","_a","background"],"mappings":";;;AAMA,MAAMA,IAAU,CAACC,MAAeA,IAAI,IAAI,IAAIA,IAAI,IAAI,IAAIA,GAClDC,IAAc,CAACD,MAAc,KAAK,IAAIA,MAAM,IAAIA,IAChDE,IAAO,CAACC,GAAWC,GAAWC,MAAcF,KAAKC,IAAID,KAAKE,GAG1DC,IAAqB,MAErBC,IAAqB,WACrBC,IAAsB,WAEfC,IAAO,CAACC,MAAe,OAAOA,KAAK,EAAE,GAQ5CC,IAAgB,4CAChBC,wBAAkB,IAAA,GAGlBC,IAAe,CAACC,MAAgB;AACpC,MAAI,CAACA,KAAOA,EAAI,CAAC,MAAM,IAAK,QAAOA;AACnC,QAAMJ,IAAII,EAAI,MAAM,CAAC,EAAE,YAAA;AACvB,SAAIJ,EAAE,WAAW,IAAU,IAAIA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,KAClEA,EAAE,WAAW,IAAU,IAAIA,CAAC,KACzBI,EAAI,YAAA;AACb,GAMMC,IAAuB,CAACC,MAA0B;AACtD,MAAI,CAACA,EAAO,QAAOA;AACnB,QAAMC,IAASL,EAAY,IAAII,CAAK;AACpC,MAAIC,EAAQ,QAAOA;AAGnB,MAAID,EAAM,WAAW,GAAG,GAAG;AACzB,UAAMF,IAAMD,EAAaG,CAAK;AAC9B,WAAAJ,EAAY,IAAII,GAAOF,CAAG,GACnBA;AAAAA,EACT;AAEA,MAAI,OAAO,WAAa;AAEtB,WAAOE;AAIT,QAAME,IAAK,SAAS,cAAc,MAAM;AACxC,EAAAA,EAAG,MAAM,QAAQF,GACjB,SAAS,KAAK,YAAYE,CAAE;AAC5B,QAAMC,IAAW,iBAAiBD,CAAE,EAAE,SAAS;AAC/C,EAAAA,EAAG,OAAA;AAGH,QAAME,IAAID,EAAS,MAAMR,CAAa;AACtC,MAAI,CAACS,EAAG,QAAOJ;AAEf,QAAM,CAAA,EAAGK,IAAI,KAAKC,IAAI,KAAKlB,IAAI,GAAG,IAAIgB,GAChCG,IAAQ,CAACC,MAAc,OAAOA,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,GAC7DV,IAAM,IAAIS,EAAMF,CAAC,CAAC,GAAGE,EAAMD,CAAC,CAAC,GAAGC,EAAMnB,CAAC,CAAC,GAAG,YAAA;AACjD,SAAAQ,EAAY,IAAII,GAAOF,CAAG,GACnBA;AACT,GAEMW,IAAW,CAACC,MAAkB;AAClC,QAAMZ,IAAMD,EAAaE,EAAqBW,CAAK,CAAC,EAAE,MAAM,CAAC;AAE7D,MAAIZ,EAAI,WAAW,EAAG,QAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAA;AAC9C,QAAMa,IAAI,SAASb,GAAK,EAAE;AAC1B,SAAO,EAAE,GAAIa,KAAK,KAAM,KAAK,GAAIA,KAAK,IAAK,KAAK,GAAGA,IAAI,IAAA;AACzD,GAEMC,IAAW,CAACP,GAAWC,GAAWlB,MAAc;AACpD,QAAMyB,IAAK,CAAC7B,MAAc,KAAK,MAAMA,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACpE,SAAO,IAAI6B,EAAGR,CAAC,CAAC,GAAGQ,EAAGP,CAAC,CAAC,GAAGO,EAAGzB,CAAC,CAAC;AAClC,GAGa0B,IAAY,CAAC3B,GAAWC,GAAWC,MAAc;AAC5D,QAAM0B,IAAIN,EAAStB,CAAC,GACd6B,IAAIP,EAASrB,CAAC;AACpB,SAAOwB,EAAS1B,EAAK6B,EAAE,GAAGC,EAAE,GAAG3B,CAAC,GAAGH,EAAK6B,EAAE,GAAGC,EAAE,GAAG3B,CAAC,GAAGH,EAAK6B,EAAE,GAAGC,EAAE,GAAG3B,CAAC,CAAC;AACzE,GAGM4B,IAAgB,CAACP,MAAkB;AACvC,QAAM,EAAE,GAAAL,GAAG,GAAAC,GAAG,GAAAlB,EAAA,IAAMqB,EAASC,CAAK;AAClC,UAAQL,IAAI,MAAMC,IAAI,MAAMlB,IAAI,OAAO;AACzC,GAGa8B,IAAe,CAACC,MACpBF,EAAcE,CAAe,IAAI,MAAM,YAAY,WAQtDC,KAAgB,CAACC,GAAcC,GAAcC,GAAcC,IAAW,QAAQ;AAClF,QAAMpB,IAAIrB,EAAQyC,CAAQ;AAC1B,SAAO,CAACnC,MAAc;AACpB,UAAML,IAAID,EAAQM,CAAC;AACnB,WAAOL,KAAKoB,IACRU,EAAUO,GAAMC,GAAMlB,MAAM,IAAI,IAAIpB,IAAIoB,CAAC,IACzCU,EAAUQ,GAAMC,IAAOvC,IAAIoB,MAAM,IAAIA,EAAE;AAAA,EAC7C;AACF,GAGMqB,KAAqB,CAACC,MAA6B;AACvD,QAAMrC,IAAIqC,EAAE,KAAA;AACZ,MAAI,CAACrC,EAAE,SAAS,GAAG,EAAG,QAAO;AAC7B,QAAMmB,IAAI,OAAO,WAAWnB,EAAE,MAAM,GAAG,EAAE,CAAC;AAC1C,SAAO,OAAO,SAASmB,CAAC,IAAIzB,EAAQyB,IAAI,GAAG,IAAI;AACjD,GAQamB,IAAiB,CAC5B,GACAC,GACAC,GACAC,MACW;AACX,MAAI,KAAK,KAAM,QAAOA;AACtB,MAAI,OAAO,KAAM,YAAY,OAAO,SAAS,CAAC,EAAG,QAAO;AACxD,QAAMC,IAAQ,OAAO,KAAM,WAAWN,GAAmB,CAAC,IAAI;AAC9D,MAAIM,KAAS,KAAM,QAAOH,IAASG,KAASF,IAASD;AAGrD,QAAMI,IAAQ,OAAO,CAAsB;AAC3C,SAAO,OAAO,SAASA,CAAK,IAAIA,IAAQF;AAC1C,GAMMG,KAAiB,CAACvC,MAAgE;AACtF,MAAIA,KAAK,KAAM,QAAOA;AACtB,QAAMc,IAAI,OAAOd,CAAC;AAClB,SAAO,OAAO,SAASc,CAAC,IAAIA,IAAId;AAClC,GAQawC,IAAe,CAE1BC,GACAC,MACgC;AAChC,QAAMN,IACJM,KAAiB,OAAO,SAAS,OAAOA,CAAa,CAAC,IAAI,OAAOA,CAAa,IAAIA;AACpF,SAAOH,GAAeE,KAASL,CAAQ;AACzC,GAGaO,KAAoB,CAC/BF,GACAG,MAEI,OAAOH,KAAU,YAAY,CAAC,OAAO,SAASA,CAAK,IAAU,UAC1DG,EAAcH,CAAK,GAIfI,KAAsB,CACjCJ,GACAK,GAEAC,MAEKD,IACD,OAAOL,KAAU,YAAYA,KAAS,QAAQ,OAAO,MAAMA,CAAe,IAAUA,IACjFM,KAAA,QAAAA,EAAS,SAASA,EAAQ,OAAO,OAAON,CAAK,CAAC,IAAIA,IAFjC,MAUpBO,KAAc,CAACC,GAAmBC,MAAsB;AAC5D,QAAMC,IAAQD,IAAYD;AAC1B,SAAIE,MAAU,IAAU,QACfF,IAAYC,KAAa,IAAID,KAAaE;AACrD,GAWaC,KAAsB,CAAC;AAAA,EAClC,WAAAH;AAAA,EACA,WAAAC;AAAA,EACA,QAAAhB;AAAA,EACA,QAAAC;AAAA,EACA,UAAAkB;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MAQM;AACJ,QAAMC,IAAWR,GAAYC,GAAWC,CAAS,GAC3CO,IAAQ/B,GAAc2B,GAAUC,GAAUC,GAAUC,CAAQ,GAE5DE,IAAc,KAAK,IAAI,MAAMT,IAAYf,CAAM,GAC/CyB,IAAe,KAAK,IAAI,MAAMxB,IAASe,CAAS,GAChDU,IAAWV,IAAYD;AAE7B,MAAIW,MAAa,GAAG;AAElB,UAAMC,IAAMJ,EAAM,GAAG;AAErB,WAAO,CAACK,MAAeD;AAAA,EACzB;AAEA,SAAO,CAAC7D,MAAc;AACpB,QAAI,CAAC,OAAO,SAASA,CAAC,EAAG,QAAOyD,EAAM,GAAG;AAEzC,UAAM9D,KAAKK,IAAIiD,KAAaW;AAE5B,QAAIjE,KAAK,GAAG;AACV,YAAMoE,IAAO,KAAK,IAAI,GAAGd,IAAYjD,CAAC,IAAI0D,GACpCM,IAAWzE,EAAYF,EAAQ0E,CAAI,CAAC,IAAInE;AAC9C,aAAOoE,IAAW,IAAI5C,EAAUiC,GAAUvD,GAAqBkE,CAAQ,IAAIX;AAAA,IAC7E;AAEA,QAAI1D,KAAK,GAAG;AACV,YAAMoE,IAAO,KAAK,IAAI,GAAG/D,IAAIkD,CAAS,IAAIS,GACpCK,IAAWzE,EAAYF,EAAQ0E,CAAI,CAAC,IAAInE;AAC9C,aAAOoE,IAAW,IAAI5C,EAAUmC,GAAU1D,GAAoBmE,CAAQ,IAAIT;AAAA,IAC5E;AAEA,WAAOE,EAAM9D,CAAC;AAAA,EAChB;AACF,GC5PasE,KAAU,CAAoC;AAAA,EACzD,MAAAC;AAAA,EACA,YAAApB,IAAa;AAAA,EACb,WAAAqB;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAtB;AAAA,EACA,cAAAuB;AAAA,EACA,cAAAC;AAAA,EACA,UAAAlB;AAAA,EACA,UAAAC,IAAWkB,EAAS,iCAAiC,SAAS;AAAA,EAC9D,UAAAjB;AAAA,EACA,aAAAkB;AAAA,EACA,kBAAAC;AAAA,EACA,eAAAhC;AACF,MAAuB;AAErB,QAAM,EAAE,QAAAR,GAAQ,QAAAC,EAAA,IAAWwC,EAAQ,MAAM;AACvC,QAAIC,IAAM,OACNC,IAAM;AACV,eAAWC,KAAKZ,GAAM;AACpB,YAAMzB,IAAQD,EAAasC,EAAE/B,EAAQ,GAAG,GAAGL,CAAa;AAExD,MAAID,KAAS,QAAQ,OAAOA,KAAU,YAAY,OAAO,SAASA,CAAK,MACjEA,IAAQmC,MAAKA,IAAMnC,IACnBA,IAAQoC,MAAKA,IAAMpC;AAAA,IAE3B;AACA,WAAI,CAAC,OAAO,SAASmC,CAAG,KAAK,CAAC,OAAO,SAASC,CAAG,IAAU,EAAE,QAAQ,GAAG,QAAQ,EAAA,IACzE,EAAE,QAAQD,GAAK,QAAQC,EAAA;AAAA,EAChC,GAAG,CAACX,GAAMnB,EAAQ,KAAKL,CAAa,CAAC,GAG/B,EAAE,WAAAO,GAAW,WAAAC,EAAA,IAAcyB,EAAQ,MAAM;AAC7C,UAAMI,IAAS9C,EAAeqC,GAAcpC,GAAQC,GAAQD,CAAM,GAC5D8C,IAAS/C,EAAesC,GAAcrC,GAAQC,GAAQA,CAAM;AAClE,WAAO4C,KAAUC,IACb,EAAE,WAAWD,GAAQ,WAAWC,EAAA,IAChC,EAAE,WAAWA,GAAQ,WAAWD,EAAA;AAAA,EACtC,GAAG,CAACT,GAAcC,GAAcrC,GAAQC,CAAM,CAAC,GAEzC8C,IAAeN;AAAA,IACnB,MACE,MAAM;AAAA,MACJ,IAAI;AAAA,QACFT,EACG,IAAI,CAACY,MAAMA,EAAEV,EAAgB,GAAG,CAAC,EACjC,OAAO,CAACpE,MAAMA,KAAK,IAAI,EACvB,IAAID,CAAI;AAAA,MAAA;AAAA,IACb;AAAA,IAEJ,CAACmE,GAAME,EAAgB,GAAG;AAAA,EAAA,GAGtBc,IAAYP;AAAA,IAChB,MACE,MAAM;AAAA,MACJ,IAAI;AAAA,QACFT,EACG,IAAI,CAACY,MAAMA,EAAET,EAAa,GAAG,CAAC,EAC9B,OAAO,CAACrE,MAAMA,KAAK,IAAI,EACvB,IAAID,CAAI;AAAA,MAAA;AAAA,IACb;AAAA,IAEJ,CAACmE,GAAMG,EAAa,GAAG;AAAA,EAAA,GAInBc,IAAUR,EAAQ,MAAM;AAC5B,UAAMS,wBAAU,IAAA;AAChB,eAAWN,KAAKZ,GAAM;AACpB,YAAMvD,IAAIZ,EAAK+E,EAAET,EAAa,GAAG,CAAC,GAC5BgB,IAAItF,EAAK+E,EAAEV,EAAgB,GAAG,CAAC;AACrC,MAAKgB,EAAI,IAAIzE,CAAC,OAAO,IAAIA,GAAG,oBAAI,KAAK,GACrCyE,EAAI,IAAIzE,CAAC,EAAG,IAAI0E,GAAGP,CAA4B;AAAA,IACjD;AACA,WAAOM;AAAA,EACT,GAAG,CAAClB,GAAMG,EAAa,KAAKD,EAAgB,GAAG,CAAC,GAG1CxB,IAAgB0C;AAAA,IACpB,CAACtF,MACQoD,GAAoB;AAAA,MACzB,WAAAH;AAAA,MACA,WAAAC;AAAA,MACA,QAAAhB;AAAA,MACA,QAAAC;AAAA,MACA,UAAAkB;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,IAAA,CACD,EAAEvD,CAAC;AAAA,IAEN,CAACiD,GAAWC,GAAWhB,GAAQC,GAAQkB,GAAUC,GAAUC,CAAQ;AAAA,EAAA;AAGrE,+BACG,OAAA,EAAI,WAAWgC,EAAKC,EAAY,oBAAoBrB,CAAS,GAC5D,UAAAsB,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWF;AAAA,QACTC,EAAY;AAAA,SACX,CAACf,KAAe,CAACC,MAAqBc,EAAY;AAAA,MAAA;AAAA,MAGrD,iCAAC,SAAA,EAAM,WAAWA,EAAY,OAAO,cAAW,YAC9C,UAAA;AAAA,QAAAC,gBAAAA,EAAAA,IAAC,SAAA,EACC,iCAAC,MAAA,EACC,UAAA;AAAA,UAAAA,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAY;AAAA,cACvB,OAAOE,EAAuBhB,CAAgB;AAAA,cAE7C,UAAA3B,EAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAEVkC,EAAa,IAAI,CAACU,GAAIC,MACrBH,gBAAAA,EAAAA,IAAC,MAAA,EAA8B,OAAOC,EAAuBjB,CAAW,GACrE,YAAgB,SAASL,EAAgB,OAAOuB,CAAE,IAAIA,EAAA,GADhD,OAAOA,CAAE,IAAIC,CAAK,EAE3B,CACD;AAAA,QAAA,EAAA,CACH,EAAA,CACF;AAAA,8BAEC,SAAA,EACE,UAAAV,EAAU,IAAI,CAACW,6BACb,MAAA,EACC,UAAA;AAAA,UAAAJ,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,WAAWD,EAAY;AAAA,cACvB,OAAOE,EAAuBhB,CAAgB;AAAA,cAE7C,UAAAL,EAAa,SAASA,EAAa,OAAOwB,CAAE,IAAIA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGlDZ,EAAa,IAAI,CAACU,MAAO;;AACxB,kBAAMG,KAAMC,IAAAZ,EAAQ,IAAIU,CAAE,MAAd,gBAAAE,EAAiB,IAAIJ,IAC3BlD,IAAQD,EAAasD,KAAA,gBAAAA,EAAM/C,EAAQ,MAAML,CAAa,GACtDsD,IAAarD,GAAkBF,GAAOG,CAAa,GACnD5B,IAAQQ,EAAawE,CAAU;AAErC,mBACEP,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO;AAAA,kBACL,YAAAO;AAAA,kBACA,OAAAhF;AAAA,kBACA,WAAW;AAAA,kBACX,GAAG0E,EAAuBjB,CAAW;AAAA,gBAAA;AAAA,gBAGtC,UAAA5B,GAAoBJ,GAAOK,GAAYC,CAAO;AAAA,cAAA;AAAA,cAR1C,QAAQ8C,CAAE,IAAIF,CAAE;AAAA,YAAA;AAAA,UAW3B,CAAC;AAAA,QAAA,EAAA,GA5BM,OAAOE,CAAE,EA6BlB,CACD,EAAA,CACH;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
|