@embeddable.com/remarkable-ui 0.1.19 → 0.1.21

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 (123) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +35 -34
  2. package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
  3. package/dist/BarChartDefaultPro.js +34 -33
  4. package/dist/BarChartDefaultPro.js.map +1 -1
  5. package/dist/BarChartGroupedHorizontalPro.js +52 -46
  6. package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
  7. package/dist/BarChartGroupedPro.js +41 -35
  8. package/dist/BarChartGroupedPro.js.map +1 -1
  9. package/dist/BarChartStackedHorizontalPro.js +37 -31
  10. package/dist/BarChartStackedHorizontalPro.js.map +1 -1
  11. package/dist/BarChartStackedPro.js +38 -32
  12. package/dist/BarChartStackedPro.js.map +1 -1
  13. package/dist/{BaseButton-CuifBVsc.js → BaseButton-B9R70ibr.js} +2 -2
  14. package/dist/{BaseButton-CuifBVsc.js.map → BaseButton-B9R70ibr.js.map} +1 -1
  15. package/dist/{ChartCard-BkrK3C4a.js → ChartCard-BPQKmAbZ.js} +29 -29
  16. package/dist/{ChartCard-BkrK3C4a.js.map → ChartCard-BPQKmAbZ.js.map} +1 -1
  17. package/dist/{ComparisonPeriod.type.emb-Cli9Gpzq.js → ComparisonPeriod.type.emb-k9KG0j4e.js} +2 -2
  18. package/dist/{ComparisonPeriod.type.emb-Cli9Gpzq.js.map → ComparisonPeriod.type.emb-k9KG0j4e.js.map} +1 -1
  19. package/dist/ComparisonPeriodSelectFieldPro.js +9 -9
  20. package/dist/DateRangeSelectFieldPro.js +2 -2
  21. package/dist/DonutChartPro.js +2 -2
  22. package/dist/DonutLabelChartPro.js +2 -2
  23. package/dist/{EditorCard-BQnDPFzf.js → EditorCard-4LWPw46N.js} +11 -11
  24. package/dist/{EditorCard-BQnDPFzf.js.map → EditorCard-4LWPw46N.js.map} +1 -1
  25. package/dist/{KpiChart-ClxfTTJ4.js → KpiChart-BzU7-U1P.js} +2 -2
  26. package/dist/{KpiChart-ClxfTTJ4.js.map → KpiChart-BzU7-U1P.js.map} +1 -1
  27. package/dist/KpiChartNumberComparisonPro.js +61 -73
  28. package/dist/KpiChartNumberComparisonPro.js.map +1 -1
  29. package/dist/KpiChartNumberPro.js +4 -4
  30. package/dist/LineChartComparisonDefaultPro.js +404 -0
  31. package/dist/LineChartComparisonDefaultPro.js.map +1 -0
  32. package/dist/LineChartDefaultPro.js +183 -0
  33. package/dist/LineChartDefaultPro.js.map +1 -0
  34. package/dist/LineChartGroupedPro.js +184 -0
  35. package/dist/LineChartGroupedPro.js.map +1 -0
  36. package/dist/MultiSelectFieldPro.js +2 -2
  37. package/dist/PieChartPro.js +2 -2
  38. package/dist/{SingleSelectField-BAEvpk7-.js → SingleSelectField-j9ZkcXnt.js} +21 -21
  39. package/dist/{SingleSelectField-BAEvpk7-.js.map → SingleSelectField-j9ZkcXnt.js.map} +1 -1
  40. package/dist/SingleSelectFieldPro.js +2 -2
  41. package/dist/bars.utils-X-qA7D8y.js +311 -0
  42. package/dist/bars.utils-X-qA7D8y.js.map +1 -0
  43. package/dist/charts.newFillGaps.hooks-D6mnKJwQ.js +63 -0
  44. package/dist/charts.newFillGaps.hooks-D6mnKJwQ.js.map +1 -0
  45. package/dist/{object.utils-CaoDr05j.js → charts.utils-CLblssnk.js} +1919 -1977
  46. package/dist/charts.utils-CLblssnk.js.map +1 -0
  47. package/dist/color.utils-CVyp-fGP.js +1645 -0
  48. package/dist/color.utils-CVyp-fGP.js.map +1 -0
  49. package/dist/{component.constants-CL4mGURD.js → component.constants-DNKLx5yG.js} +4976 -3873
  50. package/dist/component.constants-DNKLx5yG.js.map +1 -0
  51. package/dist/embeddable-components.json +12 -9
  52. package/dist/embeddable-theme-2b917.js +19 -16
  53. package/dist/{formatter.utils-BaAiNARZ.js → formatter.utils-Dvqm1_wN.js} +2 -2
  54. package/dist/{formatter.utils-BaAiNARZ.js.map → formatter.utils-Dvqm1_wN.js.map} +1 -1
  55. package/dist/{index-CAGJqsS8.js → index-AHoU58PM.js} +12 -12
  56. package/dist/{index-CAGJqsS8.js.map → index-AHoU58PM.js.map} +1 -1
  57. package/dist/{index-BSbQYCwI.js → index-B7EEYcDX.js} +24 -24
  58. package/dist/{index-BSbQYCwI.js.map → index-B7EEYcDX.js.map} +1 -1
  59. package/dist/{index-RqtiYv1c.js → index-CDjR8avB.js} +13 -13
  60. package/dist/{index-RqtiYv1c.js.map → index-CDjR8avB.js.map} +1 -1
  61. package/dist/{index-9t6SPE91.js → index-CK5qzSsu.js} +9 -9
  62. package/dist/{index-9t6SPE91.js.map → index-CK5qzSsu.js.map} +1 -1
  63. package/dist/{index-BUwm0Ul3.js → index-CnlhFJCl.js} +8 -8
  64. package/dist/{index-BUwm0Ul3.js.map → index-CnlhFJCl.js.map} +1 -1
  65. package/dist/{index-BehaWXq-.js → index-wFJWsuFG.js} +4 -4
  66. package/dist/{index-BehaWXq-.js.map → index-wFJWsuFG.js.map} +1 -1
  67. package/dist/index.js +133 -125
  68. package/dist/index.js.map +1 -1
  69. package/dist/object.utils-BNKDL7Y9.js +67 -0
  70. package/dist/object.utils-BNKDL7Y9.js.map +1 -0
  71. package/dist/{pies.utils-hekLAU_r.js → pies.utils-DW6NURSZ.js} +9 -8
  72. package/dist/{pies.utils-hekLAU_r.js.map → pies.utils-DW6NURSZ.js.map} +1 -1
  73. package/dist/remarkable-pro/components/charts/bars/BarChartGroupedHorizontalPro/index.d.ts.map +1 -1
  74. package/dist/remarkable-pro/components/charts/bars/BarChartGroupedPro/index.d.ts.map +1 -1
  75. package/dist/remarkable-pro/components/charts/bars/BarChartStackedHorizontalPro/index.d.ts.map +1 -1
  76. package/dist/remarkable-pro/components/charts/bars/BarChartStackedPro/index.d.ts.map +1 -1
  77. package/dist/remarkable-pro/components/charts/bars/bars.utils.d.ts +1 -1
  78. package/dist/remarkable-pro/components/charts/bars/bars.utils.d.ts.map +1 -1
  79. package/dist/remarkable-pro/components/charts/charts.newFillGaps.hooks.d.ts +10 -0
  80. package/dist/remarkable-pro/components/charts/charts.newFillGaps.hooks.d.ts.map +1 -0
  81. package/dist/remarkable-pro/components/charts/lines/LineChartComparisonDefaultPro/LineChartComparisonDefaultPro.utils.d.ts +20 -0
  82. package/dist/remarkable-pro/components/charts/lines/LineChartComparisonDefaultPro/LineChartComparisonDefaultPro.utils.d.ts.map +1 -0
  83. package/dist/remarkable-pro/components/charts/lines/LineChartComparisonDefaultPro/index.d.ts +26 -0
  84. package/dist/remarkable-pro/components/charts/lines/LineChartComparisonDefaultPro/index.d.ts.map +1 -0
  85. package/dist/remarkable-pro/components/charts/lines/LineChartDefaultPro/LineChartDefaultPro.utils.d.ts +14 -0
  86. package/dist/remarkable-pro/components/charts/lines/LineChartDefaultPro/LineChartDefaultPro.utils.d.ts.map +1 -0
  87. package/dist/remarkable-pro/components/charts/lines/LineChartDefaultPro/index.d.ts +20 -0
  88. package/dist/remarkable-pro/components/charts/lines/LineChartDefaultPro/index.d.ts.map +1 -0
  89. package/dist/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.d.ts +22 -0
  90. package/dist/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.d.ts.map +1 -0
  91. package/dist/remarkable-pro/components/charts/lines/LineChartGroupedPro/index.d.ts +21 -0
  92. package/dist/remarkable-pro/components/charts/lines/LineChartGroupedPro/index.d.ts.map +1 -0
  93. package/dist/remarkable-pro/components/charts/lines/lines.utils.d.ts +14 -0
  94. package/dist/remarkable-pro/components/charts/lines/lines.utils.d.ts.map +1 -0
  95. package/dist/remarkable-pro/components/component.constants.d.ts +40 -24
  96. package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
  97. package/dist/remarkable-pro/index.d.ts +1 -0
  98. package/dist/remarkable-pro/index.d.ts.map +1 -1
  99. package/dist/remarkable-pro/theme/formatter/formatter.constants.d.ts.map +1 -1
  100. package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
  101. package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
  102. package/dist/remarkable-pro/theme/theme.types.d.ts +9 -0
  103. package/dist/remarkable-pro/theme/theme.types.d.ts.map +1 -1
  104. package/dist/remarkable-pro/utils.ts/color.utils.d.ts +3 -0
  105. package/dist/remarkable-pro/utils.ts/color.utils.d.ts.map +1 -0
  106. package/dist/remarkable-ui/charts/lines/LineChart.d.ts.map +1 -1
  107. package/dist/remarkable-ui/charts/lines/lines.utils.d.ts.map +1 -1
  108. package/dist/remarkable-ui/index.d.ts +1 -0
  109. package/dist/remarkable-ui/index.d.ts.map +1 -1
  110. package/dist/remarkable-ui/styles/styles.constants.d.ts +4 -0
  111. package/dist/remarkable-ui/styles/styles.constants.d.ts.map +1 -1
  112. package/dist/remarkable-ui.css +6 -2
  113. package/dist/timeRange.utils-BXW3aXZf.js +20 -0
  114. package/dist/timeRange.utils-BXW3aXZf.js.map +1 -0
  115. package/package.json +6 -4
  116. package/dist/charts.fillGaps.hooks-BvYoaRpE.js +0 -584
  117. package/dist/charts.fillGaps.hooks-BvYoaRpE.js.map +0 -1
  118. package/dist/component.constants-CL4mGURD.js.map +0 -1
  119. package/dist/object.utils-CaoDr05j.js.map +0 -1
  120. package/dist/remarkable-pro/components/charts/charts.fillGaps.hooks.d.ts +0 -25
  121. package/dist/remarkable-pro/components/charts/charts.fillGaps.hooks.d.ts.map +0 -1
  122. package/dist/remarkable-pro/components/charts/charts.fillGaps.utils.d.ts +0 -31
  123. package/dist/remarkable-pro/components/charts/charts.fillGaps.utils.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSelectField-BAEvpk7-.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\n\nexport type SingleSelectFieldProps = {\n options: SelectListOptionProps[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n return (\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n </SelectList>\n </Dropdown>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","handleChange","newValue","handleSearch","newSearch","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","jsxs","SelectListOptions","SelectListOption"],"mappings":"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"}
1
+ {"version":3,"file":"SingleSelectField-j9ZkcXnt.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\n\nexport type SingleSelectFieldProps = {\n options: SelectListOptionProps[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n return (\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n </SelectList>\n </Dropdown>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","handleChange","newValue","handleSearch","newSearch","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","jsxs","SelectListOptions","SelectListOption"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as s, z as r, t as d, c as m, $ as c, V as n, o as u } from "./component.constants-CL4mGURD.js";
3
- import { M as p, S as g } from "./index-RqtiYv1c.js";
2
+ import { d as s, z as r, t as d, c as m, a5 as c, V as n, o as u } from "./component.constants-DNKLx5yG.js";
3
+ import { M as p, S as g } from "./index-CDjR8avB.js";
4
4
  const f = {
5
5
  name: "SingleSelectFieldPro",
6
6
  label: "Single Select Field",
@@ -0,0 +1,311 @@
1
+ import { C as $, m as C, D as I, E as h, F as x, G as B, H as T, I as S, L as R, J as V, K as j, M as F, N, O as P, P as z, j as f, Q as M, R as _, S as H, T as L } from "./component.constants-DNKLx5yG.js";
2
+ import { useRef as K } from "react";
3
+ import { r as E, g as G } from "./charts.utils-CLblssnk.js";
4
+ import { g as y } from "./formatter.utils-Dvqm1_wN.js";
5
+ import { g as w, a as p } from "./object.utils-BNKDL7Y9.js";
6
+ const J = (a) => {
7
+ var t;
8
+ return {
9
+ ...a,
10
+ datasets: (t = a.datasets) == null ? void 0 : t.map((n, s) => {
11
+ const e = h[s % h.length], r = {
12
+ ...n,
13
+ backgroundColor: e,
14
+ borderColor: e
15
+ };
16
+ return C(r, n);
17
+ })
18
+ };
19
+ }, Q = (a, t) => t && a.datasetIndex === a.chart.data.datasets.length - 1 ? "auto" : !1, X = (a, t) => {
20
+ const { datasets: n } = t.chart.data, s = t.dataIndex, e = n.reduce((r, d) => {
21
+ const o = d.data[s];
22
+ return r + (o || 0);
23
+ }, 0);
24
+ return e > 0 ? e : "";
25
+ }, Y = (a) => ({
26
+ indexAxis: "x",
27
+ layout: {
28
+ padding: {
29
+ top: (a.stacked ? a.showTotalLabels : a.showValueLabels) ? B : 0
30
+ }
31
+ },
32
+ plugins: {
33
+ datalabels: {
34
+ labels: {
35
+ total: {
36
+ align: (t) => t.dataset.data[t.dataIndex] >= 0 ? "top" : "left"
37
+ },
38
+ value: {
39
+ align: (t) => a.stacked ? "center" : t.dataset.data[t.dataIndex] >= 0 ? "top" : "bottom"
40
+ }
41
+ }
42
+ }
43
+ },
44
+ scales: {
45
+ x: {
46
+ grid: { display: !1 },
47
+ ticks: {
48
+ color: x("--em-chart-grid-font-color-default")
49
+ },
50
+ reverse: a.reverseXAxis
51
+ },
52
+ y: {
53
+ grid: { display: !0 },
54
+ ticks: {
55
+ color: x("--em-chart-grid-font-color-muted")
56
+ },
57
+ min: a.yAxisRangeMin,
58
+ max: a.yAxisRangeMax,
59
+ type: a.showLogarithmicScale ? "logarithmic" : "linear"
60
+ }
61
+ }
62
+ }), q = (a) => ({
63
+ indexAxis: "y",
64
+ layout: {
65
+ padding: {
66
+ right: (a.stacked ? a.showTotalLabels : a.showValueLabels) ? B : 0
67
+ }
68
+ },
69
+ plugins: {
70
+ datalabels: {
71
+ labels: {
72
+ total: {
73
+ align: (t) => t.dataset.data[t.dataIndex] >= 0 ? "right" : "left"
74
+ },
75
+ value: {
76
+ align: (t) => a.stacked ? "center" : t.dataset.data[t.dataIndex] >= 0 ? "right" : "left"
77
+ }
78
+ }
79
+ }
80
+ },
81
+ scales: {
82
+ x: {
83
+ grid: { display: !0 },
84
+ ticks: {
85
+ color: x("--em-chart-grid-font-color-muted")
86
+ },
87
+ min: a.xAxisRangeMin,
88
+ max: a.xAxisRangeMax,
89
+ type: a.showLogarithmicScale ? "logarithmic" : "linear"
90
+ },
91
+ y: {
92
+ grid: { display: !1 },
93
+ ticks: {
94
+ color: x("--em-chart-grid-font-color-default")
95
+ },
96
+ reverse: a.reverseYAxis
97
+ }
98
+ }
99
+ }), U = (a) => {
100
+ const t = {
101
+ elements: {
102
+ bar: {
103
+ borderRadius: $("--em-chart-style-border-radius-default")
104
+ }
105
+ },
106
+ plugins: {
107
+ legend: { display: a.showLegend },
108
+ tooltip: {
109
+ enabled: a.showTooltips
110
+ },
111
+ datalabels: {
112
+ display: (e) => a.showValueLabels && e.dataset.data[e.dataIndex] !== 0 ? "auto" : !1,
113
+ labels: {
114
+ total: {
115
+ display: (e) => Q(e, a.showTotalLabels),
116
+ formatter: X,
117
+ anchor: (e) => e.dataset.data[e.dataIndex] >= 0 ? "end" : "start"
118
+ },
119
+ value: {
120
+ anchor: (e) => a.stacked ? "center" : e.dataset.data[e.dataIndex] >= 0 ? "end" : "start"
121
+ }
122
+ }
123
+ }
124
+ },
125
+ scales: {
126
+ x: {
127
+ stacked: !!a.stacked,
128
+ title: {
129
+ display: !!a.xAxisLabel,
130
+ text: a.xAxisLabel ?? ""
131
+ },
132
+ ticks: { display: !0 }
133
+ },
134
+ y: {
135
+ stacked: !!a.stacked,
136
+ title: {
137
+ display: !!a.yAxisLabel,
138
+ text: a.yAxisLabel ?? ""
139
+ },
140
+ ticks: { display: !0 }
141
+ }
142
+ }
143
+ }, s = (a.horizontal ? q : Y)(a);
144
+ return C(I, t, s);
145
+ };
146
+ T.register(
147
+ S,
148
+ R,
149
+ V,
150
+ j,
151
+ F,
152
+ N,
153
+ P,
154
+ z
155
+ );
156
+ const sa = ({ data: a, onSegmentClick: t, options: n = {}, ...s }) => {
157
+ const e = K(null), r = C(U(s), n), d = (o) => {
158
+ const l = H(o, e);
159
+ t == null || t(l);
160
+ };
161
+ return /* @__PURE__ */ f.jsx("div", { className: M.chartContainer, children: /* @__PURE__ */ f.jsx(
162
+ _,
163
+ {
164
+ ref: e,
165
+ data: J(a),
166
+ options: r,
167
+ onClick: d
168
+ }
169
+ ) });
170
+ }, la = (a, t) => {
171
+ var g;
172
+ const n = y(t), { data: s = [], dimension: e, groupDimension: r, measure: d } = a, o = [...new Set(s.map((u) => u[e.name]).filter(Boolean))].sort(), l = `${r.name}${(g = r.inputs) != null && g.granularity ? `.${r.inputs.granularity}` : ""}`, i = [...new Set(s.map((u) => u[l]))].filter(Boolean), c = w(t), m = i.map((u, b) => {
173
+ const A = p(
174
+ `${c}.charts.backgroundColors`,
175
+ `${r.name}.${u}`,
176
+ t.charts.backgroundColors ?? h,
177
+ b
178
+ ), O = p(
179
+ `${c}.charts.borderColors`,
180
+ `${r.name}.${u}`,
181
+ t.charts.borderColors ?? h,
182
+ b
183
+ );
184
+ return {
185
+ label: n.data(r, u),
186
+ rawLabel: u,
187
+ backgroundColor: A,
188
+ borderColor: O,
189
+ data: o.map((D) => {
190
+ const k = s.find(
191
+ (v) => v[l] === u && v[e.name] === D
192
+ );
193
+ return k ? Number(k[d.name]) : 0;
194
+ })
195
+ };
196
+ });
197
+ return {
198
+ labels: o,
199
+ datasets: m
200
+ };
201
+ }, oa = (a, t = E) => {
202
+ if (!a.data)
203
+ return {
204
+ labels: [],
205
+ datasets: [{ data: [] }]
206
+ };
207
+ const n = y(t), s = w(t), e = G(a.data, a.dimension, a.measures, a.maxItems);
208
+ return {
209
+ labels: e.map((r) => r[a.dimension.name]),
210
+ datasets: a.measures.map((r, d) => {
211
+ const o = p(
212
+ `${s}.charts.backgroundColors`,
213
+ r.name,
214
+ t.charts.backgroundColors ?? L,
215
+ d
216
+ ), l = p(
217
+ `${s}.charts.borderColors`,
218
+ r.name,
219
+ t.charts.borderColors ?? L,
220
+ d
221
+ );
222
+ return {
223
+ label: n.dimensionOrMeasureTitle(r),
224
+ data: e.map((i) => i[r.name] ?? 0),
225
+ backgroundColor: o,
226
+ borderColor: l
227
+ };
228
+ })
229
+ };
230
+ }, W = (a, t) => {
231
+ const { datasets: n } = a.chart.data, s = a.dataIndex, e = n.reduce((r, d) => {
232
+ const o = d.data[s];
233
+ return r + (o || 0);
234
+ }, 0);
235
+ return t(e);
236
+ }, na = (a, t) => {
237
+ const { onBarClicked: n, measures: s, dimension: e, horizontal: r, data: d } = a, o = y(t);
238
+ return {
239
+ plugins: {
240
+ legend: { position: t.charts.legendPosition ?? "bottom" },
241
+ datalabels: {
242
+ labels: {
243
+ total: {
244
+ formatter: (l, i) => W(
245
+ i,
246
+ (c) => o.data(s[0], c)
247
+ )
248
+ },
249
+ value: {
250
+ formatter: (l, i) => {
251
+ const c = s[i.datasetIndex % s.length];
252
+ return o.data(c, l);
253
+ }
254
+ }
255
+ }
256
+ },
257
+ tooltip: {
258
+ callbacks: {
259
+ title: (l) => {
260
+ var c;
261
+ const i = (c = l[0]) == null ? void 0 : c.label;
262
+ return o.data(e, i);
263
+ },
264
+ label: (l) => {
265
+ const i = s[l.datasetIndex % s.length], c = l.raw;
266
+ return `${o.data(e, l.dataset.label) || ""}: ${o.data(i, c)}`;
267
+ }
268
+ }
269
+ }
270
+ },
271
+ scales: {
272
+ x: {
273
+ ticks: {
274
+ callback: (l) => {
275
+ if (r)
276
+ return o.data(s[0], l);
277
+ if (!d || !d.labels) return;
278
+ const i = d.labels[Number(l)];
279
+ return o.data(e, i);
280
+ }
281
+ }
282
+ },
283
+ y: {
284
+ ticks: {
285
+ callback: (l) => {
286
+ if (!r)
287
+ return o.data(s[0], l);
288
+ if (!d || !d.labels) return;
289
+ const i = d.labels[Number(l)];
290
+ return o.data(e, i);
291
+ }
292
+ }
293
+ }
294
+ },
295
+ onClick: (l, i, c) => {
296
+ var b;
297
+ const m = i[0], g = m ? c.data.labels[m.index] : null, u = m ? (b = c.data.datasets[m.datasetIndex]) == null ? void 0 : b.rawLabel : null;
298
+ n({
299
+ axisDimensionValue: g,
300
+ groupingDimensionValue: u
301
+ });
302
+ }
303
+ };
304
+ };
305
+ export {
306
+ sa as B,
307
+ na as a,
308
+ la as b,
309
+ oa as g
310
+ };
311
+ //# sourceMappingURL=bars.utils-X-qA7D8y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bars.utils-X-qA7D8y.js","sources":["../src/remarkable-ui/charts/bars/bars.utils.ts","../src/remarkable-ui/charts/bars/BarChart.tsx","../src/remarkable-pro/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseXAxis,\n },\n y: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-chart-style-border-radius-default'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { groupTailAsOther } from '../charts.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { chartColors } from '../../../../remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\nimport { chartContrastColors } from '../../../../remarkable-ui/charts/charts.constants';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter(Boolean))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter(Boolean);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const themeKey = getObjectStableKey(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartColors,\n index,\n );\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n return `${themeFormatter.data(dimension, context.dataset.label) || ''}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarChartData","data","_a","dataset","index","colors","chartContrastColors","defaultDataset","mergician","getDatalabelTotalDisplay","context","showTotalLabels","getDatalabelTotalFormatter","_value","datasets","i","total","sum","ds","val","getBarVerticalChartOptions","config","chartjsAxisOptionsLayoutPadding","getStyle","getBarHorizontalChartOptions","getBarChartOptions","options","baseBarChartOptions","getStyleNumber","verticalHorizontalOptions","chartjsAxisOptions","ChartJS","CategoryScale","LinearScale","BarElement","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","BarChart","onSegmentClick","props","chartRef","useRef","barChartOptions","handleSegmentClick","event","indexClicked","getSegmentIndexClicked","jsx","styles","Bar","getBarStackedChartProData","theme","themeFormatter","getThemeFormatter","dimension","groupDimension","measure","axis","d","groupDimensionName","groupBy","themeKey","getObjectStableKey","groupByItem","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","chartColors","getBarChartProDatalabelTotalFormatter","formatter","getBarChartProOptions","onBarClicked","measures","horizontal","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { g as E, d as n, u as F } from "./utc-B2gCnkBk.js";
2
+ import { i as M } from "./object.utils-BNKDL7Y9.js";
3
+ import { useTheme as V } from "@embeddable.com/react";
4
+ import { useMemo as W } from "react";
5
+ var S = { exports: {} }, Z = S.exports, j;
6
+ function $() {
7
+ return j || (j = 1, (function(h, O) {
8
+ (function(e, t) {
9
+ h.exports = t();
10
+ })(Z, (function() {
11
+ return function(e, t) {
12
+ t.prototype.isSameOrBefore = function(u, r) {
13
+ return this.isSame(u, r) || this.isBefore(u, r);
14
+ };
15
+ };
16
+ }));
17
+ })(S)), S.exports;
18
+ }
19
+ var b = $();
20
+ const C = /* @__PURE__ */ E(b);
21
+ n.extend(F);
22
+ n.extend(M);
23
+ n.extend(C);
24
+ function D(h) {
25
+ const O = V(), { results: e, dimension: t, orderDirection: u = "asc", externalDateBounds: r } = h;
26
+ return W(() => {
27
+ var x, y, k, I, R, w;
28
+ const m = (x = t.inputs) == null ? void 0 : x.granularity, i = t.name, a = (y = t.inputs) == null ? void 0 : y.dateBounds;
29
+ if (!e || !e.data || e.data.length === 0)
30
+ return { ...e, data: [] };
31
+ if (!m || !i) return e;
32
+ const c = a != null && a.relativeTimeString ? (k = O.defaults.dateRangesOptions.find((s) => s.value === (a == null ? void 0 : a.relativeTimeString))) == null ? void 0 : k.getRange() : a;
33
+ if (t.nativeType !== "time" || !((I = e.data) != null && I.length)) return e;
34
+ const p = [...e.data ?? []].sort((s, o) => {
35
+ const f = s[i], l = o[i];
36
+ return f == null ? 1 : l == null ? -1 : n.utc(f).diff(n.utc(l));
37
+ }), q = n.utc(
38
+ (r == null ? void 0 : r.from) ?? (c == null ? void 0 : c.from) ?? ((R = p[0]) == null ? void 0 : R[i])
39
+ ), B = n.utc(
40
+ (r == null ? void 0 : r.to) ?? (c == null ? void 0 : c.to) ?? ((w = p[p.length - 1]) == null ? void 0 : w[i])
41
+ ), v = /* @__PURE__ */ new Map();
42
+ for (const s of p) {
43
+ const o = s[i];
44
+ if (o == null) continue;
45
+ const f = n.utc(o).toISOString().split("Z")[0], l = v.get(f) ?? [];
46
+ l.push(s), v.set(f, l);
47
+ }
48
+ const g = [];
49
+ let d = q.startOf(m === "week" ? "isoWeek" : m);
50
+ for (; d.isSameOrBefore(B); ) {
51
+ const s = d.toISOString().split("Z")[0], o = v.get(s);
52
+ o && o.length > 0 ? g.push(...o) : g.push({ [i]: s }), d = d.add(1, m);
53
+ }
54
+ return u === "desc" && g.reverse(), {
55
+ ...e,
56
+ data: g
57
+ };
58
+ }, [e, t, u, O]);
59
+ }
60
+ export {
61
+ D as u
62
+ };
63
+ //# sourceMappingURL=charts.newFillGaps.hooks-D6mnKJwQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.newFillGaps.hooks-D6mnKJwQ.js","sources":["../node_modules/dayjs/plugin/isSameOrBefore.js","../src/remarkable-pro/components/charts/charts.newFillGaps.hooks.ts"],"sourcesContent":["!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){\"use strict\";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}}));","import { DataResponse, Dimension, TimeRange } from '@embeddable.com/core';\nimport dayjs, { QUnitType } from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport utc from 'dayjs/plugin/utc.js';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js';\nimport { Theme } from '../../theme/theme.types';\nimport { useTheme } from '@embeddable.com/react';\nimport { useMemo } from 'react';\n\ndayjs.extend(utc);\ndayjs.extend(isoWeek);\ndayjs.extend(isSameOrBefore);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DataRecord = { [key: string]: any };\n\ntype UseFillGapsProps = {\n results: DataResponse | undefined;\n dimension: Dimension;\n orderDirection?: 'asc' | 'desc';\n externalDateBounds?: TimeRange;\n};\n\nexport function useFillGaps(props: UseFillGapsProps): DataResponse {\n const theme = useTheme() as Theme;\n const { results, dimension, orderDirection = 'asc', externalDateBounds } = props;\n\n const processed = useMemo(() => {\n const granularity = dimension.inputs?.granularity;\n const dimensionName = dimension.name;\n const dateBoundsTmp: TimeRange = dimension.inputs?.dateBounds;\n\n if (!results || !results.data || results.data.length === 0) {\n return { ...results, data: [] };\n }\n\n if (!granularity || !dimensionName) return results;\n\n const dateBounds = dateBoundsTmp?.relativeTimeString\n ? theme.defaults.dateRangesOptions\n .find((option) => option.value === dateBoundsTmp?.relativeTimeString)\n ?.getRange()\n : dateBoundsTmp;\n\n if (dimension.nativeType !== 'time' || !results.data?.length) return results;\n\n const sortedResults = [...(results.data ?? [])].sort((a, b) => {\n const aVal = a[dimensionName];\n const bVal = b[dimensionName];\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n return dayjs.utc(aVal).diff(dayjs.utc(bVal));\n });\n\n const from = dayjs.utc(\n externalDateBounds?.from ?? dateBounds?.from ?? sortedResults[0]?.[dimensionName],\n );\n const to = dayjs.utc(\n externalDateBounds?.to ??\n dateBounds?.to ??\n sortedResults[sortedResults.length - 1]?.[dimensionName],\n );\n\n const recordsByDate = new Map<string, DataRecord[]>();\n for (const record of sortedResults) {\n const value = record[dimensionName];\n if (value == null) continue;\n const key = dayjs.utc(value).toISOString().split('Z')[0]!;\n const arr = recordsByDate.get(key) ?? [];\n arr.push(record);\n recordsByDate.set(key, arr);\n }\n\n const filled: DataRecord[] = [];\n let current = from.startOf((granularity === 'week' ? 'isoWeek' : granularity) as QUnitType);\n\n while (current.isSameOrBefore(to)) {\n const key = current.toISOString().split('Z')[0]!;\n const records = recordsByDate.get(key);\n\n if (records && records.length > 0) {\n filled.push(...records);\n } else {\n filled.push({ [dimensionName]: key });\n }\n\n current = current.add(1, granularity as QUnitType);\n }\n\n if (orderDirection === 'desc') {\n filled.reverse();\n }\n\n return {\n ...results,\n data: filled,\n };\n }, [results, dimension, orderDirection, theme]);\n\n return processed as DataResponse;\n}\n"],"names":["i","module","this","e","dayjs","utc","isoWeek","isSameOrBefore","useFillGaps","props","theme","useTheme","results","dimension","orderDirection","externalDateBounds","useMemo","granularity","_a","dimensionName","dateBoundsTmp","_b","dateBounds","_c","option","_d","sortedResults","a","b","aVal","bVal","from","_e","to","_f","recordsByDate","record","value","key","arr","filled","current","records"],"mappings":"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","x_google_ignoreList":[0]}