@embeddable.com/remarkable-ui 1.0.4 → 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.
Files changed (188) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +30 -29
  2. package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
  3. package/dist/BarChartDefaultPro.js +35 -34
  4. package/dist/BarChartDefaultPro.js.map +1 -1
  5. package/dist/BarChartGroupedHorizontalPro.js +29 -28
  6. package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
  7. package/dist/BarChartGroupedPro.js +40 -39
  8. package/dist/BarChartGroupedPro.js.map +1 -1
  9. package/dist/BarChartStackedHorizontalPro.js +28 -27
  10. package/dist/BarChartStackedHorizontalPro.js.map +1 -1
  11. package/dist/BarChartStackedPro.js +47 -46
  12. package/dist/BarChartStackedPro.js.map +1 -1
  13. package/dist/ChartCard-FOSghcoD.js +127 -0
  14. package/dist/ChartCard-FOSghcoD.js.map +1 -0
  15. package/dist/Color.type.emb-CTiA_AzI.js +9 -0
  16. package/dist/Color.type.emb-CTiA_AzI.js.map +1 -0
  17. package/dist/ColorEditor.js +38 -0
  18. package/dist/ColorEditor.js.map +1 -0
  19. package/dist/ComparisonPeriod.type.emb-CQ63PFtq.js +14 -0
  20. package/dist/{ComparisonPeriod.type.emb-Dlysd_iF.js.map → ComparisonPeriod.type.emb-CQ63PFtq.js.map} +1 -1
  21. package/dist/ComparisonPeriodSelectFieldPro.js +33 -32
  22. package/dist/ComparisonPeriodSelectFieldPro.js.map +1 -1
  23. package/dist/DateRangeSelectFieldPro.js +10 -8
  24. package/dist/DateRangeSelectFieldPro.js.map +1 -1
  25. package/dist/DonutChartPro.js +13 -12
  26. package/dist/DonutChartPro.js.map +1 -1
  27. package/dist/DonutLabelChartPro.js +16 -15
  28. package/dist/DonutLabelChartPro.js.map +1 -1
  29. package/dist/{EditorCard-ncOGVWah.js → EditorCard-CB-re8Qn.js} +24 -23
  30. package/dist/EditorCard-CB-re8Qn.js.map +1 -0
  31. package/dist/{HeatMap-DvjtDRTL.js → HeatMap-DwXoxYyu.js} +33 -33
  32. package/dist/{HeatMap-DvjtDRTL.js.map → HeatMap-DwXoxYyu.js.map} +1 -1
  33. package/dist/HeatMapPro.js +84 -60
  34. package/dist/HeatMapPro.js.map +1 -1
  35. package/dist/KpiChart-lEsVao_M.js +110 -0
  36. package/dist/KpiChart-lEsVao_M.js.map +1 -0
  37. package/dist/KpiChartNumberComparisonPro.js +55 -53
  38. package/dist/KpiChartNumberComparisonPro.js.map +1 -1
  39. package/dist/KpiChartNumberPro.js +12 -11
  40. package/dist/KpiChartNumberPro.js.map +1 -1
  41. package/dist/LineChartComparisonDefaultPro.js +120 -112
  42. package/dist/LineChartComparisonDefaultPro.js.map +1 -1
  43. package/dist/LineChartDefaultPro.js +87 -84
  44. package/dist/LineChartDefaultPro.js.map +1 -1
  45. package/dist/LineChartGroupedPro.js +52 -51
  46. package/dist/LineChartGroupedPro.js.map +1 -1
  47. package/dist/MultiSelectFieldPro.js +10 -9
  48. package/dist/MultiSelectFieldPro.js.map +1 -1
  49. package/dist/PieChartPro.js +14 -13
  50. package/dist/PieChartPro.js.map +1 -1
  51. package/dist/{PivotTable-UDo7378U.js → PivotTable-DlBkWU2O.js} +8 -8
  52. package/dist/{PivotTable-UDo7378U.js.map → PivotTable-DlBkWU2O.js.map} +1 -1
  53. package/dist/PivotTablePro.js +48 -48
  54. package/dist/PivotTablePro.js.map +1 -1
  55. package/dist/SingleSelectField-ammJ2Zc2.js +110 -0
  56. package/dist/SingleSelectField-ammJ2Zc2.js.map +1 -0
  57. package/dist/SingleSelectFieldPro.js +9 -8
  58. package/dist/SingleSelectFieldPro.js.map +1 -1
  59. package/dist/TableChartPaginated.js +73 -72
  60. package/dist/TableChartPaginated.js.map +1 -1
  61. package/dist/TablePaginated-pVrIngVd.js +12448 -0
  62. package/dist/TablePaginated-pVrIngVd.js.map +1 -0
  63. package/dist/{bars.utils-DLuq19zt.js → bars.utils-8ka9OKUG.js} +4 -4
  64. package/dist/{bars.utils-DLuq19zt.js.map → bars.utils-8ka9OKUG.js.map} +1 -1
  65. package/dist/{charts.utils-VLkuIHmS.js → charts.utils-Cbyzr0nO.js} +16149 -16144
  66. package/dist/charts.utils-Cbyzr0nO.js.map +1 -0
  67. package/dist/component.constants-VpbbPSIL.js +5452 -0
  68. package/dist/component.constants-VpbbPSIL.js.map +1 -0
  69. package/dist/embeddable-components.json +15 -13
  70. package/dist/embeddable-theme-2b917.js +16739 -16736
  71. package/dist/{embeddable-types-363c8.js → embeddable-types-df460.js} +21 -17
  72. package/dist/embeddable-types.js.map +1 -1
  73. package/dist/{formatter.utils-Dza9buQ8.js → formatter.utils-BLz3TSY0.js} +2 -2
  74. package/dist/{formatter.utils-Dza9buQ8.js.map → formatter.utils-BLz3TSY0.js.map} +1 -1
  75. package/dist/index-B7Pv2FEr.js +48 -0
  76. package/dist/{index-DTedizV6.js.map → index-B7Pv2FEr.js.map} +1 -1
  77. package/dist/index-BYbp2vA7.js +57 -0
  78. package/dist/index-BYbp2vA7.js.map +1 -0
  79. package/dist/{index-Bv_AzW89.js → index-CCJCuW1J.js} +37 -36
  80. package/dist/index-CCJCuW1J.js.map +1 -0
  81. package/dist/index-DcyTRz2V.js +63 -0
  82. package/dist/{index-Cvk5RTZT.js.map → index-DcyTRz2V.js.map} +1 -1
  83. package/dist/{index-DiSLIUsa.js → index-DtmAIOuh.js} +25 -24
  84. package/dist/{index-DiSLIUsa.js.map → index-DtmAIOuh.js.map} +1 -1
  85. package/dist/index-mMCdUsGD.js +63 -0
  86. package/dist/{index-CHbc8CTj.js.map → index-mMCdUsGD.js.map} +1 -1
  87. package/dist/index.js +187 -181
  88. package/dist/index.js.map +1 -1
  89. package/dist/{pies.utils-BZEnXtqg.js → pies.utils-Cr-a3NjZ.js} +15 -14
  90. package/dist/{pies.utils-BZEnXtqg.js.map → pies.utils-Cr-a3NjZ.js.map} +1 -1
  91. package/dist/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.d.ts.map +1 -1
  92. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts +2 -2
  93. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts.map +1 -1
  94. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts +6 -2
  95. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts.map +1 -1
  96. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +2 -3
  97. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -1
  98. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts +0 -1
  99. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts.map +1 -1
  100. package/dist/remarkable-pro/components/charts/tables/TableChartPaginated/index.d.ts.map +1 -1
  101. package/dist/remarkable-pro/components/component.constants.d.ts +0 -14
  102. package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
  103. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts +1 -0
  104. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts.map +1 -1
  105. package/dist/remarkable-pro/editors/ColorEditor/index.d.ts +8 -0
  106. package/dist/remarkable-pro/editors/ColorEditor/index.d.ts.map +1 -0
  107. package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts +17 -0
  108. package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts.map +1 -0
  109. package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
  110. package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
  111. package/dist/remarkable-pro/theme/theme.constants.d.ts.map +1 -1
  112. package/dist/remarkable-pro/theme/theme.types.d.ts +2 -4
  113. package/dist/remarkable-pro/theme/theme.types.d.ts.map +1 -1
  114. package/dist/remarkable-pro/theme/utils/export.utils.d.ts +4 -4
  115. package/dist/remarkable-pro/theme/utils/export.utils.d.ts.map +1 -1
  116. package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts +5 -5
  117. package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts.map +1 -1
  118. package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts +1 -1
  119. package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts.map +1 -1
  120. package/dist/remarkable-ui/components/charts/kpis/KpiChart.d.ts.map +1 -1
  121. package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts +2 -1
  122. package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts.map +1 -1
  123. package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts +2 -1
  124. package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts.map +1 -1
  125. package/dist/remarkable-ui/components/charts/kpis/components/KpiChartChange.d.ts.map +1 -1
  126. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts +1 -1
  127. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  128. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts +1 -1
  129. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts.map +1 -1
  130. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts +3 -3
  131. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts.map +1 -1
  132. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts +3 -3
  133. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts.map +1 -1
  134. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts +1 -1
  135. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts.map +1 -1
  136. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +1 -0
  137. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.d.ts.map +1 -0
  138. package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts +8 -0
  139. package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts.map +1 -0
  140. package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts +10 -0
  141. package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts.map +1 -0
  142. package/dist/remarkable-ui/index.d.ts +4 -5
  143. package/dist/remarkable-ui/index.d.ts.map +1 -1
  144. package/dist/remarkable-ui.css +1 -1
  145. package/dist/{timeRange.utils-Yy_Z93Kv.js → timeRange.utils-AEhW9Gu4.js} +2 -2
  146. package/dist/{timeRange.utils-Yy_Z93Kv.js.map → timeRange.utils-AEhW9Gu4.js.map} +1 -1
  147. package/package.json +1 -1
  148. package/dist/ChartCard-DE8akLvk.js +0 -122
  149. package/dist/ChartCard-DE8akLvk.js.map +0 -1
  150. package/dist/ComparisonPeriod.type.emb-Dlysd_iF.js +0 -14
  151. package/dist/EditorCard-ncOGVWah.js.map +0 -1
  152. package/dist/KpiChart-B9tgnF4B.js +0 -105
  153. package/dist/KpiChart-B9tgnF4B.js.map +0 -1
  154. package/dist/SingleSelectField-BTpa_tLg.js +0 -109
  155. package/dist/SingleSelectField-BTpa_tLg.js.map +0 -1
  156. package/dist/charts.utils-VLkuIHmS.js.map +0 -1
  157. package/dist/component.constants-BfTb5vNm.js +0 -17898
  158. package/dist/component.constants-BfTb5vNm.js.map +0 -1
  159. package/dist/index-9-Jj7smT.js +0 -56
  160. package/dist/index-9-Jj7smT.js.map +0 -1
  161. package/dist/index-Bv_AzW89.js.map +0 -1
  162. package/dist/index-CHbc8CTj.js +0 -62
  163. package/dist/index-Cvk5RTZT.js +0 -62
  164. package/dist/index-DTedizV6.js +0 -47
  165. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts +0 -20
  166. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts.map +0 -1
  167. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts +0 -3
  168. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts.map +0 -1
  169. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts +0 -16
  170. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts.map +0 -1
  171. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts +0 -16
  172. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts.map +0 -1
  173. package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts +0 -12
  174. package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts.map +0 -1
  175. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts +0 -17
  176. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts.map +0 -1
  177. package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts +0 -12
  178. package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts.map +0 -1
  179. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +0 -1
  180. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldOption/SelectFieldOption.d.ts.map +0 -1
  181. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts +0 -3
  182. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts.map +0 -1
  183. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts +0 -7
  184. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts.map +0 -1
  185. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts +0 -7
  186. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts.map +0 -1
  187. /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldCategory/SelectFieldCategory.d.ts +0 -0
  188. /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":";;;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
