@embeddable.com/remarkable-pro 0.0.26 → 0.0.27

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 (113) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +3 -3
  2. package/dist/BarChartDefaultPro.js +3 -3
  3. package/dist/BarChartGroupedHorizontalPro.js +3 -3
  4. package/dist/BarChartGroupedPro.js +3 -3
  5. package/dist/BarChartStackedHorizontalPro.js +3 -3
  6. package/dist/BarChartStackedPro.js +3 -3
  7. package/dist/{ChartCard-C6rVK7Ux.js → ChartCard-CfVMn37p.js} +2 -2
  8. package/dist/{ChartCard-C6rVK7Ux.js.map → ChartCard-CfVMn37p.js.map} +1 -1
  9. package/dist/{ChartGranularitySelectField-BxhibpgC.js → ChartGranularitySelectField-C_6Mugcw.js} +2 -2
  10. package/dist/{ChartGranularitySelectField-BxhibpgC.js.map → ChartGranularitySelectField-C_6Mugcw.js.map} +1 -1
  11. package/dist/ComparisonPeriodSelectFieldPro.js +2 -2
  12. package/dist/DateRangePickerCustomPro.js +2 -2
  13. package/dist/DateRangeSelectFieldPro.js +2 -2
  14. package/dist/DimensionAndMeasureSingleSelectField-CJ1yAcRd.js +45 -0
  15. package/dist/DimensionAndMeasureSingleSelectField-CJ1yAcRd.js.map +1 -0
  16. package/dist/DimensionSingleSelectFieldPro.js +86 -0
  17. package/dist/DimensionSingleSelectFieldPro.js.map +1 -0
  18. package/dist/DonutChartPro.js +3 -3
  19. package/dist/DonutLabelChartPro.js +3 -3
  20. package/dist/{EditorCard-DCm6Ykb8.js → EditorCard-B9UFM_uA.js} +2 -2
  21. package/dist/{EditorCard-DCm6Ykb8.js.map → EditorCard-B9UFM_uA.js.map} +1 -1
  22. package/dist/{GranularitySelectField-CYq2YuAO.js → GranularitySelectField-DuRk6qY8.js} +2 -2
  23. package/dist/{GranularitySelectField-CYq2YuAO.js.map → GranularitySelectField-DuRk6qY8.js.map} +1 -1
  24. package/dist/GranularitySelectFieldPro.js +3 -3
  25. package/dist/HeatMapPro.js +3 -3
  26. package/dist/KpiChartNumberComparisonPro.js +3 -3
  27. package/dist/KpiChartNumberPro.js +3 -3
  28. package/dist/LineChartComparisonDefaultPro.js +3 -3
  29. package/dist/LineChartDefaultPro.js +3 -3
  30. package/dist/LineChartGroupedPro.js +3 -3
  31. package/dist/MeasureSingleSelectFieldPro.js +86 -0
  32. package/dist/MeasureSingleSelectFieldPro.js.map +1 -0
  33. package/dist/MultiSelectFieldPro.js +3 -3
  34. package/dist/PieChartPro.js +3 -3
  35. package/dist/PivotTablePro.js +3 -3
  36. package/dist/SingleSelectFieldPro.js +4 -4
  37. package/dist/SingleSelectFieldPro.js.map +1 -1
  38. package/dist/TableChartPaginated.js +3 -3
  39. package/dist/TableScrollable.js +4 -4
  40. package/dist/{bars.utils-IYtKAgtt.js → bars.utils-B088DNG-.js} +3 -3
  41. package/dist/{bars.utils-IYtKAgtt.js.map → bars.utils-B088DNG-.js.map} +1 -1
  42. package/dist/{charts.utils-CeGAdGVG.js → charts.utils-D8oW5W5r.js} +3 -3
  43. package/dist/{charts.utils-CeGAdGVG.js.map → charts.utils-D8oW5W5r.js.map} +1 -1
  44. package/dist/{component.inputs.constants-wDyG8tFg.js → component.inputs.constants-DzpzJ9Na.js} +202 -189
  45. package/dist/{component.inputs.constants-wDyG8tFg.js.map → component.inputs.constants-DzpzJ9Na.js.map} +1 -1
  46. package/dist/components/component.inputs.constants.d.ts +33 -0
  47. package/dist/components/component.inputs.constants.d.ts.map +1 -1
  48. package/dist/components/editors/DimensionSingleSelectFieldPro/index.d.ts +12 -0
  49. package/dist/components/editors/DimensionSingleSelectFieldPro/index.d.ts.map +1 -0
  50. package/dist/components/editors/MeasureSingleSelectFieldPro/index.d.ts +12 -0
  51. package/dist/components/editors/MeasureSingleSelectFieldPro/index.d.ts.map +1 -0
  52. package/dist/components/editors/shared/DimensionAndMeasureSingleSelectField/DimensionAndMeasureSingleSelectField.d.ts +11 -0
  53. package/dist/components/editors/shared/DimensionAndMeasureSingleSelectField/DimensionAndMeasureSingleSelectField.d.ts.map +1 -0
  54. package/dist/components/editors/utils/dimensionsAndMeasures.utils.d.ts +9 -0
  55. package/dist/components/editors/utils/dimensionsAndMeasures.utils.d.ts.map +1 -0
  56. package/dist/components/preview.data.constants.d.ts +1 -0
  57. package/dist/components/preview.data.constants.d.ts.map +1 -1
  58. package/dist/embeddable-components.json +30 -26
  59. package/dist/{formatter.utils-DlbthOXA.js → formatter.utils-CiN6axbW.js} +2 -2
  60. package/dist/{formatter.utils-DlbthOXA.js.map → formatter.utils-CiN6axbW.js.map} +1 -1
  61. package/dist/{index-BFvsuXiz.js → index-7JWw7tI5.js} +4 -4
  62. package/dist/{index-BFvsuXiz.js.map → index-7JWw7tI5.js.map} +1 -1
  63. package/dist/{index-fcVfPVmY.js → index-9WoT-_pt.js} +5 -5
  64. package/dist/{index-fcVfPVmY.js.map → index-9WoT-_pt.js.map} +1 -1
  65. package/dist/{index-gnajbHE2.js → index-BCVHDZZk.js} +3 -3
  66. package/dist/{index-gnajbHE2.js.map → index-BCVHDZZk.js.map} +1 -1
  67. package/dist/{index-eEE2JmCK.js → index-BEckqi71.js} +6 -6
  68. package/dist/{index-eEE2JmCK.js.map → index-BEckqi71.js.map} +1 -1
  69. package/dist/{index-CvKdGFx3.js → index-BaTX0t-a.js} +5 -5
  70. package/dist/{index-CvKdGFx3.js.map → index-BaTX0t-a.js.map} +1 -1
  71. package/dist/{index-CiO0tI86.js → index-BnOZcps-.js} +4 -4
  72. package/dist/{index-CiO0tI86.js.map → index-BnOZcps-.js.map} +1 -1
  73. package/dist/{index-icM1qOGP.js → index-Bv9-6Ht7.js} +4 -4
  74. package/dist/{index-icM1qOGP.js.map → index-Bv9-6Ht7.js.map} +1 -1
  75. package/dist/{index-DfrwKtFA.js → index-CEDNCQK8.js} +4 -4
  76. package/dist/{index-DfrwKtFA.js.map → index-CEDNCQK8.js.map} +1 -1
  77. package/dist/{index-DHiPuxQQ.js → index-ClEmYHgx.js} +3 -3
  78. package/dist/{index-DHiPuxQQ.js.map → index-ClEmYHgx.js.map} +1 -1
  79. package/dist/{index-DytdIFQb.js → index-Co-4RSTf.js} +4 -4
  80. package/dist/{index-DytdIFQb.js.map → index-Co-4RSTf.js.map} +1 -1
  81. package/dist/{index-BkcQaDp8.js → index-Crpz4FA4.js} +5 -5
  82. package/dist/{index-BkcQaDp8.js.map → index-Crpz4FA4.js.map} +1 -1
  83. package/dist/{index-DCA_6rWw.js → index-D37a5H7U.js} +5 -5
  84. package/dist/{index-DCA_6rWw.js.map → index-D37a5H7U.js.map} +1 -1
  85. package/dist/{index-D3HMg6eu.js → index-DADSJYlJ.js} +5 -5
  86. package/dist/{index-D3HMg6eu.js.map → index-DADSJYlJ.js.map} +1 -1
  87. package/dist/{index-B2N9BsUK.js → index-DELS_iFy.js} +5 -5
  88. package/dist/{index-B2N9BsUK.js.map → index-DELS_iFy.js.map} +1 -1
  89. package/dist/{index-rodtTo_t.js → index-DKYeygzz.js} +5 -5
  90. package/dist/{index-rodtTo_t.js.map → index-DKYeygzz.js.map} +1 -1
  91. package/dist/{index-BaboirUQ.js → index-DeWASjPW.js} +4 -4
  92. package/dist/{index-BaboirUQ.js.map → index-DeWASjPW.js.map} +1 -1
  93. package/dist/{index-Bd4SFepB.js → index-DyN2Ja6Z.js} +5 -5
  94. package/dist/{index-Bd4SFepB.js.map → index-DyN2Ja6Z.js.map} +1 -1
  95. package/dist/{index-Cf96kZIH.js → index-Rm0SvvJH.js} +5 -5
  96. package/dist/{index-Cf96kZIH.js.map → index-Rm0SvvJH.js.map} +1 -1
  97. package/dist/{index-CoOz-mWY.js → index-eDr6IKsf.js} +5 -5
  98. package/dist/{index-CoOz-mWY.js.map → index-eDr6IKsf.js.map} +1 -1
  99. package/dist/{index-AqDTPWnU.js → index-mtJHlsB1.js} +4 -4
  100. package/dist/{index-AqDTPWnU.js.map → index-mtJHlsB1.js.map} +1 -1
  101. package/dist/{index-CgVjpFNs.js → index-n6RmR7mX.js} +4 -4
  102. package/dist/{index-CgVjpFNs.js.map → index-n6RmR7mX.js.map} +1 -1
  103. package/dist/index.js +29 -29
  104. package/dist/{pies.utils-XolEkyOz.js → pies.utils-DLk70PA8.js} +4 -4
  105. package/dist/{pies.utils-XolEkyOz.js.map → pies.utils-DLk70PA8.js.map} +1 -1
  106. package/dist/{preview.data.constants-37wUPKG8.js → preview.data.constants-BBIMPXYy.js} +21 -20
  107. package/dist/preview.data.constants-BBIMPXYy.js.map +1 -0
  108. package/dist/{tables.utils-Bb34U0u9.js → tables.utils-C7MWIQsp.js} +3 -3
  109. package/dist/{tables.utils-Bb34U0u9.js.map → tables.utils-C7MWIQsp.js.map} +1 -1
  110. package/dist/{timeRange.utils-DdzcsFwj.js → timeRange.utils-LHM3sXwE.js} +2 -2
  111. package/dist/{timeRange.utils-DdzcsFwj.js.map → timeRange.utils-LHM3sXwE.js.map} +1 -1
  112. package/package.json +1 -1
  113. package/dist/preview.data.constants-37wUPKG8.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { V as l, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as d } from "@embeddable.com/react";
