@rosettadash/vue 0.1.1 → 0.1.3

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 (79) hide show
  1. package/package.json +26 -2
  2. package/src/domain/i18n/app-language-select/index.d.ts +29 -0
  3. package/src/domain/i18n/app-language-select/index.js +22 -0
  4. package/src/domain/i18n/app-language-select/index.js.map +1 -0
  5. package/src/domain/role-gate/role-gate.d.ts +21 -0
  6. package/src/domain/role-gate/role-gate.js +32 -4
  7. package/src/domain/role-gate/role-gate.js.map +1 -1
  8. package/src/domain/time-preset/time-preset.d.ts +4 -2
  9. package/src/domain/time-preset/time-preset.js +12 -2
  10. package/src/domain/time-preset/time-preset.js.map +1 -1
  11. package/src/index.d.ts +4 -0
  12. package/src/index.js +4 -0
  13. package/src/index.js.map +1 -1
  14. package/src/layout/scroll-region/index.d.ts +2 -0
  15. package/src/layout/scroll-region/index.js +2 -0
  16. package/src/layout/scroll-region/index.js.map +1 -0
  17. package/src/layout/scroll-region/scroll-region.d.ts +53 -0
  18. package/src/layout/scroll-region/scroll-region.js +28 -0
  19. package/src/layout/scroll-region/scroll-region.js.map +1 -0
  20. package/src/lib/custom-element-host.js +6 -2
  21. package/src/lib/custom-element-host.js.map +1 -1
  22. package/src/visual/chart/bar/bar-chart.d.ts +34 -0
  23. package/src/visual/chart/bar/bar-chart.js +71 -7
  24. package/src/visual/chart/bar/bar-chart.js.map +1 -1
  25. package/src/visual/chart/line/line-chart.d.ts +44 -0
  26. package/src/visual/chart/line/line-chart.js +104 -7
  27. package/src/visual/chart/line/line-chart.js.map +1 -1
  28. package/src/visual/display/3d-geo-globe/three-geo-globe.d.ts +18 -29
  29. package/src/visual/display/3d-geo-globe/three-geo-globe.js +19 -20
  30. package/src/visual/display/3d-geo-globe/three-geo-globe.js.map +1 -1
  31. package/src/visual/display/geo-map/index.d.ts +36 -0
  32. package/src/visual/display/geo-map/index.js +25 -0
  33. package/src/visual/display/geo-map/index.js.map +1 -0
  34. package/src/visual/input/date-range/date-range-filter.d.ts +32 -2
  35. package/src/visual/input/date-range/date-range-filter.js +38 -6
  36. package/src/visual/input/date-range/date-range-filter.js.map +1 -1
  37. package/src/visual/input/number/number-input.d.ts +25 -3
  38. package/src/visual/input/number/number-input.js +31 -5
  39. package/src/visual/input/number/number-input.js.map +1 -1
  40. package/src/visual/input/select/select-input.d.ts +15 -3
  41. package/src/visual/input/select/select-input.js +25 -7
  42. package/src/visual/input/select/select-input.js.map +1 -1
  43. package/src/visual/input/text/text-input.d.ts +1 -1
  44. package/src/visual/input/textarea/textarea-input.d.ts +1 -1
  45. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.d.ts +205 -0
  46. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.js +576 -0
  47. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.js.map +1 -0
  48. package/src/visual/media/equirect-sphere-viewport/index.d.ts +2 -0
  49. package/src/visual/media/equirect-sphere-viewport/index.js +2 -0
  50. package/src/visual/media/equirect-sphere-viewport/index.js.map +1 -0
  51. package/src/visual/media/equirect-sphere-viewport/planet-shader.d.ts +6 -0
  52. package/src/visual/media/equirect-sphere-viewport/planet-shader.js +69 -0
  53. package/src/visual/media/equirect-sphere-viewport/planet-shader.js.map +1 -0
  54. package/src/visual/media/flat-video-viewport/flat-video-viewport.d.ts +160 -0
  55. package/src/visual/media/flat-video-viewport/flat-video-viewport.js +370 -0
  56. package/src/visual/media/flat-video-viewport/flat-video-viewport.js.map +1 -0
  57. package/src/visual/media/flat-video-viewport/index.d.ts +2 -0
  58. package/src/visual/media/flat-video-viewport/index.js +2 -0
  59. package/src/visual/media/flat-video-viewport/index.js.map +1 -0
  60. package/src/visual/media/youtube-embed/index.d.ts +29 -0
  61. package/src/visual/media/youtube-embed/index.js +21 -0
  62. package/src/visual/media/youtube-embed/index.js.map +1 -0
  63. package/src/visual/news/language-select/news-language-select.d.ts +1 -1
  64. package/src/visual/news/language-select/news-language-select.js +4 -4
  65. package/src/visual/news/language-select/news-language-select.js.map +1 -1
  66. package/src/visual/news/region-select/news-region-select.d.ts +1 -1
  67. package/src/visual/news/region-select/news-region-select.js +4 -4
  68. package/src/visual/news/region-select/news-region-select.js.map +1 -1
  69. package/src/visual/news/search-box/news-search-box.d.ts +1 -1
  70. package/src/visual/news/type-select/news-type-select.d.ts +1 -1
  71. package/src/visual/news/type-select/news-type-select.js +4 -4
  72. package/src/visual/news/type-select/news-type-select.js.map +1 -1
  73. package/src/visual/svg/inline/svg-inline.d.ts +2 -2
  74. package/src/visual/table/data-table.d.ts +25 -3
  75. package/src/visual/table/data-table.js +38 -10
  76. package/src/visual/table/data-table.js.map +1 -1
  77. package/src/visual/wasm/media/wasm-media.d.ts +3 -0
  78. package/src/visual/wasm/media/wasm-media.js +10 -1
  79. package/src/visual/wasm/media/wasm-media.js.map +1 -1