+ {"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 { a0 as i, j as c, i as l, a3 as u, a5 as d, a4 as m, a6 as y, F as g, aK as h } from "./component.constants-BfTb5vNm.js";
2
- import { useEffect as f } from "react";
3
- import { useTheme as C } from "@embeddable.com/react";
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" }]], B = i("outline", "search", "Search", _), E = (t) => {
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
- }, N = (t, s) => {
23
- f(() => {
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
- }, $ = ({ label: t }) => /* @__PURE__ */ c.jsx("span", { className: x.selectFieldCategory, children: t });
32
- function w(t, s = 300) {
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(() => {
@@ -46,29 +47,29 @@ const b = "_card_15bw3_1", S = {
46
47
  errorMessage: r,
47
48
  ...a
48
49
  }) => {
49
- const o = C();
50
- l(o);
51
- const n = () => r ? /* @__PURE__ */ c.jsx(
52
- y,
50
+ const c = y();
51
+ g(c);
52
+ const n = () => r ? /* @__PURE__ */ o.jsx(
53
+ h,
53
54
  {
54
55
  variant: "error",
55
- icon: h,
56
- title: g.t("editors.errorTitle"),
56
+ icon: C,
57
+ title: f.t("editors.errorTitle"),
57
58
  message: r
58
59
  }
59
60
  ) : e;
60
- return /* @__PURE__ */ c.jsxs(u, { className: S.card, ...a, children: [
61
- /* @__PURE__ */ c.jsx(d, { title: t, subtitle: s }),
62
- /* @__PURE__ */ c.jsx(m, { children: n() })
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
  A as E,
67
- B as I,
68
- $ as S,
69
- w as d,
70
- E as g,
68
+ E as I,
69
+ w as S,
70
+ z as d,
71
+ N as g,
71
72
  I as s,
72
- N as u
73
+ $ as u
73
74
  };
74
- //# sourceMappingURL=EditorCard-ncOGVWah.js.map
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 { aq as z, j as f, a2 as T, aI as N } from "./component.constants-BfTb5vNm.js";
2
- import { useMemo as S, useCallback as Q } from "react";
3
- import { g as k } from "./tables.utils-D7KXdM2S.js";
4
- const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, I = (t) => 1 - (1 - t) * (1 - t), j = (t, e, r) => t + (e - t) * r, P = 0.35, U = "#000000", J = "#FFFFFF", C = (t) => String(t ?? ""), W = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i, w = /* @__PURE__ */ new Map(), B = (t) => {
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 = w.get(t);
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 w.set(t, h), h;
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, I = (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 w.set(t, d), d;
26
- }, R = (t) => {
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,23 +32,23 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, I = (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 = R(t), s = R(e);
36
- return Z(j(o.r, s.r, r), j(o.g, s.g, r), j(o.b, s.b, r));
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 } = R(t);
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 = $(o);
41
+ const s = S(o);
42
42
  return (l) => {
43
- const a = $(l);
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) ? $(r / 100) : null;
51
- }, V = (t, e, r, o) => {
50
+ return Number.isFinite(r) ? S(r / 100) : null;
51
+ }, I = (t, e, r, o) => {
52
52
  if (t == null) return o;
53
53
  if (typeof t == "number" && Number.isFinite(t)) return t;
54
54
  const s = typeof t == "string" ? et(t) : null;
@@ -83,12 +83,12 @@ const $ = (t) => t < 0 ? 0 : t > 1 ? 1 : t, I = (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 = I($(m)) * 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 = I($(m)) * P;
91
- return i > 0 ? M(a, U, i) : 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, I = (t) => 1 - (1 - t) * (1 - t), j
102
102
  minThreshold: a,
103
103
  maxThreshold: p,
104
104
  minColor: b,
105
- midColor: d = z("--em-tablechart-heatmap-color", "#FF5400"),
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 } = S(() => {
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 } = S(() => {
119
- const n = V(a, m, i, m), c = V(p, m, i, i);
118
+ }, [t, l.key, F]), { domainMin: E, domainMax: L } = k(() => {
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 = S(
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 = S(
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 = S(() => {
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 = Q(
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, I = (t) => 1 - (1 - t) * (1 - t), j
164
164
  "th",
165
165
  {
166
166
  className: N.stickyFirstColumn,
167
- style: k(g),
167
+ style: $(g),
168
168
  children: l.label
169
169
  }
170
170
  ),
171
- O.map((n, c) => /* @__PURE__ */ f.jsx("th", { style: k(x), children: o.format ? o.format(n) : n }, `col-${n}-${c}`))
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, I = (t) => 1 - (1 - t) * (1 - t), j
176
176
  {
177
177
  scope: "row",
178
178
  className: N.stickyFirstColumn,
179
- style: k(g),
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), q = v(_);
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: q,
191
+ color: z,
192
192
  textAlign: "center",
193
- ...k(x)
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, I = (t) => 1 - (1 - t) * (1 - t), j
205
205
  export {
206
206
  ut as H
207
207
  };
208
- //# sourceMappingURL=HeatMap-DvjtDRTL.js.map
208
+ //# sourceMappingURL=HeatMap-DwXoxYyu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeatMap-DvjtDRTL.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":"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"}