3
- import { B as n } from "./index-fcVfPVmY.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as r } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as n } from "./index-9WoT-_pt.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as r } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as p } from "./granularity.utils-CA504xa0.js";
7
7
  const x = {
8
8
  name: "BarChartDefaultHorizontalPro",
@@ -1,8 +1,8 @@
1
1
  import { V as l, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as d } from "@embeddable.com/react";
3
- import { B as t } from "./index-Cf96kZIH.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as s } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as t } from "./index-Rm0SvvJH.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as s } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as p } from "./granularity.utils-CA504xa0.js";
7
7
  const x = {
8
8
  name: "BarChartDefaultPro",
@@ -1,8 +1,8 @@
1
1
  import { V as s, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as p } from "@embeddable.com/react";
3
- import { B as n } from "./index-B2N9BsUK.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as a } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as n } from "./index-DELS_iFy.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as a } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as d } from "./granularity.utils-CA504xa0.js";
7
7
  const x = {
8
8
  name: "BarChartGroupedHorizontalPro",
@@ -1,8 +1,8 @@
1
1
  import { V as o, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as p } from "@embeddable.com/react";
3
- import { B as n } from "./index-CoOz-mWY.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as a } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as n } from "./index-eDr6IKsf.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as a } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as d } from "./granularity.utils-CA504xa0.js";
7
7
  const x = {
8
8
  name: "BarChartGroupedPro",
@@ -1,8 +1,8 @@
1
1
  import { V as o, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as d } from "@embeddable.com/react";
3
- import { B as n } from "./index-Bd4SFepB.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as i } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as n } from "./index-DyN2Ja6Z.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as i } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as p } from "./granularity.utils-CA504xa0.js";
7
7
  const x = {
8
8
  name: "BarChartStackedHorizontalPro",
@@ -1,8 +1,8 @@
1
1
  import { V as n, l as m } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as u, defineComponent as d } from "@embeddable.com/react";
