@bagelink/vue 1.15.63 → 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 (136) 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/Layout.vue.d.ts +1 -1
  64. package/dist/components/layout/Layout.vue.d.ts.map +1 -1
  65. package/dist/components/layout/Panel.vue.d.ts +1 -1
  66. package/dist/components/layout/Panel.vue.d.ts.map +1 -1
  67. package/dist/components/layout/Timeline.types.d.ts +9 -0
  68. package/dist/components/layout/Timeline.types.d.ts.map +1 -0
  69. package/dist/components/layout/Timeline.vue.d.ts +42 -0
  70. package/dist/components/layout/Timeline.vue.d.ts.map +1 -0
  71. package/dist/components/layout/TimelineItem.vue.d.ts +37 -0
  72. package/dist/components/layout/TimelineItem.vue.d.ts.map +1 -0
  73. package/dist/components/layout/index.d.ts +3 -0
  74. package/dist/components/layout/index.d.ts.map +1 -1
  75. package/dist/dialog/Dialog.vue.d.ts +4 -0
  76. package/dist/dialog/Dialog.vue.d.ts.map +1 -1
  77. package/dist/index.cjs +110 -116
  78. package/dist/index.mjs +38059 -37009
  79. package/dist/style.css +1 -1
  80. package/package.json +2 -1
  81. package/src/components/AccordionItem.vue +24 -22
  82. package/src/components/Avatar.vue +49 -11
  83. package/src/components/Badge.vue +4 -7
  84. package/src/components/Card.vue +32 -2
  85. package/src/components/Dropdown.vue +14 -3
  86. package/src/components/EmptyState.vue +91 -0
  87. package/src/components/Icon/Icon.vue +118 -25
  88. package/src/components/Image.vue +70 -3
  89. package/src/components/ListItem.vue +43 -22
  90. package/src/components/Menu.vue +10 -2
  91. package/src/components/charts/BarChart.vue +197 -0
  92. package/src/components/charts/ChartTooltip.vue +74 -0
  93. package/src/components/charts/Donut.vue +219 -0
  94. package/src/components/charts/Funnel.vue +377 -0
  95. package/src/components/charts/Gauge.vue +90 -0
  96. package/src/components/charts/LineChart.vue +255 -0
  97. package/src/components/charts/RadialBars.vue +99 -0
  98. package/src/components/charts/RankBars.vue +72 -0
  99. package/src/components/charts/Sparkline.vue +90 -0
  100. package/src/components/charts/StatCard.vue +84 -0
  101. package/src/components/charts/core/data.ts +95 -0
  102. package/src/components/charts/core/format.ts +64 -0
  103. package/src/components/charts/core/palette.ts +52 -0
  104. package/src/components/charts/core/uid.ts +6 -0
  105. package/src/components/charts/core/useChartAnim.ts +60 -0
  106. package/src/components/charts/core/useChartFrame.ts +49 -0
  107. package/src/components/charts/core/useScale.ts +39 -0
  108. package/src/components/charts/index.ts +12 -0
  109. package/src/components/form/inputs/RadioGroup.vue +2 -1
  110. package/src/components/form/inputs/RangeInput.vue +43 -15
  111. package/src/components/form/inputs/SelectInput.vue +1 -19
  112. package/src/components/index.ts +3 -1
  113. package/src/components/layout/Timeline.types.ts +9 -0
  114. package/src/components/layout/Timeline.vue +54 -0
  115. package/src/components/layout/TimelineItem.vue +93 -0
  116. package/src/components/layout/index.ts +3 -0
  117. package/src/dialog/Dialog.vue +29 -1
  118. package/src/styles/bagel.css +1 -0
  119. package/src/styles/gradients.css +181 -0
  120. package/src/styles/layout.css +9 -0
  121. package/src/styles/theme.css +1 -1
  122. package/dist/components/analytics/BarChart.vue.d.ts +0 -47
  123. package/dist/components/analytics/BarChart.vue.d.ts.map +0 -1
  124. package/dist/components/analytics/KpiCard.vue.d.ts +0 -24
  125. package/dist/components/analytics/KpiCard.vue.d.ts.map +0 -1
  126. package/dist/components/analytics/LineChart.vue.d.ts +0 -35
  127. package/dist/components/analytics/LineChart.vue.d.ts.map +0 -1
  128. package/dist/components/analytics/PieChart.vue.d.ts +0 -53
  129. package/dist/components/analytics/PieChart.vue.d.ts.map +0 -1
  130. package/dist/components/analytics/index.d.ts +0 -5
  131. package/dist/components/analytics/index.d.ts.map +0 -1
  132. package/src/components/analytics/BarChart.vue +0 -262
  133. package/src/components/analytics/KpiCard.vue +0 -84
  134. package/src/components/analytics/LineChart.vue +0 -357
  135. package/src/components/analytics/PieChart.vue +0 -544
  136. package/src/components/analytics/index.ts +0 -4
