@quicdata/analytics 0.0.2 → 0.0.4
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.
- package/core/auth.d.ts +19 -0
- package/core/auth.d.ts.map +1 -0
- package/core/auth.js +34 -0
- package/core/fetch-data.d.ts +115 -0
- package/core/fetch-data.d.ts.map +1 -0
- package/core/fetch-data.js +210 -0
- package/core/index.d.ts +9 -0
- package/core/index.d.ts.map +1 -0
- package/core/index.js +4 -0
- package/core/types.d.ts +250 -0
- package/core/types.d.ts.map +1 -0
- package/core/viewport-observer.d.ts +26 -0
- package/core/viewport-observer.d.ts.map +1 -0
- package/core/viewport-observer.js +38 -0
- package/core/widget-transform-runner.d.ts +22 -0
- package/core/widget-transform-runner.d.ts.map +1 -0
- package/core/widget-transform-runner.js +102 -0
- package/dashboard/dashboard-container.d.ts +100 -0
- package/dashboard/dashboard-container.d.ts.map +1 -0
- package/dashboard/dashboard-container.js +315 -0
- package/dashboard/index.d.ts +4 -0
- package/dashboard/index.d.ts.map +1 -0
- package/dashboard/index.js +2 -0
- package/designer/analytics-designer.d.ts +40 -0
- package/designer/analytics-designer.d.ts.map +1 -0
- package/designer/analytics-designer.js +267 -0
- package/designer/index.d.ts +5 -0
- package/designer/index.d.ts.map +1 -0
- package/designer/index.js +3 -0
- package/filters/filter-bar.d.ts +34 -0
- package/filters/filter-bar.d.ts.map +1 -0
- package/filters/filter-bar.js +233 -0
- package/filters/filter-button.d.ts +22 -0
- package/filters/filter-button.d.ts.map +1 -0
- package/filters/filter-button.js +86 -0
- package/filters/index.d.ts +7 -0
- package/filters/index.d.ts.map +1 -0
- package/filters/index.js +6 -0
- package/filters/widget-toolbar.d.ts +24 -0
- package/filters/widget-toolbar.d.ts.map +1 -0
- package/filters/widget-toolbar.js +216 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.js +6 -0
- package/package.json +27 -26
- package/widgets/analytics-report.d.ts +49 -0
- package/widgets/analytics-report.d.ts.map +1 -0
- package/widgets/analytics-report.js +306 -0
- package/widgets/analytics-widget.d.ts +39 -0
- package/widgets/analytics-widget.d.ts.map +1 -0
- package/widgets/analytics-widget.js +230 -0
- package/widgets/bar-chart.d.ts +13 -0
- package/widgets/bar-chart.d.ts.map +1 -0
- package/widgets/bar-chart.js +77 -0
- package/widgets/base-chart.d.ts +94 -0
- package/widgets/base-chart.d.ts.map +1 -0
- package/widgets/base-chart.js +535 -0
- package/widgets/index.d.ts +14 -0
- package/widgets/index.d.ts.map +1 -0
- package/widgets/index.js +14 -0
- package/widgets/line-chart.d.ts +13 -0
- package/widgets/line-chart.d.ts.map +1 -0
- package/widgets/line-chart.js +71 -0
- package/widgets/pie-chart.d.ts +13 -0
- package/widgets/pie-chart.d.ts.map +1 -0
- package/widgets/pie-chart.js +55 -0
- package/widgets/table.d.ts +101 -0
- package/widgets/table.d.ts.map +1 -0
- package/widgets/table.js +740 -0
- package/workers/widget-transform.worker.d.ts +21 -0
- package/workers/widget-transform.worker.d.ts.map +1 -0
- package/workers/widget-transform.worker.js +30 -0
- package/src/core/index.d.ts +0 -2
- package/src/core/index.d.ts.map +0 -1
- package/src/core/index.js +0 -3
- package/src/index.d.ts +0 -2
- package/src/index.d.ts.map +0 -1
- package/src/widgets/index.d.ts +0 -2
- package/src/widgets/index.d.ts.map +0 -1
- package/src/widgets/index.js +0 -3
- /package/{src/index.js → core/types.js} +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, html, css } from 'lit';
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
export const EVENT_FILTER_TOGGLE = 'analytics-filter-toggle';
|
|
5
|
+
/**
|
|
6
|
+
* Filter button: toggles filter bar visibility.
|
|
7
|
+
* Dispatches analytics-filter-toggle when clicked; parent should show/hide the filter bar.
|
|
8
|
+
* Optionally shows a badge when activeCount > 0.
|
|
9
|
+
*/
|
|
10
|
+
let AnalyticsFilterButton = class AnalyticsFilterButton extends LitElement {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
/** Number of active filters (shows badge when > 0). */
|
|
14
|
+
this.activeCount = 0;
|
|
15
|
+
/** Whether the filter bar is currently open (button appears active). */
|
|
16
|
+
this.open = false;
|
|
17
|
+
}
|
|
18
|
+
static { this.styles = css `
|
|
19
|
+
:host {
|
|
20
|
+
display: inline-block;
|
|
21
|
+
}
|
|
22
|
+
button {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: 0.375rem;
|
|
26
|
+
padding: 0.375rem 0.75rem;
|
|
27
|
+
font-size: 0.875rem;
|
|
28
|
+
color: #475569;
|
|
29
|
+
background: #fff;
|
|
30
|
+
border: 1px solid #e2e8f0;
|
|
31
|
+
border-radius: 0.375rem;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
}
|
|
34
|
+
button:hover {
|
|
35
|
+
background: #f8fafc;
|
|
36
|
+
border-color: #cbd5e1;
|
|
37
|
+
color: #334155;
|
|
38
|
+
}
|
|
39
|
+
button.active {
|
|
40
|
+
border-color: #3b82f6;
|
|
41
|
+
color: #3b82f6;
|
|
42
|
+
background: #eff6ff;
|
|
43
|
+
}
|
|
44
|
+
.badge {
|
|
45
|
+
min-width: 1.25rem;
|
|
46
|
+
height: 1.25rem;
|
|
47
|
+
padding: 0 0.25rem;
|
|
48
|
+
font-size: 0.75rem;
|
|
49
|
+
line-height: 1.25rem;
|
|
50
|
+
text-align: center;
|
|
51
|
+
background: #3b82f6;
|
|
52
|
+
color: #fff;
|
|
53
|
+
border-radius: 9999px;
|
|
54
|
+
}
|
|
55
|
+
`; }
|
|
56
|
+
_onClick() {
|
|
57
|
+
this.dispatchEvent(new CustomEvent(EVENT_FILTER_TOGGLE, {
|
|
58
|
+
bubbles: true,
|
|
59
|
+
composed: true,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
render() {
|
|
63
|
+
return html `
|
|
64
|
+
<button
|
|
65
|
+
type="button"
|
|
66
|
+
class="${this.open ? 'active' : ''}"
|
|
67
|
+
@click=${this._onClick}
|
|
68
|
+
aria-expanded="${this.open}"
|
|
69
|
+
aria-label="${this.open ? 'Hide filters' : 'Show filters'}"
|
|
70
|
+
>
|
|
71
|
+
<span aria-hidden="true">Filters</span>
|
|
72
|
+
${this.activeCount > 0 ? html `<span class="badge">${this.activeCount}</span>` : ''}
|
|
73
|
+
</button>
|
|
74
|
+
`;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
__decorate([
|
|
78
|
+
property({ type: Number })
|
|
79
|
+
], AnalyticsFilterButton.prototype, "activeCount", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
property({ type: Boolean })
|
|
82
|
+
], AnalyticsFilterButton.prototype, "open", void 0);
|
|
83
|
+
AnalyticsFilterButton = __decorate([
|
|
84
|
+
customElement('analytics-filter-button')
|
|
85
|
+
], AnalyticsFilterButton);
|
|
86
|
+
export { AnalyticsFilterButton };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { AnalyticsFilterBar, EVENT_FILTER_CHANGE, EVENT_FILTER_CLOSE } from './filter-bar.js';
|
|
2
|
+
export { AnalyticsFilterButton, EVENT_FILTER_TOGGLE } from './filter-button.js';
|
|
3
|
+
export { AnalyticsWidgetToolbar } from './widget-toolbar.js';
|
|
4
|
+
import './filter-bar.js';
|
|
5
|
+
import './filter-button.js';
|
|
6
|
+
import './widget-toolbar.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/analytics/src/filters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,iBAAiB,CAAC;AACzB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC"}
|
package/filters/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AnalyticsFilterBar, EVENT_FILTER_CHANGE, EVENT_FILTER_CLOSE } from './filter-bar.js';
|
|
2
|
+
export { AnalyticsFilterButton, EVENT_FILTER_TOGGLE } from './filter-button.js';
|
|
3
|
+
export { AnalyticsWidgetToolbar } from './widget-toolbar.js';
|
|
4
|
+
import './filter-bar.js';
|
|
5
|
+
import './filter-button.js';
|
|
6
|
+
import './widget-toolbar.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import type { FilterDefinition } from '../core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Floating widget toolbar: glass-style bar at top-right, visible on hover.
|
|
5
|
+
* Contains filter icon; click opens a dialog with the filter form.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AnalyticsWidgetToolbar extends LitElement {
|
|
8
|
+
static styles: import("lit").CSSResult;
|
|
9
|
+
filters: FilterDefinition[];
|
|
10
|
+
values: Record<string, string | number | boolean>;
|
|
11
|
+
activeCount: number;
|
|
12
|
+
private _dialogOpen;
|
|
13
|
+
private _onFilterIconClick;
|
|
14
|
+
private _onDialogClose;
|
|
15
|
+
private _onFilterChange;
|
|
16
|
+
private _onFilterBarClose;
|
|
17
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
18
|
+
}
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
'analytics-widget-toolbar': AnalyticsWidgetToolbar;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=widget-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-toolbar.d.ts","sourceRoot":"","sources":["../../../../libs/analytics/src/filters/widget-toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD;;;GAGG;AACH,qBACa,sBAAuB,SAAQ,UAAU;IACpD,OAAgB,MAAM,0BAuHpB;IAEyB,OAAO,EAAE,gBAAgB,EAAE,CAAM;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAM;IACvD,WAAW,SAAK;IAEnC,OAAO,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAIhB,MAAM;CA8ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,sBAAsB,CAAC;KACpD;CACF"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, html, css } from 'lit';
|
|
3
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
|
+
import { EVENT_FILTER_CHANGE, EVENT_FILTER_CLOSE } from './filter-bar.js';
|
|
5
|
+
/**
|
|
6
|
+
* Floating widget toolbar: glass-style bar at top-right, visible on hover.
|
|
7
|
+
* Contains filter icon; click opens a dialog with the filter form.
|
|
8
|
+
*/
|
|
9
|
+
let AnalyticsWidgetToolbar = class AnalyticsWidgetToolbar extends LitElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.filters = [];
|
|
13
|
+
this.values = {};
|
|
14
|
+
this.activeCount = 0;
|
|
15
|
+
this._dialogOpen = false;
|
|
16
|
+
}
|
|
17
|
+
static { this.styles = css `
|
|
18
|
+
:host {
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0.5rem;
|
|
21
|
+
right: 0.5rem;
|
|
22
|
+
z-index: 20;
|
|
23
|
+
opacity: 0;
|
|
24
|
+
transition: opacity 0.2s ease;
|
|
25
|
+
pointer-events: none;
|
|
26
|
+
}
|
|
27
|
+
:host(.visible) {
|
|
28
|
+
opacity: 1;
|
|
29
|
+
pointer-events: auto;
|
|
30
|
+
}
|
|
31
|
+
.toolbar {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: 0.25rem;
|
|
35
|
+
padding: 0.375rem 0.5rem;
|
|
36
|
+
background: rgba(0, 0, 0, 0.55);
|
|
37
|
+
backdrop-filter: blur(10px);
|
|
38
|
+
-webkit-backdrop-filter: blur(10px);
|
|
39
|
+
border-radius: 8px;
|
|
40
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
41
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
42
|
+
}
|
|
43
|
+
.icon-btn {
|
|
44
|
+
display: inline-flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
width: 2rem;
|
|
48
|
+
height: 2rem;
|
|
49
|
+
padding: 0;
|
|
50
|
+
color: rgba(255, 255, 255, 0.9);
|
|
51
|
+
background: transparent;
|
|
52
|
+
border: none;
|
|
53
|
+
border-radius: 6px;
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
position: relative;
|
|
56
|
+
}
|
|
57
|
+
.icon-btn:hover {
|
|
58
|
+
background: rgba(255, 255, 255, 0.15);
|
|
59
|
+
color: #fff;
|
|
60
|
+
}
|
|
61
|
+
.icon-btn svg {
|
|
62
|
+
width: 1.125rem;
|
|
63
|
+
height: 1.125rem;
|
|
64
|
+
}
|
|
65
|
+
.badge {
|
|
66
|
+
position: absolute;
|
|
67
|
+
top: -2px;
|
|
68
|
+
right: -2px;
|
|
69
|
+
min-width: 1rem;
|
|
70
|
+
height: 1rem;
|
|
71
|
+
padding: 0 0.2rem;
|
|
72
|
+
font-size: 0.65rem;
|
|
73
|
+
line-height: 1rem;
|
|
74
|
+
text-align: center;
|
|
75
|
+
background: #3b82f6;
|
|
76
|
+
color: #fff;
|
|
77
|
+
border-radius: 9999px;
|
|
78
|
+
}
|
|
79
|
+
.overlay {
|
|
80
|
+
position: fixed;
|
|
81
|
+
inset: 0;
|
|
82
|
+
z-index: 1000;
|
|
83
|
+
background: rgba(0, 0, 0, 0.35);
|
|
84
|
+
backdrop-filter: blur(2px);
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: flex-start;
|
|
87
|
+
justify-content: center;
|
|
88
|
+
padding: 2rem;
|
|
89
|
+
box-sizing: border-box;
|
|
90
|
+
}
|
|
91
|
+
.dialog {
|
|
92
|
+
position: relative;
|
|
93
|
+
background: #fff;
|
|
94
|
+
border-radius: 12px;
|
|
95
|
+
border: 1px solid #e2e8f0;
|
|
96
|
+
box-shadow: 0 24px 48px rgba(0, 0, 0, 0.12);
|
|
97
|
+
min-width: 320px;
|
|
98
|
+
max-width: 90vw;
|
|
99
|
+
max-height: 85vh;
|
|
100
|
+
overflow: auto;
|
|
101
|
+
}
|
|
102
|
+
.dialog-close {
|
|
103
|
+
position: absolute;
|
|
104
|
+
top: 0.5rem;
|
|
105
|
+
right: 0.5rem;
|
|
106
|
+
display: inline-flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
width: 2rem;
|
|
110
|
+
height: 2rem;
|
|
111
|
+
padding: 0;
|
|
112
|
+
color: #64748b;
|
|
113
|
+
background: transparent;
|
|
114
|
+
border: none;
|
|
115
|
+
border-radius: 6px;
|
|
116
|
+
cursor: pointer;
|
|
117
|
+
z-index: 1;
|
|
118
|
+
}
|
|
119
|
+
.dialog-close:hover {
|
|
120
|
+
background: #f1f5f9;
|
|
121
|
+
color: #334155;
|
|
122
|
+
}
|
|
123
|
+
.dialog-body {
|
|
124
|
+
padding: 2.5rem 2.5rem 1rem 1rem;
|
|
125
|
+
/* Light mode: use filter-bar defaults (light bg, dark text) */
|
|
126
|
+
--analytics-filter-bar-bg: transparent;
|
|
127
|
+
--analytics-filter-bar-border: transparent;
|
|
128
|
+
--analytics-filter-bar-label-color: #475569;
|
|
129
|
+
--analytics-filter-bar-input-bg: #fff;
|
|
130
|
+
--analytics-filter-bar-input-border: #cbd5e1;
|
|
131
|
+
--analytics-filter-bar-input-color: inherit;
|
|
132
|
+
--analytics-filter-bar-close-color: #64748b;
|
|
133
|
+
--analytics-filter-bar-close-hover-bg: #f1f5f9;
|
|
134
|
+
--analytics-filter-bar-close-hover-color: #334155;
|
|
135
|
+
}
|
|
136
|
+
`; }
|
|
137
|
+
_onFilterIconClick() {
|
|
138
|
+
this._dialogOpen = true;
|
|
139
|
+
}
|
|
140
|
+
_onDialogClose() {
|
|
141
|
+
this._dialogOpen = false;
|
|
142
|
+
this.dispatchEvent(new CustomEvent(EVENT_FILTER_CLOSE, { bubbles: true, composed: true }));
|
|
143
|
+
}
|
|
144
|
+
_onFilterChange(e) {
|
|
145
|
+
this.dispatchEvent(new CustomEvent(EVENT_FILTER_CHANGE, {
|
|
146
|
+
bubbles: true,
|
|
147
|
+
composed: true,
|
|
148
|
+
detail: e.detail,
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
_onFilterBarClose() {
|
|
152
|
+
this._dialogOpen = false;
|
|
153
|
+
}
|
|
154
|
+
render() {
|
|
155
|
+
const hasFilters = this.filters.length > 0;
|
|
156
|
+
if (!hasFilters)
|
|
157
|
+
return html ``;
|
|
158
|
+
return html `
|
|
159
|
+
<div class="toolbar" role="toolbar">
|
|
160
|
+
<button
|
|
161
|
+
type="button"
|
|
162
|
+
class="icon-btn"
|
|
163
|
+
aria-label="Filters"
|
|
164
|
+
aria-haspopup="dialog"
|
|
165
|
+
aria-expanded="${this._dialogOpen}"
|
|
166
|
+
@click=${this._onFilterIconClick}
|
|
167
|
+
>
|
|
168
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
169
|
+
<polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon>
|
|
170
|
+
</svg>
|
|
171
|
+
${this.activeCount > 0 ? html `<span class="badge">${this.activeCount}</span>` : ''}
|
|
172
|
+
</button>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
${this._dialogOpen
|
|
176
|
+
? html `
|
|
177
|
+
<div class="overlay" role="dialog" aria-modal="true" aria-label="Filters" @click=${this._onDialogClose}>
|
|
178
|
+
<div class="dialog" @click=${(e) => e.stopPropagation()}>
|
|
179
|
+
<button type="button" class="dialog-close" aria-label="Close" @click=${this._onDialogClose}>
|
|
180
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
181
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
182
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
183
|
+
</svg>
|
|
184
|
+
</button>
|
|
185
|
+
<div class="dialog-body">
|
|
186
|
+
<analytics-filter-bar
|
|
187
|
+
.filters=${this.filters}
|
|
188
|
+
.values=${this.values}
|
|
189
|
+
.showClose=${false}
|
|
190
|
+
@analytics-filter-change=${this._onFilterChange}
|
|
191
|
+
@analytics-filter-close=${this._onFilterBarClose}
|
|
192
|
+
></analytics-filter-bar>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
`
|
|
197
|
+
: ''}
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
__decorate([
|
|
202
|
+
property({ type: Array })
|
|
203
|
+
], AnalyticsWidgetToolbar.prototype, "filters", void 0);
|
|
204
|
+
__decorate([
|
|
205
|
+
property({ type: Object })
|
|
206
|
+
], AnalyticsWidgetToolbar.prototype, "values", void 0);
|
|
207
|
+
__decorate([
|
|
208
|
+
property({ type: Number })
|
|
209
|
+
], AnalyticsWidgetToolbar.prototype, "activeCount", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
state()
|
|
212
|
+
], AnalyticsWidgetToolbar.prototype, "_dialogOpen", void 0);
|
|
213
|
+
AnalyticsWidgetToolbar = __decorate([
|
|
214
|
+
customElement('analytics-widget-toolbar')
|
|
215
|
+
], AnalyticsWidgetToolbar);
|
|
216
|
+
export { AnalyticsWidgetToolbar };
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { setAnalyticsApiKey, getAnalyticsApiKey, buildWidgetDataUrl, fetchAnalyticsData, fetchWidgetData, } from './core/index.js';
|
|
2
|
+
export type { AnalyticsDataResponse, AnalyticsDataMeta, AnalyticsRequestParams, WidgetDataResponse, WidgetDataApiResponse, WidgetDataOptions, DatetimeGranularity, DimensionRef, MeasureRef, FilterDefinition, FilterOption, BarChartConfig, LineChartConfig, DonutPieChartConfig, NumberKpiChartConfig, TableChartConfig, ChartType, WidgetDefinitionConfig, } from './core/index.js';
|
|
3
|
+
export { BaseChartWidget, BarChartWidget, LineChartWidget, PieChartWidget, TableWidget, AnalyticsWidget, AnalyticsReport, } from './widgets/index.js';
|
|
4
|
+
export { DashboardContainer, EVENT_DASHBOARD_FILTER_CHANGE, EVENT_DASHBOARD_REFRESH, EVENT_DASHBOARD_LAYOUT_CHANGE, } from './dashboard/index.js';
|
|
5
|
+
export type { DashboardLayout, DashboardSlot, GridsterGridItem } from './dashboard/index.js';
|
|
6
|
+
export { AnalyticsFilterBar, AnalyticsFilterButton, AnalyticsWidgetToolbar } from './filters/index.js';
|
|
7
|
+
export { EVENT_FILTER_CHANGE, EVENT_FILTER_CLOSE, EVENT_FILTER_TOGGLE } from './filters/index.js';
|
|
8
|
+
export { AnalyticsDesigner } from './designer/index.js';
|
|
9
|
+
export type { DesignerWidgetOption } from './designer/index.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/analytics/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { setAnalyticsApiKey, getAnalyticsApiKey, buildWidgetDataUrl, fetchAnalyticsData, fetchWidgetData, } from './core/index.js';
|
|
2
|
+
export { BaseChartWidget, BarChartWidget, LineChartWidget, PieChartWidget, TableWidget, AnalyticsWidget, AnalyticsReport, } from './widgets/index.js';
|
|
3
|
+
export { DashboardContainer, EVENT_DASHBOARD_FILTER_CHANGE, EVENT_DASHBOARD_REFRESH, EVENT_DASHBOARD_LAYOUT_CHANGE, } from './dashboard/index.js';
|
|
4
|
+
export { AnalyticsFilterBar, AnalyticsFilterButton, AnalyticsWidgetToolbar } from './filters/index.js';
|
|
5
|
+
export { EVENT_FILTER_CHANGE, EVENT_FILTER_CLOSE, EVENT_FILTER_TOGGLE } from './filters/index.js';
|
|
6
|
+
export { AnalyticsDesigner } from './designer/index.js';
|
package/package.json
CHANGED
|
@@ -1,37 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quicdata/analytics",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"main": "
|
|
6
|
-
"module": "
|
|
7
|
-
"types": "
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"module": "index.js",
|
|
7
|
+
"types": "index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
"./package.json": "./package.json",
|
|
10
10
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"default": "./dist/index.js"
|
|
11
|
+
"types": "./index.d.ts",
|
|
12
|
+
"import": "./index.js",
|
|
13
|
+
"default": "./index.js"
|
|
15
14
|
},
|
|
16
15
|
"./core": {
|
|
17
|
-
"types": "./
|
|
18
|
-
"import": "./
|
|
19
|
-
"default": "./
|
|
16
|
+
"types": "./core/index.d.ts",
|
|
17
|
+
"import": "./core/index.js",
|
|
18
|
+
"default": "./core/index.js"
|
|
20
19
|
},
|
|
21
20
|
"./widgets": {
|
|
22
|
-
"types": "./
|
|
23
|
-
"import": "./
|
|
24
|
-
"default": "./
|
|
21
|
+
"types": "./widgets/index.d.ts",
|
|
22
|
+
"import": "./widgets/index.js",
|
|
23
|
+
"default": "./widgets/index.js"
|
|
25
24
|
},
|
|
26
|
-
"./
|
|
27
|
-
|
|
25
|
+
"./dashboard": {
|
|
26
|
+
"types": "./dashboard/index.d.ts",
|
|
27
|
+
"import": "./dashboard/index.js",
|
|
28
|
+
"default": "./dashboard/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./designer": {
|
|
31
|
+
"types": "./designer/index.d.ts",
|
|
32
|
+
"import": "./designer/index.js",
|
|
33
|
+
"default": "./designer/index.js"
|
|
34
|
+
}
|
|
28
35
|
},
|
|
29
|
-
"files": [
|
|
30
|
-
"src",
|
|
31
|
-
"dist",
|
|
32
|
-
"!**/*.tsbuildinfo"
|
|
33
|
-
],
|
|
34
36
|
"dependencies": {
|
|
37
|
+
"echarts": "^5.5.0",
|
|
38
|
+
"gridstack": "^12.0.0",
|
|
39
|
+
"lit": "^3.3.0",
|
|
35
40
|
"tslib": "^2.3.0"
|
|
36
41
|
},
|
|
37
42
|
"nx": {
|
|
@@ -41,12 +46,8 @@
|
|
|
41
46
|
"options": {
|
|
42
47
|
"main": "libs/analytics/src/index.ts",
|
|
43
48
|
"outputPath": "dist/libs/analytics",
|
|
44
|
-
"additionalEntryPoints": [
|
|
45
|
-
"libs/analytics/src/core/index.ts",
|
|
46
|
-
"libs/analytics/src/widgets/index.ts"
|
|
47
|
-
],
|
|
48
49
|
"tsConfig": "libs/analytics/tsconfig.lib.json",
|
|
49
|
-
"
|
|
50
|
+
"rootDir": "libs/analytics/src"
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { LitElement, nothing } from 'lit';
|
|
2
|
+
import '../filters/filter-bar.js';
|
|
3
|
+
import './table.js';
|
|
4
|
+
/**
|
|
5
|
+
* Analytics report component: show report by report definition id.
|
|
6
|
+
* Similar to analytics-widget: has filters, print, and export (PDF/Excel) buttons.
|
|
7
|
+
* Renders report data inline with analytics-table (same as table widget); filter bar above; toolbar with Print, Download PDF, Download Excel.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AnalyticsReport extends LitElement {
|
|
10
|
+
static styles: import("lit").CSSResult;
|
|
11
|
+
/** Report definition id (used with apiUrl to load definition and preview). */
|
|
12
|
+
reportId: string;
|
|
13
|
+
/** API base URL (e.g. /api/analytics). */
|
|
14
|
+
apiUrl: string;
|
|
15
|
+
/** Optional title override. When set (non-empty), overrides report name from definition. Use attribute "custom-title" to avoid native title. */
|
|
16
|
+
customTitle: string;
|
|
17
|
+
/** @deprecated Use custom-title. Optional title override. */
|
|
18
|
+
title: string;
|
|
19
|
+
/** Initial filter params (e.g. { year: '2025', haulier_id: '1' }). */
|
|
20
|
+
dataParams: Record<string, string | number | boolean>;
|
|
21
|
+
private _name;
|
|
22
|
+
private _filters;
|
|
23
|
+
private _params;
|
|
24
|
+
private _previewUrlBase;
|
|
25
|
+
private _pdfUrlBase;
|
|
26
|
+
private _excelUrlBase;
|
|
27
|
+
private _loading;
|
|
28
|
+
private _error;
|
|
29
|
+
constructor();
|
|
30
|
+
connectedCallback(): void;
|
|
31
|
+
disconnectedCallback(): void;
|
|
32
|
+
updated(changed: Map<string, unknown>): void;
|
|
33
|
+
private _loadReport;
|
|
34
|
+
/** Build initial params: dataParams first, then filter default_value for any param not set. Runs from beginning so first data request uses defaults. */
|
|
35
|
+
private _paramsFromFiltersAndDataParams;
|
|
36
|
+
private _onFilterChange;
|
|
37
|
+
private get _dataUrl();
|
|
38
|
+
private get _previewUrl();
|
|
39
|
+
private get _pdfUrl();
|
|
40
|
+
private get _excelUrl();
|
|
41
|
+
private _print;
|
|
42
|
+
render(): import("lit-html").TemplateResult<1> | typeof nothing;
|
|
43
|
+
}
|
|
44
|
+
declare global {
|
|
45
|
+
interface HTMLElementTagNameMap {
|
|
46
|
+
'analytics-report': AnalyticsReport;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=analytics-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-report.d.ts","sourceRoot":"","sources":["../../../../libs/analytics/src/widgets/analytics-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,KAAK,CAAC;AAYrD,OAAO,0BAA0B,CAAC;AAClC,OAAO,YAAY,CAAC;AAEpB;;;;GAIG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,0BAyFpB;IAEF,8EAA8E;IAClB,QAAQ,EAAE,MAAM,CAAC;IAE7E,0CAA0C;IACgB,MAAM,EAAE,MAAM,CAAC;IAEzE,gJAAgJ;IACjF,WAAW,EAAE,MAAM,CAAC;IAEnF,6DAA6D;IACzB,KAAK,EAAE,MAAM,CAAC;IAElD,sEAAsE;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAE1F,QAAyB,KAAK,CAAS;IACvC,QAAyB,QAAQ,CAAqB;IACtD,QAAyB,OAAO,CAA4C;IAC5E,QAAyB,eAAe,CAAS;IACjD,QAAyB,WAAW,CAAS;IAC7C,QAAyB,aAAa,CAAS;IAC/C,QAAyB,QAAQ,CAAU;IAC3C,QAAyB,MAAM,CAAgB;;IAmBtC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;YAevC,WAAW;IAwBzB,wJAAwJ;IACxJ,OAAO,CAAC,+BAA+B;IAWvC,OAAO,CAAC,eAAe;IAMvB,OAAO,KAAK,QAAQ,GAGnB;IAED,OAAO,KAAK,WAAW,GAItB;IAED,OAAO,KAAK,OAAO,GAIlB;IAED,OAAO,KAAK,SAAS,GAIpB;IAED,OAAO,CAAC,MAAM;IAIL,MAAM;CAiDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,eAAe,CAAC;KACrC;CACF"}
|