@bagelink/vue 1.15.61 → 1.15.65

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 (145) hide show
  1. package/dist/components/AccordionItem.vue.d.ts.map +1 -1
  2. package/dist/components/Avatar.vue.d.ts +6 -1
  3. package/dist/components/Avatar.vue.d.ts.map +1 -1
  4. package/dist/components/Badge.vue.d.ts.map +1 -1
  5. package/dist/components/Card.vue.d.ts +7 -0
  6. package/dist/components/Card.vue.d.ts.map +1 -1
  7. package/dist/components/Dropdown.vue.d.ts.map +1 -1
  8. package/dist/components/EmptyState.vue.d.ts +43 -0
  9. package/dist/components/EmptyState.vue.d.ts.map +1 -0
  10. package/dist/components/Icon/Icon.vue.d.ts +13 -0
  11. package/dist/components/Icon/Icon.vue.d.ts.map +1 -1
  12. package/dist/components/Image.vue.d.ts +26 -1
  13. package/dist/components/Image.vue.d.ts.map +1 -1
  14. package/dist/components/ListItem.vue.d.ts +9 -9
  15. package/dist/components/ListItem.vue.d.ts.map +1 -1
  16. package/dist/components/Menu.vue.d.ts.map +1 -1
  17. package/dist/components/Swiper.vue.d.ts +3 -3
  18. package/dist/components/calendar/CalendarPopover.vue.d.ts +10 -0
  19. package/dist/components/calendar/CalendarPopover.vue.d.ts.map +1 -1
  20. package/dist/components/charts/BarChart.vue.d.ts +34 -0
  21. package/dist/components/charts/BarChart.vue.d.ts.map +1 -0
  22. package/dist/components/charts/ChartTooltip.vue.d.ts +33 -0
  23. package/dist/components/charts/ChartTooltip.vue.d.ts.map +1 -0
  24. package/dist/components/charts/Donut.vue.d.ts +53 -0
  25. package/dist/components/charts/Donut.vue.d.ts.map +1 -0
  26. package/dist/components/charts/Funnel.vue.d.ts +53 -0
  27. package/dist/components/charts/Funnel.vue.d.ts.map +1 -0
  28. package/dist/components/charts/Gauge.vue.d.ts +28 -0
  29. package/dist/components/charts/Gauge.vue.d.ts.map +1 -0
  30. package/dist/components/charts/LineChart.vue.d.ts +37 -0
  31. package/dist/components/charts/LineChart.vue.d.ts.map +1 -0
  32. package/dist/components/charts/RadialBars.vue.d.ts +34 -0
  33. package/dist/components/charts/RadialBars.vue.d.ts.map +1 -0
  34. package/dist/components/charts/RankBars.vue.d.ts +27 -0
  35. package/dist/components/charts/RankBars.vue.d.ts.map +1 -0
  36. package/dist/components/charts/Sparkline.vue.d.ts +25 -0
  37. package/dist/components/charts/Sparkline.vue.d.ts.map +1 -0
  38. package/dist/components/charts/StatCard.vue.d.ts +28 -0
  39. package/dist/components/charts/StatCard.vue.d.ts.map +1 -0
  40. package/dist/components/charts/core/data.d.ts +46 -0
  41. package/dist/components/charts/core/data.d.ts.map +1 -0
  42. package/dist/components/charts/core/format.d.ts +13 -0
  43. package/dist/components/charts/core/format.d.ts.map +1 -0
  44. package/dist/components/charts/core/palette.d.ts +19 -0
  45. package/dist/components/charts/core/palette.d.ts.map +1 -0
  46. package/dist/components/charts/core/uid.d.ts +2 -0
  47. package/dist/components/charts/core/uid.d.ts.map +1 -0
  48. package/dist/components/charts/core/useChartAnim.d.ts +11 -0
  49. package/dist/components/charts/core/useChartAnim.d.ts.map +1 -0
  50. package/dist/components/charts/core/useChartFrame.d.ts +21 -0
  51. package/dist/components/charts/core/useChartFrame.d.ts.map +1 -0
  52. package/dist/components/charts/core/useScale.d.ts +16 -0
  53. package/dist/components/charts/core/useScale.d.ts.map +1 -0
  54. package/dist/components/charts/index.d.ts +12 -0
  55. package/dist/components/charts/index.d.ts.map +1 -0
  56. package/dist/components/form/inputs/RadioGroup.vue.d.ts +1 -0
  57. package/dist/components/form/inputs/RadioGroup.vue.d.ts.map +1 -1
  58. package/dist/components/form/inputs/RangeInput.vue.d.ts +13 -4
  59. package/dist/components/form/inputs/RangeInput.vue.d.ts.map +1 -1
  60. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +3 -1
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/layout/AppSidebar.vue.d.ts.map +1 -1
  64. package/dist/components/layout/Divider.vue.d.ts.map +1 -1
  65. package/dist/components/layout/Layout.vue.d.ts +1 -1
  66. package/dist/components/layout/Layout.vue.d.ts.map +1 -1
  67. package/dist/components/layout/Panel.vue.d.ts +1 -1
  68. package/dist/components/layout/Panel.vue.d.ts.map +1 -1
  69. package/dist/components/layout/SidebarNavItem.vue.d.ts +3 -1
  70. package/dist/components/layout/SidebarNavItem.vue.d.ts.map +1 -1
  71. package/dist/components/layout/Timeline.types.d.ts +9 -0
  72. package/dist/components/layout/Timeline.types.d.ts.map +1 -0
  73. package/dist/components/layout/Timeline.vue.d.ts +42 -0
  74. package/dist/components/layout/Timeline.vue.d.ts.map +1 -0
  75. package/dist/components/layout/TimelineItem.vue.d.ts +37 -0
  76. package/dist/components/layout/TimelineItem.vue.d.ts.map +1 -0
  77. package/dist/components/layout/index.d.ts +3 -0
  78. package/dist/components/layout/index.d.ts.map +1 -1
  79. package/dist/dialog/Dialog.vue.d.ts +4 -0
  80. package/dist/dialog/Dialog.vue.d.ts.map +1 -1
  81. package/dist/index.cjs +110 -116
  82. package/dist/index.mjs +38104 -37045
  83. package/dist/style.css +1 -1
  84. package/package.json +2 -1
  85. package/src/components/AccordionItem.vue +24 -22
  86. package/src/components/Avatar.vue +49 -11
  87. package/src/components/Badge.vue +4 -7
  88. package/src/components/Card.vue +32 -2
  89. package/src/components/Dropdown.vue +14 -3
  90. package/src/components/EmptyState.vue +91 -0
  91. package/src/components/Icon/Icon.vue +118 -25
  92. package/src/components/Image.vue +70 -3
  93. package/src/components/ListItem.vue +43 -22
  94. package/src/components/Menu.vue +10 -2
  95. package/src/components/charts/BarChart.vue +197 -0
  96. package/src/components/charts/ChartTooltip.vue +74 -0
  97. package/src/components/charts/Donut.vue +219 -0
  98. package/src/components/charts/Funnel.vue +377 -0
  99. package/src/components/charts/Gauge.vue +90 -0
  100. package/src/components/charts/LineChart.vue +255 -0
  101. package/src/components/charts/RadialBars.vue +99 -0
  102. package/src/components/charts/RankBars.vue +72 -0
  103. package/src/components/charts/Sparkline.vue +90 -0
  104. package/src/components/charts/StatCard.vue +84 -0
  105. package/src/components/charts/core/data.ts +95 -0
  106. package/src/components/charts/core/format.ts +64 -0
  107. package/src/components/charts/core/palette.ts +52 -0
  108. package/src/components/charts/core/uid.ts +6 -0
  109. package/src/components/charts/core/useChartAnim.ts +60 -0
  110. package/src/components/charts/core/useChartFrame.ts +49 -0
  111. package/src/components/charts/core/useScale.ts +39 -0
  112. package/src/components/charts/index.ts +12 -0
  113. package/src/components/form/inputs/RadioGroup.vue +2 -1
  114. package/src/components/form/inputs/RangeInput.vue +43 -15
  115. package/src/components/form/inputs/SelectInput.vue +1 -19
  116. package/src/components/index.ts +3 -1
  117. package/src/components/layout/AppSidebar.vue +1 -0
  118. package/src/components/layout/Divider.vue +2 -9
  119. package/src/components/layout/SidebarNavItem.vue +82 -41
  120. package/src/components/layout/Timeline.types.ts +9 -0
  121. package/src/components/layout/Timeline.vue +54 -0
  122. package/src/components/layout/TimelineItem.vue +93 -0
  123. package/src/components/layout/index.ts +3 -0
  124. package/src/dialog/Dialog.vue +29 -1
  125. package/src/styles/bagel.css +1 -0
  126. package/src/styles/dark.css +13 -0
  127. package/src/styles/gradients.css +181 -0
  128. package/src/styles/layout.css +9 -0
  129. package/src/styles/text.css +38 -6
  130. package/src/styles/theme.css +1 -1
  131. package/dist/components/analytics/BarChart.vue.d.ts +0 -47
  132. package/dist/components/analytics/BarChart.vue.d.ts.map +0 -1
  133. package/dist/components/analytics/KpiCard.vue.d.ts +0 -24
  134. package/dist/components/analytics/KpiCard.vue.d.ts.map +0 -1
  135. package/dist/components/analytics/LineChart.vue.d.ts +0 -35
  136. package/dist/components/analytics/LineChart.vue.d.ts.map +0 -1
  137. package/dist/components/analytics/PieChart.vue.d.ts +0 -53
  138. package/dist/components/analytics/PieChart.vue.d.ts.map +0 -1
  139. package/dist/components/analytics/index.d.ts +0 -5
  140. package/dist/components/analytics/index.d.ts.map +0 -1
  141. package/src/components/analytics/BarChart.vue +0 -262
  142. package/src/components/analytics/KpiCard.vue +0 -84
  143. package/src/components/analytics/LineChart.vue +0 -357
  144. package/src/components/analytics/PieChart.vue +0 -544
  145. package/src/components/analytics/index.ts +0 -4