@@ -0,0 +1,93 @@
1
+ <script lang="ts" setup>
2
+ defineOptions({ name: 'BglTimelineItem' })
3
+ import type { IconType, ThemeType } from '@bagelink/vue'
4
+ import { Icon } from '@bagelink/vue'
5
+ import { useSlots } from 'vue'
6
+
7
+ /**
8
+ * One node in a <Timeline>: a marker (icon dot or plain dot) with a connecting
9
+ * line, a title, optional meta line, and free content via the default slot.
10
+ * - `icon` renders inside the dot; otherwise a small solid dot is shown.
11
+ * - `color` themes the dot (and icon).
12
+ * - `last` removes the connector line (auto-handled by <Timeline>).
13
+ * - Slots: `#marker` (replace the dot), `#meta`, default (body).
14
+ */
15
+ const {
16
+ title = '',
17
+ meta = '',
18
+ icon,
19
+ color = 'primary',
20
+ last = false,
21
+ } = defineProps<{
22
+ title?: string
23
+ meta?: string
24
+ icon?: IconType
25
+ color?: ThemeType
26
+ last?: boolean
27
+ }>()
28
+
29
+ const slots = useSlots()
30
+ </script>
31
+
32
+ <template>
33
+ <div class="bgl-tl-item flex gap-075" :class="{ 'bgl-tl-item--last': last }">
34
+ <div class="bgl-tl-rail flex-column align-items-center flex-shrink-0">
35
+ <span class="bgl-tl-marker flex-center" :style="{ '--tl-color': `var(--bgl-${color})` }">
36
+ <slot name="marker">
37
+ <Icon v-if="icon" :icon="icon" :size="0.85" />
38
+ <span v-else class="bgl-tl-dot" />
39
+ </slot>
40
+ </span>
41
+ <span v-if="!last" class="bgl-tl-line" />
42
+ </div>
43
+ <div class="bgl-tl-body min-w-0">
44
+ <p v-if="title || slots.title" class="bgl-tl-title m-0"><slot name="title">{{ title }}</slot></p>
45
+ <div v-if="slots.default" class="bgl-tl-content"><slot /></div>
46
+ <p v-if="meta || slots.meta" class="bgl-tl-meta m-0"><slot name="meta">{{ meta }}</slot></p>
47
+ </div>
48
+ </div>
49
+ </template>
50
+
51
+ <style scoped>
52
+ .bgl-tl-item {
53
+ min-height: 1.75rem;
54
+ }
55
+ .bgl-tl-marker {
56
+ width: 1.625rem;
57
+ height: 1.625rem;
58
+ border-radius: 50%;
59
+ background: color-mix(in srgb, var(--tl-color) 15%, transparent);
60
+ color: var(--tl-color);
61
+ }
62
+ .bgl-tl-dot {
63
+ width: 0.5rem;
64
+ height: 0.5rem;
65
+ border-radius: 50%;
66
+ background: var(--tl-color);
67
+ }
68
+ .bgl-tl-line {
69
+ width: 2px;
70
+ flex: 1;
71
+ background: var(--bgl-border-color);
72
+ margin: 2px 0;
73
+ }
74
+ .bgl-tl-body {
75
+ padding-bottom: 1rem;
76
+ }
77
+ .bgl-tl-item--last .bgl-tl-body {
78
+ padding-bottom: 0;
79
+ }
80
+ .bgl-tl-title {
81
+ font-size: 0.875rem;
82
+ line-height: 1.3;
83
+ }
84
+ .bgl-tl-meta {
85
+ font-size: 0.6875rem;
86
+ color: var(--bgl-text-soft, var(--bgl-gray));
87
+ margin-top: 0.125rem;
88
+ }
89
+ .bgl-tl-content {
90
+ font-size: 0.8125rem;
91
+ color: var(--bgl-text-soft, var(--bgl-gray));
92
+ }
93
+ </style>
@@ -12,5 +12,8 @@ export { default as SidebarMenu } from './SidebarMenu.vue'
12
12
  export { default as Skeleton } from './Skeleton.vue'