@@ -1,21 +1,85 @@
1
1
  import { defineComponent, h } from 'vue';
2
+ const FALLBACK_BARS = [
3
+ { label: 'A', value: 40 },
4
+ { label: 'B', value: 65 },
5
+ { label: 'C', value: 55 },
6
+ { label: 'D', value: 80 },
7
+ { label: 'E', value: 48 },
8
+ ];
9
+ function defaultFormat(value) {
10
+ if (value >= 1000000) {
11
+ return `${(value / 1000000).toFixed(1)}M`;
12
+ }
13
+ if (value >= 1000) {
14
+ return `${(value / 1000).toFixed(0)}K`;
15
+ }
16
+ return String(Math.round(value));
17
+ }
18
+ function buildTicks(max, count = 4) {
19
+ if (max <= 0) {
20
+ return [0];
21
+ }
22
+ const step = max / (count - 1);
23
+ return Array.from({ length: count }, (_, index) => step * index);
24
+ }
2
25
  /** @rosettadash/vue/visual/chart/bar — visual.chart.bar */
3
26
  export const BarChart = defineComponent({
4
27
  name: 'RdBarChart',
5
28
  props: {
6
29
  className: { type: String, default: undefined },
7
30
  title: { type: String, default: undefined },
31
+ bars: { type: Array, default: undefined },
32
+ yAxisLabel: { type: String, default: undefined },
33
+ valueFormat: { type: Function, default: undefined },
8
34
  },
9
35
  slots: Object,
10
36
  setup(props, { slots, attrs }) {
11
- const barHeights = [40, 65, 55, 80, 48];
12
37
  return () => {
13
- var _a, _b;
14
- const rootClass = ['rd-chart-bar', props.className, typeof attrs.class === 'string' ? attrs.class : ''].filter(Boolean).join(' ');
15
- return h('section', { class: rootClass, 'data-testid': 'rd-chart-bar' }, [
16
- h('header', { class: 'rd-chart-bar__header' }, h('span', null, (_a = props.title) !== null && _a !== void 0 ? _a : 'Bar chart')),
17
- h('div', { class: 'rd-chart-bar__bars', 'aria-hidden': 'true' }, barHeights.map((height, i) => h('div', { key: i, class: 'rd-chart-bar__bar-wrap' }, h('div', { class: 'rd-chart-bar__bar', style: { height: `${height}%` } })))),
18
- (_b = slots.default) === null || _b === void 0 ? void 0 : _b.call(slots),
38
+ var _a, _b, _c, _d, _e;
39
+ const rootClass = ['rd-chart-bar', props.className, typeof attrs.class === 'string' ? attrs.class : '']
40
+ .filter(Boolean)
41
+ .join(' ');
42
+ const bars = ((_a = props.bars) === null || _a === void 0 ? void 0 : _a.length) ? props.bars : FALLBACK_BARS;
43
+ const format = (_b = props.valueFormat) !== null && _b !== void 0 ? _b : defaultFormat;
44
+ const maxValue = Math.max(...bars.map((bar) => bar.value), 1);
45
+ const ticks = buildTicks(maxValue);
46
+ return h('section', {
47
+ class: rootClass,
48
+ 'data-testid': 'rd-chart-bar',
49
+ role: 'img',
50
+ 'aria-label': (_c = props.title) !== null && _c !== void 0 ? _c : 'Bar chart',
51
+ }, [
52
+ h('header', { class: 'rd-chart-bar__header' }, h('span', null, (_d = props.title) !== null && _d !== void 0 ? _d : 'Bar chart')),
53
+ h('div', { class: 'rd-chart-bar__body' }, [
54
+ h('div', { class: 'rd-chart-bar__y-axis', 'aria-hidden': 'true' }, [
55
+ h('div', { class: 'rd-chart-bar__y-ticks' }, [...ticks]
56
+ .reverse()
57
+ .map((tick) => h('span', { key: tick, class: 'rd-chart-bar__y-tick' }, format(tick)))),
58
+ props.yAxisLabel ? h('span', { class: 'rd-chart-bar__y-label' }, props.yAxisLabel) : null,
59
+ ]),
60
+ h('div', { class: 'rd-chart-bar__plot' }, [
61
+ h('div', { class: 'rd-chart-bar__grid-lines', 'aria-hidden': 'true' }, ticks.map((tick) => h('span', {
62
+ key: tick,
63
+ class: 'rd-chart-bar__grid-line',
64
+ style: { bottom: `${(tick / maxValue) * 100}%` },
65
+ }))),
66
+ h('div', { class: 'rd-chart-bar__bars' }, bars.map((bar) => {
67
+ const heightPct = (bar.value / maxValue) * 100;
68
+ return h('div', { key: bar.label, class: 'rd-chart-bar__bar-group' }, [
69
+ h('div', { class: 'rd-chart-bar__bar-wrap' }, [
70
+ h('div', {
71
+ class: 'rd-chart-bar__bar',
72
+ style: { height: `${heightPct}%` },
73
+ title: `${bar.label}: ${format(bar.value)}`,
74
+ }),
75
+ ]),
76
+ h('span', { class: 'rd-chart-bar__x-label' }, bar.label),
77
+ h('span', { class: 'rd-chart-bar__value' }, format(bar.value)),
78
+ ]);
79
+ })),
80
+ ]),
81
+ ]),
82
+ (_e = slots.default) === null || _e === void 0 ? void 0 : _e.call(slots),
19
83
  ]);
20
84
  };
21
85
  },
@@ -1 +1 @@
1
- {"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/chart/bar/bar-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAA6C,MAAM,KAAK,CAAC;AAOpF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC;IACtC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/E,KAAK,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5E;IACD,KAAK,EAAE,MAAgD;IACvD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;;YACV,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClI,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE;gBACzE,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAA,KAAK,CAAC,KAAK,mCAAI,WAAW,CAAC,CAAC;gBAC3F,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAC5F,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,CACjI,CAAC;gBACF,MAAA,KAAK,CAAC,OAAO,qDAAI;aAClB,CAAC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/chart/bar/bar-chart.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  import { type PropType, type SlotsType, type VNode } from 'vue';
2
+ export interface LineChartPoint {
3
+ x: string | number;
4
+ y: number;
5
+ }
2
6
  export interface LineChartProps {
3
7
  title?: string;
8
+ points?: LineChartPoint[];
9
+ xAxisLabel?: string;
10
+ yAxisLabel?: string;
11
+ valueFormat?: (value: number) => string;
4
12
  className?: string;
5
13
  }
6
14
  /** @rosettadash/vue/visual/chart/line — visual.chart.line */
@@ -13,6 +21,22 @@ export declare const LineChart: import("vue").DefineComponent<import("vue").Extr
13
21
  type: PropType<string | undefined>;
14
22
  default: undefined;
15
23
  };
24
+ points: {
25
+ type: PropType<LineChartPoint[] | undefined>;
26
+ default: undefined;
27
+ };
28
+ xAxisLabel: {
29
+ type: PropType<string | undefined>;
30
+ default: undefined;
31
+ };
32
+ yAxisLabel: {
33
+ type: PropType<string | undefined>;
34
+ default: undefined;
35
+ };
36
+ valueFormat: {
37
+ type: PropType<((value: number) => string) | undefined>;
38
+ default: undefined;
39
+ };
16
40
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
17
41
  [key: string]: any;
18
42
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -24,9 +48,29 @@ export declare const LineChart: import("vue").DefineComponent<import("vue").Extr
24
48
  type: PropType<string | undefined>;
25
49
  default: undefined;
26
50
  };
51
+ points: {
52
+ type: PropType<LineChartPoint[] | undefined>;
53
+ default: undefined;
54
+ };
55
+ xAxisLabel: {
56
+ type: PropType<string | undefined>;
57
+ default: undefined;
58
+ };
59
+ yAxisLabel: {
60
+ type: PropType<string | undefined>;
61
+ default: undefined;
62
+ };
63
+ valueFormat: {
64
+ type: PropType<((value: number) => string) | undefined>;
65
+ default: undefined;
66
+ };
27
67
  }>> & Readonly<{}>, {
28
68
  className: string | undefined;
29
69
  title: string | undefined;
70
+ yAxisLabel: string | undefined;
71
+ valueFormat: ((value: number) => string) | undefined;
72
+ points: LineChartPoint[] | undefined;
73
+ xAxisLabel: string | undefined;
30
74
  }, SlotsType<{
31
75
  default?: () => VNode[];
32
76
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,22 +1,119 @@
1
1
  import { defineComponent, h } from 'vue';
2
+ const FALLBACK_POINTS = [
3
+ { x: '2019', y: 42 },
4
+ { x: '2020', y: 18 },
5
+ { x: '2021', y: 12 },
6
+ { x: '2022', y: 19 },
7
+ { x: '2023', y: 31 },
8
+ { x: '2024', y: 36 },
9
+ ];
10
+ const CHART_WIDTH = 320;
11
+ const CHART_HEIGHT = 200;
12
+ const PAD_LEFT = 58;
13
+ const PAD_RIGHT = 12;
14
+ const PAD_TOP = 16;
15
+ const PAD_BOTTOM = 36;
16
+ const Y_TICK_X = PAD_LEFT - 6;
17
+ function defaultFormat(value) {
18
+ if (value >= 1000000) {
19
+ return `${(value / 1000000).toFixed(1)}M`;
20
+ }
21
+ if (value >= 1000) {
22
+ return `${(value / 1000).toFixed(0)}K`;
23
+ }
24
+ return String(Math.round(value));
25
+ }
26
+ function buildTicks(min, max, count = 4) {
27
+ if (min === max) {
28
+ return [min];
29
+ }
30
+ const step = (max - min) / (count - 1);
31
+ return Array.from({ length: count }, (_, index) => min + step * index);
32
+ }
33
+ function chartCoords(points, minY, rangeY) {
34
+ const plotW = CHART_WIDTH - PAD_LEFT - PAD_RIGHT;
35
+ const plotH = CHART_HEIGHT - PAD_TOP - PAD_BOTTOM;
36
+ const lastIndex = Math.max(points.length - 1, 1);
37
+ return points.map((point, index) => {
38
+ const x = PAD_LEFT + (index / lastIndex) * plotW;
39
+ const y = PAD_TOP + plotH - ((point.y - minY) / rangeY) * plotH;
40
+ return { x, y, label: String(point.x) };
41
+ });
42
+ }
2
43
  /** @rosettadash/vue/visual/chart/line — visual.chart.line */
3
44
  export const LineChart = defineComponent({
4
45
  name: 'RdLineChart',
5
46
  props: {
6
47
  className: { type: String, default: undefined },
7
48
  title: { type: String, default: undefined },
49
+ points: { type: Array, default: undefined },
50
+ xAxisLabel: { type: String, default: undefined },
51
+ yAxisLabel: { type: String, default: undefined },
52
+ valueFormat: { type: Function, default: undefined },
8
53
  },
9
54
  slots: Object,
10
55
  setup(props, { slots, attrs }) {
11
56
  return () => {
12
- var _a, _b;
13
- const rootClass = ['rd-chart-line', props.className, typeof attrs.class === 'string' ? attrs.class : ''].filter(Boolean).join(' ');
14
- return h('section', { class: rootClass, 'data-testid': 'rd-chart-line' }, [
15
- h('header', { class: 'rd-chart-line__header' }, h('span', null, (_a = props.title) !== null && _a !== void 0 ? _a : 'Line chart')),
16
- h('svg', { viewBox: '0 0 240 96', class: 'rd-chart-line__svg', 'aria-hidden': 'true' }, [
17
- h('polyline', { class: 'rd-chart-line__line', points: '0,80 40,60 80,65 120,40 160,45 200,20 240,30' }),
57
+ var _a, _b, _c, _d, _e;
58
+ const rootClass = ['rd-chart-line', props.className, typeof attrs.class === 'string' ? attrs.class : '']
59
+ .filter(Boolean)
60
+ .join(' ');
61
+ const points = ((_a = props.points) === null || _a === void 0 ? void 0 : _a.length) ? props.points : FALLBACK_POINTS;
62
+ const format = (_b = props.valueFormat) !== null && _b !== void 0 ? _b : defaultFormat;
63
+ const values = points.map((point) => point.y);
64
+ const dataMin = Math.min(...values);
65
+ const dataMax = Math.max(...values);
66
+ const minY = dataMin >= 0 ? 0 : dataMin;
67
+ const maxY = dataMax;
68
+ const rangeY = maxY - minY || 1;
69
+ const ticks = buildTicks(minY, maxY);
70
+ const coords = chartCoords(points, minY, rangeY);
71
+ const polyline = coords.map(({ x, y }) => `${x},${y}`).join(' ');
72
+ const plotH = CHART_HEIGHT - PAD_TOP - PAD_BOTTOM;
73
+ return h('section', {
74
+ class: rootClass,
75
+ 'data-testid': 'rd-chart-line',
76
+ role: 'img',
77
+ 'aria-label': (_c = props.title) !== null && _c !== void 0 ? _c : 'Line chart',
78
+ }, [
79
+ h('header', { class: 'rd-chart-line__header' }, h('span', null, (_d = props.title) !== null && _d !== void 0 ? _d : 'Line chart')),
80
+ h('div', { class: 'rd-chart-line__body' }, [
81
+ h('svg', { viewBox: `0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`, class: 'rd-chart-line__svg', 'aria-hidden': 'true' }, [
82
+ ...ticks.map((tick) => {
83
+ const y = PAD_TOP + plotH - ((tick - minY) / rangeY) * plotH;
84
+ return h('g', { key: tick, class: 'rd-chart-line__tick' }, [
85
+ h('line', {
86
+ x1: PAD_LEFT,
87
+ y1: y,
88
+ x2: CHART_WIDTH - PAD_RIGHT,
89
+ y2: y,
90
+ class: 'rd-chart-line__grid',
91
+ }),
92
+ h('text', { x: Y_TICK_X, y: y + 4, class: 'rd-chart-line__tick-label' }, format(tick)),
93
+ ]);
94
+ }),
95
+ h('polyline', { class: 'rd-chart-line__line', points: polyline }),
96
+ ...coords.map(({ x, y, label }) => h('g', { key: label, class: 'rd-chart-line__point' }, [
97
+ h('circle', { cx: x, cy: y, r: 3.5, class: 'rd-chart-line__dot' }),
98
+ h('text', { x, y: CHART_HEIGHT - 10, class: 'rd-chart-line__x-label' }, label),
99
+ ])),
100
+ props.yAxisLabel
101
+ ? h('text', {
102
+ x: 12,
103
+ y: PAD_TOP + plotH / 2,
104
+ class: 'rd-chart-line__axis-label rd-chart-line__axis-label--y',
105
+ }, props.yAxisLabel)
106
+ : null,
107
+ props.xAxisLabel
108
+ ? h('text', {
109
+ x: PAD_LEFT + (CHART_WIDTH - PAD_LEFT - PAD_RIGHT) / 2,
110
+ y: CHART_HEIGHT - 2,
111
+ class: 'rd-chart-line__axis-label rd-chart-line__axis-label--x',
112
+ }, props.xAxisLabel)
113
+ : null,
114
+ ]),
18
115
  ]),
19
- (_b = slots.default) === null || _b === void 0 ? void 0 : _b.call(slots),
116
+ (_e = slots.default) === null || _e === void 0 ? void 0 : _e.call(slots),
20
117
  ]);
21
118
  };
22
119
  },
@@ -1 +1 @@
1
- {"version":3,"file":"line-chart.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/chart/line/line-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAA6C,MAAM,KAAK,CAAC;AAOpF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;IACvC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/E,KAAK,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5E;IACD,KAAK,EAAE,MAAgD;IACvD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,OAAO,GAAG,EAAE;;YACV,MAAM,SAAS,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnI,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE;gBAC1E,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAA,KAAK,CAAC,KAAK,mCAAI,YAAY,CAAC,CAAC;gBAC7F,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;oBACtF,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;iBACxG,CAAC;gBACF,MAAA,KAAK,CAAC,OAAO,qDAAI;aAClB,CAAC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"line-chart.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/chart/line/line-chart.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,32 @@
1
- import { type PropType, type SlotsType, type VNode } from 'vue';
1
+ import { type GlobeMarker } from '@rosettadash/web-components/visual/display/3d-geo-globe';
2
+ export type { GlobeMarker };
2
3
  export interface ThreeGeoGlobeProps {
3
4
  title?: string;
4
- mode?: string;
5
+ textureUrl?: string;
6
+ markers?: GlobeMarker[];
7
+ selectedId?: string;
8
+ minHeight?: string | number;
5
9
  className?: string;
10
+ onMarkerSelect?: (detail: {
11
+ id: string;
12
+ }) => void;
6
13
  }
7
- /** @rosettadash/vue/visual/display/3d-geo-globe visual.display.3d-geo-globe */
14
+ /** Vue wrapper around `<rd-three-geo-globe>`. */
8
15
  export declare const ThreeGeoGlobe: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
9
16
  className: {
10
- type: PropType<string | undefined>;
17
+ type: import("vue").PropType<string | undefined>;
11
18
  default: undefined;
12
19
  };
13
- title: {
14
- type: PropType<string | undefined>;
15
- default: undefined;
16
- };
17
- mode: {
18
- type: PropType<string | undefined>;
19
- default: undefined;
20
- };
21
- }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
20
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
22
21
  [key: string]: any;
23
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
22
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, string[], string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
24
23
  className: {
25
- type: PropType<string | undefined>;
26
- default: undefined;
27
- };
28
- title: {
29
- type: PropType<string | undefined>;
30
- default: undefined;
31
- };
32
- mode: {
33
- type: PropType<string | undefined>;
24
+ type: import("vue").PropType<string | undefined>;
34
25
  default: undefined;
35
26
  };
36
- }>> & Readonly<{}>, {
27
+ }>> & Readonly<{
28
+ [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
29
+ }>, {
37
30
  className: string | undefined;
38
- mode: string | undefined;
39
- title: string | undefined;
40
- }, SlotsType<{
41
- default?: () => VNode[];
42
- }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
31
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
43
32
  export type ThreeGeoGlobeComponent = typeof ThreeGeoGlobe;
@@ -1,25 +1,24 @@
1
- import { defineComponent, h } from 'vue';
2
- /** @rosettadash/vue/visual/display/3d-geo-globe visual.display.3d-geo-globe */
3
- export const ThreeGeoGlobe = defineComponent({
1
+ import { RD_THREE_GEO_GLOBE_TAG, registerRdThreeGeoGlobe, } from '@rosettadash/web-components/visual/display/3d-geo-globe';
2
+ import { defineCustomElementHost } from '../../../lib/custom-element-host';
3
+ /** Vue wrapper around `<rd-three-geo-globe>`. */
4
+ export const ThreeGeoGlobe = defineCustomElementHost({
4
5
  name: 'RdThreeGeoGlobe',
5
- props: {
6
- className: { type: String, default: undefined },
7
- title: { type: String, default: undefined },
8
- mode: { type: String, default: undefined },
6
+ tagName: RD_THREE_GEO_GLOBE_TAG,
7
+ register: registerRdThreeGeoGlobe,
8
+ attrs: {
9
+ textureUrl: 'texture-url',
10
+ selectedId: 'selected-id',
11
+ minHeight: 'min-height',
9
12
  },
10
- slots: Object,
11
- setup(props, { slots, attrs }) {
12
- return () => {
13
- var _a, _b;
14
- const rootClass = ['rd-display-3d-geo-globe', props.className, typeof attrs.class === 'string' ? attrs.class : ''].filter(Boolean).join(' ');
15
- return h('section', {
16
- class: rootClass,
17
- 'data-testid': 'rd-display-3d-geo-globe',
18
- 'data-three-mode': props.mode,
19
- 'data-three-title': props.title,
20
- 'aria-label': (_a = props.title) !== null && _a !== void 0 ? _a : '3D host',
21
- }, (_b = slots.default) === null || _b === void 0 ? void 0 : _b.call(slots));
22
- };
13
+ properties: ['markers'],
14
+ events: {
15
+ 'marker-select': 'onMarkerSelect',
23
16
  },
17
+ }, {
18
+ title: { type: String, default: undefined },
19
+ textureUrl: { type: String, default: undefined },
20
+ markers: { type: Array, default: undefined },
21
+ selectedId: { type: String, default: undefined },
22
+ minHeight: { type: [String, Number], default: undefined },
24
23
  });
25
24
  //# sourceMappingURL=three-geo-globe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"three-geo-globe.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/display/3d-geo-globe/three-geo-globe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAA6C,MAAM,KAAK,CAAC;AAQpF,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;IAC3C,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/E,KAAK,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;KAC3E;IACD,KAAK,EAAE,MAAgD;IACvD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,OAAO,GAAG,EAAE;;YACV,MAAM,SAAS,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7I,OAAO,CAAC,CAAC,SAAS,EAAE;gBACpB,KAAK,EAAE,SAAS;gBAChB,aAAa,EAAE,yBAAyB;gBACxC,iBAAiB,EAAE,KAAK,CAAC,IAAI;gBAC7B,kBAAkB,EAAE,KAAK,CAAC,KAAK;gBAC/B,YAAY,EAAE,MAAA,KAAK,CAAC,KAAK,mCAAI,SAAS;aACvC,EAAE,MAAA,KAAK,CAAC,OAAO,qDAAI,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"three-geo-globe.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/display/3d-geo-globe/three-geo-globe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAc3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAClD;IACE,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,uBAAuB;IACjC,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;KACxB;IACD,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE;QACN,eAAe,EAAE,gBAAgB;KAClC;CACF,EACD;IACE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAChD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;IAC5C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAChD,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;CAC1D,CACF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type GeoMapMarker, type GeoMapProvider } from '@rosettadash/web-components/visual/display/geo-map';
2
+ export type { GeoMapMarker, GeoMapProvider };
3
+ export interface GeoMapProps {
4
+ provider?: GeoMapProvider;
5
+ tileUrl?: string;
6
+ apiKey?: string;
7
+ center?: string;
8
+ zoom?: number;
9
+ markers?: GeoMapMarker[];
10
+ selectedId?: string;
11
+ className?: string;
12
+ onMarkerSelect?: (detail: {
13
+ id: string;
14
+ lat: number;
15
+ lng: number;
16
+ }) => void;
17
+ }
18
+ /** Vue wrapper around `<rd-geo-map>`. */
19
+ export declare const GeoMap: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
20
+ className: {
21
+ type: import("vue").PropType<string | undefined>;
22
+ default: undefined;
23
+ };
24
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
25
+ [key: string]: any;
26
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, string[], string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
27
+ className: {
28
+ type: import("vue").PropType<string | undefined>;
29
+ default: undefined;
30
+ };
31
+ }>> & Readonly<{
32
+ [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
33
+ }>, {
34
+ className: string | undefined;
35
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
36
+ export type GeoMapComponent = typeof GeoMap;
@@ -0,0 +1,25 @@
1
+ import { DB_GEO_MAP_TAG, registerRdGeoMap, } from '@rosettadash/web-components/visual/display/geo-map';
2
+ import { defineCustomElementHost } from '../../../lib/custom-element-host';
3
+ /** Vue wrapper around `<rd-geo-map>`. */
4
+ export const GeoMap = defineCustomElementHost({
5
+ name: 'RdGeoMap',
6
+ tagName: DB_GEO_MAP_TAG,
7
+ register: registerRdGeoMap,
8
+ attrs: {
9
+ tileUrl: 'tile-url',
10
+ apiKey: 'api-key',
11
+ selectedId: 'selected-id',
12
+ },
13
+ properties: ['markers'],
14
+ events: {
15
+ 'marker-select': 'onMarkerSelect',
16
+ },
17
+ }, {
18
+ provider: { type: String, default: undefined },
19
+ tileUrl: { type: String, default: undefined },
20
+ apiKey: { type: String, default: undefined },
21
+ center: { type: String, default: undefined },
22
+ zoom: { type: Number, default: undefined },
23
+ selectedId: { type: String, default: undefined },
24
+ });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/display/geo-map/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,GAGjB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAgB3E,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,uBAAuB,CAC3C;IACE,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE;QACL,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,aAAa;KAC1B;IACD,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE;QACN,eAAe,EAAE,gBAAgB;KAClC;CACF,EACD;IACE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;CACjD,CACF,CAAC"}
@@ -4,6 +4,7 @@ export interface DateRangeFilterProps {
4
4
  startDate?: string;
5
5
  endDate?: string;
6
6
  presetLabel?: string;
7
+ granularity?: 'date' | 'month';
7
8
  onChange?: (range: {
8
9
  startDate: string;
9
10
  endDate: string;
@@ -32,9 +33,20 @@ export declare const DateRangeFilter: import("vue").DefineComponent<import("vue"
32
33
  type: PropType<string | undefined>;
33
34
  default: undefined;
34
35
  };
36
+ granularity: {
37
+ type: PropType<"date" | "month" | undefined>;
38
+ default: undefined;
39
+ };
40
+ onChange: {
41
+ type: PropType<((range: {
42
+ startDate: string;
43
+ endDate: string;
44
+ }) => void) | undefined>;
45
+ default: undefined;
46
+ };
35
47
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
36
48
  [key: string]: any;
37
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
49
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "change"[], "change", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
38
50
  className: {
39
51
  type: PropType<string | undefined>;
40
52
  default: undefined;
@@ -55,12 +67,30 @@ export declare const DateRangeFilter: import("vue").DefineComponent<import("vue"
55
67
  type: PropType<string | undefined>;
56
68
  default: undefined;
57
69
  };
58
- }>> & Readonly<{}>, {
70
+ granularity: {
71
+ type: PropType<"date" | "month" | undefined>;
72
+ default: undefined;
73
+ };
74
+ onChange: {
75
+ type: PropType<((range: {
76
+ startDate: string;
77
+ endDate: string;
78
+ }) => void) | undefined>;
79
+ default: undefined;
80
+ };
81
+ }>> & Readonly<{
82
+ onChange?: ((...args: any[]) => any) | undefined;
83
+ }>, {
59
84
  className: string | undefined;
60
85
  label: string | undefined;
86
+ onChange: ((range: {
87
+ startDate: string;
88
+ endDate: string;
89
+ }) => void) | undefined;
61
90
  startDate: string | undefined;
62
91
  endDate: string | undefined;
63
92
  presetLabel: string | undefined;
93
+ granularity: "date" | "month" | undefined;
64
94
  }, SlotsType<{
65
95
  default?: () => VNode[];
66
96
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -8,21 +8,53 @@ export const DateRangeFilter = defineComponent({
8
8
  startDate: { type: String, default: undefined },
9
9
  endDate: { type: String, default: undefined },
10
10
  presetLabel: { type: String, default: undefined },
11
+ granularity: { type: String, default: undefined },
12
+ onChange: { type: Function, default: undefined },
11
13
  },
14
+ emits: ['change'],
12
15
  slots: Object,
13
- setup(props, { slots, attrs }) {
16
+ setup(props, { slots, attrs, emit }) {
14
17
  return () => {
15
- var _a, _b, _c;
16
- const rootClass = ['rd-input-date-range', props.className, typeof attrs.class === 'string' ? attrs.class : ''].filter(Boolean).join(' ');
18
+ var _a, _b, _c, _d, _e;
19
+ const rootClass = ['rd-input-date-range', props.className, typeof attrs.class === 'string' ? attrs.class : '']
20
+ .filter(Boolean)
21
+ .join(' ');
22
+ const inputType = props.granularity === 'month' ? 'month' : 'date';
23
+ const emitRange = (startDate, endDate) => {
24
+ var _a;
25
+ const range = { startDate, endDate };
26
+ emit('change', range);
27
+ (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, range);
28
+ };
17
29
  return h('section', { class: rootClass, 'data-testid': 'rd-input-date-range' }, [
18
30
  props.label ? h('span', { class: 'rd-field__label' }, props.label) : null,
19
31
  h('div', { class: 'rd-date-range__controls' }, [
20
- h('input', { type: 'date', class: 'rd-input', value: (_a = props.startDate) !== null && _a !== void 0 ? _a : '' }),
32
+ h('input', {
33
+ type: inputType,
34
+ class: 'rd-input',
35
+ value: (_a = props.startDate) !== null && _a !== void 0 ? _a : '',
36
+ 'aria-label': `${(_b = props.label) !== null && _b !== void 0 ? _b : 'Date range'} start`,
37
+ onChange: (event) => {
38
+ var _a;
39
+ const startDate = event.target.value;
40
+ emitRange(startDate, (_a = props.endDate) !== null && _a !== void 0 ? _a : '');
41
+ },
42
+ }),
21
43
  h('span', { class: 'rd-date-range__sep' }, 'to'),
22
- h('input', { type: 'date', class: 'rd-input', value: (_b = props.endDate) !== null && _b !== void 0 ? _b : '' }),
44
+ h('input', {
45
+ type: inputType,
46
+ class: 'rd-input',
47
+ value: (_c = props.endDate) !== null && _c !== void 0 ? _c : '',
48
+ 'aria-label': `${(_d = props.label) !== null && _d !== void 0 ? _d : 'Date range'} end`,
49
+ onChange: (event) => {
50
+ var _a;
51
+ const endDate = event.target.value;
52
+ emitRange((_a = props.startDate) !== null && _a !== void 0 ? _a : '', endDate);
53
+ },
54
+ }),
23
55
  ]),
24
56
  props.presetLabel ? h('span', { class: 'rd-date-range__preset' }, props.presetLabel) : null,
25
- (_c = slots.default) === null || _c === void 0 ? void 0 : _c.call(slots),
57
+ (_e = slots.default) === null || _e === void 0 ? void 0 : _e.call(slots),
26
58
  ]);
27
59
  };
28
60
  },