3
- import { B as o } from "./index-rodtTo_t.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as i } from "./preview.data.constants-37wUPKG8.js";
3
+ import { B as o } from "./index-DKYeygzz.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as i } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as x } from "./granularity.utils-CA504xa0.js";
7
7
  const p = {
8
8
  name: "BarChartStackedPro",
@@ -1,7 +1,7 @@
1
1
  import { i as I, j as t, W as N, z as S, E as L, F as k, A as D, r as M, s as F, p as _, t as H, X as b, v as f } from "./Color.type.emb-De2K8PVb.js";
2
2
  import j, { useRef as T } from "react";
3
3
  import { useTheme as p } from "@embeddable.com/react";
4
- import { a as v, i as d, I as w } from "./component.inputs.constants-wDyG8tFg.js";
4
+ import { a as v, i as d, I as w } from "./component.inputs.constants-DzpzJ9Na.js";
5
5
  /**
6
6
  * @license @tabler/icons-react v3.36.1 - MIT
7
7
  *
@@ -113,4 +113,4 @@ q.displayName = "ChartCard";
113
113
  export {
114
114
  q as C
115
115
  };
116
- //# sourceMappingURL=ChartCard-C6rVK7Ux.js.map
116
+ //# sourceMappingURL=ChartCard-CfVMn37p.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartCard-C6rVK7Ux.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconDotsVertical.mjs","../src/components/charts/shared/ChartCard/ChartCardLoading/ChartCardLoading.tsx","../src/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.tsx","../src/components/charts/shared/ChartCard/ChartCard.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.36.1 - 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\": \"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconDotsVertical = createReactComponent(\"outline\", \"dots-vertical\", \"DotsVertical\", __iconNode);\n\nexport { __iconNode, IconDotsVertical as default };\n//# sourceMappingURL=IconDotsVertical.mjs.map\n","import { IconLoader2 } from '@tabler/icons-react';\nimport styles from './ChartCardLoading.module.css';\n\nexport const ChartCardLoading = () => <IconLoader2 className={styles.loading} />;\n","import { IconDotsVertical } from '@tabler/icons-react';\nimport React from 'react';\nimport { useTheme } from '@embeddable.com/react';\nimport { ChartCardLoading } from '../ChartCardLoading/ChartCardLoading';\nimport { i18n, i18nSetup } from '../../../../../theme/i18n/i18n';\nimport { Theme } from '../../../../../theme/theme.types';\nimport {\n Dropdown,\n ActionIcon,\n SelectFieldContent,\n SelectListOption,\n} from '@embeddable.com/remarkable-ui';\nimport styles from './ChartCardMenuPro.module.css';\nimport { ChartCardMenuOptionOnClickProps } from '../../../../../theme/defaults/defaults.ChartCardMenu.constants';\n\ntype InlineSvgFromDataProps = React.HTMLAttributes<HTMLSpanElement> & {\n src: string;\n};\n\nexport function InlineSvgFromData({ src, className, ...rest }: InlineSvgFromDataProps) {\n // Remove prefix and URL-decode the SVG markup\n const svgMarkup = decodeURIComponent(src.replace(/^data:image\\/svg\\+xml,/, ''));\n\n return <div className={className} {...rest} dangerouslySetInnerHTML={{ __html: svgMarkup }} />;\n}\n\ntype ChartCardMenuProProps = Omit<ChartCardMenuOptionOnClickProps, 'theme'>;\n\nexport const ChartCardMenuPro: React.FC<ChartCardMenuProProps> = (props) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const [isLoading, setIsLoading] = React.useState(false);\n\n const options = theme.defaults.chartMenuOptions ?? [];\n\n if (options.length === 0) {\n return null;\n }\n\n const startAction = (onClick: () => void | Promise<void>) => {\n setTimeout(() => {\n Promise.resolve(onClick()).finally(() => setIsLoading(false));\n }, 100);\n };\n\n const handleExport = (onClick: (props: ChartCardMenuOptionOnClickProps) => void) => {\n setIsLoading(true);\n if (props.onCustomDownload) {\n props.onCustomDownload((args) => startAction(() => onClick(args)));\n return;\n }\n startAction(() => onClick({ ...props, theme }));\n };\n\n return (\n <Dropdown\n side=\"bottom\"\n align=\"end\"\n triggerComponent={isLoading ? <ChartCardLoading /> : <ActionIcon icon={IconDotsVertical} />}\n >\n <SelectFieldContent className={styles.list} autoFocus>\n {options.map((option, index) => {\n const label = i18n.t(option.labelKey);\n\n return (\n <SelectListOption\n key={index}\n label={label}\n onClick={() => handleExport(option.onClick)}\n startIcon={option.iconSrc ? <InlineSvgFromData src={option.iconSrc} /> : undefined}\n />\n );\n })}\n </SelectFieldContent>\n </Dropdown>\n );\n};\n","import React, { CSSProperties, useRef } from 'react';\nimport { IconAlertCircle } from '@tabler/icons-react';\nimport {\n Card,\n CardContent,\n CardFeedback,\n CardHeader,\n Skeleton,\n} from '@embeddable.com/remarkable-ui';\nimport styles from './ChartCard.module.css';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { useTheme } from '@embeddable.com/react';\nimport { ChartCardLoading } from './ChartCardLoading/ChartCardLoading';\nimport { ChartCardMenuPro } from './ChartCardMenuPro/ChartCardMenuPro';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport clsx from 'clsx';\nimport { ChartCardMenuOptionOnClickProps } from '../../../../theme/defaults/defaults.ChartCardMenu.constants';\n\nexport type ChartCardHeaderProps = {\n title?: string;\n description?: string;\n hideMenu?: boolean;\n};\n\ntype ChartCardProps = {\n children: React.ReactNode;\n data: DataResponse;\n errorMessage?: string;\n style?: CSSProperties;\n dimensionsAndMeasures?: (Dimension | Measure)[];\n onCustomDownload?: (props: (props: ChartCardMenuOptionOnClickProps) => void) => void;\n} & ChartCardHeaderProps;\n\nexport const ChartCard = React.forwardRef<HTMLDivElement, ChartCardProps>(\n (\n {\n title,\n description,\n children,\n data,\n errorMessage,\n dimensionsAndMeasures = [],\n hideMenu = false,\n onCustomDownload,\n },\n ref,\n ) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const chartRef = useRef<HTMLDivElement>(null);\n\n const hasData = Boolean(data?.data && data.data?.length > 0);\n\n const isLoading = !data || data?.isLoading;\n\n const getDisplay = () => {\n if (isLoading && !hasData) {\n return <Skeleton />;\n }\n\n if (errorMessage) {\n return (\n <CardFeedback\n variant=\"error\"\n icon={IconAlertCircle}\n title={i18n.t('charts.errorTitle')}\n message={errorMessage}\n />\n );\n }\n\n if (!hasData) {\n return (\n <CardFeedback\n title={i18n.t('charts.emptyTitle')}\n message={i18n.t('charts.emptyMessage')}\n />\n );\n }\n\n return children;\n };\n\n return (\n <Card className={styles.chartCard}>\n {hideMenu ? null : (\n <>\n <div className={styles.chartCardHeader}>\n <CardHeader title={title} subtitle={description} />\n </div>\n <div className={styles.chartCardRightContent}>\n <div className={clsx(!isLoading && styles.hidden)}>\n <ChartCardLoading />\n </div>\n <div className={clsx(isLoading && styles.hidden)}>\n <ChartCardMenuPro\n title={title}\n containerRef={chartRef}\n data={data?.data}\n dimensionsAndMeasures={dimensionsAndMeasures}\n onCustomDownload={onCustomDownload}\n />\n </div>\n </div>\n </>\n )}\n\n <CardContent ref={onCustomDownload ? ref : chartRef}>{getDisplay()}</CardContent>\n </Card>\n );\n },\n);\n\nChartCard.displayName = 'ChartCard';\n"],"names":["__iconNode","IconDotsVertical","createReactComponent","ChartCardLoading","jsx","IconLoader2","styles","InlineSvgFromData","src","className","rest","svgMarkup","ChartCardMenuPro","props","theme","useTheme","i18nSetup","isLoading","setIsLoading","React","options","startAction","onClick","handleExport","args","Dropdown","ActionIcon","SelectFieldContent","option","index","label","i18n","SelectListOption","ChartCard","title","description","children","data","errorMessage","dimensionsAndMeasures","hideMenu","onCustomDownload","ref","chartRef","useRef","hasData","_a","getDisplay","Skeleton","CardFeedback","IconAlertCircle","jsxs","Card","Fragment","CardHeader","clsx","CardContent"],"mappings":";;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa,CAAC,CAAC,QAAQ,EAAE,GAAK,uCAAuC,KAAO,QAAO,CAAE,GAAG,CAAC,QAAQ,EAAE,GAAK,uCAAuC,KAAO,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAK,sCAAsC,KAAO,QAAO,CAAE,CAAC,GACzOC,IAAmBC,EAAqB,WAAW,iBAAiB,gBAAgBF,CAAU;;;;;;;GCPvFG,IAAmB,MAAMC,gBAAAA,EAAAA,IAACC,GAAA,EAAY,WAAWC,EAAO,SAAS;;;ACgBvE,SAASC,EAAkB,EAAE,KAAAC,GAAK,WAAAC,GAAW,GAAGC,KAAgC;AAErF,QAAMC,IAAY,mBAAmBH,EAAI,QAAQ,0BAA0B,EAAE,CAAC;AAE9E,SAAOJ,gBAAAA,EAAAA,IAAC,SAAI,WAAAK,GAAuB,GAAGC,GAAM,yBAAyB,EAAE,QAAQC,EAAA,GAAa;AAC9F;AAIO,MAAMC,IAAoD,CAACC,MAAU;AAC1E,QAAMC,IAAeC,EAAA;AACrB,EAAAC,EAAUF,CAAK;AAEf,QAAM,CAACG,GAAWC,CAAY,IAAIC,EAAM,SAAS,EAAK,GAEhDC,IAAUN,EAAM,SAAS,oBAAoB,CAAA;AAEnD,MAAIM,EAAQ,WAAW;AACrB,WAAO;AAGT,QAAMC,IAAc,CAACC,MAAwC;AAC3D,eAAW,MAAM;AACf,cAAQ,QAAQA,GAAS,EAAE,QAAQ,MAAMJ,EAAa,EAAK,CAAC;AAAA,IAC9D,GAAG,GAAG;AAAA,EACR,GAEMK,IAAe,CAACD,MAA8D;AAElF,QADAJ,EAAa,EAAI,GACbL,EAAM,kBAAkB;AAC1B,MAAAA,EAAM,iBAAiB,CAACW,MAASH,EAAY,MAAMC,EAAQE,CAAI,CAAC,CAAC;AACjE;AAAA,IACF;AACA,IAAAH,EAAY,MAAMC,EAAQ,EAAE,GAAGT,GAAO,OAAAC,EAAA,CAAO,CAAC;AAAA,EAChD;AAEA,SACEV,gBAAAA,EAAAA;AAAAA,IAACqB;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAM;AAAA,MACN,kBAAkBR,IAAYb,gBAAAA,MAACD,GAAA,CAAA,CAAiB,IAAKC,gBAAAA,EAAAA,IAACsB,GAAA,EAAW,MAAMzB,GAAkB;AAAA,MAEzF,UAAAG,gBAAAA,EAAAA,IAACuB,GAAA,EAAmB,WAAWrB,EAAO,MAAM,WAAS,IAClD,UAAAc,EAAQ,IAAI,CAACQ,GAAQC,MAAU;AAC9B,cAAMC,IAAQC,EAAK,EAAEH,EAAO,QAAQ;AAEpC,eACExB,gBAAAA,EAAAA;AAAAA,UAAC4B;AAAA,UAAA;AAAA,YAEC,OAAAF;AAAA,YACA,SAAS,MAAMP,EAAaK,EAAO,OAAO;AAAA,YAC1C,WAAWA,EAAO,UAAUxB,gBAAAA,MAACG,KAAkB,KAAKqB,EAAO,SAAS,IAAK;AAAA,UAAA;AAAA,UAHpEC;AAAA,QAAA;AAAA,MAMX,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN,GC3CaI,IAAYd,EAAM;AAAA,EAC7B,CACE;AAAA,IACE,OAAAe;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,cAAAC;AAAA,IACA,uBAAAC,IAAwB,CAAA;AAAA,IACxB,UAAAC,IAAW;AAAA,IACX,kBAAAC;AAAA,EAAA,GAEFC,MACG;;AACH,UAAM5B,IAAeC,EAAA;AACrB,IAAAC,EAAUF,CAAK;AAEf,UAAM6B,IAAWC,EAAuB,IAAI,GAEtCC,IAAU,GAAQR,KAAA,QAAAA,EAAM,UAAQS,IAAAT,EAAK,SAAL,gBAAAS,EAAW,UAAS,IAEpD7B,IAAY,CAACoB,MAAQA,KAAA,gBAAAA,EAAM,YAE3BU,IAAa,MACb9B,KAAa,CAAC4B,0BACRG,GAAA,EAAS,IAGfV,IAEAlC,gBAAAA,EAAAA;AAAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAMC;AAAA,QACN,OAAOnB,EAAK,EAAE,mBAAmB;AAAA,QACjC,SAASO;AAAA,MAAA;AAAA,IAAA,IAKVO,IASET,IAPHhC,gBAAAA,EAAAA;AAAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,OAAOlB,EAAK,EAAE,mBAAmB;AAAA,QACjC,SAASA,EAAK,EAAE,qBAAqB;AAAA,MAAA;AAAA,IAAA;AAQ7C,WACEoB,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAW9C,EAAO,WACrB,UAAA;AAAA,MAAAkC,IAAW,OACVW,gBAAAA,EAAAA,KAAAE,EAAAA,UAAA,EACE,UAAA;AAAA,QAAAjD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAWE,EAAO,iBACrB,gCAACgD,GAAA,EAAW,OAAApB,GAAc,UAAUC,EAAA,CAAa,EAAA,CACnD;AAAA,QACAgB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAW7C,EAAO,uBACrB,UAAA;AAAA,UAAAF,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAWmD,EAAK,CAACtC,KAAaX,EAAO,MAAM,GAC9C,UAAAF,gBAAAA,EAAAA,IAACD,GAAA,CAAA,CAAiB,EAAA,CACpB;AAAA,gCACC,OAAA,EAAI,WAAWoD,EAAKtC,KAAaX,EAAO,MAAM,GAC7C,UAAAF,gBAAAA,EAAAA;AAAAA,YAACQ;AAAA,YAAA;AAAA,cACC,OAAAsB;AAAA,cACA,cAAcS;AAAA,cACd,MAAMN,KAAA,gBAAAA,EAAM;AAAA,cACZ,uBAAAE;AAAA,cACA,kBAAAE;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,4BAGDe,GAAA,EAAY,KAAKf,IAAmBC,IAAMC,GAAW,cAAW,CAAE;AAAA,IAAA,GACrE;AAAA,EAEJ;AACF;AAEAV,EAAU,cAAc;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartCard-CfVMn37p.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconDotsVertical.mjs","../src/components/charts/shared/ChartCard/ChartCardLoading/ChartCardLoading.tsx","../src/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.tsx","../src/components/charts/shared/ChartCard/ChartCard.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.36.1 - 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\": \"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconDotsVertical = createReactComponent(\"outline\", \"dots-vertical\", \"DotsVertical\", __iconNode);\n\nexport { __iconNode, IconDotsVertical as default };\n//# sourceMappingURL=IconDotsVertical.mjs.map\n","import { IconLoader2 } from '@tabler/icons-react';\nimport styles from './ChartCardLoading.module.css';\n\nexport const ChartCardLoading = () => <IconLoader2 className={styles.loading} />;\n","import { IconDotsVertical } from '@tabler/icons-react';\nimport React from 'react';\nimport { useTheme } from '@embeddable.com/react';\nimport { ChartCardLoading } from '../ChartCardLoading/ChartCardLoading';\nimport { i18n, i18nSetup } from '../../../../../theme/i18n/i18n';\nimport { Theme } from '../../../../../theme/theme.types';\nimport {\n Dropdown,\n ActionIcon,\n SelectFieldContent,\n SelectListOption,\n} from '@embeddable.com/remarkable-ui';\nimport styles from './ChartCardMenuPro.module.css';\nimport { ChartCardMenuOptionOnClickProps } from '../../../../../theme/defaults/defaults.ChartCardMenu.constants';\n\ntype InlineSvgFromDataProps = React.HTMLAttributes<HTMLSpanElement> & {\n src: string;\n};\n\nexport function InlineSvgFromData({ src, className, ...rest }: InlineSvgFromDataProps) {\n // Remove prefix and URL-decode the SVG markup\n const svgMarkup = decodeURIComponent(src.replace(/^data:image\\/svg\\+xml,/, ''));\n\n return <div className={className} {...rest} dangerouslySetInnerHTML={{ __html: svgMarkup }} />;\n}\n\ntype ChartCardMenuProProps = Omit<ChartCardMenuOptionOnClickProps, 'theme'>;\n\nexport const ChartCardMenuPro: React.FC<ChartCardMenuProProps> = (props) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const [isLoading, setIsLoading] = React.useState(false);\n\n const options = theme.defaults.chartMenuOptions ?? [];\n\n if (options.length === 0) {\n return null;\n }\n\n const startAction = (onClick: () => void | Promise<void>) => {\n setTimeout(() => {\n Promise.resolve(onClick()).finally(() => setIsLoading(false));\n }, 100);\n };\n\n const handleExport = (onClick: (props: ChartCardMenuOptionOnClickProps) => void) => {\n setIsLoading(true);\n if (props.onCustomDownload) {\n props.onCustomDownload((args) => startAction(() => onClick(args)));\n return;\n }\n startAction(() => onClick({ ...props, theme }));\n };\n\n return (\n <Dropdown\n side=\"bottom\"\n align=\"end\"\n triggerComponent={isLoading ? <ChartCardLoading /> : <ActionIcon icon={IconDotsVertical} />}\n >\n <SelectFieldContent className={styles.list} autoFocus>\n {options.map((option, index) => {\n const label = i18n.t(option.labelKey);\n\n return (\n <SelectListOption\n key={index}\n label={label}\n onClick={() => handleExport(option.onClick)}\n startIcon={option.iconSrc ? <InlineSvgFromData src={option.iconSrc} /> : undefined}\n />\n );\n })}\n </SelectFieldContent>\n </Dropdown>\n );\n};\n","import React, { CSSProperties, useRef } from 'react';\nimport { IconAlertCircle } from '@tabler/icons-react';\nimport {\n Card,\n CardContent,\n CardFeedback,\n CardHeader,\n Skeleton,\n} from '@embeddable.com/remarkable-ui';\nimport styles from './ChartCard.module.css';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { useTheme } from '@embeddable.com/react';\nimport { ChartCardLoading } from './ChartCardLoading/ChartCardLoading';\nimport { ChartCardMenuPro } from './ChartCardMenuPro/ChartCardMenuPro';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport clsx from 'clsx';\nimport { ChartCardMenuOptionOnClickProps } from '../../../../theme/defaults/defaults.ChartCardMenu.constants';\n\nexport type ChartCardHeaderProps = {\n title?: string;\n description?: string;\n hideMenu?: boolean;\n};\n\ntype ChartCardProps = {\n children: React.ReactNode;\n data: DataResponse;\n errorMessage?: string;\n style?: CSSProperties;\n dimensionsAndMeasures?: (Dimension | Measure)[];\n onCustomDownload?: (props: (props: ChartCardMenuOptionOnClickProps) => void) => void;\n} & ChartCardHeaderProps;\n\nexport const ChartCard = React.forwardRef<HTMLDivElement, ChartCardProps>(\n (\n {\n title,\n description,\n children,\n data,\n errorMessage,\n dimensionsAndMeasures = [],\n hideMenu = false,\n onCustomDownload,\n },\n ref,\n ) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const chartRef = useRef<HTMLDivElement>(null);\n\n const hasData = Boolean(data?.data && data.data?.length > 0);\n\n const isLoading = !data || data?.isLoading;\n\n const getDisplay = () => {\n if (isLoading && !hasData) {\n return <Skeleton />;\n }\n\n if (errorMessage) {\n return (\n <CardFeedback\n variant=\"error\"\n icon={IconAlertCircle}\n title={i18n.t('charts.errorTitle')}\n message={errorMessage}\n />\n );\n }\n\n if (!hasData) {\n return (\n <CardFeedback\n title={i18n.t('charts.emptyTitle')}\n message={i18n.t('charts.emptyMessage')}\n />\n );\n }\n\n return children;\n };\n\n return (\n <Card className={styles.chartCard}>\n {hideMenu ? null : (\n <>\n <div className={styles.chartCardHeader}>\n <CardHeader title={title} subtitle={description} />\n </div>\n <div className={styles.chartCardRightContent}>\n <div className={clsx(!isLoading && styles.hidden)}>\n <ChartCardLoading />\n </div>\n <div className={clsx(isLoading && styles.hidden)}>\n <ChartCardMenuPro\n title={title}\n containerRef={chartRef}\n data={data?.data}\n dimensionsAndMeasures={dimensionsAndMeasures}\n onCustomDownload={onCustomDownload}\n />\n </div>\n </div>\n </>\n )}\n\n <CardContent ref={onCustomDownload ? ref : chartRef}>{getDisplay()}</CardContent>\n </Card>\n );\n },\n);\n\nChartCard.displayName = 'ChartCard';\n"],"names":["__iconNode","IconDotsVertical","createReactComponent","ChartCardLoading","jsx","IconLoader2","styles","InlineSvgFromData","src","className","rest","svgMarkup","ChartCardMenuPro","props","theme","useTheme","i18nSetup","isLoading","setIsLoading","React","options","startAction","onClick","handleExport","args","Dropdown","ActionIcon","SelectFieldContent","option","index","label","i18n","SelectListOption","ChartCard","title","description","children","data","errorMessage","dimensionsAndMeasures","hideMenu","onCustomDownload","ref","chartRef","useRef","hasData","_a","getDisplay","Skeleton","CardFeedback","IconAlertCircle","jsxs","Card","Fragment","CardHeader","clsx","CardContent"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
1
  import { j as e, p as u } from "./Color.type.emb-De2K8PVb.js";
2
- import { G as y } from "./GranularitySelectField-CYq2YuAO.js";
2
+ import { G as y } from "./GranularitySelectField-DuRk6qY8.js";
3
3
  const m = "_chartGranularitySelectFieldContainer_m26zn_1", p = "_marginTop_m26zn_7", i = {
4
4
  chartGranularitySelectFieldContainer: m,
5
5
  marginTop: p
@@ -37,4 +37,4 @@ const m = "_chartGranularitySelectFieldContainer_m26zn_1", p = "_marginTop_m26zn
37
37
  export {
38
38
  S as C
39
39
  };
40
- //# sourceMappingURL=ChartGranularitySelectField-BxhibpgC.js.map
40
+ //# sourceMappingURL=ChartGranularitySelectField-C_6Mugcw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartGranularitySelectField-BxhibpgC.js","sources":["../src/components/charts/shared/ChartGranularitySelectField/ChartGranularitySelectField.tsx"],"sourcesContent":["import { Dimension, Granularity } from '@embeddable.com/core';\nimport {\n GranularitySelectField,\n GranularitySelectFieldProps,\n} from '../../../editors/shared/GranularitySelectField/GranularitySelectField';\nimport styles from './ChartGranularitySelectField.module.css';\nimport clsx from 'clsx';\n\ntype ChartGranularitySelectFieldProps = Pick<GranularitySelectFieldProps, 'onChange'> & {\n dimension: Dimension;\n hasMarginTop?: boolean;\n};\n\nconst dimensionGranularities: Granularity[] = ['day', 'week', 'month', 'quarter', 'year'];\n\nexport const ChartGranularitySelectField = ({\n dimension,\n hasMarginTop,\n ...props\n}: ChartGranularitySelectFieldProps) => {\n const showGranularitySelector = dimension?.inputs?.showGranularityDropdown;\n\n if (!showGranularitySelector) {\n return null;\n }\n\n const dimensionTimeRange = dimension.inputs?.dateBounds;\n const dimensionGranularity = dimension.inputs?.granularity;\n\n return (\n <div\n className={clsx(\n styles.chartGranularitySelectFieldContainer,\n hasMarginTop && styles.marginTop,\n )}\n >\n <GranularitySelectField\n {...props}\n primaryTimeRange={dimensionTimeRange}\n granularity={dimensionGranularity}\n granularities={dimensionGranularities}\n variant=\"ghost\"\n side=\"bottom\"\n align=\"end\"\n />\n </div>\n );\n};\n"],"names":["dimensionGranularities","ChartGranularitySelectField","dimension","hasMarginTop","props","_a","dimensionTimeRange","_b","dimensionGranularity","_c","jsx","clsx","styles","GranularitySelectField"],"mappings":";;;;;GAaMA,IAAwC,CAAC,OAAO,QAAQ,SAAS,WAAW,MAAM,GAE3EC,IAA8B,CAAC;AAAA,EAC1C,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAAwC;;AAGtC,MAAI,GAF4BC,IAAAH,KAAA,gBAAAA,EAAW,WAAX,gBAAAG,EAAmB;AAGjD,WAAO;AAGT,QAAMC,KAAqBC,IAAAL,EAAU,WAAV,gBAAAK,EAAkB,YACvCC,KAAuBC,IAAAP,EAAU,WAAV,gBAAAO,EAAkB;AAE/C,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAO;AAAA,QACPT,KAAgBS,EAAO;AAAA,MAAA;AAAA,MAGzB,UAAAF,gBAAAA,EAAAA;AAAAA,QAACG;AAAA,QAAA;AAAA,UACE,GAAGT;AAAA,UACJ,kBAAkBE;AAAA,UAClB,aAAaE;AAAA,UACb,eAAeR;AAAA,UACf,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACR;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"ChartGranularitySelectField-C_6Mugcw.js","sources":["../src/components/charts/shared/ChartGranularitySelectField/ChartGranularitySelectField.tsx"],"sourcesContent":["import { Dimension, Granularity } from '@embeddable.com/core';\nimport {\n GranularitySelectField,\n GranularitySelectFieldProps,\n} from '../../../editors/shared/GranularitySelectField/GranularitySelectField';\nimport styles from './ChartGranularitySelectField.module.css';\nimport clsx from 'clsx';\n\ntype ChartGranularitySelectFieldProps = Pick<GranularitySelectFieldProps, 'onChange'> & {\n dimension: Dimension;\n hasMarginTop?: boolean;\n};\n\nconst dimensionGranularities: Granularity[] = ['day', 'week', 'month', 'quarter', 'year'];\n\nexport const ChartGranularitySelectField = ({\n dimension,\n hasMarginTop,\n ...props\n}: ChartGranularitySelectFieldProps) => {\n const showGranularitySelector = dimension?.inputs?.showGranularityDropdown;\n\n if (!showGranularitySelector) {\n return null;\n }\n\n const dimensionTimeRange = dimension.inputs?.dateBounds;\n const dimensionGranularity = dimension.inputs?.granularity;\n\n return (\n <div\n className={clsx(\n styles.chartGranularitySelectFieldContainer,\n hasMarginTop && styles.marginTop,\n )}\n >\n <GranularitySelectField\n {...props}\n primaryTimeRange={dimensionTimeRange}\n granularity={dimensionGranularity}\n granularities={dimensionGranularities}\n variant=\"ghost\"\n side=\"bottom\"\n align=\"end\"\n />\n </div>\n );\n};\n"],"names":["dimensionGranularities","ChartGranularitySelectField","dimension","hasMarginTop","props","_a","dimensionTimeRange","_b","dimensionGranularity","_c","jsx","clsx","styles","GranularitySelectField"],"mappings":";;;;;GAaMA,IAAwC,CAAC,OAAO,QAAQ,SAAS,WAAW,MAAM,GAE3EC,IAA8B,CAAC;AAAA,EAC1C,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAAwC;;AAGtC,MAAI,GAF4BC,IAAAH,KAAA,gBAAAA,EAAW,WAAX,gBAAAG,EAAmB;AAGjD,WAAO;AAGT,QAAMC,KAAqBC,IAAAL,EAAU,WAAV,gBAAAK,EAAkB,YACvCC,KAAuBC,IAAAP,EAAU,WAAV,gBAAAO,EAAkB;AAE/C,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAO;AAAA,QACPT,KAAgBS,EAAO;AAAA,MAAA;AAAA,MAGzB,UAAAF,gBAAAA,EAAAA;AAAAA,QAACG;AAAA,QAAA;AAAA,UACE,GAAGT;AAAA,UACJ,kBAAkBE;AAAA,UAClB,aAAaE;AAAA,UACb,eAAeR;AAAA,UACf,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACR;AAAA,EAAA;AAGN;"}
@@ -1,7 +1,7 @@
1
1
  import { definePreview as n, defineComponent as t } from "@embeddable.com/react";
2
2
  import { V as r } from "./Color.type.emb-De2K8PVb.js";
3
- import { D as i } from "./index-DHiPuxQQ.js";
4
- import { b as e, C as a } from "./component.inputs.constants-wDyG8tFg.js";
3
+ import { D as i } from "./index-ClEmYHgx.js";
4
+ import { b as e, C as a } from "./component.inputs.constants-DzpzJ9Na.js";
5
5
  const l = {
6
6
  name: "ComparisonPeriodSelectFieldPro",
7
7
  label: "Comparison Period Select Field",
@@ -1,8 +1,8 @@
1
1
  import { useTheme as C, definePreview as P, defineComponent as y } from "@embeddable.com/react";
2
2
  import { j as l, k as D, V as s } from "./Color.type.emb-De2K8PVb.js";
3
3
  import { u as w, g as V, a as k, b as S } from "./dates.utils-BF32dTLi.js";
4
- import { a as j, r as F, i as M, b as a } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { E as T } from "./EditorCard-DCm6Ykb8.js";
4
+ import { a as j, r as F, i as M, b as a } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { E as T } from "./EditorCard-B9UFM_uA.js";
6
6
  import { I as x } from "./IconCalendarFilled-CYiLMPm9.js";
7
7
  const r = (e) => {
8
8
  const t = C();
@@ -1,7 +1,7 @@
1
1
  import { definePreview as o, defineComponent as l } from "@embeddable.com/react";
2
2
  import { V as t } from "./Color.type.emb-De2K8PVb.js";
3
- import { D as n } from "./index-gnajbHE2.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
3
+ import { D as n } from "./index-BCVHDZZk.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
5
  const r = {
6
6
  name: "DateRangeSelectFieldPro",
7
7
  label: "Date-Range Picker - Presets",
@@ -0,0 +1,45 @@
1
+ import { j as f, S as d } from "./Color.type.emb-De2K8PVb.js";
2
+ import { useTheme as S } from "@embeddable.com/react";
3
+ import { useState as p, useEffect as g } from "react";
4
+ import { g as C } from "./formatter.utils-CiN6axbW.js";
5
+ const v = ({
6
+ dimensionsAndMeasures: s,
7
+ searchValue: r,
8
+ theme: a
9
+ }) => {
10
+ const n = C(a);
11
+ return s.filter((e) => n.dimensionOrMeasureTitle(e).toLowerCase().includes(r.toLowerCase())).map((e) => ({
12
+ value: e.name,
13
+ label: n.dimensionOrMeasureTitle(e)
14
+ }));
15
+ }, M = (s) => {
16
+ const r = S(), [a, n] = p(""), { selectedValue: e, options: t, clearable: i, placeholder: m, onChange: l } = s, u = (c) => {
17
+ const o = t.find((h) => h.name === c);
18
+ l(o);
19
+ };
20
+ return g(() => {
21
+ if (!(!i && !e)) return;
22
+ const o = t == null ? void 0 : t[0];
23
+ o && l(o);
24
+ }, [i, e, t, l]), /* @__PURE__ */ f.jsx(
25
+ d,
26
+ {
27
+ searchable: !0,
28
+ clearable: i,
29
+ placeholder: m,
30
+ value: e == null ? void 0 : e.name,
31
+ onChange: u,
32
+ onSearch: n,
33
+ options: v({
34
+ dimensionsAndMeasures: t,
35
+ searchValue: a,
36
+ theme: r
37
+ }),
38
+ avoidCollisions: !1
39
+ }
40
+ );
41
+ };
42
+ export {
43
+ M as D
44
+ };
45
+ //# sourceMappingURL=DimensionAndMeasureSingleSelectField-CJ1yAcRd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DimensionAndMeasureSingleSelectField-CJ1yAcRd.js","sources":["../src/components/editors/utils/dimensionsAndMeasures.utils.ts","../src/components/editors/shared/DimensionAndMeasureSingleSelectField/DimensionAndMeasureSingleSelectField.tsx"],"sourcesContent":["import { DimensionOrMeasure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { SelectListOptionProps } from '@embeddable.com/remarkable-ui';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\n\nexport const getDimensionAndMeasureOptions = ({\n dimensionsAndMeasures,\n searchValue,\n theme,\n}: {\n dimensionsAndMeasures: DimensionOrMeasure[];\n searchValue: string;\n theme: Theme;\n}): SelectListOptionProps[] => {\n const themeFormatter = getThemeFormatter(theme);\n\n return dimensionsAndMeasures\n .filter((dimensionOrMeasure) => {\n return themeFormatter\n .dimensionOrMeasureTitle(dimensionOrMeasure)\n .toLowerCase()\n .includes(searchValue.toLowerCase());\n })\n .map((dimensionOrMeasure) => {\n return {\n value: dimensionOrMeasure.name,\n label: themeFormatter.dimensionOrMeasureTitle(dimensionOrMeasure),\n };\n });\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { useEffect, useState } from 'react';\nimport { SingleSelectField } from '@embeddable.com/remarkable-ui';\nimport { getDimensionAndMeasureOptions } from '../../utils/dimensionsAndMeasures.utils';\nimport { Dimension, Measure } from '@embeddable.com/core';\n\ntype DimensionAndMeasureSingleSelectFieldProps<T> = {\n selectedValue?: T;\n options: T[];\n placeholder?: string;\n clearable?: boolean;\n onChange: (value: T | undefined) => void;\n};\n\nexport const DimensionAndMeasureSingleSelectField = <T extends Dimension | Measure>(\n props: DimensionAndMeasureSingleSelectFieldProps<T>,\n) => {\n const theme = useTheme() as Theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const { selectedValue, options, clearable, placeholder, onChange } = props;\n\n const handleChange = (newValue: string) => {\n const newSelection = options.find((option) => option.name === newValue);\n onChange(newSelection);\n };\n\n // Auto-select first dimensionOrMeasure when is not clearable and there is no selection\n useEffect(() => {\n const autoSelectActive = !clearable && !selectedValue;\n\n if (!autoSelectActive) return;\n\n const firstDimension = options?.[0];\n\n if (firstDimension) {\n onChange(firstDimension);\n }\n }, [clearable, selectedValue, options, onChange]);\n\n return (\n <SingleSelectField\n searchable\n clearable={clearable}\n placeholder={placeholder}\n value={selectedValue?.name}\n onChange={handleChange}\n onSearch={setSearchValue}\n options={getDimensionAndMeasureOptions({\n dimensionsAndMeasures: options,\n searchValue,\n theme,\n })}\n avoidCollisions={false}\n />\n );\n};\n"],"names":["getDimensionAndMeasureOptions","dimensionsAndMeasures","searchValue","theme","themeFormatter","getThemeFormatter","dimensionOrMeasure","DimensionAndMeasureSingleSelectField","props","useTheme","setSearchValue","useState","selectedValue","options","clearable","placeholder","onChange","handleChange","newValue","newSelection","option","useEffect","firstDimension","jsx","SingleSelectField"],"mappings":";;;;AAKO,MAAMA,IAAgC,CAAC;AAAA,EAC5C,uBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AACF,MAI+B;AAC7B,QAAMC,IAAiBC,EAAkBF,CAAK;AAE9C,SAAOF,EACJ,OAAO,CAACK,MACAF,EACJ,wBAAwBE,CAAkB,EAC1C,cACA,SAASJ,EAAY,aAAa,CACtC,EACA,IAAI,CAACI,OACG;AAAA,IACL,OAAOA,EAAmB;AAAA,IAC1B,OAAOF,EAAe,wBAAwBE,CAAkB;AAAA,EAAA,EAEnE;AACL,GCdaC,IAAuC,CAClDC,MACG;AACH,QAAML,IAAQM,EAAA,GAER,CAACP,GAAaQ,CAAc,IAAIC,EAAiB,EAAE,GAEnD,EAAE,eAAAC,GAAe,SAAAC,GAAS,WAAAC,GAAW,aAAAC,GAAa,UAAAC,MAAaR,GAE/DS,IAAe,CAACC,MAAqB;AACzC,UAAMC,IAAeN,EAAQ,KAAK,CAACO,MAAWA,EAAO,SAASF,CAAQ;AACtE,IAAAF,EAASG,CAAY;AAAA,EACvB;AAGA,SAAAE,EAAU,MAAM;AAGd,QAAI,EAFqB,CAACP,KAAa,CAACF,GAEjB;AAEvB,UAAMU,IAAiBT,KAAA,gBAAAA,EAAU;AAEjC,IAAIS,KACFN,EAASM,CAAc;AAAA,EAE3B,GAAG,CAACR,GAAWF,GAAeC,GAASG,CAAQ,CAAC,GAG9CO,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,WAAAV;AAAA,MACA,aAAAC;AAAA,MACA,OAAOH,KAAA,gBAAAA,EAAe;AAAA,MACtB,UAAUK;AAAA,MACV,UAAUP;AAAA,MACV,SAASV,EAA8B;AAAA,QACrC,uBAAuBa;AAAA,QACvB,aAAAX;AAAA,QACA,OAAAC;AAAA,MAAA,CACD;AAAA,MACD,iBAAiB;AAAA,IAAA;AAAA,EAAA;AAGvB;"}
@@ -0,0 +1,86 @@
1
+ import { j as i, V as o } from "./Color.type.emb-De2K8PVb.js";
2
+ import { useTheme as f, definePreview as g, defineComponent as S } from "@embeddable.com/react";
3
+ import { E as v } from "./EditorCard-B9UFM_uA.js";
4
+ import { a as h, r as b, b as n } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { D } from "./DimensionAndMeasureSingleSelectField-CJ1yAcRd.js";
6
+ import { p as t } from "./preview.data.constants-BBIMPXYy.js";
7
+ const s = (e) => {
8
+ const l = f();
9
+ h(l);
10
+ const { selectedDimension: a, dimensionOptions: r, clearable: d, onChange: m } = e, { title: p, description: c, placeholder: u } = b(e);
11
+ return /* @__PURE__ */ i.jsx(v, { title: p, subtitle: c, children: /* @__PURE__ */ i.jsx(
12
+ D,
13
+ {
14
+ selectedValue: a,
15
+ options: r,
16
+ placeholder: u,
17
+ clearable: d,
18
+ onChange: m
19
+ }
20
+ ) });
21
+ }, C = {
22
+ name: "DimensionSingleSelectFieldPro",
23
+ label: "Dimension Single Select Field",
24
+ category: "Dropdowns",
25
+ defaultWidth: 300,
26
+ defaultHeight: 120,
27
+ inputs: [
28
+ n.dataset,
29
+ n.title,
30
+ n.description,
31
+ { ...n.placeholder, defaultValue: "Select value..." },
32
+ n.dimensionOptions,
33
+ {
34
+ ...n.dimension,
35
+ name: "selectedDimension",
36
+ label: "Selected dimension",
37
+ category: "Pre-configured variables",
38
+ required: !1,
39
+ config: {
40
+ dataset: "dataset"
41
+ }
42
+ },
43
+ { ...n.clearable, defaultValue: !1 }
44
+ ],
45
+ events: [
46
+ {
47
+ name: "onChange",
48
+ label: "Selected dimension updated",
49
+ properties: [
50
+ {
51
+ name: "value",
52
+ label: "Selected dimension",
53
+ type: "dimension"
54
+ }
55
+ ]
56
+ }
57
+ ],
58
+ variables: [
59
+ {
60
+ name: "dimension single-select value",
61
+ type: "dimension",
62
+ defaultValue: o.noFilter(),
63
+ inputs: ["selectedDimension"],
64
+ events: [{ name: "onChange", property: "value" }]
65
+ }
66
+ ]
67
+ }, j = g(s, {
68
+ dimensionOptions: [t.dimension, t.dimensionGroup],
69
+ onChange: () => null
70
+ }), w = S(s, C, {
71
+ props: (e) => ({
72
+ ...e,
73
+ dimensionOptions: e.dimensionOptions ?? []
74
+ }),
75
+ events: {
76
+ onChange: (e) => ({
77
+ value: e ?? o.noFilter()
78
+ })
79
+ }
80
+ });
81
+ export {
82
+ w as default,
83
+ C as meta,
84
+ j as preview
85
+ };
86
+ //# sourceMappingURL=DimensionSingleSelectFieldPro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DimensionSingleSelectFieldPro.js","sources":["../src/components/editors/DimensionSingleSelectFieldPro/index.tsx","../src/components/editors/DimensionSingleSelectFieldPro/DimensionSingleSelectFieldPro.emb.ts"],"sourcesContent":["import { Dimension } from '@embeddable.com/core';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { resolveI18nProps } from '../../component.utils';\nimport { ChartCardHeaderProps } from '../../charts/shared/ChartCard/ChartCard';\nimport { Theme } from '../../../theme/theme.types';\nimport { useTheme } from '@embeddable.com/react';\nimport { i18nSetup } from '../../../theme/i18n/i18n';\nimport { DimensionAndMeasureSingleSelectField } from '../shared/DimensionAndMeasureSingleSelectField/DimensionAndMeasureSingleSelectField';\n\ntype DimensionSingleSelectFieldProProps = {\n selectedDimension?: Dimension;\n dimensionOptions: Dimension[];\n placeholder?: string;\n clearable?: boolean;\n onChange: (value: Dimension | undefined) => void;\n} & ChartCardHeaderProps;\n\nconst DimensionSingleSelectFieldPro = (props: DimensionSingleSelectFieldProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { selectedDimension, dimensionOptions, clearable, onChange } = props;\n const { title, description, placeholder } = resolveI18nProps(props);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <DimensionAndMeasureSingleSelectField<Dimension>\n selectedValue={selectedDimension}\n options={dimensionOptions}\n placeholder={placeholder}\n clearable={clearable}\n onChange={onChange}\n />\n </EditorCard>\n );\n};\n\nexport default DimensionSingleSelectFieldPro;\n","import { Value } from '@embeddable.com/core';\nimport {\n EmbeddedComponentMeta,\n Inputs,\n defineComponent,\n definePreview,\n} from '@embeddable.com/react';\nimport DimensionSingleSelectFieldPro from './index';\nimport { inputs } from '../../component.inputs.constants';\nimport { previewData } from '../../preview.data.constants';\n\nexport const meta = {\n name: 'DimensionSingleSelectFieldPro',\n label: 'Dimension Single Select Field',\n category: 'Dropdowns',\n defaultWidth: 300,\n defaultHeight: 120,\n inputs: [\n inputs.dataset,\n inputs.title,\n inputs.description,\n { ...inputs.placeholder, defaultValue: 'Select value...' },\n inputs.dimensionOptions,\n {\n ...inputs.dimension,\n name: 'selectedDimension',\n label: 'Selected dimension',\n category: 'Pre-configured variables',\n required: false,\n config: {\n dataset: 'dataset',\n },\n },\n { ...inputs.clearable, defaultValue: false },\n ],\n events: [\n {\n name: 'onChange',\n label: 'Selected dimension updated',\n properties: [\n {\n name: 'value',\n label: 'Selected dimension',\n type: 'dimension',\n },\n ],\n },\n ],\n variables: [\n {\n name: 'dimension single-select value',\n type: 'dimension',\n defaultValue: Value.noFilter(),\n inputs: ['selectedDimension'],\n events: [{ name: 'onChange', property: 'value' }],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport const preview = definePreview(DimensionSingleSelectFieldPro, {\n dimensionOptions: [previewData.dimension, previewData.dimensionGroup],\n onChange: () => null,\n});\n\nexport default defineComponent(DimensionSingleSelectFieldPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n dimensionOptions: inputs.dimensionOptions ?? [],\n };\n },\n events: {\n onChange: (value) => {\n return {\n value: value ?? Value.noFilter(),\n };\n },\n },\n});\n"],"names":["DimensionSingleSelectFieldPro","props","theme","useTheme","i18nSetup","selectedDimension","dimensionOptions","clearable","onChange","title","description","placeholder","resolveI18nProps","jsx","EditorCard","DimensionAndMeasureSingleSelectField","meta","inputs","Value","preview","definePreview","previewData","DimensionSingleSelectFieldPro_emb","defineComponent","value"],"mappings":";;;;;;AAiBA,MAAMA,IAAgC,CAACC,MAA8C;AACnF,QAAMC,IAAQC,EAAA;AACd,EAAAC,EAAUF,CAAK;AAEf,QAAM,EAAE,mBAAAG,GAAmB,kBAAAC,GAAkB,WAAAC,GAAW,UAAAC,MAAaP,GAC/D,EAAE,OAAAQ,GAAO,aAAAC,GAAa,aAAAC,EAAA,IAAgBC,EAAiBX,CAAK;AAElE,SACEY,gBAAAA,EAAAA,IAACC,GAAA,EAAW,OAAAL,GAAc,UAAUC,GAClC,UAAAG,gBAAAA,EAAAA;AAAAA,IAACE;AAAA,IAAA;AAAA,MACC,eAAeV;AAAA,MACf,SAASC;AAAA,MACT,aAAAK;AAAA,MACA,WAAAJ;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,GCxBaQ,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,eAAe;AAAA,EACf,QAAQ;AAAA,IACNC,EAAO;AAAA,IACPA,EAAO;AAAA,IACPA,EAAO;AAAA,IACP,EAAE,GAAGA,EAAO,aAAa,cAAc,kBAAA;AAAA,IACvCA,EAAO;AAAA,IACP;AAAA,MACE,GAAGA,EAAO;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,EAAE,GAAGA,EAAO,WAAW,cAAc,GAAA;AAAA,EAAM;AAAA,EAE7C,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;AAAA,EAEF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,cAAcC,EAAM,SAAA;AAAA,MACpB,QAAQ,CAAC,mBAAmB;AAAA,MAC5B,QAAQ,CAAC,EAAE,MAAM,YAAY,UAAU,SAAS;AAAA,IAAA;AAAA,EAClD;AAEJ,GAEaC,IAAUC,EAAcpB,GAA+B;AAAA,EAClE,kBAAkB,CAACqB,EAAY,WAAWA,EAAY,cAAc;AAAA,EACpE,UAAU,MAAM;AAClB,CAAC,GAEDC,IAAeC,EAAgBvB,GAA+BgB,GAAM;AAAA,EAClE,OAAO,CAACC,OACC;AAAA,IACL,GAAGA;AAAAA,IACH,kBAAkBA,EAAO,oBAAoB,CAAA;AAAA,EAAC;AAAA,EAGlD,QAAQ;AAAA,IACN,UAAU,CAACO,OACF;AAAA,MACL,OAAOA,KAASN,EAAM,SAAA;AAAA,IAAS;AAAA,EAEnC;AAEJ,CAAC;"}
@@ -1,8 +1,8 @@
1
1
  import { V as n, l as a } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as r, defineComponent as i } from "@embeddable.com/react";