@@ -217,21 +217,38 @@
217
217
  font-size: 0.25rem;
218
218
  }
219
219
 
220
+ .txt0375rem,
221
+ .txt-0375rem {
222
+ font-size: 0.375rem;
223
+ }
224
+
220
225
  .txt05rem,
221
226
  .txt-05rem {
222
227
  font-size: 0.5rem;
223
228
  }
224
229
 
230
+ .txt0625rem,
231
+ .txt-0625rem {
232
+ font-size: 0.625rem;
233
+ }
234
+
225
235
  .txt075rem,
226
236
  .txt-075rem {
227
237
  font-size: 0.75rem;
228
238
  }
229
239
 
240
+ .txt0875rem,
241
+ .txt-0875rem {
242
+ font-size: 0.875rem;
243
+ }
244
+
230
245
  .txt1rem,
231
246
  .txt-1rem {
232
247
  font-size: 1rem;
233
248
  }
234
249
 
250
+
251
+
235
252
  .txt1-25rem,
236
253
  .txt-1-25rem {
237
254
  font-size: 1.25rem;
@@ -1788,21 +1805,36 @@
1788
1805
  font-size: 9px;
1789
1806
  }
1790
1807
 
1791
- .m_txt025,
1792
- .m_txt-025 {
1808
+ .m_txt025rem,
1809
+ .m_txt-025rem {
1793
1810
  font-size: 0.25rem;
1794
1811
  }
1795
1812
 
1796
- .m_txt05,
1797
- .m_txt-05 {
1813
+ .m_txt0375rem,
1814
+ .m_txt-0375rem {
1815
+ font-size: 0.375rem;
1816
+ }
1817
+
1818
+ .m_txt05rem,
1819
+ .m_txt-05rem {
1798
1820
  font-size: 0.5rem;
1799
1821
  }
1800
1822
 
1801
- .m_txt075,
1802
- .m_txt-075 {
1823
+ .m_txt0625rem,
1824
+ .m_txt-0625rem {
1825
+ font-size: 0.625rem;
1826
+ }
1827
+
1828
+ .m_txt075rem,
1829
+ .m_txt-075rem {
1803
1830
  font-size: 0.75rem;
1804
1831
  }
1805
1832
 
1833
+ .m_txt0875rem,
1834
+ .m_txt-0875rem {
1835
+ font-size: 0.875rem;
1836
+ }
1837
+
1806
1838
  .m_txt1rem,
1807
1839
  .m_txt-1rem {
1808
1840
  font-size: 1rem;
@@ -33,7 +33,7 @@
33
33
  */
34
34
  :root {
35
35
  --bgl-primary: var(--bgl-blue);
36
- --bgl-primary-tint: #2e5bff80;
36
+ --bgl-primary-tint: color-mix(in srgb, var(--bgl-primary) 16%, transparent);
37
37
  --bgl-primary-light: #eef6ff;
38
38
  --bgl-black: #282929;
39
39
  --bgl-black-tint: #28292980;
@@ -1,47 +0,0 @@
1
- interface SecondaryValue {
2
- label: string;
3
- value: number;
4
- currency?: boolean;
5
- prefix?: string;
6
- suffix?: string;
7
- }
8
- interface DataPoint {
9
- date: string;
10
- value: number;
11
- secondaryValues?: SecondaryValue[];
12
- label?: string;
13
- }
14
- interface Props {
15
- title: string;
16
- data: DataPoint[];
17
- icon?: string;
18
- color?: string;
19
- percentageChange?: number;
20
- prefix?: string;
21
- suffix?: string;
22
- currency?: boolean;
23
- maxBars?: number;
24
- loading?: boolean;
25
- rtl?: boolean;
26
- animated?: boolean;
27
- animationDuration?: number;
28
- animationStartDelay?: number;
29
- }
30
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
31
- icon: string;
32
- color: string;
33
- loading: boolean;
34
- percentageChange: number;
35
- prefix: string;
36
- suffix: string;
37
- currency: boolean;
38
- maxBars: number;
39
- rtl: boolean;
40
- animated: boolean;
41
- animationDuration: number;
42
- animationStartDelay: number;
43
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
44
- chartRef: HTMLDivElement;
45
- }, HTMLDivElement>;
46
- export default _default;
47
- //# sourceMappingURL=BarChart.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BarChart.vue.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/BarChart.vue"],"names":[],"mappings":"AA2QA,UAAU,cAAc;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,KAAK;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC5B;;UAZO,MAAM;WACL,MAAM;aAMJ,OAAO;sBALE,MAAM;YAChB,MAAM;YACN,MAAM;cACJ,OAAO;aACR,MAAM;SAEV,OAAO;cACF,OAAO;uBACE,MAAM;yBACJ,MAAM;;;;AAsT7B,wBASG"}
@@ -1,24 +0,0 @@
1
- interface Props {
2
- title: string;
3
- value: number | string;
4
- icon?: string;
5
- color?: string;
6
- percentageChange?: number;
7
- prefix?: string;
8
- suffix?: string;
9
- currency?: Currency;
10
- loading?: boolean;
11
- subtitle?: string;
12
- }
13
- type Currency = 'ILS' | 'USD' | 'EUR';
14
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
15
- icon: string;
16
- color: string;
17
- subtitle: string;
18
- loading: boolean;
19
- percentageChange: number;
20
- prefix: string;
21
- suffix: string;
22
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
23
- export default _default;
24
- //# sourceMappingURL=KpiCard.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KpiCard.vue.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/KpiCard.vue"],"names":[],"mappings":"AAyFA,UAAU,KAAK;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;;UAV7B,MAAM;WACL,MAAM;cAMH,MAAM;aADP,OAAO;sBAJE,MAAM;YAChB,MAAM;YACN,MAAM;;AAmLhB,wBAQG"}
@@ -1,35 +0,0 @@
1
- interface DataPoint {
2
- date: string;
3
- value: number;
4
- label?: string;
5
- }
6
- interface Props {
7
- data: DataPoint[];
8
- title?: string;
9
- icon?: string;
10
- color?: string;
11
- height?: number;
12
- showPoints?: boolean;
13
- currency?: boolean;
14
- animated?: boolean;
15
- animationDuration?: number;
16
- animationStartDelay?: number;
17
- percentageChange?: number;
18
- }
19
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
20
- title: string;
21
- icon: string;
22
- color: string;
23
- height: number;
24
- percentageChange: number;
25
- currency: boolean;
26
- animated: boolean;
27
- animationDuration: number;
28
- animationStartDelay: number;
29
- showPoints: boolean;
30
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
31
- chartRef: HTMLDivElement;
32
- svgRef: SVGSVGElement;
33
- }, HTMLDivElement>;
34
- export default _default;
35
- //# sourceMappingURL=LineChart.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LineChart.vue.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/LineChart.vue"],"names":[],"mappings":"AA0WA,UAAU,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,KAAK;IACd,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;;WAVQ,MAAM;UACP,MAAM;WACL,MAAM;YACL,MAAM;sBAMI,MAAM;cAJd,OAAO;cACP,OAAO;uBACE,MAAM;yBACJ,MAAM;gBAJf,OAAO;;;;;AAobrB,wBASG"}
@@ -1,53 +0,0 @@
1
- interface PieData {
2
- label: string;
3
- value: number;
4
- color?: string;
5
- }
6
- interface Props {
7
- data: PieData[];
8
- title?: string;
9
- icon?: string;
10
- color?: string;
11
- colors?: string[];
12
- size?: number;
13
- showLegend?: boolean;
14
- donut?: boolean;
15
- thickness?: number;
16
- centerLabel?: string;
17
- animated?: boolean;
18
- animationDuration?: number;
19
- animationDelay?: number;
20
- animationStartDelay?: number;
21
- centerValue?: number;
22
- showCenterTotal?: boolean;
23
- percentageChange?: number;
24
- showLabelsOnChart?: boolean;
25
- showConnectorLines?: boolean;
26
- labelColor?: string;
27
- }
28
- declare function restartAnimation(): void;
29
- declare const _default: import('vue').DefineComponent<Props, {
30
- restartAnimation: typeof restartAnimation;
31
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
32
- title: string;
33
- icon: string;
34
- size: number;
35
- color: string;
36
- labelColor: string;
37
- thickness: number;
38
- percentageChange: number;
39
- animated: boolean;
40
- animationDuration: number;
41
- animationStartDelay: number;
42
- showLegend: boolean;
43
- donut: boolean;
44
- centerLabel: string;
45
- animationDelay: number;
46
- showCenterTotal: boolean;
47
- showLabelsOnChart: boolean;
48
- showConnectorLines: boolean;
49
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
50
- chartRef: HTMLDivElement;
51
- }, HTMLDivElement>;
52
- export default _default;
53
- //# sourceMappingURL=PieChart.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PieChart.vue.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/PieChart.vue"],"names":[],"mappings":"AAqiBA,UAAU,OAAO;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,KAAK;IACd,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAoID,iBAAS,gBAAgB,SAIxB;;;;WA3JQ,MAAM;UACP,MAAM;UAGN,MAAM;WAFL,MAAM;gBAgBD,MAAM;eAXP,MAAM;sBAQC,MAAM;cANd,OAAO;uBACE,MAAM;yBAEJ,MAAM;gBAPf,OAAO;WACZ,OAAO;iBAED,MAAM;oBAGH,MAAM;qBAGL,OAAO;uBAEL,OAAO;wBACN,OAAO;;;;AAsnB7B,wBAUG"}
@@ -1,5 +0,0 @@
1
- export { default as BarChart } from './BarChart.vue';
2
- export { default as KpiCard } from './KpiCard.vue';
3
- export { default as LineChart } from './LineChart.vue';
4
- export { default as PieChart } from './PieChart.vue';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,262 +0,0 @@
1
- <script setup lang="ts">
2
- import { formatDate, Icon, Loading } from '@bagelink/vue'
3
- import { computed, ref, onMounted, onUnmounted } from 'vue'
4
-
5
- interface SecondaryValue {
6
- label: string
7
- value: number
8
- currency?: boolean
9
- prefix?: string
10
- suffix?: string
11
- }
12
-
13
- interface DataPoint {
14
- date: string
15
- value: number
16
- secondaryValues?: SecondaryValue[]
17
- label?: string
18
- }
19
-
20
- interface Props {
21
- title: string
22
- data: DataPoint[]
23
- icon?: string
24
- color?: string
25
- percentageChange?: number
26
- prefix?: string
27
- suffix?: string
28
- currency?: boolean
29
- maxBars?: number
30
- loading?: boolean
31
- rtl?: boolean
32
- animated?: boolean
33
- animationDuration?: number
34
- animationStartDelay?: number
35
- }
36
-
37
- const props = withDefaults(defineProps<Props>(), {
38
- icon: 'trending_up',
39
- color: 'var(--bgl-primary)',
40
- percentageChange: 0,
41
- prefix: '',
42
- suffix: '',
43
- currency: false,
44
- maxBars: 30,
45
- loading: false,
46
- rtl: false,
47
- animated: true,
48
- animationDuration: 1500,
49
- animationStartDelay: 0,
50
- })
51
-
52
- // Animation state
53
- const animatedProgress = ref(0)
54
- const isAnimating = ref(false)
55
- const isInView = ref(false)
56
- const observer = ref<IntersectionObserver | null>(null)
57
- const chartRef = ref<HTMLElement | null>(null)
58
-
59
- const chartData = computed(() => {
60
- if (!props.data || props.data.length === 0) { return [] }
61
-
62
- // Use all data without limiting to maxBars
63
- const maxValue = Math.max(...props.data.map(d => d.value), 1)
64
- return props.data.map(item => ({
65
- ...item,
66
- height: Math.max((item.value / maxValue) * 100, 2), // Minimum height of 2%
67
- displayLabel: formatDate(item.date, 'MMM')
68
- }))
69
- })
70
-
71
- // Animation computed properties
72
- const getBarOpacity = computed(() => {
73
- return (index: number) => {
74
- if (!props.animated) { return 1 }
75
- if (!isInView.value) { return 0 }
76
-
77
- const totalBars = chartData.value.length
78
-
79
- // Each bar appears with a delay based on its index
80
- const barDelay = index / totalBars
81
- const progress = Math.max(0, Math.min(1, (animatedProgress.value - barDelay) * totalBars))
82
-
83
- return progress
84
- }
85
- })
86
-
87
- // Animation functions
88
- function easeOutCubic(t: number): number {
89
- return 1 - (1 - t) ** 3
90
- }
91
-
92
- function startAnimation() {
93
- if (isAnimating.value || !props.animated) { return }
94
-
95
- console.log(`🎯 TrendChart: Starting animation with ${props.animationDuration}ms duration`)
96
- isAnimating.value = true
97
- animatedProgress.value = 0
98
-
99
- const startTime = performance.now()
100
-
101
- function animate(currentTime: number) {
102
- const elapsed = currentTime - startTime
103
- const progress = Math.min(elapsed / props.animationDuration, 1)
104
- const easedProgress = easeOutCubic(progress)
105
-
106
- animatedProgress.value = easedProgress
107
-
108
- if (progress < 1) {
109
- requestAnimationFrame(animate)
110
- } else {
111
- isAnimating.value = false
112
- console.log(`✅ TrendChart: Animation completed`)
113
- }
114
- }
115
-
116
- requestAnimationFrame(animate)
117
- }
118
-
119
- function setupIntersectionObserver() {
120
- if (!chartRef.value || observer.value) { return }
121
-
122
- observer.value = new IntersectionObserver(
123
- (entries) => {
124
- entries.forEach((entry) => {
125
- if (entry.isIntersecting && !isInView.value) {
126
- console.log(`👀 TrendChart: Entered viewport, starting animation in ${props.animationStartDelay}ms`)
127
- isInView.value = true
128
- setTimeout(() => {
129
- startAnimation()
130
- }, props.animationStartDelay)
131
- }
132
- })
133
- },
134
- {
135
- threshold: 0.3,
136
- rootMargin: '50px'
137
- }
138
- )
139
-
140
- observer.value.observe(chartRef.value)
141
- }
142
-
143
- onMounted(() => {
144
- if (props.animated) {
145
- setupIntersectionObserver()
146
- } else {
147
- // If not animated, show all bars immediately
148
- isInView.value = true
149
- animatedProgress.value = 1
150
- }
151
- })
152
-
153
- onUnmounted(() => {
154
- if (observer.value) {
155
- observer.value.disconnect()
156
- }
157
- })
158
-
159
- function formatValue(value: number, isCurrency: boolean = false): string {
160
- if (isCurrency) {
161
- return new Intl.NumberFormat('he-IL', {
162
- style: 'currency',
163
- currency: 'ILS',
164
- minimumFractionDigits: 0
165
- }).format(value)
166
- }
167
- return value.toLocaleString()
168
- }
169
-
170
- function formatTooltip(item: any): string {
171
- const primaryValue = formatValue(item.value, props.currency)
172
- const primaryText = `${props.prefix}${primaryValue}${props.suffix}`
173
- const tooltipLines = [`${item.displayLabel}`, `<b>${primaryText}</b>`]
174
-
175
- if (item.secondaryValues && Array.isArray(item.secondaryValues)) {
176
- item.secondaryValues.forEach((secondary: SecondaryValue) => {
177
- const formattedSecondaryValue = formatValue(secondary.value, secondary.currency || false)
178
- const secondaryText = `${secondary.prefix || ''}${formattedSecondaryValue}${secondary.suffix || ''}`
179
- tooltipLines.push(`${secondary.label}: <b>${secondaryText}</b>`)
180
- })
181
- }
182
-
183
- return `<div class="trendTooltip">${tooltipLines.join('<p>')}</div>`
184
- }
185
- </script>
186
-
187
- <template>
188
- <div ref="chartRef" class="h-100p flex column flex-stretch">
189
- <div class="flex space-between pb-1">
190
- <div class="flex align-center gap-05">
191
- <Icon :name="icon" size="1.2" :color="color" class="line-height-0" />
192
- <p class="white-space light m_txt14">
193
- {{ title }}
194
- </p>
195
- </div>
196
- <div v-if="percentageChange !== 0" class="flex align-center gap-025">
197
- <Icon
198
- :name="percentageChange > 0 ? 'trending_up' : 'trending_down'" size="1"
199
- :class="percentageChange > 0 ? 'color-success' : 'color-danger'"
200
- />
201
- <span class="txt12 bold" :class="percentageChange > 0 ? 'color-success' : 'color-danger'">
202
- {{ Math.abs(percentageChange) }}%
203
- </span>
204
- </div>
205
- </div>
206
- <div
207
- class="flex w-100p align-items-end mt-auto gap-075 overflow justify-content-start"
208
- :class="[rtl ? 'rtl' : 'ltr']"
209
- >
210
- <div
211
- v-for="(bar, index) in chartData" :key="index" v-tooltip="{ content: formatTooltip(bar), html: true }"
212
- class="flex-grow txt-center hover transition-400 relative barWrap mb-1" :style="{
213
- width: `max(2rem, ${100 / chartData.length}%)`,
214
- opacity: getBarOpacity(index),
215
- transition: animated ? 'opacity 0.3s ease-out' : 'none',
216
- }"
217
- >
218
- <div
219
- class="bar radius-05 transition-400 " :style="{
220
- height: `${bar.height * 1.8}px`,
221
- background: `linear-gradient(180deg, ${color}60, ${color}30)`,
222
- minHeight: '4px',
223
- }"
224
- />
225
- <span
226
- v-if="chartData.length <= 15 || index % Math.ceil(chartData.length / 8) === 0"
227
- class="txt-9 block line-height-1 -bottom-075 white-space color-gray absolute"
228
- :class="rtl ? 'rtl' : 'ltr'"
229
- >
230
- {{ bar.displayLabel }}
231
- </span>
232
- </div>
233
- </div>
234
- <div v-if="loading" class="absolute inset flex justify-content-center rounded">
235
- <Loading v-if="loading" />
236
- </div>
237
- </div>
238
- </template>
239
-
240
- <style>
241
-
242
- .trendTooltip p {
243
- font-weight: 300 !important;
244
- font-size: 12px;
245
- }
246
-
247
- .trendTooltip {
248
- font-weight: 700 !important;
249
- }
250
-
251
- .v-popper--theme-tooltip .v-popper__inner:has(.trendTooltip) {
252
- background-color: var(--bgl-black) !important;
253
- color: var(--bgl-white) !important;
254
- border-radius: 0.5rem !important;
255
- padding: 0.25rem 0.5rem !important;
256
- }
257
-
258
- .bar {
259
- min-width: 2rem;
260
- }
261
-
262
- </style>
@@ -1,84 +0,0 @@
1
- <script setup lang="ts">
2
- import { Card, Icon } from '@bagelink/vue'
3
- import { computed } from 'vue'
4
-
5
- interface Props {
6
- title: string
7
- value: number | string
8
- icon?: string
9
- color?: string
10
- percentageChange?: number
11
- prefix?: string
12
- suffix?: string
13
- currency?: Currency
14
- loading?: boolean
15
- subtitle?: string
16
- }
17
-
18
- type Currency = 'ILS' | 'USD' | 'EUR'
19
-
20
- const props = withDefaults(defineProps<Props>(), {
21
- icon: 'trending_up',
22
- color: 'var(--bgl-primary)',
23
- percentageChange: 0,
24
- prefix: '',
25
- suffix: '',
26
- loading: false,
27
- subtitle: ''
28
- })
29
-
30
- const isIncreasing = computed(() => props.percentageChange >= 0)
31
-
32
- const formattedValue = computed(() => {
33
- if (typeof props.value === 'string') { return props.value }
34
-
35
- if (props.currency) {
36
- return new Intl.NumberFormat('he-IL', {
37
- style: 'currency',
38
- currency: props.currency,
39
- minimumFractionDigits: 0
40
- }).format(props.value)
41
- }
42
-
43
- return props.value.toLocaleString()
44
- })
45
-
46
- const trendColor = computed(() => isIncreasing.value ? 'var(--bgl-green)' : 'var(--bgl-red)'
47
- )
48
- </script>
49
-
50
- <template>
51
- <Card class=" flex column space-between align-items-start py-1 px-1-5 m_p-1 relative ">
52
- <div class="mb-1 flex space-between align-items-start m_mb-05 w-100p">
53
- <div class="flex gap-025">
54
- <Icon :name="icon" size="1" :color="color" class="line-height-0" weight="300" />
55
- <div>
56
- <h3 class="txt14 m-0 line-height-12 light opacity-6">
57
- {{ title }}
58
- </h3>
59
- <p v-if="subtitle" class="txt12 color-gray">
60
- {{ subtitle }}
61
- </p>
62
- </div>
63
- </div>
64
- <div v-if="percentageChange !== 0" class="kpi-trend flex gap-025 txt12 bold ms-auto" :style="{ color: trendColor }">
65
- <Icon :name="isIncreasing ? 'trending_up' : 'trending_down'" />
66
- <span>{{ Math.abs(percentageChange).toFixed(1) }}%</span>
67
- </div>
68
- </div>
69
-
70
- <div class="flex">
71
- <div class="flex align-items-baseline gap-025 w100p" :class="{ loading }">
72
- <span v-if="prefix" class="kpi-prefix txt16 semi color-gray">{{ prefix }}</span>
73
- <span class="kpi-main-value bold txt28 m_txt24 line-height-1">{{ loading ? '...' : formattedValue }}</span>
74
- <span v-if="suffix" class="kpi-suffix txt16 semi color-gray">{{ suffix }}</span>
75
- </div>
76
- </div>
77
- </Card>
78
- </template>
79
-
80
- <style scoped>
81
- .loading .kpi-main-value {
82
- color: var(--bgl-gray);
83
- }
84
- </style>