13
13
  export { default as TabbedLayout } from './TabbedLayout.vue'
14
14
  export { default as Tabs } from './Tabs.vue'
15
+ export { default as Timeline } from './Timeline.vue'
16
+ export type { TimelineEntry } from './Timeline.types'
17
+ export { default as TimelineItem } from './TimelineItem.vue'
15
18
  export { default as TabsBody } from './TabsBody.vue'
16
19
  export { default as TabsNav } from './TabsNav.vue'
@@ -19,6 +19,9 @@ const props = withDefaults(defineProps<{
19
19
  centerTitle?: boolean
20
20
  ellipsisTitle?: boolean
21
21
  closePlacement?: 'header-end' | 'header-start' | 'overlay-start' | 'overlay-end' | 'none'
22
+ /** Show a drag-handle grip at the top — the mobile bottom-sheet affordance.
23
+ * Defaults to true when position="bottom". Set false to opt out. */
24
+ grip?: boolean
22
25
  }>(), {
23
26
  width: 'm',
24
27
  position: 'center',
@@ -27,9 +30,13 @@ const props = withDefaults(defineProps<{
27
30
  thin: false,
28
31
  centerTitle: false,
29
32
  ellipsisTitle: false,
30
- closePlacement: 'header-end'
33
+ closePlacement: 'header-end',
34
+ grip: undefined,
31
35
  })
32
36
 
37
+ // Grip is the native bottom-sheet handle; default it on for bottom-positioned dialogs.
38
+ const showGrip = computed(() => props.grip ?? props.position === 'bottom')
39
+
33
40
  const emit = defineEmits<{
34
41
  'update:open': [value: boolean]
35
42
  'close': []
@@ -114,6 +121,8 @@ defineExpose({ close })
114
121
  @cancel="onCancel" @animationend="onAnimationEnd"
115
122
  >
116
123
  <div class="grid grid-dialog max-height-100-2" @click.stop>
124
+ <!-- Bottom-sheet grip handle -->
125
+ <div v-if="showGrip" class="dialog-grip" aria-hidden="true" />
117
126
  <!-- Header -->
118
127
  <header
119
128
  v-if="title || dismissable" class="flex space-between flex-shrink-0 align-items-start gap-05"
@@ -261,6 +270,25 @@ dialog.dialog-bottom.is-closing {
261
270
  animation: slide-out-bottom 0.2s ease-in forwards;
262
271
  }
263
272
 
273
+ /* Bottom sheet: round only the top corners + full-width on mobile. */
274
+ dialog.dialog-bottom {
275
+ border-end-end-radius: 0;
276
+ border-end-start-radius: 0;
277
+ }
278
+ @media (max-width: 910px) {
279
+ dialog.dialog-bottom { width: 100%; max-width: 100%; margin-inline: 0; }
280
+ }
281
+
282
+ /* Drag-handle grip for bottom sheets. */
283
+ .dialog-grip {
284
+ width: 40px;
285
+ height: 4px;
286
+ border-radius: 100px;
287
+ background: var(--bgl-border-color);
288
+ margin: 8px auto 4px;
289
+ flex-shrink: 0;
290
+ }
291
+
264
292
  /* Keyframes - shared and reusable */
265
293
  @keyframes fade-in {
266
294
  from {
@@ -33,6 +33,7 @@
33
33
  @import "colors.css";
34
34
  @import "mobileColors.css";
35
35
  @import "appearance.css";
36
+ @import "gradients.css";
36
37
 
37
38
  /* Icon font-family bindings — mirrored from Icon.vue so icons work even when
38
39
  that component's injected <style> is not yet present (e.g. Vite dev mode). */
@@ -0,0 +1,181 @@
1
+ /* ─────────────────────────────────────────────────────────────────────────────
2
+ * GRADIENTS — a small, memorable system that mirrors the color utilities.
3
+ *
4
+ * <div class="bg-gradient from-purple to-blue">
5
+ * <div class="bg-gradient to-tr from-pink to-orange">
6
+ * <div class="bg-gradient from-primary via-purple to-turquoise">
7
+ * <div class="text-gradient from-blue to-purple">Gorgeous</div>
8
+ * <div class="bg-gradient-brand"> (named presets)
9
+ *
10
+ * How it works:
11
+ * - `from-<tone>` / `via-<tone>` / `to-<tone>` set --bgl-grad-from/via/to.
12
+ * - `bg-gradient` paints them as a linear gradient (default 135°).
13
+ * - direction modifiers (to-t/-b/-l/-r/-tl/-tr/-bl/-br) override the angle.
14
+ * - `gradient-radial` / `gradient-conic` swap the gradient type.
15
+ * - `text-gradient` clips the gradient to text.
16
+ * Tokens resolve through var(--bgl-<tone>) so everything is theme + dark aware.
17
+ * ──────────────────────────────────────────────────────────────────────────── */
18
+
19
+ :root {
20
+ --bgl-grad-angle: 135deg;
21
+ --bgl-grad-from: transparent;
22
+ --bgl-grad-via: ;
23
+ --bgl-grad-to: transparent;
24
+ }
25
+
26
+ /* ── Paint ─────────────────────────────────────────────────────────────────── */
27
+ /* The stop list collapses to 2 stops when --bgl-grad-via is empty, 3 when set. */
28
+ .bg-gradient {
29
+ background-image: linear-gradient(
30
+ var(--bgl-grad-angle),
31
+ var(--bgl-grad-from),
32
+ var(--bgl-grad-via, ) var(--bgl-grad-to)
33
+ ) !important;
34
+ }
35
+ .gradient-radial.bg-gradient,
36
+ .bg-gradient.gradient-radial {
37
+ background-image: radial-gradient(
38
+ circle at var(--bgl-grad-pos, center),
39
+ var(--bgl-grad-from),
40
+ var(--bgl-grad-via, ) var(--bgl-grad-to)
41
+ ) !important;
42
+ }
43
+ .gradient-conic.bg-gradient,
44
+ .bg-gradient.gradient-conic {
45
+ background-image: conic-gradient(
46
+ from var(--bgl-grad-angle),
47
+ var(--bgl-grad-from),
48
+ var(--bgl-grad-via, ) var(--bgl-grad-to)
49
+ ) !important;
50
+ }
51
+
52
+ /* ── Direction modifiers ───────────────────────────────────────────────────── */
53
+ .to-t { --bgl-grad-angle: to top; }
54
+ .to-b { --bgl-grad-angle: to bottom; }
55
+ .to-l { --bgl-grad-angle: to left; }
56
+ .to-r { --bgl-grad-angle: to right; }
57
+ .to-tl { --bgl-grad-angle: to top left; }
58
+ .to-tr { --bgl-grad-angle: to top right; }
59
+ .to-bl { --bgl-grad-angle: to bottom left; }
60
+ .to-br { --bgl-grad-angle: to bottom right; }
61
+
62
+ /* ── Text gradient ─────────────────────────────────────────────────────────── */
63
+ .text-gradient {
64
+ background-image: linear-gradient(
65
+ var(--bgl-grad-angle),
66
+ var(--bgl-grad-from),
67
+ var(--bgl-grad-via, ) var(--bgl-grad-to)
68
+ );
69
+ background-clip: text;
70
+ -webkit-background-clip: text;
71
+ color: transparent;
72
+ -webkit-text-fill-color: transparent;
73
+ }
74
+
75
+ /* ── Stop utilities (generated per tone) ───────────────────────────────────── */
76
+ /* Base tones */
77
+ .from-primary { --bgl-grad-from: var(--bgl-primary); }
78
+ .from-blue { --bgl-grad-from: var(--bgl-blue); }
79
+ .from-green { --bgl-grad-from: var(--bgl-green); }
80
+ .from-red { --bgl-grad-from: var(--bgl-red); }
81
+ .from-yellow { --bgl-grad-from: var(--bgl-yellow); }
82
+ .from-purple { --bgl-grad-from: var(--bgl-purple); }
83
+ .from-brown { --bgl-grad-from: var(--bgl-brown); }
84
+ .from-orange { --bgl-grad-from: var(--bgl-orange); }
85
+ .from-turquoise { --bgl-grad-from: var(--bgl-turquoise); }
86
+ .from-pink { --bgl-grad-from: var(--bgl-pink); }
87
+ .from-gray { --bgl-grad-from: var(--bgl-gray); }
88
+ .from-black { --bgl-grad-from: var(--bgl-black, #000); }
89
+ .from-white { --bgl-grad-from: var(--bgl-white, #fff); }
90
+ .from-bg { --bgl-grad-from: var(--bgl-bg); }
91
+ .from-box { --bgl-grad-from: var(--bgl-box-bg); }
92
+ .from-transparent { --bgl-grad-from: transparent; }
93
+
94
+ .via-primary { --bgl-grad-via: var(--bgl-primary), ; }
95
+ .via-blue { --bgl-grad-via: var(--bgl-blue), ; }
96
+ .via-green { --bgl-grad-via: var(--bgl-green), ; }
97
+ .via-red { --bgl-grad-via: var(--bgl-red), ; }
98
+ .via-yellow { --bgl-grad-via: var(--bgl-yellow), ; }
99
+ .via-purple { --bgl-grad-via: var(--bgl-purple), ; }
100
+ .via-brown { --bgl-grad-via: var(--bgl-brown), ; }
101
+ .via-orange { --bgl-grad-via: var(--bgl-orange), ; }
102
+ .via-turquoise { --bgl-grad-via: var(--bgl-turquoise), ; }
103
+ .via-pink { --bgl-grad-via: var(--bgl-pink), ; }
104
+ .via-gray { --bgl-grad-via: var(--bgl-gray), ; }
105
+ .via-transparent { --bgl-grad-via: transparent, ; }
106
+
107
+ .to-primary { --bgl-grad-to: var(--bgl-primary); }
108
+ .to-blue { --bgl-grad-to: var(--bgl-blue); }
109
+ .to-green { --bgl-grad-to: var(--bgl-green); }
110
+ .to-red { --bgl-grad-to: var(--bgl-red); }
111
+ .to-yellow { --bgl-grad-to: var(--bgl-yellow); }
112
+ .to-purple { --bgl-grad-to: var(--bgl-purple); }
113
+ .to-brown { --bgl-grad-to: var(--bgl-brown); }
114
+ .to-orange { --bgl-grad-to: var(--bgl-orange); }
115
+ .to-turquoise { --bgl-grad-to: var(--bgl-turquoise); }
116
+ .to-pink { --bgl-grad-to: var(--bgl-pink); }
117
+ .to-gray { --bgl-grad-to: var(--bgl-gray); }
118
+ .to-black { --bgl-grad-to: var(--bgl-black, #000); }
119
+ .to-white { --bgl-grad-to: var(--bgl-white, #fff); }
120
+ .to-bg { --bgl-grad-to: var(--bgl-bg); }
121
+ .to-box { --bgl-grad-to: var(--bgl-box-bg); }
122
+ .to-transparent { --bgl-grad-to: transparent; }
123
+
124
+ /* Common tint/light/dark stops (compose with from-/to-) */
125
+ .from-primary-tint { --bgl-grad-from: var(--bgl-primary-tint); }
126
+ .to-primary-tint { --bgl-grad-to: var(--bgl-primary-tint); }
127
+ .from-blue-tint { --bgl-grad-from: var(--bgl-blue-tint); }
128
+ .to-blue-tint { --bgl-grad-to: var(--bgl-blue-tint); }
129
+
130
+ /* ── Named presets — the gorgeous, copy-pasted brand sweeps, tokenized ──────── */
131
+ .bg-gradient-brand {
132
+ background-image: linear-gradient(135deg, var(--bgl-primary), var(--bgl-purple)) !important;
133
+ }
134
+ .bg-gradient-sunset {
135
+ background-image: linear-gradient(135deg, var(--bgl-orange), var(--bgl-pink)) !important;
136
+ }
137
+ .bg-gradient-ocean {
138
+ background-image: linear-gradient(135deg, var(--bgl-blue), var(--bgl-turquoise)) !important;
139
+ }
140
+ .bg-gradient-dusk {
141
+ background-image: linear-gradient(135deg, var(--bgl-purple), var(--bgl-blue)) !important;
142
+ }
143
+ .bg-gradient-citrus {
144
+ background-image: linear-gradient(135deg, var(--bgl-yellow), var(--bgl-orange)) !important;
145
+ }
146
+ /* Subtle surface sweep for cards/panels — dark-mode aware via tokens. */
147
+ .bg-gradient-surface {
148
+ background-image: linear-gradient(160deg,
149
+ color-mix(in srgb, var(--bgl-box-bg) 100%, transparent),
150
+ color-mix(in srgb, var(--bgl-primary) 6%, var(--bgl-box-bg))) !important;
151
+ }
152
+ /* Multi-radial "mesh" hero background built from the brand palette. */
153
+ .bg-gradient-mesh {
154
+ background-color: var(--bgl-box-bg) !important;
155
+ background-image:
156
+ radial-gradient(at 0% 0%, color-mix(in srgb, var(--bgl-primary) 35%, transparent) 0px, transparent 50%),
157
+ radial-gradient(at 100% 0%, color-mix(in srgb, var(--bgl-purple) 30%, transparent) 0px, transparent 50%),
158
+ radial-gradient(at 100% 100%, color-mix(in srgb, var(--bgl-turquoise) 25%, transparent) 0px, transparent 50%),
159
+ radial-gradient(at 0% 100%, color-mix(in srgb, var(--bgl-pink) 25%, transparent) 0px, transparent 50%) !important;
160
+ }
161
+
162
+ /* Soft fade for chart/sparkline fills: tone at top → transparent. Pair with a
163
+ from-<tone> and a direction, e.g. `bg-gradient-fade to-b from-blue`. */
164
+ .bg-gradient-fade {
165
+ --bgl-grad-to: transparent;
166
+ background-image: linear-gradient(var(--bgl-grad-angle),
167
+ color-mix(in srgb, var(--bgl-grad-from) 22%, transparent),
168
+ transparent) !important;
169
+ }
170
+
171
+ @media (prefers-reduced-motion: no-preference) {
172
+ .bg-gradient-animate {
173
+ background-size: 200% 200% !important;
174
+ animation: bgl-grad-pan 8s ease infinite;
175
+ }
176
+ }
177
+ @keyframes bgl-grad-pan {
178
+ 0% { background-position: 0% 50%; }
179
+ 50% { background-position: 100% 50%; }
180
+ 100% { background-position: 0% 50%; }
181
+ }
@@ -3949,6 +3949,15 @@
3949
3949
  flex-shrink: 0;
3950
3950
  }
3951
3951
 
3952
+ .min-w-0 {
3953
+ /* shrink below content size for ellipsis truncation in flex rows */
3954
+ min-width: 0;
3955
+ }
3956
+
3957
+ .min-h-0 {
3958
+ min-height: 0;
3959
+ }
3960
+
3952
3961
  .flex-grow-2 {
3953
3962
  flex-grow: 2;
3954
3963
  }
@@ -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"}