3
- import { D as o } from "./index-CgVjpFNs.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as t } from "./preview.data.constants-37wUPKG8.js";
3
+ import { D as o } from "./index-n6RmR7mX.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as t } from "./preview.data.constants-BBIMPXYy.js";
6
6
  const m = {
7
7
  name: "DonutChartPro",
8
8
  label: "Donut Chart",
@@ -1,8 +1,8 @@
1
- import { D as s } from "./index-CvKdGFx3.js";
1
+ import { D as s } from "./index-BaTX0t-a.js";
2
2
  import { V as t, l as r } from "./Color.type.emb-De2K8PVb.js";
3
3
  import { definePreview as o, defineComponent as i } from "@embeddable.com/react";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as n } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as n } from "./preview.data.constants-BBIMPXYy.js";
6
6
  const l = {
7
7
  name: "DonutLabelChartPro",
8
8
  label: "Donut Label Chart",
@@ -1,6 +1,6 @@
1
1
  import { j as r, r as c, s as d, t as m, v as l } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { useTheme as p } from "@embeddable.com/react";
3
- import { a as x, i as C, I as j } from "./component.inputs.constants-wDyG8tFg.js";
3
+ import { a as x, i as C, I as j } from "./component.inputs.constants-DzpzJ9Na.js";
4
4
  const u = "_card_15bw3_1", f = {
5
5
  card: u
6
6
  }, b = ({
@@ -29,4 +29,4 @@ const u = "_card_15bw3_1", f = {
29
29
  export {
30
30
  b as E
31
31
  };
32
- //# sourceMappingURL=EditorCard-DCm6Ykb8.js.map
32
+ //# sourceMappingURL=EditorCard-B9UFM_uA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCard-DCm6Ykb8.js","sources":["../src/components/editors/shared/EditorCard/EditorCard.tsx"],"sourcesContent":["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 '@embeddable.com/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":["EditorCard","title","subtitle","children","errorMessage","props","theme","useTheme","i18nSetup","getDisplay","jsx","CardFeedback","IconAlertCircle","i18n","Card","styles","CardHeader","CardContent"],"mappings":";;;;;GAeaA,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,IAEAM,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAMC;AAAA,MACN,OAAOC,EAAK,EAAE,oBAAoB;AAAA,MAClC,SAAST;AAAA,IAAA;AAAA,EAAA,IAKRD;AAGT,gCACGW,GAAA,EAAK,WAAWC,EAAO,MAAO,GAAGV,GAChC,UAAA;AAAA,IAAAK,gBAAAA,EAAAA,IAACM,GAAA,EAAW,OAAAf,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9CQ,gBAAAA,EAAAA,IAACO,GAAA,EAAa,UAAAR,EAAA,EAAW,CAAE;AAAA,EAAA,GAC7B;AAEJ;"}
1
+ {"version":3,"file":"EditorCard-B9UFM_uA.js","sources":["../src/components/editors/shared/EditorCard/EditorCard.tsx"],"sourcesContent":["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 '@embeddable.com/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":["EditorCard","title","subtitle","children","errorMessage","props","theme","useTheme","i18nSetup","getDisplay","jsx","CardFeedback","IconAlertCircle","i18n","Card","styles","CardHeader","CardContent"],"mappings":";;;;;GAeaA,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,IAEAM,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAMC;AAAA,MACN,OAAOC,EAAK,EAAE,oBAAoB;AAAA,MAClC,SAAST;AAAA,IAAA;AAAA,EAAA,IAKRD;AAGT,gCACGW,GAAA,EAAK,WAAWC,EAAO,MAAO,GAAGV,GAChC,UAAA;AAAA,IAAAK,gBAAAA,EAAAA,IAACM,GAAA,EAAW,OAAAf,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9CQ,gBAAAA,EAAAA,IAACO,GAAA,EAAa,UAAAR,EAAA,EAAW,CAAE;AAAA,EAAA,GAC7B;AAEJ;"}
@@ -1,7 +1,7 @@
1
1
  import { j as E, S as F } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { useMemo as g, useEffect as C } from "react";
3
3
  import { useTheme as G } from "@embeddable.com/react";
4
- import { f as N, e as d, a as w } from "./component.inputs.constants-wDyG8tFg.js";
4
+ import { f as N, e as d, a as w } from "./component.inputs.constants-DzpzJ9Na.js";
5
5
  const D = 1, v = 100, x = () => N.map((e) => ({
6
6
  ...e,
7
7
  label: d(e.label)
@@ -101,4 +101,4 @@ const k = (e, t, r) => {
101
101
  export {
102
102
  K as G
103
103
  };
104
- //# sourceMappingURL=GranularitySelectField-CYq2YuAO.js.map
104
+ //# sourceMappingURL=GranularitySelectField-DuRk6qY8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GranularitySelectField-CYq2YuAO.js","sources":["../src/components/editors/shared/GranularitySelectField/GranularitySelectField.utils.ts","../src/components/editors/shared/GranularitySelectField/GranularitySelectField.tsx"],"sourcesContent":["import { SelectListOptionProps } from '@embeddable.com/remarkable-ui';\nimport { Granularity, TimeRange } from '@embeddable.com/core';\nimport {\n defaultGranularitySelectFieldOptions,\n TGranularityValue,\n} from '../../../../theme/defaults/defaults.GranularityOptions.constants';\nimport { resolveI18nString } from '../../../component.utils';\n\nconst DEFAULT_MIN_BUCKETS = 1;\nconst DEFAULT_MAX_BUCKETS = 100;\n\nexport const getGranularitySelectFieldOptions = (): SelectListOptionProps[] => {\n return defaultGranularitySelectFieldOptions.map((opt) => ({\n ...opt,\n label: resolveI18nString(opt.label),\n }));\n};\n\n// Convert possibly-string timestamps to Date safely.\nconst toDate = (d: unknown): Date | null => {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? null : d;\n if (typeof d === 'string' || typeof d === 'number') {\n const parsed = new Date(d);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n};\n\n// Inclusive end -> Exclusive end helper (only used for sub-day diffs)\nconst toExclusiveEnd = (endInclusive: Date): Date => new Date(endInclusive.getTime() + 1);\n\nconst bucketCountByUnit = (start: Date, endExclusive: Date, unitMs: number): number => {\n return (endExclusive.getTime() - start.getTime()) / unitMs;\n};\n\n// Bucket counting (treat end as INCLUSIVE)\nfunction bucketCount(start: Date, endInclusive: Date, granularity: Granularity): number {\n if (start > endInclusive) return 0;\n\n switch (granularity) {\n case 'second':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 1000);\n\n case 'minute':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 60 * 1000);\n\n case 'hour':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 60 * 60 * 1000);\n\n case 'day':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 24 * 60 * 60 * 1000);\n\n case 'week':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 7 * 24 * 60 * 60 * 1000);\n\n case 'month':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 28 * 24 * 60 * 60 * 1000); // shortest month\n\n case 'quarter':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 90 * 24 * 60 * 60 * 1000); // shortest quarter\n\n case 'year':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 365 * 24 * 60 * 60 * 1000); // shortest year\n }\n}\n\nconst isGranularityValid = (\n start: Date,\n endInclusive: Date,\n granularity: TGranularityValue,\n): boolean => {\n const buckets = bucketCount(start, endInclusive, granularity);\n return buckets >= DEFAULT_MIN_BUCKETS && buckets <= DEFAULT_MAX_BUCKETS;\n};\n\nexport const getAvailableGranularityOptionsFromTimeRange = (\n timeRange: TimeRange,\n allOptions: SelectListOptionProps[],\n): SelectListOptionProps[] => {\n if (!timeRange) return allOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const from = toDate((timeRange as any)?.from);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const to = toDate((timeRange as any)?.to);\n\n // If we can’t parse range, don’t hide anything (fail open)\n if (!from || !to) return allOptions;\n\n const validSet = new Set<TGranularityValue>();\n\n for (const opt of allOptions) {\n const g = opt.value as TGranularityValue;\n if (isGranularityValid(from, to, g)) {\n validSet.add(g);\n }\n }\n\n // preserve original UI ordering\n return allOptions.filter((opt) => validSet.has(opt.value as TGranularityValue));\n};\n\nexport const getSafeSelection = (\n availableOptions: SelectListOptionProps[],\n granularity?: Granularity,\n): Granularity | undefined => {\n if (!granularity) {\n return undefined;\n }\n\n if (availableOptions.some((opt) => opt.value === granularity)) {\n return granularity;\n }\n\n const optionToSelect = availableOptions.length > 2 ? 1 : 0;\n\n return availableOptions[optionToSelect]?.value as Granularity;\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTheme } from '@embeddable.com/react';\nimport { SingleSelectField, SingleSelectFieldProps } from '@embeddable.com/remarkable-ui';\nimport { Granularity, TimeRange } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport {\n getAvailableGranularityOptionsFromTimeRange,\n getGranularitySelectFieldOptions,\n getSafeSelection,\n} from './GranularitySelectField.utils';\nimport { TGranularityValue } from '../../../../theme/defaults/defaults.GranularityOptions.constants';\nimport { ChartCardHeaderProps } from '../../../charts/shared/ChartCard/ChartCard';\n\nexport type GranularitySelectFieldProps = {\n onChange: (newGranularity: Granularity) => void;\n primaryTimeRange?: TimeRange;\n granularity?: TGranularityValue;\n granularities?: TGranularityValue[];\n} & ChartCardHeaderProps &\n Pick<SingleSelectFieldProps, 'variant' | 'side' | 'align' | 'clearable' | 'placeholder'>;\n\nexport const GranularitySelectField = (props: GranularitySelectFieldProps) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const {\n granularity,\n granularities,\n clearable,\n placeholder,\n primaryTimeRange,\n variant,\n side,\n align,\n onChange,\n } = props;\n\n const granularitySelectFieldOptions = getGranularitySelectFieldOptions();\n\n const availableOptions = useMemo(() => {\n return getAvailableGranularityOptionsFromTimeRange(\n primaryTimeRange,\n granularitySelectFieldOptions.filter((opt) =>\n granularities?.includes(opt.value as TGranularityValue),\n ),\n );\n }, [primaryTimeRange, granularities]);\n\n useEffect(() => {\n if (granularity) {\n // Selected granularity is not available\n // Select 1st available option when number of options is =< 2\n // Select 2nd option to avoid when number of options > 2\n if (!availableOptions.some((opt) => opt.value === granularity)) {\n const newGranularity = getSafeSelection(availableOptions, granularity);\n if (newGranularity) {\n onChange(newGranularity as Granularity);\n }\n }\n }\n }, [availableOptions, granularity, onChange]);\n\n const safeValue = getSafeSelection(availableOptions, granularity);\n\n return (\n <SingleSelectField\n variant={variant}\n clearable={clearable}\n placeholder={placeholder}\n value={safeValue}\n options={availableOptions}\n onChange={(newValue) => onChange(newValue as Granularity)}\n avoidCollisions={false}\n side={side}\n align={align}\n />\n );\n};\n"],"names":["DEFAULT_MIN_BUCKETS","DEFAULT_MAX_BUCKETS","getGranularitySelectFieldOptions","defaultGranularitySelectFieldOptions","opt","resolveI18nString","toDate","d","parsed","toExclusiveEnd","endInclusive","bucketCountByUnit","start","endExclusive","unitMs","bucketCount","granularity","isGranularityValid","buckets","getAvailableGranularityOptionsFromTimeRange","timeRange","allOptions","from","to","validSet","g","getSafeSelection","availableOptions","optionToSelect","_a","GranularitySelectField","props","theme","useTheme","i18nSetup","granularities","clearable","placeholder","primaryTimeRange","variant","side","align","onChange","granularitySelectFieldOptions","useMemo","useEffect","newGranularity","safeValue","jsx","SingleSelectField","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"GranularitySelectField-DuRk6qY8.js","sources":["../src/components/editors/shared/GranularitySelectField/GranularitySelectField.utils.ts","../src/components/editors/shared/GranularitySelectField/GranularitySelectField.tsx"],"sourcesContent":["import { SelectListOptionProps } from '@embeddable.com/remarkable-ui';\nimport { Granularity, TimeRange } from '@embeddable.com/core';\nimport {\n defaultGranularitySelectFieldOptions,\n TGranularityValue,\n} from '../../../../theme/defaults/defaults.GranularityOptions.constants';\nimport { resolveI18nString } from '../../../component.utils';\n\nconst DEFAULT_MIN_BUCKETS = 1;\nconst DEFAULT_MAX_BUCKETS = 100;\n\nexport const getGranularitySelectFieldOptions = (): SelectListOptionProps[] => {\n return defaultGranularitySelectFieldOptions.map((opt) => ({\n ...opt,\n label: resolveI18nString(opt.label),\n }));\n};\n\n// Convert possibly-string timestamps to Date safely.\nconst toDate = (d: unknown): Date | null => {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? null : d;\n if (typeof d === 'string' || typeof d === 'number') {\n const parsed = new Date(d);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n};\n\n// Inclusive end -> Exclusive end helper (only used for sub-day diffs)\nconst toExclusiveEnd = (endInclusive: Date): Date => new Date(endInclusive.getTime() + 1);\n\nconst bucketCountByUnit = (start: Date, endExclusive: Date, unitMs: number): number => {\n return (endExclusive.getTime() - start.getTime()) / unitMs;\n};\n\n// Bucket counting (treat end as INCLUSIVE)\nfunction bucketCount(start: Date, endInclusive: Date, granularity: Granularity): number {\n if (start > endInclusive) return 0;\n\n switch (granularity) {\n case 'second':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 1000);\n\n case 'minute':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 60 * 1000);\n\n case 'hour':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 60 * 60 * 1000);\n\n case 'day':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 24 * 60 * 60 * 1000);\n\n case 'week':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 7 * 24 * 60 * 60 * 1000);\n\n case 'month':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 28 * 24 * 60 * 60 * 1000); // shortest month\n\n case 'quarter':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 90 * 24 * 60 * 60 * 1000); // shortest quarter\n\n case 'year':\n return bucketCountByUnit(start, toExclusiveEnd(endInclusive), 365 * 24 * 60 * 60 * 1000); // shortest year\n }\n}\n\nconst isGranularityValid = (\n start: Date,\n endInclusive: Date,\n granularity: TGranularityValue,\n): boolean => {\n const buckets = bucketCount(start, endInclusive, granularity);\n return buckets >= DEFAULT_MIN_BUCKETS && buckets <= DEFAULT_MAX_BUCKETS;\n};\n\nexport const getAvailableGranularityOptionsFromTimeRange = (\n timeRange: TimeRange,\n allOptions: SelectListOptionProps[],\n): SelectListOptionProps[] => {\n if (!timeRange) return allOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const from = toDate((timeRange as any)?.from);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const to = toDate((timeRange as any)?.to);\n\n // If we can’t parse range, don’t hide anything (fail open)\n if (!from || !to) return allOptions;\n\n const validSet = new Set<TGranularityValue>();\n\n for (const opt of allOptions) {\n const g = opt.value as TGranularityValue;\n if (isGranularityValid(from, to, g)) {\n validSet.add(g);\n }\n }\n\n // preserve original UI ordering\n return allOptions.filter((opt) => validSet.has(opt.value as TGranularityValue));\n};\n\nexport const getSafeSelection = (\n availableOptions: SelectListOptionProps[],\n granularity?: Granularity,\n): Granularity | undefined => {\n if (!granularity) {\n return undefined;\n }\n\n if (availableOptions.some((opt) => opt.value === granularity)) {\n return granularity;\n }\n\n const optionToSelect = availableOptions.length > 2 ? 1 : 0;\n\n return availableOptions[optionToSelect]?.value as Granularity;\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTheme } from '@embeddable.com/react';\nimport { SingleSelectField, SingleSelectFieldProps } from '@embeddable.com/remarkable-ui';\nimport { Granularity, TimeRange } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport {\n getAvailableGranularityOptionsFromTimeRange,\n getGranularitySelectFieldOptions,\n getSafeSelection,\n} from './GranularitySelectField.utils';\nimport { TGranularityValue } from '../../../../theme/defaults/defaults.GranularityOptions.constants';\nimport { ChartCardHeaderProps } from '../../../charts/shared/ChartCard/ChartCard';\n\nexport type GranularitySelectFieldProps = {\n onChange: (newGranularity: Granularity) => void;\n primaryTimeRange?: TimeRange;\n granularity?: TGranularityValue;\n granularities?: TGranularityValue[];\n} & ChartCardHeaderProps &\n Pick<SingleSelectFieldProps, 'variant' | 'side' | 'align' | 'clearable' | 'placeholder'>;\n\nexport const GranularitySelectField = (props: GranularitySelectFieldProps) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const {\n granularity,\n granularities,\n clearable,\n placeholder,\n primaryTimeRange,\n variant,\n side,\n align,\n onChange,\n } = props;\n\n const granularitySelectFieldOptions = getGranularitySelectFieldOptions();\n\n const availableOptions = useMemo(() => {\n return getAvailableGranularityOptionsFromTimeRange(\n primaryTimeRange,\n granularitySelectFieldOptions.filter((opt) =>\n granularities?.includes(opt.value as TGranularityValue),\n ),\n );\n }, [primaryTimeRange, granularities]);\n\n useEffect(() => {\n if (granularity) {\n // Selected granularity is not available\n // Select 1st available option when number of options is =< 2\n // Select 2nd option to avoid when number of options > 2\n if (!availableOptions.some((opt) => opt.value === granularity)) {\n const newGranularity = getSafeSelection(availableOptions, granularity);\n if (newGranularity) {\n onChange(newGranularity as Granularity);\n }\n }\n }\n }, [availableOptions, granularity, onChange]);\n\n const safeValue = getSafeSelection(availableOptions, granularity);\n\n return (\n <SingleSelectField\n variant={variant}\n clearable={clearable}\n placeholder={placeholder}\n value={safeValue}\n options={availableOptions}\n onChange={(newValue) => onChange(newValue as Granularity)}\n avoidCollisions={false}\n side={side}\n align={align}\n />\n );\n};\n"],"names":["DEFAULT_MIN_BUCKETS","DEFAULT_MAX_BUCKETS","getGranularitySelectFieldOptions","defaultGranularitySelectFieldOptions","opt","resolveI18nString","toDate","d","parsed","toExclusiveEnd","endInclusive","bucketCountByUnit","start","endExclusive","unitMs","bucketCount","granularity","isGranularityValid","buckets","getAvailableGranularityOptionsFromTimeRange","timeRange","allOptions","from","to","validSet","g","getSafeSelection","availableOptions","optionToSelect","_a","GranularitySelectField","props","theme","useTheme","i18nSetup","granularities","clearable","placeholder","primaryTimeRange","variant","side","align","onChange","granularitySelectFieldOptions","useMemo","useEffect","newGranularity","safeValue","jsx","SingleSelectField","newValue"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { useTheme as p, definePreview as y, defineComponent as b } from "@embeddable.com/react";
2
2
  import { j as t, V as f } from "./Color.type.emb-De2K8PVb.js";
3
- import { a as v, r as h, G as e, b as a } from "./component.inputs.constants-wDyG8tFg.js";
4
- import { E as S } from "./EditorCard-DCm6Ykb8.js";
5
- import { G as P } from "./GranularitySelectField-CYq2YuAO.js";
3
+ import { a as v, r as h, G as e, b as a } from "./component.inputs.constants-DzpzJ9Na.js";
4
+ import { E as S } from "./EditorCard-B9UFM_uA.js";
5
+ import { G as P } from "./GranularitySelectField-DuRk6qY8.js";
6
6
  const l = (r) => {
7
7
  const n = p();
8
8
  v(n);
@@ -1,8 +1,8 @@
1
1
  import { g as a, l as i } from "./Color.type.emb-De2K8PVb.js";
2
2
  import { definePreview as r, defineComponent as l } from "@embeddable.com/react";
3
- import { H as n } from "./index-BaboirUQ.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as t } from "./preview.data.constants-37wUPKG8.js";
3
+ import { H as n } from "./index-DeWASjPW.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as t } from "./preview.data.constants-BBIMPXYy.js";
6
6
  const m = {
7
7
  name: "HeatMapPro",
8
8
  label: "Heat Map",
@@ -1,8 +1,8 @@
1
1
  import { definePreview as s, defineComponent as l } from "@embeddable.com/react";
2
- import { K as t } from "./index-BkcQaDp8.js";
2
+ import { K as t } from "./index-Crpz4FA4.js";
3
3
  import { l as i } from "./Color.type.emb-De2K8PVb.js";
4
- import { b as a } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as o } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as a } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as o } from "./preview.data.constants-BBIMPXYy.js";
6
6
  const p = {
7
7
  name: "KpiChartNumberComparisonPro",
8
8
  label: "Kpi Chart - Number Comparison",
@@ -1,8 +1,8 @@
1
1
  import { definePreview as o, defineComponent as s } from "@embeddable.com/react";
2
- import { K as a } from "./index-DfrwKtFA.js";
2
+ import { K as a } from "./index-CEDNCQK8.js";
3
3
  import { l as m } from "./Color.type.emb-De2K8PVb.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as t } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as t } from "./preview.data.constants-BBIMPXYy.js";
6
6
  const i = {
7
7
  name: "KpiChartNumberPro",
8
8
  label: "Kpi Chart - Number",
@@ -1,8 +1,8 @@
1
1
  import { definePreview as d, defineComponent as c } from "@embeddable.com/react";
2
- import { L as u } from "./index-eEE2JmCK.js";
2
+ import { L as u } from "./index-BEckqi71.js";
3
3
  import { V as g, l as p } from "./Color.type.emb-De2K8PVb.js";
4
- import { b as e, s as r } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as s } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as e, s as r } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as s } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as y } from "./granularity.utils-CA504xa0.js";
7
7
  const D = {
8
8
  name: "LineChartComparisonDefaultPro",
@@ -1,8 +1,8 @@
1
1
  import { definePreview as m, defineComponent as u } from "@embeddable.com/react";
2
- import { L as r } from "./index-DCA_6rWw.js";
2
+ import { L as r } from "./index-D37a5H7U.js";
3
3
  import { V as d, l as x } from "./Color.type.emb-De2K8PVb.js";
4
- import { b as e, s as i } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as n } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as e, s as i } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as n } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as p } from "./granularity.utils-CA504xa0.js";
7
7
  const c = {
8
8
  name: "LineChartDefaultPro",
@@ -1,8 +1,8 @@
1
1
  import { definePreview as m, defineComponent as u } from "@embeddable.com/react";
2
- import { L as s } from "./index-D3HMg6eu.js";
2
+ import { L as s } from "./index-DADSJYlJ.js";
3
3
  import { V as o, l as p } from "./Color.type.emb-De2K8PVb.js";
4
- import { b as e } from "./component.inputs.constants-wDyG8tFg.js";
5
- import { p as n } from "./preview.data.constants-37wUPKG8.js";
4
+ import { b as e } from "./component.inputs.constants-DzpzJ9Na.js";
5
+ import { p as n } from "./preview.data.constants-BBIMPXYy.js";
6
6
  import { g as d } from "./granularity.utils-CA504xa0.js";
7
7
  const g = {
8
8
  name: "LineChartGroupedPro",